天天看點

GPU 通用計算;GPU 架構簡析

GPU 程式設計可以稱為異構程式設計,最近由于機器學習的火熱,很多模型越來越依賴于GPU來進行加速運算,是以異構計算的位置越來越重要;異構程式設計,主要是指CPU+GPU或者CPU+其他裝置(FPGA等)協同計算。目前的計算模型中,CPU主要用來進行通用計算,其更多的是注重控制,我們可以通過GPU和FPGA等做專用的計算。

GPU 通用計算;GPU 架構簡析

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中一個控制單元要負責好幾個計算單元,其為大規模資料并行處理提供了基礎;使用GPU做異構計算需要考慮GPU Memory 和 System Memory資料相關性和盡量減少異構計算過程中的控制分支;
  • CPU+FPGA
    • FPGA 優點:
      • 穩定性:驅動層控制硬體,減少了系統搶占帶來的風險;
      • 性能:利用硬體并行的優勢,打破了順序執行的模式;硬體控制層面控制IO輸入和輸出達到了專業需求能力;
      • 維護性高:FPGA可以現場更新,無需重新設計ASIC所需要的時間和費用投入;
      • 成本:比定制化的ASIC便宜,可自定義程式設計使用;
  • CPU+ASIC
    • ASIC 為Application Specific Integrated Circuit, 特殊定制內建電路。程式設計語言越接近底層硬體,運作速度越快。
    • 性能方面:ASIC > FPGA > GPU;
    • 缺點:由于ASIC 定制化,導緻價格較為高昂,定制過程漫長,而且功能一旦定制就很難再去更改;

CPU 與 GPU 體系結構:

GPU 通用計算;GPU 架構簡析

 CPU 是一種低延遲的設計:

  • 強大的ALU,擁有較高的時鐘頻率;
  • 容量較大的cache,包括L1,L2,L3三級高速緩存,現在基本上是片上cache,cache占據相當一部分片上空間;
  • CPU有複雜的控制邏輯,如:複雜的流水線(pipeline)、分支預測(branch prediction)、亂序執行(Out-of-order execution)等;
  • 這些導緻了,cpu使用較少的資源用于ALU 計算單元;
GPU 通用計算;GPU 架構簡析

 GPU是一種面向吞吐的設計:

  • GPU 有大量的ALU;
  • cache很小,緩存為thread提高服務,而不是儲存後面需要通路的資料,這點和CPU不同;
  • 沒有複雜的控制邏輯,沒有分支預測等這些元件;
  • 于CPU對比起來,CPU擅長處理邏輯負載,串行的計算任務;而GPU擅長的是大規模的資料并行的計算任務;

參考連結:

http://hustcat.github.io/gpu-architecture/

https://www.huzhenyu.me/

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