第二篇:CUDA 並行編程簡介


前言

       並行就是讓計算中相同或不同階段的各個處理同時進行。

       目前有很多種實現並行的手段,如多核處理器,分布式系統等,而本專題的文章將主要介紹使用 GPU 實現並行的方法。

       參考本專題文章前請務必搭建好 CUDA 開發平台,搭建方法可以參考上一篇文章。

GPU 並行的優缺點

       優點:

              1. 顯存具有更大的內存帶寬

              2. GPU 具有更大量的執行單元

              3. 價格低廉

       缺點:

              1. 對於不能高度並行化的工作,能帶來幫助不大。

              2. 對於絕大多數顯卡型號,CUDA 僅支持 float 類型而不支持 double 類型運算,因此運算精度不高。

              3. 目前還沒有出現通用的 GPU 並行編程標准。

              4. 處理前需要先將數據傳輸進顯存,增加了一些時間開銷。

              5. 需要特定顯卡型號(英偉達)的支持

       較之 CPU ,GPU 適合一次性進行大量相同的工作,而 CPU 則比較有彈性,能同時進行變化較多的工作。

CUDA 結構

       CUDA 是一種底層庫,比 C/C++ 等語言以及 Open CV 之類的庫更加底層,是附加在操作系統和這類程序之間的一層:

      

CUDA 程序架構

       CUDA 架構下,程序分成兩個部分:host 端和 device 端,前者在 CPU 部分執行,后者是在 GPU 部分執行。

       具體的 CUDA 程序執行過程如下:

              1. host 端程序先將待處理數據傳遞進顯存

              2. GPU 執行 device 端程序

              3. host 端程序將結果從顯存取回

       如下圖所示:

      

CUDA thread 架構

  thread 架構分成三個等級:

  1. 執行的最小單元是 thread

  2. 多個 thread 可以組成一個 block,block 中的 thread 可並行執行且可存取同一塊共享的顯存。但要注意的是每個 block 中的 thread 是有數量限制的。

  3. 多個 block 可以組成一個 grid,但 grid 中的 block 無法共享顯存( 只能共享些別的信息 ),因此可合作度並不高。

  如下圖所示:

      

CUDA 程序執行模式

       1. CUDA 程序利用並行化來替代內存 cache,即一個 thread 需要等待內存則 GPU 會切換到另一個 thread 執行。

       2. CUDA 程序對於 "分支預處理" 的實現也是采用和 1 類似的方式。

小結

       本文旨在對CUDA並行編程技術做一個感性而總體的介紹,該系列后續文章將具體講解CUDA編程技術。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM