天天看點

CUDA C 程式設計指導(一):CUDA介紹

雖然高清實時的3d圖像/視訊要求日益不能滿足市場需求,但是可程式設計的圖像處理單元(gpu)已經演變成具有巨大計算能力和超高存儲帶寬的高度并行、多線程的多核處理器,如下圖,

CUDA C 程式設計指導(一):CUDA介紹
CUDA C 程式設計指導(一):CUDA介紹

cpu和gpu之間的浮點性能差異的原因是:gpu專門為密集型計算、高度并行計算設計(例如,圖像渲染),是以此類設計需要更多的晶體三極管來進行資料處理而不是資料緩存和流程控制,其差別如下圖所示,

CUDA C 程式設計指導(一):CUDA介紹

更具體地說,gpu更适合處理資料并行計算,很多資料并行執行,計算強度高,即對記憶體操作的算術操作比率高。因為相同的程式用來執行每個資料元素,是以對複雜的流控制有較低的要求;因為它是編譯在許多資料元素上的,擁有高的算術強度,是以記憶體通路延遲可以被并行計算掩蓋而不需要大資料的緩存。

并行資料處理映射資料元素對應于并行處理線程。許多處理大資料的應用程式都可以使用并行程式設計模型來進行加速。在3d渲染中,大量的像素和頂點都可以映射為并行線程。相似地,圖像和多媒體應用,例如渲染圖像的後處理、視訊編解碼、圖像縮放、立體視覺和模式識别,都可以把圖像塊和像素映射為并行線程。事實上,除了圖像渲染和處理之外的很多算法也都可以被并行資料處理加速,從通用的信号處理或物體仿真到計算金融學到計算生物學都可以。

早在06年11月,英偉達就介紹了cuda,它的并行計算平台及其程式設計模型使其比一般cpu更有效地解決許多複雜的計算問題,這也就是我們常說的英偉達的gpu。

cuda及其軟體環境使得開發者可以使用c作為進階程式設計語言,如下圖所示,其他語言,應用程式接口或者基于指令類的方法都可以支援,如fortran,directcompute,openacc。

CUDA C 程式設計指導(一):CUDA介紹

多核cpu和多核gpu意味着現在的主流晶片都支援并行系統。另外,它們的并行規模也遵循摩爾定律。目前的挑戰在于如何采用增加的多核開發并行機制的應用軟體,例如3d圖像應用如何把并行機制很好地應用在不同核數量的多核gpu上。

cuda并行程式設計模型就是設計用來克服這種挑戰的,并且适合程式設計人員,因為它采用的是大家熟悉的程式設計語言,例如c。

cuda的核心和三個抽象概念:線程組的分層結構、共享記憶體、屏障同步,對于程式員而言隻是簡單的擴充了程式設計語言集。

這些抽象提供了細粒度的資料并行機制和線程并行機制,嵌入在粗粒度的資料并行機制和任務并行機制中。它們指導着程式員把問題粗分為可以被線程塊獨立解決的子問題,每個細塊子問題再次被線程塊内的所有線程合作解決。

這種分解保留了語言表達能力,允許線程來合作解決每個子問題的同時自動支援可伸縮性。的确,每一個線程塊都可以以任何順序被一個gpu中的多個可用處理器同時或者順序排程,是以一個編譯成功的cuda程式可以允許在任意數量的多處理器上,如下圖所示,隻有運作系統時系統才需要知道實際的多處理器核數。

CUDA C 程式設計指導(一):CUDA介紹

此可伸縮的程式設計模型允許gpu結構可以通過簡單擴充多處理器核數和記憶體分區的數量來跨越一個廣闊的市場:從高性能的geforce gpus、專業版的quadro和tesla計算機産品到各種各樣的價位低廉的geforce gpus。

gpu是建立在一系列的多處理器(sms)流矩陣上的。一個多線程項目可以分割成多個線程塊,它們彼此獨立執行,是以一個多處理器的gpu可以以較少的時間自動編譯項目,而較少的多處理器gpu會消耗更多的時間。

cuda  c程式設計指導部落格目錄:

1、cuda介紹

2、cuda程式設計模型架構

3、cuda程式設計接口

4、cuda硬體實作

5、cuda性能指南

6、cuda執行個體分析

下一篇: 構造器詳解

繼續閱讀