CUDA C編程入門-介紹

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   資料   for   

CUDA C編程入門-介紹

1.1.從圖形處理到通用並行計算

  在即時、高清3D圖形的巨大市場需求的驅動下,可程式化的圖形處理器或者GPU發展成擁有巨大計算能力的和非常高的記憶體頻寬的高度並行的、多線程的、多核處理器。1和圖2所示。

  

圖 1 CPU和GPU每秒的浮點計算次數

 

圖 2 CPU和GPU的記憶體頻寬

  在CPU和GPU之間在浮點計算能力上的差異的原因是GPU專做密集型計算和高度並行計算-恰好是圖形渲染做的-因此設計成這樣,更多的晶體管用於資料處理而不是資料緩衝和流量控制,3所示。

圖 3 GPU將更多的晶體管用於資料處理

  更具體的說,GPU特別適合處理能表示為資料並行計算的問題-相同程式並行地在許多元素上執行-更高的計算強度-計算操作的比例相對於記憶體操作來說的。因為相同的程式在每個資料元素上執行,所以對於複雜的流量控制只有比較低要求。因為在每個資料元素上執行和有高的計算強度,計算中的記憶體訪問延遲被隱藏,從而替換大的資料緩衝。

  資料平行處理映射資料元素到平行處理的線程(Thread)。許多處理大資料集的應用程式使用資料並行編程模型加速計算過程。在3D渲染,大型集合的像素和頂點映射到並行的線程中處理。同樣地,映像和ApsaraVideo for Media Processing應用程式,比如已渲染的映像的後處理、視頻編碼和解碼、映像縮放、立體視覺和模式識別能映射映像的地區和像素點到並行的線程中計算。事實上,許多映像渲染和處理以外的領域能通過資料平行處理來加速,從一般的訊號處理、物理模擬到計算金融學和計算生物學。

 

1.2.CUDA:一個通用的並行計算平台和編程模型

  在2006年11月,NVIDIA介紹CUDA,一個通用的並行計算平台和編程模型,利用在NVIDIA的GPUs的並行計算引擎,比CPU更有效解決許多複雜的計算問題。CUDA內建的軟體環境允許開發人員使用C作為進階的程式設計語言。4所示,其它語言、應用程式介面、基於指令的方法的支援,比如FORTRAN、DirectCompute、OpenACC。

 

圖 4 GPU計算程式,CUDA設計成支援多種語言和應用程式介面

 

1.3.一個可伸縮的編程模型

  多核CPU和GPU的出現意味著主流的處理晶片現在是並行的系統。此外,其並行性繼續按摩爾法則增加。開發應用軟體的挑戰是顯式地縮放並行性去利用增加的處理器核心的數目。和3D圖形應用顯式地縮放其並行性到帶有不同數目的多核心的GPUs一樣。

  CUDA並行編程模型被設計去克服這樣的挑戰,並且對熟悉標準程式設計語言,比如C,保持較低的學習曲線。

  核心有3個關鍵的抽象:線程組的層次、共用記憶體和屏蔽同步-只是暴露給程式員一個最小的語言擴充集。

  這些抽象提供細粒度的資料並行和線程並行,嵌入進粗細度的資料並行和任務並行。指導程式員把問題劃分成粗的能被獨立地並行地在多塊線程中處理的子問題,每個子問題被並行地在每一塊的線程處理。(也就是說每個問題被劃分成許多子問題,每個子問題在單獨的一塊線程中處理,子問題和子問題的處理是並行的,而每個子問題又是在一塊線程中處理,這個處理也是並行的。)

  分解保持語言表達性,允許線程合作地解決每個子問題。同一時刻支援自動地可收縮。甚至,每塊線程能被安排在GPU中的任何的閒置多處理器,以任意的次序,同時地或者連續地,所以編譯的CUDA程式能夠執行在任何數量的多核心上,5。只有運行時系統需要知道物理的多處理器的個數。

  這可伸縮編程模型通過簡單地伸縮多處理器的數目和記憶體劃分而允許CPU結構跨越廣闊的市場範圍:從高效能愛好者-GeForce GPUs、專業的Quadro和Tesla計算產品到各種便宜的、主流的GeForce GPUs(查看支援CUDA的GPU章節)。

圖 5 自動可擴充。一個GPU由一個流處理器(SM)陣列組成(更多細節可查考硬體實現這一章節)。每個多線程程式被劃分到各個線程塊獨立地執行,所以擁有更多處理核心的自動地比更少的處理核心執行所花費的時間更少。

 

1.4.文檔結構

  文檔組織成下面的章節:

  1. 第一章:介紹-關於CUDA的總體介紹。
  2. 第二章:編程模型-概括CUDA編程模型。
  3. 第三章:編程介面-描述CUDA編程的C語言的介面。
  4. 第四章:硬體實現-描述GPU的硬體實現。
  5. 第五章:編程指引-給出一些指導,怎樣才能發揮CPU最大的效能。
  6. 附錄:支援CUDA的GPU-列出所有支援CUDA的GPU列表。
  7. 附錄:C語言擴充-詳細描述CUDA對C的擴充。
  8. 附錄:數學函數-列出CUDA支援的數學函數。
  9. 附錄:C/C++語言支援-列出裝置代碼支援的C++的特性。
  10. 附錄:紋理拾取-關於紋理拾取的過多描述。
  11. 附錄:計算能力-給出各種裝置的技術規格和詳細結構。
  12. 附錄:驅動API-介紹低級的驅動API。
  13. 附錄:CUDA環境變數-列出所有的環境變數。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.