GPU 編程可以稱為異構編程,最近由於機器學習的火熱,很多模型越來越依賴於GPU來進行加速運算,所以異構計算的位置越來越重要;異構編程,主要是指CPU+GPU或者CPU+其他設備(FPGA等)協同計算。當前的計算模型中,CPU主要用來進行通用計算,其更多的是註重控制,我們可以通過GPU和FPGA等做 ...
GPU 編程可以稱為異構編程,最近由於機器學習的火熱,很多模型越來越依賴於GPU來進行加速運算,所以異構計算的位置越來越重要;異構編程,主要是指CPU+GPU或者CPU+其他設備(FPGA等)協同計算。當前的計算模型中,CPU主要用來進行通用計算,其更多的是註重控制,我們可以通過GPU和FPGA等做專用的計算。
CPU負責邏輯性強的事物處理和串列計算,GPU則專註於執行高度線程化的並行處理任務(大規模計算任務)
編程框架:
- C++ AMP:Accelerator Massive Parallelism :C++的異構並行模型.
- CUDA:Compute Unified Device Architecture :顯卡廠商Nvidia於2007年推出的業界第一款異構並行編程框架。
- OpenCL (Open Computing Language):業界第一個跨平臺的異構編程框架。它是Apple領銜並聯合Nvidia,AMD,IBM,Intel等眾多廠商於2008年共同推出的一個開放標準,由單獨成立的非營利性組織Khronos Group管理。與C++ AMP類似,OpenCL作為一個開放的標準,並不局限於某個特定的GPU廠商。
三種異構編程框架,對比來看:CUDA和OPENCL 比 C++ AMP 更接近於硬體底層,所以前兩者性能較好,C++ AMP 相對前兩者 具有較高的易編程性;
三種框架的選擇:
- 看重易用性:C++ AMP, Windows 平臺,C++ 本身也是一個開放的標準,目前只有微軟自己做了實現;
- 看重NvidiaGPU卡上的高性能:CUDA;有大廠的直接支持,CUDA的開發環境也非常成熟,擁有很多函數庫的支持;
- 看重不同平臺間的可移植性:OpenCL可能是目前最好的選擇;(相對於OPENCL 你可能會聽說過 OPENCV,OPENGL,OPENAL 等標準)opencl 得到了很多軟硬體廠商的大力支持。
異構計算中常見的組合:
通用處理器對協處理器之間,主要考慮一些幾個方面:協處理器能全面支持需要用到的場景關鍵演算法(演算法性能);協處理器需要有大量並行通道,每個通道支持低延時的數據處理(數據並行和低延時處理能力);和主處理器能方便得進行數據交互(介面性能較好);協處理器可以針對計算需求升級迭代(配置靈活);協處理器更低的運行成本,更小的空間占用和更簡單的熱處理方案(低功耗);
- CPU+GPU
- GPU 中,大量的硬體資源被用於邏輯運算單元,小部分用作控制電路,GPU中一個控制單元要負責好幾個計算單元,其為大規模數據並行處理提供了基礎;使用GPU做異構計算需要考慮GPU Memory 和 System Memory數據相關性和儘量減少異構計算過程中的控制分支;
- CPU+FPGA
- FPGA 優點:
- 穩定性:驅動層控制硬體,減少了系統搶占帶來的風險;
- 性能:利用硬體並行的優勢,打破了順序執行的模式;硬體控制層面控制IO輸入和輸出達到了專業需求能力;
- 維護性高:FPGA可以現場升級,無需重新設計ASIC所需要的時間和費用投入;
- 成本:比定製化的ASIC便宜,可自定義編程使用;
- FPGA 優點:
- CPU+ASIC
- ASIC 為Application Specific Integrated Circuit, 特殊定製集成電路。編程語言越接近底層硬體,運行速度越快。
- 性能方面:ASIC > FPGA > GPU;
- 缺點:由於ASIC 定製化,導致價格較為高昂,定製過程漫長,而且功能一旦定製就很難再去更改;
CPU 與 GPU 體繫結構:
CPU 是一種低延遲的設計:
- 強大的ALU,擁有較高的時鐘頻率;
- 容量較大的cache,包括L1,L2,L3三級高速緩存,現在基本上是片上cache,cache占據相當一部分片上空間;
- CPU有複雜的控制邏輯,如:複雜的流水線(pipeline)、分支預測(branch prediction)、亂序執行(Out-of-order execution)等;
- 這些導致了,cpu使用較少的資源用於ALU 計算單元;
GPU是一種面向吞吐的設計:
- GPU 有大量的ALU;
- cache很小,緩存為thread提高服務,而不是保存後面需要訪問的數據,這點和CPU不同;
- 沒有複雜的控制邏輯,沒有分支預測等這些組件;
- 於CPU對比起來,CPU擅長處理邏輯負載,串列的計算任務;而GPU擅長的是大規模的數據並行的計算任務;
參考鏈接:
http://hustcat.github.io/gpu-architecture/
https://www.cnblogs.com/biglucky/p/4223565.html
https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
http://haifux.org/lectures/267/Introduction-to-GPUs.pdf (推薦)
資源多整理自網路,保持更新,如果對您有幫助,請關註 cnblogs.com/xuyaowen