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