CPU和GPU科普(一)

概述

整理和研究通用CPU算力和異構GPU/ASIC芯片算力的區別。

CPU工作方式及算力測算

CPU工作原理

SRAM: Static Random Access Memory ,靜態隨機存取存儲器, volatile memory易失性存儲,不需要刷新電路即能保存它內部存儲的數據。L2 Cache。
DRAM: Dynamic Random Access Memory,動態隨機存取器,volatile memory,刷新電路保存它內部存儲的數據。
SDRAM: Synchronous Dynamic Random Memory,同步動態隨機存取內存。對進入的指令進行管線(Pipeline)操作,管線意味着芯片可以在處理完之前的指令前,接受一個新的指令。
易失性存儲器(Volatile Memory,VM),電源關閉,資料丟失,如SRAM、DRAM、SDAM、DDR-SDRAM等;
非易失性存儲器(Non-Volatile Memory,NVM):電源關閉,資料任然可以保留,如ROM等。

CPU組成

CPU的結構主要包括運算器(ALU, Arithmetic and Logic Unit)、控制單元(CU, Control Unit)、寄存器(Register)、高速緩存器(Cache)和它們之間通訊的數據、控制及狀態的總線。
在這裏插入圖片描述
CPU運行過程,下面鏈接的文章講的比較清楚。
傳送門轉載:https://blog.csdn.net/dong_daxia/article/details/80289951。
補充:編譯過程
事實上,僅僅將程序通過編譯改寫成彙編指令或機器指令,在操作系統上還不能直接運行。實際上廣義的編譯,其實包括預處理、編譯、彙編、鏈接這整個過程。

  • 預處理,就是把代碼裏引入的其他代碼,插入到這段代碼中,形成一個代碼文件。
  • 編譯,就是把代碼轉化爲彙編指令的過程,彙編指令只是CPU相關的,也就是說C代碼和python代碼,代碼邏輯如果相同,編譯完的結果其實是一樣的。
  • 彙編,就是把彙編指令轉爲機器碼的過程,機器碼可以被CPU直接執行。
  • 鏈接,就是將一段我們需要的已經編譯好的其他庫,與我們的彙編結果連起來,這樣纔是最終程序完整的形式,操作系統纔可以運行。不同操作系統編譯好的其他庫形式不同,而且鏈接的方式也不同,得到最終程序的形式也不同,所以編譯好的程序只能在特定的操作系統下運行。

CPU算力測算

算力=CPU核心*時鐘頻率*單時鐘週期執行浮點操作數
# FP64 雙精度計算
# 支持AVX2的處理器的單指令的長度是256bit,每個intel核心假設包含2個FMA,一個FMA一個時鐘週期可以進行2次乘或者加的運算,那麼這個處理器在1個核心1個時鐘週期可以執行 `256bit*2FMA*2M/A/64=16` 次浮點運算,也稱爲16FLOPs,就是Floating Point Operations Per Second;
# 支持AVX512的處理器的單指令的長度是512Bit,每個intel核心假設包含2個FMA,一個FMA一個時鐘週期可以進行2次乘或者加的運算,那麼這個處理器在1個核心1個時鐘週期可以執行 `512bit*2FMA*2M/A/64=32` 次浮點運算,也稱爲32FLOPs。

例子:
現在intel purley platform的旗艦skylake 8180是[email protected],支持AVX512,其理論雙精度浮點性能是:28Core*2.5GHZ*32FLOPs/Cycle=2240GFLPs=2.24TFLOPs

MOPS(Million Operation Per Second),1MOPS代表處理器每秒鐘可進行一百萬次(10^6)操作;
GOPS(Giga Operations Per Second),1GOPS代表處理器每秒鐘可進行十億次(10^9)操作;
TOPS(Tera Operations Per Second),1TOPS代表處理器每秒鐘可進行一萬億次(10^12)操作;
Pops(Peta Operation Per Second),1POPS代表處理器每秒鐘可進行千萬億次(10^15)操作;
Eops(Exa Operation Per Second),1EOPS代表處理器每秒鐘可進行百億億次(10^18)操作;
參考鏈接:https://baike.baidu.com/item/數量級/3289119?fr=aladdin

GPU能做的CPU都能做,CPU能做的GPU卻不一定能夠做到,GPU一般一個時鐘週期可以操作64bit的數據,1個核心實現1個FMA。
這個GPU的計算能力的單元是:64bit1FMA2M/A/64bit=2FLOPs/Cycle
GPU的計算能力也是一樣和核心個數,核心頻率,核心單時鐘週期能力三個因素有關。
但是架不住GPU的核心的數量多呀
例如:對現在nvidia tesla class 的pascal旗艦 p100而言,是[email protected],其理論的雙精度浮點性能是:1792Core1.328GHZ2FLOPs/Cycle=4759.552GFLOPs=4.7TFLOPs

CPU和GPU區別

SIMD全稱Single Instruction Multiple Data,單指令多數據流,能夠複製多個操作數,並把它們打包在大型寄存器的一組指令集。;
SISD全稱Single instruction, Single data,單指令流單數據流,每個指令部件每次僅譯碼一條指令,而且在執行時僅爲操作部件提供一份數據。

CPU和GPU之所以大不相同,是由於其設計目標的不同,它們分別針對了兩種不同的應用場景。CPU需要很強的通用性來處理各種不同的數據類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的內部結構異常複雜。而GPU面對的則是類型高度統一的、相互無依賴的大規模數據和不需要被打斷的純淨的計算環境。

什麼類型的程序適合在CPU上運行?

  • I/O intensive
  • Memory intensive
    什麼類型的程序適合在GPU上運行?
  • 計算密集型的程序。所謂計算密集型(Compute-intensive)的程序,就是其大部分運行時間花在了寄存器運算上,寄存器的速度和處理器的速度相當,從寄存器讀寫數據幾乎沒有延時。可以做一下對比,讀內存的延遲大概是幾百個時鐘週期;讀硬盤的速度就不說了,即便是SSD, 也實在是太慢了。
  • 易於並行的程序。GPU其實是一種SIMD(Single Instruction Multiple Data)架構, 他有成百上千個核,每一個核在同一時間最好能做同樣的事情。

GPU和CPU對比----傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章