計算機組成原理——學習筆記(二)

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#11:

SISD 單指令單數(shù)據(jù)(Single Instruction Single Data)
SIMD 單指令多數(shù)據(jù)(Single Instruction Multiple Data)
MIMD 多指令多數(shù)據(jù)(Multiple Instruction Multiple Data)

無論多個CPU核心運行不同的程序,還是在單個CPU核心里面切換運行不同縣城的任務,
在同一時間點上,一個物理CPU核心只會運行一個線程的指令。
超線程是通過增加物理電路使一個CPU核心內(nèi)部可以維護兩個不同線程指令的狀態(tài)信息。
超線程也被叫做同時多線程。
并行計算方案:超線程和SIMD

通過一個物理CPU核心“裝作”兩個邏輯岑面的CPU核心,使得CPU可以同時運行兩個不同縣城的指令。

處理向量不同維度之間的計算時它們是相互獨立的。CPU的寄存器放得下多條數(shù)據(jù),這時可以一次取出多條數(shù)據(jù),交給CPU進行并行計算。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#12:

異常和中斷
異常:異常的前半部分即異常的發(fā)生和捕捉,在硬件層面完成;異常的后半部分即異常的處理,由軟件來完成。

CPU中斷向量表:CPU獲取異常碼之后,將當前程序的執(zhí)行線程,保存到程序棧里,查詢異常碼,處理異常,異常處理完之后,繼續(xù)執(zhí)行之前程序。

異常分為:

中斷:程序運行一般,被打斷。來自CPU外部的I/O設備,比如:鍵盤或鼠標操作。
陷阱:陷阱(Trap)。在程序種打斷點,程序運行到這個位置就會跳進陷阱。
故障:陷阱為故意觸發(fā),故障不在計劃內(nèi),需要異常處理程序取處理。
中止:CPU遇到異常無法恢復時不得不中止。

異常發(fā)生之后,需要進行一次上下文切換。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#13:

手機芯片為什么都是ARM?

復雜指令集(Complex Instruction Set Computing CISC):CPU指令集機器碼不是固定長度。
簡單指令集(Reduced Instruction Set Compution RISC):CPU指令集機器碼是固定長度。

在RISC中,只保留了最常用的20%的簡單指令,另外80%的復雜指令通過簡單指令組合起來實現(xiàn)。

這樣做的好處是RISC電路設計變簡單了,提高性能也更容易了。

程序的CPU執(zhí)行時間=指令數(shù)×CPI×Clock Cycle Time

CISC通過優(yōu)化指令數(shù),減少CPU執(zhí)行時間。
RISC通過優(yōu)化CPI,減少CPU執(zhí)行時間。

ARM正真能夠戰(zhàn)勝Intel,主要由以下幾點:
1)功耗設計。一個4核Intel i7 CPU工具130W,而ARM A8單核CPU只有2W功耗;
2)低價。ARM只設計CPU,不制造CPU。蘋果、三星、華為都拿到了基本時長上。

ARM不是開源的。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#14:

玩游戲為什么需要GPU?

圖形流水線
我們電腦里面顯示出來的3D畫面,都時通過多邊形組合出來的而不是通過相機或者攝像頭拍出來的。

對于圖像進行實時渲染的過程,可以分解成下面5個步驟:

  1. 頂點處理(Vertex Processing):三維頂點二維化
  2. 圖元處理(Primitive Processing):對不再屏幕種的圖元進行剔除和裁剪
  3. 柵格處化(Rasterization):二維坐標像素化
  4. 片段處理(Fragment Processing):計算每個像素的顏色、透明度
  5. 像素操作(Pixel Operations):把不同多邊形的像素混合到一起

以上五個步驟的渲染過程,我們稱之為圖形流水線(Graphic Pipeline)。

圖形渲染計算量預估

1、以屏幕分辨率640*480進行計算,屏幕上大概有30萬個像素點
2、為了讓屏幕不閃爍,我們假設屏幕刷新為60幀,即每秒刷新60次,即1800萬次單個像素渲染
3、從柵格化開始有三個流水線步驟,我們需要5400萬條指令,即54M指令
4、90年代的CPU主頻大概都在60MHz~100MHz之內(nèi),54M基本把CPU用完了。

沒有GPU,根本無法支持3D圖形顯示。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#15:

深度學習為什么需要GPU?

早期的GPU主要用于圖形計算,不可對GPU編程。
2001年從Direct3D 8.0開始,微軟第一次引入了可編程管線。一開始可編程管線僅限于頂點處理、片段處理部分。
這些可編程的接口稱之為Shader,中文名是著色器,之所以叫著色器,是因為一開始這些接口主要用來處理光照、亮度、顏色等。

一開始Sharder 分為 Vertex Shader和Fragment Shader。因為頂點處理與片段處理時順序執(zhí)行的所以同一時間一定有一半Shader是空閑的;

所以后來提出了統(tǒng)一著色器架構(Unified Shader Architecture)——在GPU里放多個一樣的Shader硬件電路,通過統(tǒng)一調(diào)度,把頂點處理、

圖元處理、片段處理都交給Shader處理。讓整個GPU盡量忙起來,這就是現(xiàn)代GPU的設計。

Shader編程了一個通用模塊,就有了把GPU拿來做各種通用計算用法,即GPGPU(General-Purpose Computing On Graphice Processing Units)

通用圖形處理器。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#16:

現(xiàn)代GPU的三個核心創(chuàng)意

為什么現(xiàn)代GPU在圖形渲染、深度學習上會那么快?

1、芯片瘦身

GPU基于CPU改造而來,將不需要的電路都去掉,只留下取指令、指令譯碼、ALU及執(zhí)行指令需要的寄存器和緩存。

2、多核并行和SIMT

GPU電路簡化之后,我們可以在GPU種加入多個GPU電路,就如同多核CPU一樣。

和CPU不同,GPU運算天然就是并行的,我們不需要單獨實現(xiàn)多線程計算。

GPU借鑒了CPU種SIMD,用了一種叫做SIMT(Single Instruction, Multiple Threads)的技術。

CPU種SIMD一次性去除了固定長度的多個數(shù)據(jù)放到寄存器中,用一個指令取執(zhí)行,在GPU中SIMT可以把多條數(shù)據(jù),交給不同的線程取處理。

各個線程中執(zhí)行的指令是一樣的,但是由于數(shù)據(jù)不同,可能會走到不同的分支。

相同的代碼,相同的流程,可能執(zhí)行不同的具體指令。

GPU可以進一步改進,取出的指令可以交給多個不同的ALU并行進行運算。在一個GPU核里可以放多個ALU單元。

執(zhí)行上下文可以分為兩部分,每個計算單元都有一個對應的線程上下文,共用的內(nèi)容可以放到共享上下文中。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#17:

GPU里的“超線程”

GPU主要以數(shù)值計算為主,但不可避免會有if..else分支,GPU中沒有CPU中對應的分支預測電路,這樣GPU也可能會出現(xiàn)流水線停頓。

如同CPU中的超線程一樣,遇到流水線停頓的時候可以調(diào)度別的計算任務給ALU,任務調(diào)度就需要保存執(zhí)行上下文,便于恢復執(zhí)行上下文。

針對這個需求,GPU中執(zhí)行上下文的個數(shù)要比計算單元ALU的個數(shù)多。

現(xiàn)在的深度學習計算,都是超大的向量和矩陣,海量的訓練樣本計算。整個計算過程中沒有復雜的邏輯和分支,非常適合GPU這樣的并行、計算能力強的架構。

Nvidia2080顯卡,共有46個SM(Streaming Multiprocessor,流失處理器)即GPU Core,46核GPU。

每個SM里面有64個Cuda Core(相當于ALU或Pixel Shader),46x64一共有2944個Shader,還有184個TMU(Texture Mapping Unit)紋理影射計算單元。

2088的主頻是1515MHz,超頻后可達1700Mhz,Nvidia顯卡,每個時鐘周期可以執(zhí)行2條指令,所以它的浮點數(shù)計算能力,是:

(2944+184)x1700Mhzx2 =10.06TFLOPS

Intel i9 9900K性能不到1TFLOPS,與Nvidia2080價格差不多,能力差10倍。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#18:

volatile 這個關鍵字有什么作用?

兩種常見誤解:
1.把volatile 當成一種鎖機制,認為給變量加上了 volatile,就好像是給函數(shù)加了 sychronized 關鍵字一樣,不同的線程對于特定變量的訪問會去加鎖;
2.把 volatile 當成一種原子化的操作機制,認為加了 volatile 之后,對于一個變量的自增的操作就會變成原子性的了。

正解:

volatile設計的目的是為了,確保我們對于這個變量的讀取和寫入,都一定會同步到主內(nèi)存里,而不是從 Cache 里面讀取。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#19:

CPU 高速緩存的寫入

1、寫入 Cache 的性能也比寫入主內(nèi)存要快,那我們寫入的數(shù)據(jù),到底應該寫到 Cache 里還是主內(nèi)存呢?如果我們直接寫入到主內(nèi)存里,Cache 里的數(shù)據(jù)是否會失效呢?

兩種策略

寫直達(Write-Through)

寫入前,先判斷是否在Cache中,如果在先更新Cache內(nèi)容再寫入主存,否則直接,寫入主存。

寫回(Write-Back)

因為我們每次讀數(shù)據(jù),都從Cache中讀,我們可以只更新Cache中的數(shù)據(jù),只有Cache中的數(shù)據(jù)被替換時才將數(shù)據(jù)同步到主存。


2、多個 CPU 核的緩存一致性的問題。

引入MESI 協(xié)議

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#20:

緩存一致性

想要實現(xiàn)緩存一致性,關鍵是要滿足兩點。

1、寫傳播,也就是在一個 CPU 核心寫入的內(nèi)容,需要傳播到其他 CPU 核心里。

2、保障事務的串行化,才能保障我們的數(shù)據(jù)是真正一致的,我們的程序在各個不同的核心上運行的結果也是一致的。

多個不同的鏈接去訪問數(shù)據(jù)庫,我們必須做到事務的串行,否則很難做到保證數(shù)據(jù)的可靠性。

需要做到兩點才可以保證事務串行

1、一個 CPU 核心對于數(shù)據(jù)的操作,需要同步通信給到其他 CPU 核心;

2、兩個 CPU 核心里有同一個數(shù)據(jù)的 Cache,那么對于這個 Cache 數(shù)據(jù)的更新,需要有一個“鎖”的概念。

21天打卡行動#

課程:《深入淺出計算機組成原理》

筆記#21:

MESI 協(xié)議的由來呢,來自于我們對 Cache Line 的四個不同的標記,分別是:

M:代表已修改(Modified)
對應Cache中標記為臟的數(shù)據(jù)

E:代表獨占(Exclusive)
表示這個數(shù)據(jù)只在當前Cache,可以隨意修改

S:代表共享(Shared)
表示數(shù)據(jù)在多個Cache,修改需要通知其他Cache

I:代表已失效(Invalidated)
表示數(shù)據(jù)已失效

MESI 協(xié)議有限狀態(tài)機


?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 下血之癥,其人之血虛,不言而知,似乎宜補其血矣。然而血之下也,必非無故,非濕熱之相侵,即酒毒之深結,若不逐祛...
    宋明德厚閱讀 777評論 0 0
  • 在生活中,女人想要得到真正的幸福,就要學會對自己好一點,不只是享受物質(zhì),還有精神上,都應得到滿足,讓自已開心地活著...
    Lu_aea9閱讀 408評論 0 2
  • js特效-day01 一、自定義動畫 animation:flash 0.5s alternate infinit...
    IT菜鳥寫東西閱讀 625評論 0 0
  • 思南公館街區(qū)是上海成片花園住宅最集中的區(qū)域之一。這里的建筑具有歷史風貌的多樣化:獨立花園住宅、聯(lián)立花園住宅...
    元吉利貞閱讀 354評論 0 1

友情鏈接更多精彩內(nèi)容