摘 要:與傳統(tǒng)的單純以CPU作為計算部位的同構(gòu)計算系統(tǒng)相比,CPU+GPU異構(gòu)計算模式程序優(yōu)勢更加明顯,本文主要研究CPU+GPU異構(gòu)計算模式程序開發(fā)中編程方法,總結(jié)各種方法的優(yōu)缺點(diǎn),希望能為相關(guān)人員帶來一些幫助。
關(guān)鍵詞:異構(gòu)計算; 編程; CPU; GPU
中圖分類號:TP391.41 文獻(xiàn)標(biāo)識碼:A 文章編號:1006-3315(2014)10-149-001
CPU+GPU協(xié)同計算是異構(gòu)計算的一種,在處理大量的數(shù)據(jù)中,僅僅使用CPU太過繁瑣,異構(gòu)計算能夠極大的提高系統(tǒng)速度,目前CPU+GPU是國內(nèi)外高性能計算領(lǐng)域的熱點(diǎn)研究話題,目前在程序開發(fā)中存在不少的難點(diǎn),本文主要研究CPU+GPU異構(gòu)計算模式開發(fā)中編程方法。
一、CPU+GPU異構(gòu)計算編程方法概述
目前異構(gòu)計算使用最多的是利用GPU來加速,基于CPU+GPU的異構(gòu)計算系統(tǒng)是指計算機(jī)系統(tǒng)中配合使用CPU+GPU共同承擔(dān)計算任務(wù),優(yōu)勢非常明顯。采用GPU能夠更加快速完成任務(wù),如在浮點(diǎn)運(yùn)算功能中,GPU的能力要遠(yuǎn)遠(yuǎn)高于CPU。GPU的應(yīng)用領(lǐng)域從圖形處理逐漸向通用計算機(jī)發(fā)展。當(dāng)前單純采用CPU來搭建計算機(jī)系統(tǒng)遇到了功耗、擴(kuò)展性能等問題,而采用CPU+GPU能夠很好的解決這些問題。
雖然采用CPU+GPU的異構(gòu)計算有很多的優(yōu)點(diǎn),但是在實(shí)際的應(yīng)用中,異構(gòu)計算面對著很多的問題需要解決。在這些問題中,表現(xiàn)最為明顯的是程序開發(fā)遇到的問題,主要是因?yàn)镚PU在設(shè)計中最開始是用于專業(yè)圖形處理領(lǐng)域,而不是計算領(lǐng)域中,這就導(dǎo)致了GPU本身的體系框架與計算機(jī)的硬件不太實(shí)用,出現(xiàn)數(shù)據(jù)傳輸限制等問題,因此在使用中必須專門考慮這些問題。另外目前關(guān)于GPU軟件開發(fā)方面很多技術(shù)還不夠成熟,雖然目前的一些計算機(jī)統(tǒng)一設(shè)備架構(gòu)降低了開發(fā)難度,但是在處理以往應(yīng)用中的大量遺留代碼方面仍然是一個問題。目前關(guān)于異構(gòu)計算的標(biāo)準(zhǔn)開發(fā)計算語言還不夠成熟,CPU+GPU異構(gòu)計算系統(tǒng)應(yīng)用還存在不少的問題。
二、CPU+GPU異構(gòu)計算程序開發(fā)方法
目前在CPU+GPU異構(gòu)計算程序開發(fā)計算中,程序開發(fā)方法主要包括低層次抽象的輕量級GPU編程工具開發(fā)方法、高層次抽象的函數(shù)庫等方法,下文將會詳細(xì)講述這幾個開發(fā)方法的優(yōu)缺點(diǎn)。
1.底層圖形API的異構(gòu)計算程序開發(fā)方法
這種方法是最早采用GPU的一種主要方法,目前仍然在使用,這種開發(fā)方法要求開法陣非常熟悉底層圖形API,在編程中采用的語言一般為圖形庫著色語言。早期的GPU產(chǎn)品基本都是采用分離渲染架構(gòu),可編程能力非常差。
自21世紀(jì)開始,隨著GeForce3的出現(xiàn),頂點(diǎn)可編程得到普及,這種編程逐漸使用在異構(gòu)計算程序開發(fā)中,人們開始采用紋理著色+寄存器組合器的方法,然后采用像素級可編程性,通過底層圖形API提供可控制能力,最常見的圖形API包括OpenGL和DirectX,其中DirectX主要是作為微軟視窗來使用,OpenGL是被廣泛接受的一種。這種方法目前仍然在使用,在新的CPU產(chǎn)品上執(zhí)行效率會存在很大的不足。
2.采用低層次抽象的輕量級編程工具的異構(gòu)計算程序開發(fā)方法
CUPA在GPU中主要是作為數(shù)據(jù)并行計算設(shè)備的軟硬件體系,是一個完整的圖形處理器,提供一個硬件的直接訪問接口,保證GPU無需采用圖形API就能實(shí)現(xiàn)訪問,編程語言采用的是C語言,能夠提供計算指令開發(fā)能力,建立高效的密集數(shù)據(jù)計算方法,適合使用在CPU等類型架構(gòu)中。CUDA是一種開放標(biāo)準(zhǔn),能夠?yàn)镃PU和GPU提供異構(gòu)群進(jìn)行編程,不需要再采用映射到底層圖形API的方法,操作更加簡單。
3.高層次抽象的編譯器的異構(gòu)計算程序開發(fā)方法
這種方法是通過使用指示語句、編譯器自動生產(chǎn)GPU內(nèi)核程序的一種方式。GPU編譯器引進(jìn)一種語句來指示代碼在進(jìn)行執(zhí)行,所采用的HMPP處理語言是一種基于標(biāo)簽語法的語言程序,利用HMPP能夠保證軟硬件的獨(dú)立,同時具有CUDA和OpenCL代碼生成器,改進(jìn)硬件加速程序段。代碼生成器從原來的C程序提取并行化的部分,轉(zhuǎn)化為CUPA代碼,不需要重新編寫程序。針對采用少量專業(yè)領(lǐng)域算法的應(yīng)用程序,這是一種比較好的開發(fā)方法,影響性能的關(guān)鍵在于少量程序段,能夠獲得最大的加速效果,但是在使用中一般不適合使用在遺留代碼較多的場所。
除了以上幾種開發(fā)方法之外,還有基于高層抽象的函數(shù)庫的開發(fā)方法,提供廣泛使用快速極端離散相似的接口,不能直接取代,需要先進(jìn)行封裝后才能代替程序中的函數(shù),方便使用在簡單的矩陣計算中。管理多個GPU設(shè)備可以采用OpenMPa技術(shù),管理CPU+GPU異構(gòu)系統(tǒng)可以采用MPI或者是Charm++技術(shù)。
綜上所述,本文主要研究CPU+GPU異構(gòu)計算模式程序開發(fā)中編程方法,總結(jié)各種方法的優(yōu)缺點(diǎn),目前關(guān)于研究CPU+GPU異構(gòu)計算研究非??焖伲S著編程方法研究的不斷成熟,CPU+GPU異構(gòu)計算將會發(fā)揮出更大的作用。
參考文獻(xiàn):
[1]王偉,郭紹忠,王磊,等.一種基于CPU-GPU異構(gòu)計算的混合編程模型[J]信息工程大學(xué)學(xué)報,2010,1(06):674-678.
[2]盧風(fēng)順,宋君強(qiáng),銀福康,等.CPU/GPU協(xié)同并行計算研究綜述[J]計算機(jī)科學(xué),2011,11(03):5-9+46.
[3]馮穎,袁慶華,沈健煒.基于CPU+GPU異構(gòu)計算的編程方法研究[J]通信技術(shù),2011,21(02):141-143