圖形處理單元(GPU)在類似的價格和功率范圍內(nèi)提供比CPU高的指令吞吐量和內(nèi)存帶寬。許多應(yīng)用程序在GPU上比在CPU上運行得更快。其他計算設(shè)備,如FPGA,也非常節(jié)能,但提供的編程靈活性低于GPU。 GPU和CPU之間的功能差異之所以存在,是因為它們的設(shè)計目標(biāo)不同。雖然CPU被設(shè)計為盡可能快地執(zhí)行一系列操作(稱為線程),并且可以并行執(zhí)行幾十個線程,但GPU被設(shè)計為擅長并行執(zhí)行數(shù)千個線程(用較慢的單線程性能以實現(xiàn)更高的吞吐量)。 GPU專門用于高度并行計算,因此設(shè)計為更多晶體管用于數(shù)據(jù)處理,而不是數(shù)據(jù)緩存和流控制。如圖顯示了CPU與GPU的芯片資源分布。
圖1.GPU將更多晶體管用于數(shù)據(jù)處理 將更多的晶體管用于數(shù)據(jù)處理(例如浮點計算)對于高度并行的計算是有益的;GPU可以通過計算避免內(nèi)存訪問延遲,而不是依賴于大型數(shù)據(jù)緩存和復(fù)雜的流控制來避免長的內(nèi)存訪問延遲。 通常,應(yīng)用程序有并行部分和順序部分的混合,因此系統(tǒng)設(shè)計時混合使用GPU和CPU,以最大化整體性能。具有高度并行性的應(yīng)用程序可以利用GPU的這種大規(guī)模并行性來實現(xiàn)比CPU更高的性能。
通用并行計算平臺和編程模型
2006年11月,英偉達推出了CUDA,這是一種通用并行計算平臺和編程模型,它利用NVIDIA GPU中的并行計算引擎,以比CPU更高效的方式解決許多復(fù)雜的計算問題。 CUDA附帶了一個軟件環(huán)境,允許開發(fā)人員使用C++作為高級編程語言。如圖2所示,CUDA也支持其他語言、應(yīng)用程序編程接口或基于指令的方法,如FORTRAN、DirectCompute、OpenACC。CUDA旨在支持各種語言和應(yīng)用程序編程接口。
圖2.GPU計算應(yīng)用程序
一種可擴展編程模型
多核CPU和多核GPU的出現(xiàn)意味著現(xiàn)在主流處理器芯片都是并行系統(tǒng)。挑戰(zhàn)在于開發(fā)能夠方便地擴展其并行性的應(yīng)用程序軟件,以利用不斷增加的處理器核,就像3D圖形應(yīng)用程序方便地將其并行性擴展到具有大量不同核的多核GPU一樣。 CUDA并行編程模型旨在克服這一挑戰(zhàn),同時為熟悉C等標(biāo)準(zhǔn)編程語言的程序員降低學(xué)習(xí)難度。它的核心是三個關(guān)鍵抽象——線程組的層次結(jié)構(gòu)、共享內(nèi)存和柵障同步,這些抽象僅作為一組最小的語言擴展向程序員公開。 這些抽象提供了數(shù)據(jù)并行和線程并行,需要程序員將問題劃分為可由線程塊獨立并行解決的粗略子問題,并將每個子問題劃分為更精細的部分,可由塊內(nèi)的所有線程協(xié)同并行解決。
事實上,每個線程塊(block)可以在GPU內(nèi)的任何可用多處理器上以任何順序、并發(fā)或順序進行調(diào)度,這樣編譯后的CUDA程序可以在任何數(shù)量的多處理器上執(zhí)行,如圖3所示,并且只有運行時系統(tǒng)才需要知道實際的多處理器數(shù)量。 這種可擴展編程模型允許GPU架構(gòu)通過簡單地擴展多處理器和內(nèi)存分區(qū)的數(shù)量來適應(yīng)不同的顯卡:從高性能愛好者GeForce GPU、專業(yè)的Quadro和Tesla計算顯卡到各種廉價的主流GeForce GPU(請參閱以獲取所有支持CUDA的GPU的列表)。
更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<