GPU通用計(jì)算(GPGPU)——將圖形處理器用于高性能計(jì)算領(lǐng)域
時(shí)間:2008-12-09 11:01:00
來(lái)源:UltraLAB圖形工作站方案網(wǎng)站
人氣:8737
作者:admin
1.1 研究背景和意義
隨著當(dāng)前計(jì)算機(jī)性能的不斷提高,應(yīng)用范圍越來(lái)越廣泛,不同的計(jì)算任務(wù)和計(jì)算需求都在快速增長(zhǎng),這就決定了處理器朝著通用化和專用化兩個(gè)方向飛速發(fā)展。一方面,以CPU為代表的通用處理器是現(xiàn)代計(jì)算機(jī)的核心部件,經(jīng)過(guò)多次器件換代的變遷,不僅集成度大大提高,性能和功能也大為改善,除了負(fù)責(zé)解釋、執(zhí)行指令和完成各種算術(shù)邏輯運(yùn)算外,還控制并協(xié)調(diào)計(jì)算機(jī)各部分的執(zhí)行。另一方面,處理器在特定領(lǐng)域應(yīng)用的專用化程度也越來(lái)越高,例如在視頻、圖像和音頻處理等領(lǐng)域,都出現(xiàn)了相應(yīng)的專用處理器(如VPU、GPU、APU等)。在針對(duì)特定應(yīng)用方面與通用處理器相比,專用處理器能夠更加高效的滿足特定的計(jì)算任務(wù)和需求。
近年來(lái),計(jì)算機(jī)圖形處理器(GPU,Graphics Processing Unit)正在以大大超過(guò)摩爾定律的速度高速發(fā)展,極大的提高了計(jì)算機(jī)圖形處理的速度和質(zhì)量,不但促進(jìn)了圖像處理、虛擬現(xiàn)實(shí)、計(jì)算機(jī)仿真等相關(guān)應(yīng)用領(lǐng)域的快速發(fā)展,同時(shí)也為人們利用GPU進(jìn)行圖形處理以外的通用計(jì)算提供了良好的運(yùn)行平臺(tái)[1]。
GPU應(yīng)用領(lǐng)域的拓寬與其硬件發(fā)展有著極大關(guān)系。GPU自1999年首先由NVIDIA公司提出后,就其發(fā)展的速度而言,是CPU更新速度的三倍。從 1993年開(kāi)始,GPU的性能以每年2.8倍的速度增長(zhǎng)。目前,圖形處理器已經(jīng)經(jīng)歷了五代發(fā)展,平均每半年就有新一代的GPU問(wèn)世。
2004年,NVIDIA GeForce 6800 Ultra處理器峰值速度可達(dá)40GFLOPS,對(duì)比Intel Pentium 4 3.0GHz,采用SSE2指令集也只能達(dá)到6 GFLOPS[3]。NVIDIA最新發(fā)布的GeForce 8800圖形處理器集成了6.8億個(gè)晶體管,擁有128個(gè)流處理單元,其峰值運(yùn)算能力超過(guò)340GFLOPS,而Intel最新的Pentium4 Core 2 Extreme X6800只有46.88GFLOPS。
圖 1 GPU與CPU的發(fā)展與性能比較
圖形處理器技術(shù)的迅速發(fā)展帶來(lái)的并不只是速度的提高,還產(chǎn)生了很多全新的圖形硬件技術(shù),使GPU具有流處理、高密集并行運(yùn)算、可編程流水線等特性,從而極大的拓展了GPU的處理能力和應(yīng)用范圍[2]。
正是由于GPU具有高效的并行性和靈活的可編程性等特點(diǎn),越來(lái)越多的研究人員和商業(yè)組織開(kāi)始利用GPU完成一些非圖形繪制方面的計(jì)算,并開(kāi)創(chuàng)了一個(gè)新的研究領(lǐng)域:基于GPU的通用計(jì)算(GPGPU,General-Purpose computation on GPU),其主要研究?jī)?nèi)容是如何利用GPU在圖形處理之外的其他領(lǐng)域進(jìn)行更為廣泛的科學(xué)計(jì)算[4]。目前已成功應(yīng)用于代數(shù)計(jì)算、流體模擬、數(shù)據(jù)庫(kù)應(yīng)用、頻譜分析等非圖形應(yīng)用領(lǐng)域[5],甚至包括智能信息處理系統(tǒng)和數(shù)據(jù)挖掘工具等商業(yè)化應(yīng)用。同時(shí),也產(chǎn)生了一些針對(duì)GPU開(kāi)發(fā)的通用計(jì)算工具包,能夠基于 GPU平臺(tái)對(duì)FFT、BLAS、排序及線性方程組求解等科學(xué)計(jì)算進(jìn)行優(yōu)化實(shí)現(xiàn)。
基于GPU的通用計(jì)算已成為近幾年人們關(guān)注的一個(gè)研究熱點(diǎn)。將GPU用于通用計(jì)算的主要目的是為了加速計(jì)算,加速的動(dòng)力來(lái)自GPU在高性能計(jì)算方面所具有的優(yōu)勢(shì):
(1)高效的并行性。這一功能主要是通過(guò)GPU多條繪制流水線的并行計(jì)算來(lái)體現(xiàn)的。在目前主流的GPU中,配置多達(dá)16個(gè)片段處理流水線,6個(gè)頂點(diǎn)處理流水線。多條流水線可以在單一控制部件的集中控制下運(yùn)行,也可以獨(dú)立運(yùn)行。GPU的頂點(diǎn)處理流水線使用MIMD方式控制,片段處理流水線使用SIMD結(jié)構(gòu)。相對(duì)于并行機(jī)而言,GPU提供的并行性在十分廉價(jià)的基礎(chǔ)上,為很多適合于在GPU上進(jìn)行處理的應(yīng)用提供了一個(gè)很好的并行方案。
(2)高密集的運(yùn)算。GPU通常具有128位或256位的內(nèi)存位寬,因此GPU在計(jì)算密集型應(yīng)用方面具有很好的性能。
(3)超長(zhǎng)圖形流水線。GPU超長(zhǎng)圖形流水線的設(shè)計(jì)以吞吐量的最大化為目標(biāo)(如NVIDIA GeForce 3流水線有800個(gè)階段),因此GPU作為數(shù)據(jù)流并行處理機(jī),在對(duì)大規(guī)模的數(shù)據(jù)流并行處理方面具有明顯的優(yōu)勢(shì)。
如圖2所示,CPU中的大部分晶體管主要用于構(gòu)建控制電路(如分支預(yù)測(cè)等)和Cache,只有少部分的晶體管來(lái)完成實(shí)際的運(yùn)算工作。GPU與CPU的設(shè)計(jì)目標(biāo)不同,其控制電路相對(duì)簡(jiǎn)單,而且對(duì)Cache的需求較小,所以大部分晶體管可以組成各類專用電路和多條流水線,使GPU的計(jì)算速度有了突破性的飛躍,擁有驚人的處理浮點(diǎn)運(yùn)算的能力。 #p#page_title#e#
圖 2 GPU與CPU內(nèi)部結(jié)構(gòu)比較
正是由于GPU在并行處理和計(jì)算密集型問(wèn)題求解等方面所具有的諸多優(yōu)勢(shì),GPU已成為目前普通PC機(jī)所擁有的強(qiáng)大、高效的計(jì)算資源。從系統(tǒng)架構(gòu)上看, GPU是針對(duì)向量計(jì)算進(jìn)行了優(yōu)化的高度并行的數(shù)據(jù)流處理機(jī)。這種以數(shù)據(jù)流作為處理單元的處理機(jī),在對(duì)數(shù)據(jù)流的處理上可以獲得很高的效率。根據(jù)NVIDIA 公司開(kāi)發(fā)的GPU工具包CUDA(Compute Unified Device Architecture)的測(cè)試結(jié)果顯示,利用GPU實(shí)現(xiàn)FFT、BLAS、排序及線性方程組求解等科學(xué)計(jì)算,與單純依靠CPU實(shí)現(xiàn)的算法相比,平均性能提高了近20倍[7]。
由此可見(jiàn),GPU的發(fā)展速度(包括集成度、計(jì)算密集型問(wèn)題的處理能力等)已遠(yuǎn)遠(yuǎn)超過(guò)通用處理器,特別是隨著可編程能力、并行處理能力和應(yīng)用范圍方面得到不斷提升和擴(kuò)展,使得GPU已成為當(dāng)前計(jì)算機(jī)系統(tǒng)中具備高性能處理能力的部件。因此,充分利用現(xiàn)有計(jì)算資源,發(fā)揮GPU的高性能計(jì)算能力,在GPU與CPU 的協(xié)作模式、GPU通用計(jì)算的計(jì)算模式以及性能優(yōu)化等方面進(jìn)行深入研究,將對(duì)進(jìn)一步拓展目前高性能計(jì)算體系結(jié)構(gòu),為科學(xué)計(jì)算和工程應(yīng)用提供新型的計(jì)算資源具有重要意義。
1.2 國(guó)內(nèi)外研究現(xiàn)狀
目前,以NVIDIA和ATI為代表的GPU產(chǎn)品正處于快速發(fā)展的過(guò)程當(dāng)中,每隔半年左右新一代的產(chǎn)品便會(huì)誕生。GPU在增加更多功能的同時(shí),也提供了更強(qiáng)的處理能力。隨著科學(xué)計(jì)算可視化、醫(yī)療圖像、虛擬現(xiàn)實(shí)等學(xué)科的發(fā)展和娛樂(lè)產(chǎn)業(yè)的推動(dòng),需要高性能計(jì)算的一些領(lǐng)域和計(jì)算機(jī)圖形領(lǐng)域越來(lái)越緊密的結(jié)合起來(lái)。 2003年,世界圖形學(xué)硬件年會(huì)(SIGGRAPH/EUROGRAPHICS Graphics Hardware 2003)迅速將其重點(diǎn)轉(zhuǎn)向了計(jì)算機(jī)圖形處理器的非圖形應(yīng)用。之后,IEEE、SIGGRAPH、SUPERCOMPUTING等國(guó)際會(huì)議每年都設(shè)立了 GPGPU相關(guān)專題的討論組。越來(lái)越多的科研機(jī)構(gòu)開(kāi)始利用GPU的處理能力進(jìn)行非圖形繪制方面的科學(xué)計(jì)算研究。
在基于GPU通用計(jì)算的應(yīng)用系統(tǒng)方面,主要包括幾何計(jì)算、碰撞檢測(cè)、運(yùn)動(dòng)規(guī)劃、代數(shù)運(yùn)算、優(yōu)化計(jì)算、偏微分方程、數(shù)值求解等。
在圖形處理器出現(xiàn)的早期,Larsen等人在2001年利用多紋理技術(shù)實(shí)現(xiàn)了矩陣運(yùn)算操作。2001年后,隨著NVIDIA GeForce 3圖形處理器的出現(xiàn),頂點(diǎn)級(jí)可編程(Vertex Program)開(kāi)始普及。雖然這個(gè)時(shí)候片段級(jí)上還只是固定的幾條指令,但利用GPU進(jìn)行通用計(jì)算方面的應(yīng)用已經(jīng)全面展開(kāi)。Thompson等人在頂點(diǎn)級(jí)實(shí)現(xiàn)了一個(gè)代數(shù)運(yùn)算的框架系統(tǒng),其中包括矢量運(yùn)算和矩陣乘法等[8]。2002年,人們開(kāi)始利用Texture Shader結(jié)合Register Combiner來(lái)求解擴(kuò)散方程[9]。2003年片段級(jí)可編程(Fragment Program)出現(xiàn),大大加速了GPU通用計(jì)算方面的研究。很多研究人員開(kāi)始利用片段程序來(lái)求解一般代數(shù)問(wèn)題,包括流體模擬、物理現(xiàn)象仿真、有限差分方程組求解和優(yōu)化等[10]。
2004年,美國(guó)研制的GPU集群系統(tǒng)(The Stony Brook Visual Computing Cluster)[11]運(yùn)用于城市氣流模擬。另外,美國(guó)北卡羅萊那大學(xué)將GPU計(jì)算應(yīng)用于數(shù)據(jù)庫(kù)領(lǐng)域,利用GPU硬件對(duì)數(shù)據(jù)庫(kù)的關(guān)系查詢、合取選擇、聚集操作等進(jìn)行加速和優(yōu)化[2]。GPU 甚至被用來(lái)進(jìn)行聲音的合成運(yùn)算,以使CPU和APU(Audio Processing Unit)達(dá)到良好的均衡。同年,美國(guó)國(guó)防技術(shù)情報(bào)中心公開(kāi)發(fā)布了《GPU:未來(lái)高性能計(jì)算引擎》的科技報(bào)告,內(nèi)容包括對(duì)GPU通用計(jì)算應(yīng)用于高性能計(jì)算領(lǐng)域的發(fā)展展望和未來(lái)面臨的挑戰(zhàn)。
2005年10月NVIDIA和ATI公司相繼開(kāi)發(fā)基于GPGPU的物理計(jì)算API,使得GPU能夠利用浮點(diǎn)片段著色器單元處理包含大量并行操作的科學(xué)計(jì)算任務(wù)。
2006年,分布式計(jì)算項(xiàng)目Folding@Home在蛋白質(zhì)折疊的研究中充分發(fā)揮了GPU的高性能優(yōu)勢(shì)。該項(xiàng)目利用ATI GPU獲得了每臺(tái)計(jì)算機(jī)100GFLOPS的高性能[12]。另外,ATI公司在SIGGRAPH 2006上做了數(shù)據(jù)并行虛擬機(jī)(Data Parallel Virtual Machine)的演示,并使用了專門為GPU通用計(jì)算而設(shè)計(jì)的“Close to the Metal”API。通過(guò)在一個(gè)顯卡上使用多個(gè)GPU來(lái)形成數(shù)據(jù)流處理集群,通過(guò)強(qiáng)大的數(shù)據(jù)并行處理機(jī)的性能來(lái)解決GPU并行數(shù)據(jù)加速的問(wèn)題。 #p#page_title#e#
目前,國(guó)內(nèi)在GPU通用計(jì)算方面的研究也在一些科研機(jī)構(gòu)和院校逐步開(kāi)展起來(lái)。2004年,清華大學(xué)利用GPU的并行計(jì)算能力和數(shù)據(jù)流處理能力,在GPU上實(shí)現(xiàn)了一種新的輻射度計(jì)算方法,并實(shí)現(xiàn)了Jacobi迭代法快速求解線性方程組。另外,中科院計(jì)算技術(shù)研究所、華中科技大學(xué)、西南交通大學(xué)等也相繼針對(duì)特定應(yīng)用在GPU上進(jìn)行了實(shí)驗(yàn)驗(yàn)證。
在GPU通用計(jì)算的軟件開(kāi)發(fā)環(huán)境方面,OpenGL作為事實(shí)上的工業(yè)標(biāo)準(zhǔn)已為學(xué)術(shù)界和工業(yè)界所普遍接受,其中包括了GPU廠商以及OpenGL架構(gòu)委員會(huì)(ARB)所擴(kuò)充的函數(shù),以此來(lái)實(shí)現(xiàn)GPU廠商提供的新功能[14]。DirectX則根據(jù)GPU新產(chǎn)品功能的擴(kuò)充與進(jìn)展及時(shí)的發(fā)布新的版本。二者在實(shí)現(xiàn) GPU通用計(jì)算方面都需要使用者非常熟悉GPU圖形繪制的原理和硬件結(jié)構(gòu)等許多具體問(wèn)題。
高級(jí)繪制語(yǔ)言和實(shí)時(shí)繪制語(yǔ)言的出現(xiàn),如NVIDIA的Cg[14],OpenGL Shading Language,High Level Shading Language[21]等,為編程人員提供了直接基于圖形API(OpenGL或DirectX)編程的較為方便和高層次的工具。另外,隨著 Brook、SH等通用繪制語(yǔ)言的出現(xiàn),允許開(kāi)發(fā)人員在不考慮圖形繪制和硬件結(jié)構(gòu)的情況下,充分利用GPU的可編程性編寫面向通用計(jì)算的繪制程序。
隨著時(shí)間的推移,GPU通用計(jì)算的應(yīng)用也將越來(lái)越廣泛。然而,目前在軟硬件方面依然存在很多需要克服的問(wèn)題。首先,GPU是面向圖形的,在硬件結(jié)構(gòu)、指令系統(tǒng)、處理流程等方面和真正用于通用計(jì)算的CPU有本質(zhì)差別;其次,在GPU計(jì)算的軟件環(huán)境方面需要進(jìn)行更多的研究和探索,如制定統(tǒng)一的抽象界面、編程模型、開(kāi)發(fā)環(huán)境和工具軟件等[2];另外,GPU通用計(jì)算需要在計(jì)算模式上提出一種能夠很好的適應(yīng)于問(wèn)題求解的方法。
目前,GPU通用計(jì)算在研究領(lǐng)域通過(guò)IEEE、SIGGRAPH、SUPERCOMPUTING等國(guó)際會(huì)議以及GPGPU、Folding@Home等組織的全力支持,已經(jīng)初現(xiàn)向主流計(jì)算的趨勢(shì)發(fā)展。另外在商業(yè)化方面,NVIDIA、AMD等公司也計(jì)劃推出包括GPGPU開(kāi)發(fā)工具、全新的流處理硬件以及 GPU+CPU的雙核體系結(jié)構(gòu)等一系列新型的高性能計(jì)算環(huán)境,同時(shí)也產(chǎn)生了一些用于信息處理等領(lǐng)域的商業(yè)化GPGPU應(yīng)用。這些都為GPU通用計(jì)算提供了良好的平臺(tái)和發(fā)展空間。但GPU通用計(jì)算不論是在硬件上,還是在軟件上仍然存在很多問(wèn)題,從研究到實(shí)用還要很長(zhǎng)的路要走。
在后續(xù)的研究工作中,將對(duì)本文仍然未解決的一些問(wèn)題進(jìn)行研究,包括針對(duì)GPU—CPU協(xié)作模式的精確模型建立和完整的性能描述,GPU流計(jì)算模式對(duì)GPU 通用計(jì)算的具體編程方法上的框架模型,以及對(duì)GPU流計(jì)算模式的性能建立模型,綜合各種因素對(duì)性能的影響,對(duì)GPU流計(jì)算模型進(jìn)行完整的性能評(píng)估和測(cè)試等。除此以外,后續(xù)的研究工作將圍繞以下幾個(gè)關(guān)鍵問(wèn)題進(jìn)行深入研究。
(1)與現(xiàn)實(shí)應(yīng)用緊密結(jié)合,充分利用GPU通用計(jì)算的優(yōu)勢(shì),進(jìn)一步拓展GPU通用計(jì)算的應(yīng)用范圍。通過(guò)對(duì)具體問(wèn)題的加速和優(yōu)化實(shí)現(xiàn),努力使GPU通用計(jì)算有更好的實(shí)用性,能夠?yàn)楦嗟娜怂邮芎驼J(rèn)可。
(2)深入研究GPU-CPU協(xié)作計(jì)算模式和多GPU體系結(jié)構(gòu),進(jìn)一步利用GPU與CPU良好的協(xié)作性構(gòu)建具有高性能的計(jì)算環(huán)境,最大程度上發(fā)揮專用處理器和通用處理器各自的優(yōu)勢(shì)。
(3)在基于GPU通用計(jì)算的算法構(gòu)造、優(yōu)化、實(shí)現(xiàn)等方面為建立良好的數(shù)據(jù)結(jié)構(gòu)組織和優(yōu)化策略。
(4)針對(duì)GPU通用計(jì)算的開(kāi)發(fā)工具、調(diào)試器、優(yōu)化策略進(jìn)行深入的研究,為GPU通用計(jì)算設(shè)計(jì)并實(shí)現(xiàn)一個(gè)界面友好、可擴(kuò)展性強(qiáng)的開(kāi)發(fā)環(huán)境。
隨著當(dāng)前計(jì)算機(jī)性能的不斷提高,應(yīng)用范圍越來(lái)越廣泛,不同的計(jì)算任務(wù)和計(jì)算需求都在快速增長(zhǎng),這就決定了處理器朝著通用化和專用化兩個(gè)方向飛速發(fā)展。一方面,以CPU為代表的通用處理器是現(xiàn)代計(jì)算機(jī)的核心部件,經(jīng)過(guò)多次器件換代的變遷,不僅集成度大大提高,性能和功能也大為改善,除了負(fù)責(zé)解釋、執(zhí)行指令和完成各種算術(shù)邏輯運(yùn)算外,還控制并協(xié)調(diào)計(jì)算機(jī)各部分的執(zhí)行。另一方面,處理器在特定領(lǐng)域應(yīng)用的專用化程度也越來(lái)越高,例如在視頻、圖像和音頻處理等領(lǐng)域,都出現(xiàn)了相應(yīng)的專用處理器(如VPU、GPU、APU等)。在針對(duì)特定應(yīng)用方面與通用處理器相比,專用處理器能夠更加高效的滿足特定的計(jì)算任務(wù)和需求。
近年來(lái),計(jì)算機(jī)圖形處理器(GPU,Graphics Processing Unit)正在以大大超過(guò)摩爾定律的速度高速發(fā)展,極大的提高了計(jì)算機(jī)圖形處理的速度和質(zhì)量,不但促進(jìn)了圖像處理、虛擬現(xiàn)實(shí)、計(jì)算機(jī)仿真等相關(guān)應(yīng)用領(lǐng)域的快速發(fā)展,同時(shí)也為人們利用GPU進(jìn)行圖形處理以外的通用計(jì)算提供了良好的運(yùn)行平臺(tái)[1]。
GPU應(yīng)用領(lǐng)域的拓寬與其硬件發(fā)展有著極大關(guān)系。GPU自1999年首先由NVIDIA公司提出后,就其發(fā)展的速度而言,是CPU更新速度的三倍。從 1993年開(kāi)始,GPU的性能以每年2.8倍的速度增長(zhǎng)。目前,圖形處理器已經(jīng)經(jīng)歷了五代發(fā)展,平均每半年就有新一代的GPU問(wèn)世。
2004年,NVIDIA GeForce 6800 Ultra處理器峰值速度可達(dá)40GFLOPS,對(duì)比Intel Pentium 4 3.0GHz,采用SSE2指令集也只能達(dá)到6 GFLOPS[3]。NVIDIA最新發(fā)布的GeForce 8800圖形處理器集成了6.8億個(gè)晶體管,擁有128個(gè)流處理單元,其峰值運(yùn)算能力超過(guò)340GFLOPS,而Intel最新的Pentium4 Core 2 Extreme X6800只有46.88GFLOPS。
圖 1 GPU與CPU的發(fā)展與性能比較
圖形處理器技術(shù)的迅速發(fā)展帶來(lái)的并不只是速度的提高,還產(chǎn)生了很多全新的圖形硬件技術(shù),使GPU具有流處理、高密集并行運(yùn)算、可編程流水線等特性,從而極大的拓展了GPU的處理能力和應(yīng)用范圍[2]。
正是由于GPU具有高效的并行性和靈活的可編程性等特點(diǎn),越來(lái)越多的研究人員和商業(yè)組織開(kāi)始利用GPU完成一些非圖形繪制方面的計(jì)算,并開(kāi)創(chuàng)了一個(gè)新的研究領(lǐng)域:基于GPU的通用計(jì)算(GPGPU,General-Purpose computation on GPU),其主要研究?jī)?nèi)容是如何利用GPU在圖形處理之外的其他領(lǐng)域進(jìn)行更為廣泛的科學(xué)計(jì)算[4]。目前已成功應(yīng)用于代數(shù)計(jì)算、流體模擬、數(shù)據(jù)庫(kù)應(yīng)用、頻譜分析等非圖形應(yīng)用領(lǐng)域[5],甚至包括智能信息處理系統(tǒng)和數(shù)據(jù)挖掘工具等商業(yè)化應(yīng)用。同時(shí),也產(chǎn)生了一些針對(duì)GPU開(kāi)發(fā)的通用計(jì)算工具包,能夠基于 GPU平臺(tái)對(duì)FFT、BLAS、排序及線性方程組求解等科學(xué)計(jì)算進(jìn)行優(yōu)化實(shí)現(xiàn)。
基于GPU的通用計(jì)算已成為近幾年人們關(guān)注的一個(gè)研究熱點(diǎn)。將GPU用于通用計(jì)算的主要目的是為了加速計(jì)算,加速的動(dòng)力來(lái)自GPU在高性能計(jì)算方面所具有的優(yōu)勢(shì):
(1)高效的并行性。這一功能主要是通過(guò)GPU多條繪制流水線的并行計(jì)算來(lái)體現(xiàn)的。在目前主流的GPU中,配置多達(dá)16個(gè)片段處理流水線,6個(gè)頂點(diǎn)處理流水線。多條流水線可以在單一控制部件的集中控制下運(yùn)行,也可以獨(dú)立運(yùn)行。GPU的頂點(diǎn)處理流水線使用MIMD方式控制,片段處理流水線使用SIMD結(jié)構(gòu)。相對(duì)于并行機(jī)而言,GPU提供的并行性在十分廉價(jià)的基礎(chǔ)上,為很多適合于在GPU上進(jìn)行處理的應(yīng)用提供了一個(gè)很好的并行方案。
(2)高密集的運(yùn)算。GPU通常具有128位或256位的內(nèi)存位寬,因此GPU在計(jì)算密集型應(yīng)用方面具有很好的性能。
(3)超長(zhǎng)圖形流水線。GPU超長(zhǎng)圖形流水線的設(shè)計(jì)以吞吐量的最大化為目標(biāo)(如NVIDIA GeForce 3流水線有800個(gè)階段),因此GPU作為數(shù)據(jù)流并行處理機(jī),在對(duì)大規(guī)模的數(shù)據(jù)流并行處理方面具有明顯的優(yōu)勢(shì)。
如圖2所示,CPU中的大部分晶體管主要用于構(gòu)建控制電路(如分支預(yù)測(cè)等)和Cache,只有少部分的晶體管來(lái)完成實(shí)際的運(yùn)算工作。GPU與CPU的設(shè)計(jì)目標(biāo)不同,其控制電路相對(duì)簡(jiǎn)單,而且對(duì)Cache的需求較小,所以大部分晶體管可以組成各類專用電路和多條流水線,使GPU的計(jì)算速度有了突破性的飛躍,擁有驚人的處理浮點(diǎn)運(yùn)算的能力。 #p#page_title#e#
圖 2 GPU與CPU內(nèi)部結(jié)構(gòu)比較
正是由于GPU在并行處理和計(jì)算密集型問(wèn)題求解等方面所具有的諸多優(yōu)勢(shì),GPU已成為目前普通PC機(jī)所擁有的強(qiáng)大、高效的計(jì)算資源。從系統(tǒng)架構(gòu)上看, GPU是針對(duì)向量計(jì)算進(jìn)行了優(yōu)化的高度并行的數(shù)據(jù)流處理機(jī)。這種以數(shù)據(jù)流作為處理單元的處理機(jī),在對(duì)數(shù)據(jù)流的處理上可以獲得很高的效率。根據(jù)NVIDIA 公司開(kāi)發(fā)的GPU工具包CUDA(Compute Unified Device Architecture)的測(cè)試結(jié)果顯示,利用GPU實(shí)現(xiàn)FFT、BLAS、排序及線性方程組求解等科學(xué)計(jì)算,與單純依靠CPU實(shí)現(xiàn)的算法相比,平均性能提高了近20倍[7]。
由此可見(jiàn),GPU的發(fā)展速度(包括集成度、計(jì)算密集型問(wèn)題的處理能力等)已遠(yuǎn)遠(yuǎn)超過(guò)通用處理器,特別是隨著可編程能力、并行處理能力和應(yīng)用范圍方面得到不斷提升和擴(kuò)展,使得GPU已成為當(dāng)前計(jì)算機(jī)系統(tǒng)中具備高性能處理能力的部件。因此,充分利用現(xiàn)有計(jì)算資源,發(fā)揮GPU的高性能計(jì)算能力,在GPU與CPU 的協(xié)作模式、GPU通用計(jì)算的計(jì)算模式以及性能優(yōu)化等方面進(jìn)行深入研究,將對(duì)進(jìn)一步拓展目前高性能計(jì)算體系結(jié)構(gòu),為科學(xué)計(jì)算和工程應(yīng)用提供新型的計(jì)算資源具有重要意義。
1.2 國(guó)內(nèi)外研究現(xiàn)狀
目前,以NVIDIA和ATI為代表的GPU產(chǎn)品正處于快速發(fā)展的過(guò)程當(dāng)中,每隔半年左右新一代的產(chǎn)品便會(huì)誕生。GPU在增加更多功能的同時(shí),也提供了更強(qiáng)的處理能力。隨著科學(xué)計(jì)算可視化、醫(yī)療圖像、虛擬現(xiàn)實(shí)等學(xué)科的發(fā)展和娛樂(lè)產(chǎn)業(yè)的推動(dòng),需要高性能計(jì)算的一些領(lǐng)域和計(jì)算機(jī)圖形領(lǐng)域越來(lái)越緊密的結(jié)合起來(lái)。 2003年,世界圖形學(xué)硬件年會(huì)(SIGGRAPH/EUROGRAPHICS Graphics Hardware 2003)迅速將其重點(diǎn)轉(zhuǎn)向了計(jì)算機(jī)圖形處理器的非圖形應(yīng)用。之后,IEEE、SIGGRAPH、SUPERCOMPUTING等國(guó)際會(huì)議每年都設(shè)立了 GPGPU相關(guān)專題的討論組。越來(lái)越多的科研機(jī)構(gòu)開(kāi)始利用GPU的處理能力進(jìn)行非圖形繪制方面的科學(xué)計(jì)算研究。
在基于GPU通用計(jì)算的應(yīng)用系統(tǒng)方面,主要包括幾何計(jì)算、碰撞檢測(cè)、運(yùn)動(dòng)規(guī)劃、代數(shù)運(yùn)算、優(yōu)化計(jì)算、偏微分方程、數(shù)值求解等。
在圖形處理器出現(xiàn)的早期,Larsen等人在2001年利用多紋理技術(shù)實(shí)現(xiàn)了矩陣運(yùn)算操作。2001年后,隨著NVIDIA GeForce 3圖形處理器的出現(xiàn),頂點(diǎn)級(jí)可編程(Vertex Program)開(kāi)始普及。雖然這個(gè)時(shí)候片段級(jí)上還只是固定的幾條指令,但利用GPU進(jìn)行通用計(jì)算方面的應(yīng)用已經(jīng)全面展開(kāi)。Thompson等人在頂點(diǎn)級(jí)實(shí)現(xiàn)了一個(gè)代數(shù)運(yùn)算的框架系統(tǒng),其中包括矢量運(yùn)算和矩陣乘法等[8]。2002年,人們開(kāi)始利用Texture Shader結(jié)合Register Combiner來(lái)求解擴(kuò)散方程[9]。2003年片段級(jí)可編程(Fragment Program)出現(xiàn),大大加速了GPU通用計(jì)算方面的研究。很多研究人員開(kāi)始利用片段程序來(lái)求解一般代數(shù)問(wèn)題,包括流體模擬、物理現(xiàn)象仿真、有限差分方程組求解和優(yōu)化等[10]。
2004年,美國(guó)研制的GPU集群系統(tǒng)(The Stony Brook Visual Computing Cluster)[11]運(yùn)用于城市氣流模擬。另外,美國(guó)北卡羅萊那大學(xué)將GPU計(jì)算應(yīng)用于數(shù)據(jù)庫(kù)領(lǐng)域,利用GPU硬件對(duì)數(shù)據(jù)庫(kù)的關(guān)系查詢、合取選擇、聚集操作等進(jìn)行加速和優(yōu)化[2]。GPU 甚至被用來(lái)進(jìn)行聲音的合成運(yùn)算,以使CPU和APU(Audio Processing Unit)達(dá)到良好的均衡。同年,美國(guó)國(guó)防技術(shù)情報(bào)中心公開(kāi)發(fā)布了《GPU:未來(lái)高性能計(jì)算引擎》的科技報(bào)告,內(nèi)容包括對(duì)GPU通用計(jì)算應(yīng)用于高性能計(jì)算領(lǐng)域的發(fā)展展望和未來(lái)面臨的挑戰(zhàn)。
2005年10月NVIDIA和ATI公司相繼開(kāi)發(fā)基于GPGPU的物理計(jì)算API,使得GPU能夠利用浮點(diǎn)片段著色器單元處理包含大量并行操作的科學(xué)計(jì)算任務(wù)。
2006年,分布式計(jì)算項(xiàng)目Folding@Home在蛋白質(zhì)折疊的研究中充分發(fā)揮了GPU的高性能優(yōu)勢(shì)。該項(xiàng)目利用ATI GPU獲得了每臺(tái)計(jì)算機(jī)100GFLOPS的高性能[12]。另外,ATI公司在SIGGRAPH 2006上做了數(shù)據(jù)并行虛擬機(jī)(Data Parallel Virtual Machine)的演示,并使用了專門為GPU通用計(jì)算而設(shè)計(jì)的“Close to the Metal”API。通過(guò)在一個(gè)顯卡上使用多個(gè)GPU來(lái)形成數(shù)據(jù)流處理集群,通過(guò)強(qiáng)大的數(shù)據(jù)并行處理機(jī)的性能來(lái)解決GPU并行數(shù)據(jù)加速的問(wèn)題。 #p#page_title#e#
目前,國(guó)內(nèi)在GPU通用計(jì)算方面的研究也在一些科研機(jī)構(gòu)和院校逐步開(kāi)展起來(lái)。2004年,清華大學(xué)利用GPU的并行計(jì)算能力和數(shù)據(jù)流處理能力,在GPU上實(shí)現(xiàn)了一種新的輻射度計(jì)算方法,并實(shí)現(xiàn)了Jacobi迭代法快速求解線性方程組。另外,中科院計(jì)算技術(shù)研究所、華中科技大學(xué)、西南交通大學(xué)等也相繼針對(duì)特定應(yīng)用在GPU上進(jìn)行了實(shí)驗(yàn)驗(yàn)證。
在GPU通用計(jì)算的軟件開(kāi)發(fā)環(huán)境方面,OpenGL作為事實(shí)上的工業(yè)標(biāo)準(zhǔn)已為學(xué)術(shù)界和工業(yè)界所普遍接受,其中包括了GPU廠商以及OpenGL架構(gòu)委員會(huì)(ARB)所擴(kuò)充的函數(shù),以此來(lái)實(shí)現(xiàn)GPU廠商提供的新功能[14]。DirectX則根據(jù)GPU新產(chǎn)品功能的擴(kuò)充與進(jìn)展及時(shí)的發(fā)布新的版本。二者在實(shí)現(xiàn) GPU通用計(jì)算方面都需要使用者非常熟悉GPU圖形繪制的原理和硬件結(jié)構(gòu)等許多具體問(wèn)題。
高級(jí)繪制語(yǔ)言和實(shí)時(shí)繪制語(yǔ)言的出現(xiàn),如NVIDIA的Cg[14],OpenGL Shading Language,High Level Shading Language[21]等,為編程人員提供了直接基于圖形API(OpenGL或DirectX)編程的較為方便和高層次的工具。另外,隨著 Brook、SH等通用繪制語(yǔ)言的出現(xiàn),允許開(kāi)發(fā)人員在不考慮圖形繪制和硬件結(jié)構(gòu)的情況下,充分利用GPU的可編程性編寫面向通用計(jì)算的繪制程序。
隨著時(shí)間的推移,GPU通用計(jì)算的應(yīng)用也將越來(lái)越廣泛。然而,目前在軟硬件方面依然存在很多需要克服的問(wèn)題。首先,GPU是面向圖形的,在硬件結(jié)構(gòu)、指令系統(tǒng)、處理流程等方面和真正用于通用計(jì)算的CPU有本質(zhì)差別;其次,在GPU計(jì)算的軟件環(huán)境方面需要進(jìn)行更多的研究和探索,如制定統(tǒng)一的抽象界面、編程模型、開(kāi)發(fā)環(huán)境和工具軟件等[2];另外,GPU通用計(jì)算需要在計(jì)算模式上提出一種能夠很好的適應(yīng)于問(wèn)題求解的方法。
目前,GPU通用計(jì)算在研究領(lǐng)域通過(guò)IEEE、SIGGRAPH、SUPERCOMPUTING等國(guó)際會(huì)議以及GPGPU、Folding@Home等組織的全力支持,已經(jīng)初現(xiàn)向主流計(jì)算的趨勢(shì)發(fā)展。另外在商業(yè)化方面,NVIDIA、AMD等公司也計(jì)劃推出包括GPGPU開(kāi)發(fā)工具、全新的流處理硬件以及 GPU+CPU的雙核體系結(jié)構(gòu)等一系列新型的高性能計(jì)算環(huán)境,同時(shí)也產(chǎn)生了一些用于信息處理等領(lǐng)域的商業(yè)化GPGPU應(yīng)用。這些都為GPU通用計(jì)算提供了良好的平臺(tái)和發(fā)展空間。但GPU通用計(jì)算不論是在硬件上,還是在軟件上仍然存在很多問(wèn)題,從研究到實(shí)用還要很長(zhǎng)的路要走。
在后續(xù)的研究工作中,將對(duì)本文仍然未解決的一些問(wèn)題進(jìn)行研究,包括針對(duì)GPU—CPU協(xié)作模式的精確模型建立和完整的性能描述,GPU流計(jì)算模式對(duì)GPU 通用計(jì)算的具體編程方法上的框架模型,以及對(duì)GPU流計(jì)算模式的性能建立模型,綜合各種因素對(duì)性能的影響,對(duì)GPU流計(jì)算模型進(jìn)行完整的性能評(píng)估和測(cè)試等。除此以外,后續(xù)的研究工作將圍繞以下幾個(gè)關(guān)鍵問(wèn)題進(jìn)行深入研究。
(1)與現(xiàn)實(shí)應(yīng)用緊密結(jié)合,充分利用GPU通用計(jì)算的優(yōu)勢(shì),進(jìn)一步拓展GPU通用計(jì)算的應(yīng)用范圍。通過(guò)對(duì)具體問(wèn)題的加速和優(yōu)化實(shí)現(xiàn),努力使GPU通用計(jì)算有更好的實(shí)用性,能夠?yàn)楦嗟娜怂邮芎驼J(rèn)可。
(2)深入研究GPU-CPU協(xié)作計(jì)算模式和多GPU體系結(jié)構(gòu),進(jìn)一步利用GPU與CPU良好的協(xié)作性構(gòu)建具有高性能的計(jì)算環(huán)境,最大程度上發(fā)揮專用處理器和通用處理器各自的優(yōu)勢(shì)。
(3)在基于GPU通用計(jì)算的算法構(gòu)造、優(yōu)化、實(shí)現(xiàn)等方面為建立良好的數(shù)據(jù)結(jié)構(gòu)組織和優(yōu)化策略。
(4)針對(duì)GPU通用計(jì)算的開(kāi)發(fā)工具、調(diào)試器、優(yōu)化策略進(jìn)行深入的研究,為GPU通用計(jì)算設(shè)計(jì)并實(shí)現(xiàn)一個(gè)界面友好、可擴(kuò)展性強(qiáng)的開(kāi)發(fā)環(huán)境。