GPU---并行计算利器
轉(zhuǎn)載請(qǐng)引用:GPU---并行計(jì)算利器
源于阿里巴巴CCO《猿來(lái)如此》分享
1?GPU是什么
? ? ? 如圖1所示,這臺(tái)PC機(jī)與普通PC機(jī)不同的是這里插了7張顯卡,左下角是顯卡,在中間的就是GPU芯片。顯卡的處理器稱(chēng)為圖形處理器(GPU),它是顯卡的“心臟”,與CPU類(lèi)似,只不過(guò)GPU是專(zhuān)為執(zhí)行復(fù)雜的數(shù)學(xué)和幾何計(jì)算而設(shè)計(jì)的。
? ? ? GPU計(jì)算能力非常強(qiáng)悍,舉個(gè)例子:現(xiàn)在主流的i7處理器的浮點(diǎn)計(jì)算能力是主流的英偉達(dá)GPU處理器浮點(diǎn)計(jì)算能力的1/12。
圖1 顯卡與GPU
2 為什么GPU計(jì)算能力如此強(qiáng)悍?
? ? ? ?圖2對(duì)CPU與GPU中的邏輯架構(gòu)進(jìn)行了對(duì)比。其中Control是控制器、ALU算術(shù)邏輯單元、Cache是cpu內(nèi)部緩存、DRAM就是內(nèi)存。可以看到GPU設(shè)計(jì)者將更多的晶體管用作執(zhí)行單元,而不是像CPU那樣用作復(fù)雜的控制單元和緩存。從實(shí)際來(lái)看,CPU芯片空間的5%是ALU,而GPU空間的40%是ALU。這也是導(dǎo)致GPU計(jì)算能力超強(qiáng)的原因。
圖2 cpu和gpu硬件邏輯結(jié)構(gòu)對(duì)比
?
? ? ? 那有人講了,為什么cpu不像gpu那樣設(shè)計(jì)呢,這樣計(jì)算能力也強(qiáng)悍了!
? ? ? 為什么?CPU要做得很通用。CPU需要同時(shí)很好的支持并行和串行操作,需要很強(qiáng)的通用性來(lái)處理各種不同的數(shù)據(jù)類(lèi)型,同時(shí)又要支持復(fù)雜通用的邏輯判斷,這樣會(huì)引入大量的分支跳轉(zhuǎn)和中斷的處理。這些都使得CPU的內(nèi)部結(jié)構(gòu)異常復(fù)雜,計(jì)算單元的比重被降低了。而GPU面對(duì)的則是類(lèi)型高度統(tǒng)一的、相互無(wú)依賴(lài)的大規(guī)模數(shù)據(jù)和不需要被打斷的純凈的計(jì)算環(huán)境。因此GPU的芯片比CPU芯片簡(jiǎn)單很多。
? ? ? 舉個(gè)例子,假設(shè)有一堆相同的加減乘除計(jì)算任務(wù)需要處理,那把這個(gè)任務(wù)交給一堆(幾十個(gè))小學(xué)生就可以了,這里小學(xué)生類(lèi)似于GPU的計(jì)算單元,而對(duì)一些復(fù)雜的邏輯推理等問(wèn)題,比如公式推導(dǎo)、科技文章寫(xiě)作等高度邏輯化的任務(wù),交給小學(xué)生顯然不合適,這時(shí)大學(xué)教授更適合,這里的大學(xué)教授就是CPU的計(jì)算單元了,大學(xué)教授當(dāng)然能處理加減乘除的問(wèn)題,單個(gè)教授計(jì)算加減乘除比單個(gè)小學(xué)生計(jì)算速度更快,但是成本顯然高很多。
3 GPU編程庫(kù)
? ? ? ?GPU計(jì)算能力這么強(qiáng),被廣泛使用!比如挖礦(比特幣)、圖形圖像處理、數(shù)值模擬、機(jī)器學(xué)習(xí)算法訓(xùn)練等等,那我們?cè)趺窗l(fā)揮GPU超強(qiáng)的計(jì)算能力呢?---編程!
? ? ? ?怎么進(jìn)行GPU編程呢?現(xiàn)在GPU形形色色,比如Nvidia、AMD、Intel都推出了自己的GPU,其中最為流行的就是Nvidia的GPU,其還推出了CUDA并行編程庫(kù)。然而每個(gè)GPU生產(chǎn)公司都推出自己的編程庫(kù)顯然讓學(xué)習(xí)成本上升很多,因此蘋(píng)果公司就推出了標(biāo)準(zhǔn)OpenCL,說(shuō)各個(gè)生產(chǎn)商都支持我的標(biāo)準(zhǔn),只要有一套OpenCL的編程庫(kù)就能對(duì)各類(lèi)型的GPU芯片適用。當(dāng)然了,OpenCL做到通用不是沒(méi)有代價(jià)的,會(huì)帶來(lái)一定程度的性能損失,在Nvidia的GPU上,CUDA性能明顯比OpenCL高出一大截。目前CUDA和OpenCL是最主流的兩個(gè)GPU編程庫(kù)。
? ? ? 從編程語(yǔ)言角度看,CUDA和OpenCL都是原生支持C/C++的,其它語(yǔ)言想要訪問(wèn)還有些麻煩,比如Java,需要通過(guò)JNI來(lái)訪問(wèn)CUDA或者OpenCL。基于JNI,現(xiàn)今有各種Java版本的GPU編程庫(kù),比如JCUDA等。另一種思路就是語(yǔ)言還是由java來(lái)編寫(xiě),通過(guò)一種工具將java轉(zhuǎn)換成C。
圖3 GPU編程庫(kù)
LWJGL (http://www.lwjgl.org/) JOCL (http://www.jocl.org/) JCUDA (http://www.jcuda.de/) Aparapi (http://code.google.com/p/aparapi/) JavaCL (http://code.google.com/p/javacl/)4?CUDA程序流程
圖4 CUDA程序流程
5 實(shí)踐---以圖像處理為例
? ? ? ? 假設(shè)我們有如下圖像處理任務(wù),給每個(gè)像素值加1。并行方式很簡(jiǎn)單,為每個(gè)像素開(kāi)一個(gè)GPU線程,由其進(jìn)行加1操作。
圖5 例子
圖6 核函數(shù)
圖7 主流程函數(shù)
6 GPU加速效果
? ? ? ? 下圖是我實(shí)現(xiàn)的基于CUDA的P&D DEM圖像預(yù)處理算法使用GPU的加速效果,GeForce GT 330是塊普通臺(tái)式機(jī)上的顯卡,現(xiàn)在價(jià)格也就500人民幣左右,用它達(dá)到了20倍的加速比,Tesla M2075是比較專(zhuān)業(yè)的顯卡,價(jià)格一萬(wàn)左右,用它達(dá)到了將近百倍的加速比,這個(gè)程序i7 CPU單進(jìn)程單線程要跑2個(gè)小時(shí),而用Tesla M2075?GPU只花了一分多鐘就完成計(jì)算。
圖8 P&D DEM圖像預(yù)處理算法加速效果
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/LBSer/p/4592862.html
總結(jié)
以上是生活随笔為你收集整理的GPU---并行计算利器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: KindEditor编辑器在ASP.NE
- 下一篇: 《代码大全》阅读笔记02