田立國,杜君
TIAN Li-guo1,DU Jun2
(1.漢中職業(yè)技術(shù)學(xué)院,漢中 723000;2.北京裝甲兵工程學(xué)院 裝備指揮與管理學(xué)院,北京 100072)
最近幾年來,受游戲市場和視景仿真需求的牽引,GPU(Graphic Process Unit圖形處理單元)得到了迅速的發(fā)展,主流GPU的單精度浮點(diǎn)處理能力和外部存儲(chǔ)器帶寬都遠(yuǎn)遠(yuǎn)高于同期的CPU,而且GPU已經(jīng)從以往的固定流水線操作模式發(fā)展成可編程流水線模式;另一方面,受工藝、材料和功耗的物理限制,處理器的頻率不會(huì)在短時(shí)期內(nèi)有飛躍式的提高,新的摩爾定律已經(jīng)演化為“未來的計(jì)算機(jī)硬件不會(huì)更快,只會(huì)更寬”,相應(yīng)的現(xiàn)代CPU也采用了多核的架構(gòu)用來提高CPU的并行處理能力。但GPU與生俱來就是一種眾核并行處理器,在處理單元的數(shù)量上還要遠(yuǎn)遠(yuǎn)超過CPU,因此GPU在未來的高性能計(jì)算中將發(fā)揮越來越大的作用。
1.1 GPU通用計(jì)算
[1]從系統(tǒng)架構(gòu)上看,GPU是針對(duì)向量計(jì)算進(jìn)行了優(yōu)化的高度并行的數(shù)據(jù)流處理器,其中包括兩種流處理單元:頂點(diǎn)處理流水線(Vertex Shader)和像素處理流水線(Pixel Shader),其中頂點(diǎn)流水線是多指令多數(shù)據(jù)流(MIMD)的處理單元,而像素處理流水線(Pixel Shader)是單指令多數(shù)據(jù)流(SIMD)的處理單元。這種以數(shù)據(jù)流作為處理單元的處理器,在對(duì)數(shù)據(jù)流的處理上可以獲取較高的效率,因此最近幾年,很多研究人員開創(chuàng)了一個(gè)新的研究領(lǐng)域:基于GPU的通用計(jì)算(GPGPU:General-Purpose Computation on Graphics Process),其主要研究內(nèi)容是除了在圖形處理方面外,如何利用GPU來進(jìn)行更為廣泛的應(yīng)用計(jì)算。GPGPU計(jì)算通常采用CPU+GPU異構(gòu)模式,由CPU負(fù)責(zé)執(zhí)行復(fù)雜邏輯處理和事務(wù)管理等不適合數(shù)據(jù)并行的計(jì)算,由GPU負(fù)責(zé)計(jì)算密集型的大規(guī)模數(shù)據(jù)并行計(jì)算。這種利用GPU強(qiáng)大處理能力和高帶寬彌補(bǔ)CPU性能不足的計(jì)算方式在發(fā)掘計(jì)算機(jī)潛在的性能,在成本和性價(jià)比方面有顯著的優(yōu)勢。
1.2 GPU通用計(jì)算的特點(diǎn)
在GPU上運(yùn)行的圖形應(yīng)用程序的算法存在如下幾個(gè)特征:算法密集、高度并行、控制簡單、分多個(gè)階段執(zhí)行以及前饋(Feed Forward)流水線等,因此,符合這些條件或者是可以改寫成類似特征的應(yīng)用程序,就能夠在GPU上獲取較高的性能。
1.3 GPU通用計(jì)算平臺(tái)
GPU從其誕生之日起就是專門為圖形處理設(shè)計(jì)的處理器,它具有自己的存儲(chǔ)單元,在數(shù)據(jù)存取方式上也存在一定的特殊性,而且通常對(duì)GPU進(jìn)行開發(fā)的是一些游戲廠商,他們幾乎都使非標(biāo)準(zhǔn)編程模式,如果要實(shí)現(xiàn)通用計(jì)算需要花費(fèi)很大的程序開發(fā)能力,為了便于開發(fā)人員使用GPU的通用計(jì)算能力,世界上一些知名的軟硬件廠商先后推出了一些開發(fā)平臺(tái)和工具,極大地推動(dòng)了GPU通用計(jì)算的發(fā)展和進(jìn)步。目前使用比較廣泛的是NVIDIA的CUDA,主要有以下兩個(gè)原因:
1)硬件方面,支持CUDA的GPU在構(gòu)架上有了顯著的改進(jìn),一是采用了統(tǒng)一的處理架構(gòu),可以更加有效地利用過去分布在頂點(diǎn)渲染器和像素渲染器的計(jì)算資源;二是引入了片內(nèi)共享存儲(chǔ)器,支持隨機(jī)寫入和線程間通信。這兩項(xiàng)改進(jìn)使得CUDA架構(gòu)更加適用于GPU通用計(jì)算。
2)軟件方面,CUDA不需要借助于圖形API,并采用了比較容易掌握的類C語言進(jìn)行開發(fā)。開發(fā)人員能夠從熟悉的C語言比較平穩(wěn)地從CPU編程模式過渡到GPU編程模式,而不需要去學(xué)習(xí)特定的顯示芯片指令或者特殊的結(jié)構(gòu)。CUDA的最大優(yōu)勢在于它極大降低了利用GPU進(jìn)行編程的入門門檻。只要編程人員掌握C語言,就可以利用CUDA所提供的編程環(huán)境和SDK基于GPU進(jìn)行軟件開發(fā)。
2.1 GPU與CPU硬件架構(gòu)比較
從硬件架構(gòu)上看,CPU和GPU是按照不同的設(shè)計(jì)思路設(shè)計(jì)的:如圖1所示。
圖1 CPU和GPU硬件架構(gòu)示意圖
CPU的架構(gòu)是按照兼顧“指令并行執(zhí)行”和“數(shù)據(jù)并行運(yùn)算”的思路而設(shè)計(jì),即兼顧程序執(zhí)行和數(shù)據(jù)運(yùn)算的并行性、通用性以及它們的平衡性。因而CPU是計(jì)算機(jī)中設(shè)計(jì)最復(fù)雜的芯片。和GPU相比,CPU核心的重復(fù)設(shè)計(jì)部分不多,這種復(fù)雜性來自于實(shí)現(xiàn):如程序分支預(yù)測,推測執(zhí)行,多重嵌套分支執(zhí)行,并行執(zhí)行時(shí)候的指令相關(guān)性和數(shù)據(jù)相關(guān)性,多核協(xié)同處理時(shí)候的數(shù)據(jù)一致性等等復(fù)雜邏輯。
GPU其實(shí)是由硬件實(shí)現(xiàn)的一組圖形函數(shù)的集合,這些函數(shù)主要用于繪制各種圖形所需要的運(yùn)算。這些和像素,光影處理,3D 坐標(biāo)變換等相關(guān)的運(yùn)算由GPU硬件加速來實(shí)現(xiàn)。圖形運(yùn)算的特點(diǎn)是大量同類型數(shù)據(jù)的密集運(yùn)算—如圖形數(shù)據(jù)的矩陣運(yùn)算,GPU的架構(gòu)就是面向適合于矩陣類型的數(shù)值計(jì)算而設(shè)計(jì)的,大量重復(fù)設(shè)計(jì)的計(jì)算單元,這類計(jì)算可以分成眾多獨(dú)立的數(shù)值計(jì)算—大量數(shù)值運(yùn)算的線程,而且數(shù)據(jù)之間沒有像程序執(zhí)行的那種邏輯關(guān)聯(lián)性。
2.2 GPU與CPU計(jì)算能力分析
GPU擁有自己獨(dú)立的子存儲(chǔ)系統(tǒng)—顯存,它擁有比系統(tǒng)主存高得多的帶寬。GPU在工作時(shí),工作負(fù)載經(jīng)PCI-E總線從CPU傳入GPU顯存,按照體系架構(gòu)的層次自頂向下分發(fā)。PCI-E 2.0規(guī)范中,每個(gè)通道上下行的數(shù)據(jù)傳輸速度達(dá)到了5.0Gbit/s,這樣PCI-E2.0×16插槽能夠?yàn)樯舷滦袛?shù)據(jù)各提供5.0×16Gbit/s=10GB/s的帶寬,有效帶寬為8GB/s,但是由于PCI-E數(shù)據(jù)封包的影響,實(shí)際可用的帶寬大約在5-6GB/s(PCI-E 2.0×16)。
CPU在浮點(diǎn)運(yùn)算和并行計(jì)算方面的性能遠(yuǎn)不如GPU強(qiáng)大,所以將GPU的作為CPU的浮點(diǎn)運(yùn)算協(xié)處理器可以使普通PC的運(yùn)算能力提高到一個(gè)全新的高度。如果從更深層面考慮,目前CPU的發(fā)展已經(jīng)遇到了瓶頸,無論是核心架構(gòu)的效率還是核心數(shù)量都很難獲得大幅提升,而GPU則是新的突破點(diǎn),它的潛力很大。
2.3 GPU通用計(jì)算的應(yīng)用領(lǐng)域
GPU通用計(jì)算的發(fā)展迅速,特別是“CPU+ GPU”模式的提出,使得GPU通用計(jì)算的應(yīng)用領(lǐng)域逐步深入到科學(xué)計(jì)算的各個(gè)領(lǐng)域,如FFT(快速傅里葉變換)[2]、串匹配算法[3]、科學(xué)計(jì)算可視化[4]、實(shí)時(shí)紅外圖像生成[5]、遺傳算法加速[6]、數(shù)據(jù)庫操作[7]、等。隨著軟硬件技術(shù)的進(jìn)一步發(fā)展,以及越來越多的研究人員和工程技術(shù)人員的參與,GPU通用計(jì)算的研究和應(yīng)用領(lǐng)域?qū)⑦M(jìn)一步拓寬。
GPU在處理大量的沒有邏輯關(guān)系的數(shù)值計(jì)算時(shí),理論上具有明顯的加速效果,為了對(duì)GPU通用計(jì)算的加速性能進(jìn)行原理性的分析和驗(yàn)證,構(gòu)建了以下的實(shí)驗(yàn)環(huán)境:
硬件采用2.2GHz Intel Core2Duo處理器和GeForce G210M顯卡(娛樂級(jí)顯卡),軟件環(huán)境采用NVIDA的CUDA SDK 2.0及C語言編譯器。
3.1 海量浮點(diǎn)數(shù)求和運(yùn)算
選取0~512*21056的浮點(diǎn)型數(shù)據(jù),每個(gè)整型數(shù)據(jù)執(zhí)行k次累加和運(yùn)算。
試驗(yàn)中,通過不斷增大k的值,來調(diào)浮點(diǎn)數(shù)的運(yùn)算量,試驗(yàn)的結(jié)果如圖2所示。其中GPU程序執(zhí)行時(shí)間包括數(shù)據(jù)在顯存和主存之間的傳遞時(shí)間。
圖2 海量浮點(diǎn)數(shù)運(yùn)算
從試驗(yàn)結(jié)果可以看出,隨著計(jì)算量的增加,CPU和GPU執(zhí)行時(shí)間都在增加,但到達(dá)一定的計(jì)算量后,CPU執(zhí)行時(shí)間成線性增加,而GPU基本保持不變,原因是高密度計(jì)算隱藏了GPU訪存和數(shù)據(jù)傳輸帶來的延遲。
3.2 龍格-庫塔法解算彈道方程
龍格-庫塔算法是一種常用的微分方程的數(shù)值解法,具有較高的精度,相應(yīng)地其運(yùn)算量也相對(duì)較大。
實(shí)驗(yàn)中通過改變解算彈道數(shù),比較分析CPU和GPU的執(zhí)行時(shí)間,如圖3所示。
圖3 龍格-庫塔解算彈道方程
由試驗(yàn)數(shù)據(jù)可知,在彈道數(shù)小于1024的時(shí)候,GPU執(zhí)行速度沒有CPU快,GPU的加速性能沒有充分發(fā)揮。當(dāng)彈道數(shù)大于1024時(shí),GPU加速優(yōu)勢開始顯現(xiàn),隨著彈道數(shù)增大,GPU加速優(yōu)勢越來越明顯,主要原因是大規(guī)模高吞吐量的數(shù)據(jù)運(yùn)算也可以隱藏GPU訪存和數(shù)據(jù)傳輸帶來的延遲。
隨著GPU 計(jì)算能力的飛速提高,以及相關(guān)軟件平臺(tái)的支持,高性能計(jì)算逐步進(jìn)入桌面領(lǐng)域,對(duì)于普通的科研和技術(shù)人員而言,高性能計(jì)算(High Performance Computing,HPC)不再可望而不可及,在這種高性價(jià)比的計(jì)算資源的支持下,許多以往看起來無法解決的運(yùn)算問題都可以迎刃而解。
[1]吳恩華.圖形處理器用于通用計(jì)算的技術(shù)、現(xiàn)狀及其挑戰(zhàn)[J].軟件學(xué)報(bào).2004,15(10):1493-1504.
[2]馮煌.GPU圖像處理的FFT和卷積算法及性能分析[J].計(jì)算機(jī)工程與應(yīng)用.2008,44(2).
[3]張慶丹,戴正華,馮圣中,孫凝暉.基于GPU的串匹配算法研究[J].計(jì)算機(jī)應(yīng)用.2006,7(26):7.
[4]鄭杰.基于GPU的高質(zhì)量交互式可視化技術(shù)研究[D].西安電子科技大學(xué).2007.
[5]李勇.基于GPU的實(shí)時(shí)紅外圖像生成方法研究[D].西安電子科技大學(xué),2007.
[6]楊正龍,金林,李蔚清.基與GPU的圖形電磁計(jì)算加速算法[J].電于學(xué)報(bào).2007,6(35):6.
[7]楊正平.基于GPU計(jì)算的直接體視化和遺傳算法研究[D].中國地質(zhì)大學(xué)文.2005.