邱浩淼
(汕頭市超聲儀器研究所有限公司,廣東 汕頭515000)
CPU+GPU 異構(gòu)計(jì)算系統(tǒng)是一種新型的計(jì)算系統(tǒng),對(duì)傳統(tǒng)計(jì)算機(jī)系統(tǒng)進(jìn)行了設(shè)計(jì)與改善,計(jì)算任務(wù)由加速部件GPU 與CPU 共同完成。這種異構(gòu)方式具有顯著的運(yùn)用優(yōu)勢(shì),增強(qiáng)了GPU 的運(yùn)算能力,例如對(duì)追求浮點(diǎn)運(yùn)算性能的結(jié)構(gòu)中具有非常遠(yuǎn)超CPU 浮點(diǎn)運(yùn)算能力的GPU。同時(shí)GPU 在具有傳統(tǒng)圖像處理能力的同時(shí)也具有一定的計(jì)算能力。隨著目前技術(shù)的的不斷發(fā)展,GPU 運(yùn)用過(guò)程中在、編程模型、如硬件結(jié)構(gòu)等層面上存在則問(wèn)題也得到了不同程度的改善。隨著目前計(jì)算機(jī)系統(tǒng)的逐漸完善,在其功能與擴(kuò)展性等層面上也出現(xiàn)了一些問(wèn)題,GPU 加速部件的運(yùn)用能夠?qū)Υ擞行Ы鉀Q[1]。
圖1 GPU 計(jì)算模型
CPU+GPU 異構(gòu)計(jì)算在目前多項(xiàng)領(lǐng)域中均得到快速發(fā)展,但是由于技術(shù)以及實(shí)際運(yùn)用等多種層面的制約,在具體的計(jì)算過(guò)程中依然存在著一些不足之處。程序開(kāi)發(fā)難度較大。 GPU的設(shè)計(jì)初衷是處于圖形,因此將其進(jìn)行通用計(jì)算層面上存在一定的限制,硬件建設(shè)性不足,重點(diǎn)表現(xiàn)為雙精度性能有限,數(shù)據(jù)校驗(yàn)機(jī)制建設(shè)不足,數(shù)據(jù)傳輸有限。目前國(guó)內(nèi)在GPU 軟件開(kāi)發(fā)編程模型與方式依然發(fā)展不夠成熟,設(shè)備架構(gòu)(CUDA)技術(shù)的開(kāi)發(fā)具有重要意義,但是在運(yùn)用過(guò)程中需要考慮到CPU 模式中長(zhǎng)久存在的X86 編程習(xí)慣。目前針對(duì)異構(gòu)計(jì)算中標(biāo)準(zhǔn)開(kāi)放計(jì)算語(yǔ)言(OpenCL)的運(yùn)用時(shí)間較短,尚沒(méi)有形成統(tǒng)一開(kāi)放的運(yùn)用體系[2]。
這一開(kāi)發(fā)方式運(yùn)用較早,在目前CPU+GPU 異構(gòu)計(jì)算方式中依然適用,運(yùn)用過(guò)程中要求對(duì)GPU 硬件底層圖形API 做到靈活運(yùn)用,將其中的程序與圖形處理進(jìn)行一一對(duì)應(yīng)。在編程處理過(guò)程中一般采用開(kāi)發(fā)圖形庫(kù)著色語(yǔ)言(GLSL)等方式。GPU 產(chǎn)品在早期開(kāi)發(fā)過(guò)程中包括頂點(diǎn)處理、片段處理等圖形渲染過(guò)程,GPU 可編程能力較為有限。目前已經(jīng)出現(xiàn)并運(yùn)用了素級(jí)可編程性,在一般代數(shù)問(wèn)題的求解過(guò)程中可以采用像素程序解決,能夠?qū)τ邢薏罘址匠探M求解(PDEs)進(jìn)行有效解決。底層圖形API的運(yùn)用為程序員進(jìn)行技術(shù)處理與解決提供了新的方式與途徑。目前主要采用DirectX、OpenGL 的開(kāi)發(fā)圖形語(yǔ)言[3]。
圖2 CPU 指令執(zhí)行流程
CUDA 的運(yùn)用有效彌補(bǔ)了傳統(tǒng)方式中需要圖形API 來(lái)實(shí)現(xiàn)GPU 的訪問(wèn)的不足,是一種能夠直接訪問(wèn)硬件的軟硬件體系,建立的圖形處理器(GPGPU),能夠進(jìn)行通用目的的計(jì)算,是C語(yǔ)言中的編程語(yǔ)言,開(kāi)發(fā)了大量高性能的開(kāi)發(fā)語(yǔ)言。能夠在實(shí)現(xiàn)GPU 計(jì)算能力的同時(shí)建立一種密集數(shù)據(jù)計(jì)算方式。OpenCL能夠運(yùn)用在Cell 類(lèi)型架構(gòu)、GPU、CPU、DSP 等并行處理器之中,是一種基于通用計(jì)算方式開(kāi)發(fā)的運(yùn)用體系。能夠編程GPU、CPU及其他其他分離的計(jì)算設(shè)備組成的異構(gòu)群。OpenCL 運(yùn)用過(guò)程中可以不把算法映射到底層圖形API 之中,在開(kāi)發(fā)過(guò)程中同時(shí)包含了API 庫(kù)、開(kāi)發(fā)語(yǔ)言以運(yùn)行系統(tǒng)。
CUDA 快速傅里葉變換(CUFFT)運(yùn)用中設(shè)計(jì)了與標(biāo)準(zhǔn)C 語(yǔ)言程序庫(kù)(FFTW)相近的接口,通過(guò)GPU 建立了一個(gè)函數(shù)庫(kù),能夠?qū)崿F(xiàn)傅里葉變換。對(duì)FFTW 操作方式中數(shù)據(jù)存儲(chǔ)內(nèi)存之中進(jìn)行了有效互補(bǔ),CUDA 離散傅里葉變換(CUFFT)在存儲(chǔ)方式中具有顯存特征,在數(shù)據(jù)交換中要求在內(nèi)存與顯存之間進(jìn)行交換。CUDA 線性代數(shù)基礎(chǔ)子程序庫(kù)(CUBLAS)運(yùn)用中能夠進(jìn)行簡(jiǎn)單的矩陣計(jì)算,具有和BLAST 差不多的接口,屬于基本的矩陣與向量的運(yùn)算庫(kù)。運(yùn)用中可以將其運(yùn)用到線性代數(shù)程序包(LAPACK)等復(fù)雜函數(shù)包之中。CUBLAS 也為顯存的存儲(chǔ)方式,要求完成封裝之后才能替代線性代數(shù)子程序(BLAST)函數(shù)。
可以采用高層次抽象編譯器的處理方式,運(yùn)用復(fù)雜的代碼分析技術(shù)、指示語(yǔ)句、語(yǔ)言運(yùn)行時(shí)系統(tǒng)、算法模板等自動(dòng)生成GPU 內(nèi)核程序。例如PGI x86+GPU 編譯器,設(shè)計(jì)了一種新指示語(yǔ)句(PRAGMAS),目前得到了一定運(yùn)用。
目前很多開(kāi)發(fā)者是從底層圖形API 方法程序逐漸開(kāi)發(fā)設(shè)計(jì)而言,在遺留代碼的處理過(guò)程中依然可以運(yùn)用底層圖形API 處理方法,可以不用太大修改原來(lái)的運(yùn)用程序。但是在具體的運(yùn)用過(guò)程中存在著一些局限性。在運(yùn)用過(guò)程中要求程序員編寫(xiě)構(gòu)造圖形素元,并分配紋理存儲(chǔ)。因此要求程序員在開(kāi)發(fā)設(shè)計(jì)過(guò)程中詳細(xì)掌握GPU 硬件特點(diǎn)、限制因素以及圖形API 的運(yùn)用方式。同時(shí)在設(shè)計(jì)算法的表達(dá)上可以采用三角形、紋理等方式。這種方式在推行過(guò)程中在GPU 產(chǎn)品運(yùn)行代碼執(zhí)行效率難以達(dá)到理想效果,與新程序相比運(yùn)用優(yōu)勢(shì)不明顯。
針對(duì)這一方式,在處理過(guò)程中可以采用OpenCL、CUDA 等較低層次的編程工具,此時(shí)只有少量程序段會(huì)影響性能,只需將這些代碼自己編寫(xiě)即可。運(yùn)用過(guò)程中為了獲得良好的效果,要求積極優(yōu)化GPU 具體數(shù)據(jù)結(jié)構(gòu),但是對(duì)開(kāi)發(fā)者提出了較高的要求,要求其掌握一門(mén)新的編程語(yǔ)言。
執(zhí)行標(biāo)準(zhǔn)函數(shù)應(yīng)用程序運(yùn)用過(guò)程中,為了提升了其運(yùn)行效率,可以采用GPU 加速版本的標(biāo)準(zhǔn)函數(shù)庫(kù)的處理方式,運(yùn)行中要求降低GPU 和主機(jī)之間的通訊。但是在實(shí)際運(yùn)用中,函數(shù)庫(kù)的靈活性較為有限,有可能出現(xiàn)多余的存儲(chǔ)器訪問(wèn)。
針對(duì)需要專(zhuān)業(yè)領(lǐng)域算法應(yīng)用程序,開(kāi)發(fā)者難以自己編寫(xiě)程序,而標(biāo)準(zhǔn)函數(shù)庫(kù)中又難以找到對(duì)應(yīng)程序的情況,可以采用編譯器來(lái)解決。這一方式目前運(yùn)用時(shí)間較短,存在著一定的局限性。Portland Group 運(yùn)用中難以在嵌套循環(huán)結(jié)構(gòu)與底層流處理器之間建立良好的映射關(guān)系,需要用戶(hù)自己做較大量的工作,內(nèi)核程序并行化復(fù)雜度,沒(méi)有得到很好地隱藏。
CPU+GPU 異構(gòu)計(jì)算模式在目前計(jì)算機(jī)領(lǐng)域中運(yùn)用較為廣泛,在程序開(kāi)發(fā)方面存在著一定的局限性,目前GPU 產(chǎn)品的硬件架構(gòu)設(shè)計(jì)中正在積極向著程序設(shè)計(jì)層面演變,工業(yè)界與學(xué)術(shù)界目前正在對(duì)此積極研發(fā),CPU+GPU 的異構(gòu)計(jì)算系統(tǒng)設(shè)計(jì)正在逐步完善。