本系列爲《解讀CUDA C Programming Guide》. https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#axzz4FIp5fBgM
本書旨在介紹進行CUDA並行優化的C編程指導。共5章,內容分別是:
- Introduction
- Programming Model
- Programming Interface
- Hardware Implementation
- Performance Guidelines
本文簡單解讀第一章:Introduction.
本章主要內容包括:
- From graphic processing to general purpose parallel computing
- CUDA: A general-purpose parallel computing platform and programming model
- A scalable programming model
- Document structure
From graphic processing to general purpose parallel computing
面對實時高清的3D圖像的日漸增長的市場需求,可編程的圖像處理單元或者說GPU進化成了高併發,多線程,多核計算器——具有強大的計算能力和非常高的內存帶寬。如下圖1圖2所示:
CPU和CPU之間的浮點功能差異背後的原因 :GPU是專用於計算密集型,高度並行計算。確切地說是圖形渲染的內容。因此設計GPU的時候讓它擁有更多晶體管,讓其致力於數據處理,而不是數據緩存和流量控制,如圖3所示。
更具體地說,GPU特別適合解決可以表示爲數據並行計算的問題:在許多數據元素上並行執行同一程序-具有很高的算術強度-算術運算的比率進行內存操作。
由於對每個數據元素執行相同的程序,對複雜的流量控制的要求較低。又因爲它是在許多數據元素並具有很高的算術強度,所以存儲器訪問延遲可以隱藏在計算中,而不是大數據緩存中。
數據並行處理將數據元素映射到並行處理線程。許多處理大型數據集的應用程序可以使用數據並行編程模型來加快計算速度。在3D渲染中,大量像素和頂點被映射到並行線程。同樣,圖像和媒體處理應用程序(例如渲染圖像的後處理,視頻編碼和解碼,圖像縮放,立體視覺和模式識別)可以將圖像塊和像素映射到並行處理
線程。實際上,圖像渲染和處理領域之外的許多算法從通用信號處理或物理模擬到計算金融或計算生物學,通過數據並行處理可以加快速度。
CUDA®: A General-Purpose Parallel Computing Platform and Programming Model
NVIDIA在2006年11月推出了通用並行計算平臺和編程模型CUDA®。該平臺和編程模型利用NVIDIA GPU中的並行計算引擎以比CPU上更有效的方式解決許多複雜的計算問題。CUDA帶有允許開發人員將C用作高級編程語言的軟件環境。如圖4所示,其他語言的應用程序支持編程接口或基於指令的方法,例如FORTRAN,DirectCompute,OpenACC。
A Scalable Programming Model
多核CPU和多核GPU的出現意味着主流處理器芯片現在是並行系統。挑戰在於開發可透明地擴展其並行性以利用不斷增加的處理器內核的應用程序軟件,就像3D圖形應用程序可透明地將其並行性擴展到具有大量內核數量的許多核GPU一樣。
CUDA並行編程模型旨在克服這一挑戰,同時爲熟悉標準編程語言(例如C)的程序員保持較低的學習曲線。
它的核心是三個關鍵抽象-線程組,共享內存和屏障同步。這個層次結構只是作爲最少的語言擴展集向程序員公開。
這些抽象提供了細粒度的數據並行性和線程並行性,嵌套在粗粒度的數據並行性和任務並行性中。它們指導程序員將問題劃分爲可以由線程塊並行獨立解決的粗略子問題,並將每個子問題分解爲可以由模塊內的所有線程並行並行解決的細小問題。
這種分解通過允許線程在解決每個子問題時進行協作來保留語言的表達能力,並同時實現自動可伸縮性。實際上,可以在任何可用的多處理器上調度每個線程塊在GPU中以任何順序(併發或順序)進行操作,這樣編譯的CUDA程序就可以在任意數量的多處理器上執行,如圖5所示,只有運行時系統才需要知道物理多處理器計數。
Document Structure
- Introduction: CUDA的通用介紹
- Programming Model:概述CUDA編程模型
- Programming Interface:描述編程接口
- Hardware Implementation:描述硬件應用
- Performance Guidelines:高性能編程指導