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