田立國,杜君
TIAN Li-guo1,DU Jun2
(1.漢中職業(yè)技術(shù)學(xué)院,漢中 723000;2.北京裝甲兵工程學(xué)院 裝備指揮與管理學(xué)院,北京 100072)
最近幾年來,受游戲市場和視景仿真需求的牽引,GPU(Graphic Process Unit圖形處理單元)得到了迅速的發(fā)展,主流GPU的單精度浮點處理能力和外部存儲器帶寬都遠(yuǎn)遠(yuǎn)高于同期的CPU,而且GPU已經(jīng)從以往的固定流水線操作模式發(fā)展成可編程流水線模式;另一方面,受工藝、材料和功耗的物理限制,處理器的頻率不會在短時期內(nèi)有飛躍式的提高,新的摩爾定律已經(jīng)演化為“未來的計算機硬件不會更快,只會更寬”,相應(yīng)的現(xiàn)代CPU也采用了多核的架構(gòu)用來提高CPU的并行處理能力。但GPU與生俱來就是一種眾核并行處理器,在處理單元的數(shù)量上還要遠(yuǎn)遠(yuǎn)超過CPU,因此GPU在未來的高性能計算中將發(fā)揮越來越大的作用。
1.1 GPU通用計算
[1]從系統(tǒng)架構(gòu)上看,GPU是針對向量計算進行了優(yōu)化的高度并行的數(shù)據(jù)流處理器,其中包括兩種流處理單元:頂點處理流水線(Vertex Shader)和像素處理流水線(Pixel Shader),其中頂點流水線是多指令多數(shù)據(jù)流(MIMD)的處理單元,而像素處理流水線(Pixel Shader)是單指令多數(shù)據(jù)流(SIMD)的處理單元。這種以數(shù)據(jù)流作為處理單元的處理器,在對數(shù)據(jù)流的處理上可以獲取較高的效率,因此最近幾年,很多研究人員開創(chuàng)了一個新的研究領(lǐng)域:基于GPU的通用計算(GPGPU:General-Purpose Computation on Graphics Process),其主要研究內(nèi)容是除了在圖形處理方面外,如何利用GPU來進行更為廣泛的應(yīng)用計算。GPGPU計算通常采用CPU+GPU異構(gòu)模式,由CPU負(fù)責(zé)執(zhí)行復(fù)雜邏輯處理和事務(wù)管理等不適合數(shù)據(jù)并行的計算,由GPU負(fù)責(zé)計算密集型的大規(guī)模數(shù)據(jù)并行計算。這種利用GPU強大處理能力和高帶寬彌補CPU性能不足的計算方式在發(fā)掘計算機潛在的性能,在成本和性價比方面有顯著的優(yōu)勢。
1.2 GPU通用計算的特點
在GPU上運行的圖形應(yīng)用程序的算法存在如下幾個特征:算法密集、高度并行、控制簡單、分多個階段執(zhí)行以及前饋(Feed Forward)流水線等,因此,符合這些條件或者是可以改寫成類似特征的應(yīng)用程序,就能夠在GPU上獲取較高的性能。
1.3 GPU通用計算平臺
GPU從其誕生之日起就是專門為圖形處理設(shè)計的處理器,它具有自己的存儲單元,在數(shù)據(jù)存取方式上也存在一定的特殊性,而且通常對GPU進行開發(fā)的是一些游戲廠商,他們幾乎都使非標(biāo)準(zhǔn)編程模式,如果要實現(xiàn)通用計算需要花費很大的程序開發(fā)能力,為了便于開發(fā)人員使用GPU的通用計算能力,世界上一些知名的軟硬件廠商先后推出了一些開發(fā)平臺和工具,極大地推動了GPU通用計算的發(fā)展和進步。目前使用比較廣泛的是NVIDIA的CUDA,主要有以下兩個原因:
1)硬件方面,支持CUDA的GPU在構(gòu)架上有了顯著的改進,一是采用了統(tǒng)一的處理架構(gòu),可以更加有效地利用過去分布在頂點渲染器和像素渲染器的計算資源;二是引入了片內(nèi)共享存儲器,支持隨機寫入和線程間通信。這兩項改進使得CUDA架構(gòu)更加適用于GPU通用計算。
2)軟件方面,CUDA不需要借助于圖形API,并采用了比較容易掌握的類C語言進行開發(fā)。開發(fā)人員能夠從熟悉的C語言比較平穩(wěn)地從CPU編程模式過渡到GPU編程模式,而不需要去學(xué)習(xí)特定的顯示芯片指令或者特殊的結(jié)構(gòu)。CUDA的最大優(yōu)勢在于它極大降低了利用GPU進行編程的入門門檻。只要編程人員掌握C語言,就可以利用CUDA所提供的編程環(huán)境和SDK基于GPU進行軟件開發(fā)。
2.1 GPU與CPU硬件架構(gòu)比較
從硬件架構(gòu)上看,CPU和GPU是按照不同的設(shè)計思路設(shè)計的:如圖1所示。

圖1 CPU和GPU硬件架構(gòu)示意圖
CPU的架構(gòu)是按照兼顧“指令并行執(zhí)行”和“數(shù)據(jù)并行運算”的思路而設(shè)計,即兼顧程序執(zhí)行和數(shù)據(jù)運算的并行性、通用性以及它們的平衡性。因而CPU是計算機中設(shè)計最復(fù)雜的芯片。和GPU相比,CPU核心的重復(fù)設(shè)計部分不多,這種復(fù)雜性來自于實現(xiàn):如程序分支預(yù)測,推測執(zhí)行,多重嵌套分支執(zhí)行,并行執(zhí)行時候的指令相關(guān)性和數(shù)據(jù)相關(guān)性,多核協(xié)同處理時候的數(shù)據(jù)一致性等等復(fù)雜邏輯。
GPU其實是由硬件實現(xiàn)的一組圖形函數(shù)的集合,這些函數(shù)主要用于繪制各種圖形所需要的運算。這些和像素,光影處理,3D 坐標(biāo)變換等相關(guān)的運算由GPU硬件加速來實現(xiàn)。圖形運算的特點是大量同類型數(shù)據(jù)的密集運算—如圖形數(shù)據(jù)的矩陣運算,GPU的架構(gòu)就是面向適合于矩陣類型的數(shù)值計算而設(shè)計的,大量重復(fù)設(shè)計的計算單元,這類計算可以分成眾多獨立的數(shù)值計算—大量數(shù)值運算的線程,而且數(shù)據(jù)之間沒有像程序執(zhí)行的那種邏輯關(guān)聯(lián)性。
2.2 GPU與CPU計算能力分析
GPU擁有自己獨立的子存儲系統(tǒng)—顯存,它擁有比系統(tǒng)主存高得多的帶寬。GPU在工作時,工作負(fù)載經(jīng)PCI-E總線從CPU傳入GPU顯存,按照體系架構(gòu)的層次自頂向下分發(fā)。PCI-E 2.0規(guī)范中,每個通道上下行的數(shù)據(jù)傳輸速度達到了5.0Gbit/s,這樣PCI-E2.0×16插槽能夠為上下行數(shù)據(jù)各提供5.0×16Gbit/s=10GB/s的帶寬,有效帶寬為8GB/s,但是由于PCI-E數(shù)據(jù)封包的影響,實際可用的帶寬大約在5-6GB/s(PCI-E 2.0×16)。
CPU在浮點運算和并行計算方面的性能遠(yuǎn)不如GPU強大,所以將GPU的作為CPU的浮點運算協(xié)處理器可以使普通PC的運算能力提高到一個全新的高度。如果從更深層面考慮,目前CPU的發(fā)展已經(jīng)遇到了瓶頸,無論是核心架構(gòu)的效率還是核心數(shù)量都很難獲得大幅提升,而GPU則是新的突破點,它的潛力很大。
2.3 GPU通用計算的應(yīng)用領(lǐng)域
GPU通用計算的發(fā)展迅速,特別是“CPU+ GPU”模式的提出,使得GPU通用計算的應(yīng)用領(lǐng)域逐步深入到科學(xué)計算的各個領(lǐng)域,如FFT(快速傅里葉變換)[2]、串匹配算法[3]、科學(xué)計算可視化[4]、實時紅外圖像生成[5]、遺傳算法加速[6]、數(shù)據(jù)庫操作[7]、等。隨著軟硬件技術(shù)的進一步發(fā)展,以及越來越多的研究人員和工程技術(shù)人員的參與,GPU通用計算的研究和應(yīng)用領(lǐng)域?qū)⑦M一步拓寬。
GPU在處理大量的沒有邏輯關(guān)系的數(shù)值計算時,理論上具有明顯的加速效果,為了對GPU通用計算的加速性能進行原理性的分析和驗證,構(gòu)建了以下的實驗環(huán)境:
硬件采用2.2GHz Intel Core2Duo處理器和GeForce G210M顯卡(娛樂級顯卡),軟件環(huán)境采用NVIDA的CUDA SDK 2.0及C語言編譯器。
3.1 海量浮點數(shù)求和運算
選取0~512*21056的浮點型數(shù)據(jù),每個整型數(shù)據(jù)執(zhí)行k次累加和運算。

試驗中,通過不斷增大k的值,來調(diào)浮點數(shù)的運算量,試驗的結(jié)果如圖2所示。其中GPU程序執(zhí)行時間包括數(shù)據(jù)在顯存和主存之間的傳遞時間。

圖2 海量浮點數(shù)運算
從試驗結(jié)果可以看出,隨著計算量的增加,CPU和GPU執(zhí)行時間都在增加,但到達一定的計算量后,CPU執(zhí)行時間成線性增加,而GPU基本保持不變,原因是高密度計算隱藏了GPU訪存和數(shù)據(jù)傳輸帶來的延遲。
3.2 龍格-庫塔法解算彈道方程
龍格-庫塔算法是一種常用的微分方程的數(shù)值解法,具有較高的精度,相應(yīng)地其運算量也相對較大。

實驗中通過改變解算彈道數(shù),比較分析CPU和GPU的執(zhí)行時間,如圖3所示。

圖3 龍格-庫塔解算彈道方程
由試驗數(shù)據(jù)可知,在彈道數(shù)小于1024的時候,GPU執(zhí)行速度沒有CPU快,GPU的加速性能沒有充分發(fā)揮。當(dāng)彈道數(shù)大于1024時,GPU加速優(yōu)勢開始顯現(xiàn),隨著彈道數(shù)增大,GPU加速優(yōu)勢越來越明顯,主要原因是大規(guī)模高吞吐量的數(shù)據(jù)運算也可以隱藏GPU訪存和數(shù)據(jù)傳輸帶來的延遲。
隨著GPU 計算能力的飛速提高,以及相關(guān)軟件平臺的支持,高性能計算逐步進入桌面領(lǐng)域,對于普通的科研和技術(shù)人員而言,高性能計算(High Performance Computing,HPC)不再可望而不可及,在這種高性價比的計算資源的支持下,許多以往看起來無法解決的運算問題都可以迎刃而解。
[1]吳恩華.圖形處理器用于通用計算的技術(shù)、現(xiàn)狀及其挑戰(zhàn)[J].軟件學(xué)報.2004,15(10):1493-1504.
[2]馮煌.GPU圖像處理的FFT和卷積算法及性能分析[J].計算機工程與應(yīng)用.2008,44(2).
[3]張慶丹,戴正華,馮圣中,孫凝暉.基于GPU的串匹配算法研究[J].計算機應(yīng)用.2006,7(26):7.
[4]鄭杰.基于GPU的高質(zhì)量交互式可視化技術(shù)研究[D].西安電子科技大學(xué).2007.
[5]李勇.基于GPU的實時紅外圖像生成方法研究[D].西安電子科技大學(xué),2007.
[6]楊正龍,金林,李蔚清.基與GPU的圖形電磁計算加速算法[J].電于學(xué)報.2007,6(35):6.
[7]楊正平.基于GPU計算的直接體視化和遺傳算法研究[D].中國地質(zhì)大學(xué)文.2005.