朱 崗,楊 巖
(重慶理工大學(xué) 機(jī)械工程學(xué)院, 重慶 400054)
傳統(tǒng)并行計(jì)算需要使用者有較高的專業(yè)素質(zhì),多數(shù)是命令行的操作,不適宜于普通研究人員的開發(fā)。2006年,英偉達(dá)公司推出了統(tǒng)一計(jì)算設(shè)備架構(gòu)CUDA(compute unified device architecture),它是以GPU(graphics processing unit)作為數(shù)據(jù)并行計(jì)算設(shè)備的軟硬件體系。與傳統(tǒng)的網(wǎng)格和集群等并行架構(gòu)相比,GPU的并行不僅表現(xiàn)出節(jié)能、體積小、性價(jià)比高等優(yōu)勢(shì),而且加速比更優(yōu)。目前,CUDA已廣泛應(yīng)用于科研和工程應(yīng)用等領(lǐng)域,包括視頻與音頻處理、醫(yī)學(xué)成像、物理效果模擬、流體力學(xué)模擬、光線追蹤、CT圖像重組、石油天然氣勘探、產(chǎn)品設(shè)計(jì)、計(jì)算生物學(xué)和地震分析等[1~7]。
在數(shù)字全息測(cè)量中,對(duì)特定平面波前的重建是通過計(jì)算機(jī)對(duì)光波的模擬衍射來實(shí)現(xiàn)的,特別是在如流場(chǎng)分析等多焦平面對(duì)象的重建過程中,必須對(duì)每個(gè)不同記錄距離的平面進(jìn)行計(jì)算。重建平面越多,其軸向分辨率越高,計(jì)算結(jié)果越準(zhǔn)確,但是整個(gè)計(jì)算過程也更加耗時(shí)。為了提高計(jì)算速度,使重建過程能達(dá)到實(shí)時(shí)重建的目標(biāo),國內(nèi)外研究人員已經(jīng)采用了多種手段來提高計(jì)算速度。在單平面重建方面,Shimobaba等[8]利用GPU進(jìn)行單平面的實(shí)時(shí)重建,獲得一幅512像素×512像素全息圖的重建像的時(shí)間為41.6 ms。朱竹青等[9]構(gòu)建了實(shí)時(shí)數(shù)字全息再現(xiàn)系統(tǒng),以旋轉(zhuǎn)的骰子為對(duì)象,實(shí)時(shí)拍攝全息圖,并進(jìn)行單平面重建,重建幀速為20幀/s,重建圖大小為512像素×512像素。
在多平面快速重建方面,Abe等[10]采用16個(gè)FPGA實(shí)現(xiàn)全息圖的快速重建,其系統(tǒng)能在3.3 s時(shí)間內(nèi)對(duì)1 024像素×1 024像素全息圖進(jìn)行100個(gè)平面的重建。Cheong等[11]通過硬件加速與軟件優(yōu)化相結(jié)合的方法來優(yōu)化系統(tǒng),重建一副200像素×200像素的圖像僅需要3 ms,若采用3個(gè)獨(dú)立的計(jì)算線程則處理速度可以達(dá)到8 幀/s。
本研究的目標(biāo)是利用GPU的并行計(jì)算能力開展數(shù)字全息中多焦平面目標(biāo)的快速重建,并將其應(yīng)用于流體流場(chǎng)的實(shí)際測(cè)試中。
數(shù)字全息包括光學(xué)記錄和數(shù)字再現(xiàn)2個(gè)階段。數(shù)字全息光學(xué)記錄是利用CCD記錄參考光波與通過物體的反射或透射物光波干涉形成的全息圖。在光學(xué)重建中,若采用參考光的共軛光波照射全息圖,則實(shí)像出現(xiàn)在原物體的位置,而虛像出現(xiàn)在CCD相反方向的相同距離處。菲涅爾-基爾霍夫衍射實(shí)像平面的光場(chǎng)分布為[12]
O(ξ,η)=
(1)
(2)
重建平面與全息平面位置關(guān)系如圖1所示。
在數(shù)字重建中有菲涅爾衍射重建算法、卷積重建算法、角譜重建算法和小波重建算法等多種方法。卷積重建算法由于分辨率與全息圖相同,無衍射距離限制,計(jì)算速度快,因此受到廣泛應(yīng)用。
令:
g(ξ,η,x,y)=
(3)
那么,式(1)則變?yōu)?/p>
O(ξ,η)=
(4)
在數(shù)字重建中,數(shù)字脈沖響應(yīng)函數(shù)為
g(k,l)=
(5)
這樣,利用卷積的性質(zhì)有:
(6)
圖1 重建平面與全息平面位置關(guān)系
CUDA 是一種基于新的并行編程模型和指令集架構(gòu)的通用計(jì)算架構(gòu),其結(jié)構(gòu)上包括主機(jī)端與設(shè)備端。CPU被稱為主機(jī)端,GPU被稱為設(shè)備端,GPU作為CPU的協(xié)處理器。在計(jì)算任務(wù)分配中,在CPU上執(zhí)行邏輯性強(qiáng)的串行計(jì)算任務(wù),在GPU上執(zhí)行大量的并行計(jì)算任務(wù)。
設(shè)備代碼在設(shè)備端GPU上執(zhí)行,被稱為內(nèi)核(kernel),內(nèi)核不是一個(gè)完整的程序,而是任務(wù)中能分解為并行執(zhí)行的步驟的集合。每個(gè)內(nèi)核函數(shù)包括2個(gè)層次的并行,即網(wǎng)格中線程塊間的并行和線程塊內(nèi)線程間的并行。當(dāng)運(yùn)行至設(shè)備代碼時(shí),調(diào)用內(nèi)核函數(shù),啟動(dòng)多個(gè)線程。每個(gè)線程塊都包括多個(gè)線程,對(duì)不同的數(shù)據(jù)并行執(zhí)行同一指令(SIMD),實(shí)現(xiàn)線程塊內(nèi)的并行。同時(shí),在每個(gè)線程網(wǎng)格中,不同線程塊間也并行執(zhí)行。每個(gè)線程具有私有的寄存器和板載局部存儲(chǔ)器,同一線程塊內(nèi)線程具有片內(nèi)共享儲(chǔ)存器。所有線程均能訪問全局、常量和紋理存儲(chǔ)器。GPU包括多個(gè)流多處理器(SM),每個(gè)流多處理器又包含大量的流處理單元(SP)。線程以塊為單位分配到流多處理器上,隨后線程塊內(nèi)的線程又被發(fā)送到流處理單元。線程調(diào)度器可以自動(dòng)根據(jù)線程塊的數(shù)量和每個(gè)線程塊的線程數(shù)將1個(gè)或多個(gè)線程塊分配到1個(gè)流多處理器(SM)中。流多處理器(SM)中以32個(gè)線程組成一個(gè)warp作為最小的調(diào)度和執(zhí)行單位。CUDA編程模型如圖2所示。
圖2 CUDA編程模型
利用CPU進(jìn)行流體位移場(chǎng)計(jì)算的基本步驟如下:① 在獲得了t1時(shí)刻的全息圖之后,需要在光軸方向進(jìn)行多個(gè)平面的數(shù)值重建,對(duì)每個(gè)重建像均需要進(jìn)行圖像濾波、二值化、粒子三維空間位置提取。同時(shí),在完成多個(gè)平面的粒子提取之后,還要進(jìn)行重復(fù)粒子刪除處理,以獲得t1時(shí)刻粒子三維空間位置。② 對(duì)t2時(shí)刻的全息圖進(jìn)行相同的處理,獲得t2時(shí)刻粒子三維空間位置。③ 對(duì)相鄰2個(gè)時(shí)刻的2幅全息圖所提取的粒子進(jìn)行粒子配對(duì),獲得t1和t2時(shí)刻粒子的位移矢量場(chǎng)。通過除以拍攝間隔時(shí)間,還可以獲得三維速度矢量場(chǎng)。具體流程如圖3所示。從該流程中可以發(fā)現(xiàn)整個(gè)處理過程是利用CPU串行執(zhí)行的,這樣將會(huì)花費(fèi)大量的計(jì)算時(shí)間,無法達(dá)到程序的實(shí)時(shí)處理要求。
圖3 位移矢量場(chǎng)獲取流程
在流體的位移矢量場(chǎng)計(jì)算過程中,在獲得某時(shí)刻的全息圖后,需要利用數(shù)值計(jì)算程序?qū)Σ煌亟ň嚯x的圖像進(jìn)行數(shù)字聚焦。不同距離的多個(gè)重建圖像的數(shù)值計(jì)算過程相互獨(dú)立,為并行計(jì)算的開展提供了可行性。為了實(shí)現(xiàn)流體中位移場(chǎng)的快速并行計(jì)算,除了需要采用GPU硬件之外,還需要對(duì)原有Matlab程序進(jìn)行并行化處理,以便發(fā)揮GPU的并行計(jì)算能力。整個(gè)并行計(jì)算過程主要包括執(zhí)行粗粒度的并行與細(xì)粒度的并行2個(gè)層次。
2.2.1 粗粒度的并行化
粗粒度的并行主要包括1張全息圖多個(gè)不同位置的圖像并行處理與2個(gè)連續(xù)全息圖序列執(zhí)行的并行。如果計(jì)算卡具有多個(gè)GPU,則可以利用多線程技術(shù)控制多個(gè)GPU,每個(gè)GPU又分別設(shè)置多個(gè)流。即利用狀態(tài)機(jī)實(shí)現(xiàn)多個(gè)流同時(shí)進(jìn)行不同距離的多個(gè)平面的數(shù)據(jù)處理,實(shí)現(xiàn)三維粒子速度場(chǎng)并行重建。具體執(zhí)行過程如下:
1) 利用第1個(gè)線程的hallo流在第1個(gè)GPU上對(duì)t1時(shí)刻所獲得的全息圖進(jìn)行二維離散傅里葉變換等預(yù)處理。
2) 將結(jié)果以異步方式發(fā)送給其他線程控制的GPU。
3) 多個(gè)流在多個(gè)GPU上進(jìn)行多個(gè)不同位置的圖像并行處理(包括圖像重建、濾波、二值化、連通域處理等)。
4) 各個(gè)流等待同步。
5) 利用第1個(gè)GPU的hallo流對(duì)t2時(shí)刻所獲得的全息圖進(jìn)行二維離散傅里葉變換等預(yù)處理。同時(shí),利用第2個(gè)GPU的“0”號(hào)流完成t1時(shí)刻全息圖的重復(fù)非聚焦粒子刪除、粒子配對(duì)等后處理。
6) 第1個(gè)線程的hallo流,將t2時(shí)刻全息圖的預(yù)處理結(jié)果以異步方式發(fā)送給其他線程控制的GPU。
7) 各個(gè)GPU的多個(gè)流(除第2個(gè)GPU上的“0”號(hào)流外)進(jìn)行多個(gè)不同位置的圖像并行處理。
8) 第2個(gè)GPU上的“0”號(hào)流完成t1時(shí)刻的后處理后,首先查詢t2時(shí)刻的多個(gè)不同位置的圖像并行處理是否完成。如果完成,則所有流同步;如果未完成,則轉(zhuǎn)入查詢t2時(shí)刻全息圖的預(yù)處理結(jié)果是否收到。如果t2時(shí)刻的預(yù)處理尚未收到,則等待;如果預(yù)處理已收到,但是多個(gè)不同位置的圖像的并行處理尚未完成,則其加入圖像的并行處理。
9) 各個(gè)流等待同步。
10) 利用第1個(gè)GPU的hallo流對(duì)t3時(shí)刻所獲得的全息圖進(jìn)行二維離散傅里葉變換等預(yù)處理。同時(shí),利用第2個(gè)GPU的“0”號(hào)流完成t2時(shí)刻全息圖的重復(fù)非聚焦粒子刪除、粒子配對(duì)等后處理。
11) 重復(fù)執(zhí)行上述步驟,完成全息圖序列的處理。
具體流程如圖4所示。
圖4 利用狀態(tài)機(jī)實(shí)現(xiàn)位移場(chǎng)重建程序設(shè)計(jì)
2.2.2 細(xì)粒度的并行化
細(xì)粒度的并行主要是指將核函數(shù)分為多個(gè)Block處理,利用大量的核并行計(jì)算。細(xì)粒度的并行化需要將濾波、二值化、連通域提取、刪除非聚焦重復(fù)粒子等多個(gè)原有串行執(zhí)行的程序進(jìn)行并行處理,以便能在GPU上運(yùn)行。
這里,以刪除非聚焦重復(fù)粒子為例,說明如何對(duì)串行程序進(jìn)行并行化處理。利用CPU從tn時(shí)刻全息圖提取到粒子位置及大小信息,這些粒子既包括了聚焦粒子,也包括了離焦粒子。為了將離焦粒子刪除掉,按照粒子重建圖像的規(guī)律,以二值化后獲得的粒子大小信息為判斷準(zhǔn)則。如果2顆粒子的三維空間位置的歐式距離小于3倍粒子直徑,則認(rèn)為它們是同一顆粒子的聚焦像或者離焦像,并認(rèn)為粒子面積較大的粒子為聚焦粒子,而面積較小的粒子為非聚焦粒子,此時(shí)保留聚焦粒子的信息,刪除非聚焦粒子的信息。如果采用CPU對(duì)重復(fù)粒子進(jìn)行刪除,那么串行算法是從第1顆粒子開始,往后進(jìn)行逐一比較,直到與最后一顆粒子進(jìn)行比較,完成第1顆粒子的比較循環(huán),然后繼續(xù)從第2顆粒子開始依次跟后面的粒子進(jìn)行比較。如果獲得了n顆粒子,若利用CPU串行計(jì)算,其循環(huán)次數(shù)為M,其計(jì)算效率非常低。
M=(n-1)·(n-2)·(n-3)…3·2·1=
(n-1)!
(7)
如果采用GPU進(jìn)行并行計(jì)算,可以將n顆粒子分為J組,每組有N顆粒子。這樣每一組的粒子序號(hào)分別為1~N,N+1~2N,…(J-1)N~JN。將粒子序號(hào)按組從左向右排列,同時(shí)將粒子序號(hào)從上往下排列,形成一個(gè)二維矩陣,如圖5所示。這樣橫坐標(biāo)中任意一組(第x組)便可以跟縱坐標(biāo)中的任意一組(第y組)同時(shí)進(jìn)行比較。具體運(yùn)行中將其化為一個(gè)Block塊,其總的Block塊數(shù)為
B=J+(J-1)+(J-2)…+3+2+1=
(8)
在一個(gè)Block內(nèi),橫坐標(biāo)為第x組,其粒子序號(hào)為(x-1)N~xN,縱坐標(biāo)為第y組,其粒子序號(hào)為(y-1)N~yN,能分別進(jìn)行同時(shí)比較。具體在GPU運(yùn)行中,可以利用一個(gè)SM中的多個(gè)ALU進(jìn)行并行計(jì)算。這樣可以大大提高計(jì)算效率。
圖5 刪除重復(fù)粒子并行計(jì)算模型
為了分析重建平面數(shù)量、分辨率對(duì)重建速度的影響,分別配置了基于CPU和GPU的3種硬件系統(tǒng),以比較其計(jì)算速度。具體實(shí)驗(yàn)裝置配置如下:
1) Window7系統(tǒng),Matlab r2014a軟件(用于CPU測(cè)試),CPU型號(hào)為Inter(R) Core(TM) i7 CPU 930(多核并行),48G內(nèi)存;
2) 1片Nvidia Tesla 40C;
3) 1片Nvidia Tesla K80。
K40C具有1個(gè)開普勒架構(gòu)核心(GK110),開啟了15組流多處理器,具有2 880個(gè)流處理器,專用存儲(chǔ)器總?cè)萘繛?2 GB,顯存帶寬為288 GB/s,其單精度計(jì)算能力可達(dá)4.29萬億次/s,而雙精度計(jì)算能力可達(dá)1.43萬億次/s。K80采用了2個(gè)開普勒架構(gòu)核心(GK210),每一個(gè)核都只開啟了15組流多處理器陣列中的13組,即K80具有4 992個(gè)流處理器,顯存是2組384位的GDDR5,容量為24 GB,其單精度計(jì)算能力可達(dá)8.74萬億次/s,而雙精度計(jì)算能力可達(dá)2.91萬億次/s。
實(shí)驗(yàn)主要從重建平面數(shù)的變化及重建像分辨率的變化2方面進(jìn)行。
固定分辨率為512像素×512像素,重建平面數(shù)從500幅開始,每次增加100幅,直到1 000幅。通過CPU與GPU分別進(jìn)行多焦平面重建,分別獲取其運(yùn)行時(shí)間,得出GPU的加速效果,即加速比。運(yùn)行時(shí)間如表1所示。運(yùn)行時(shí)間曲線如圖6所示。
表1 不同重建平面數(shù)量3種系統(tǒng)運(yùn)行時(shí)間對(duì)比 s
由表1可知:在不同的重建平面數(shù)時(shí),采用GPU并行計(jì)算的效率均遠(yuǎn)高于CPU,特別是在重建平面數(shù)為1 000時(shí),K80、K40C和CPU930的重建時(shí)間分別0.866、1.8和180.733 s。隨著重建幅數(shù)的增加,K40C加速比從84倍增加到100倍,而K80含2片GPU,對(duì)K40C的加速比維持在2倍左右。每增加100幅,CPU運(yùn)算時(shí)間延長(zhǎng)20~30 s,而K40C在大約200 ms以內(nèi),K80在大約100 ms以內(nèi),差異浮動(dòng)比較小。
圖6 3種系統(tǒng)運(yùn)行時(shí)間與重建平面數(shù)的關(guān)系
重建平面數(shù)取為512幅,實(shí)驗(yàn)采用的全息圖分辨率為1 296像素×966像素,故實(shí)驗(yàn)選擇從512像素×512像素分辨率開始,每次增加128像素×128像素,直到896像素×896像素。不同分辨率對(duì)重建時(shí)間的影響如表2所示。運(yùn)行時(shí)間曲線如圖7所示。
表2 不同分辨率對(duì)重建時(shí)間的影響 s
由表2可知:隨著全息圖的分辨率大小的增加,CPU運(yùn)算時(shí)間急劇增加;GPU相對(duì)變化差異小,尤其是K80。
綜上所述,GPU相對(duì)于CPU來說,不僅運(yùn)算速度快,并且運(yùn)算性能更平滑,時(shí)間范圍更具可控性。
實(shí)驗(yàn)光路如下:氦氖氣體連續(xù)激光器發(fā)出波長(zhǎng)為632.8 nm的激光(索雷博HNL210L-EC),通過針孔濾波器進(jìn)行濾波,再通過準(zhǔn)直鏡(西格瑪 DLB-30-300PM)形成平行光,通過裝有純凈水的樣品池,其光程為10 mm,在其中散布有直徑為51.7 μm的三聚氰胺甲醛樹脂微粒(武漢華科微科)。其同軸全息圖被CCD(BOBCAT ICL-B1310)接收,CCD的分辨率為1 296像素×966像素,像元3.75 μm,其記錄距離為21.5~31.5 mm。圖8為拍攝的三聚氰胺甲醛樹脂微粒的同軸全息光路示意圖,圖9為某時(shí)刻拍攝到的三聚氰胺微粒的數(shù)字全息圖。
圖7 3種系統(tǒng)運(yùn)行時(shí)間與重建分辨率的關(guān)系
圖8 同軸粒子場(chǎng)光路示意圖
圖9 三聚氰胺全息圖
將并行程序用于實(shí)際三維流體的全息圖的快速重建實(shí)驗(yàn)中。利用個(gè)人筆記本電腦進(jìn)行計(jì)算,其處理器為Core i5-4210U@1.7 GHz,內(nèi)存為8 GB,操作系統(tǒng)為Windows 10,軟件為Matlab(r2014a)。截取512像素×512像素的全息圖,完成512個(gè)重建平面的速度場(chǎng)計(jì)算需要10.9 s。為了實(shí)現(xiàn)快速計(jì)算,利用計(jì)算統(tǒng)一設(shè)備架構(gòu),將工作站作為主機(jī),選用K80作為設(shè)備端,其處理器為Xeon E5-2630@2.3 GHz,內(nèi)存為64 GB,操作系統(tǒng)為Windows 7,軟件為Visual studio 2014。采用單線程單GPU計(jì)算時(shí)間需要0.46 s,而采用雙線程雙GPU則其計(jì)算時(shí)間為0.268 s。運(yùn)行時(shí)間如表3所示,獲得的位移場(chǎng)分布如圖10所示,高度方向已折算為10 mm粒子深度范圍所對(duì)應(yīng)的像素?cái)?shù)量。
表3 個(gè)人電腦與帶GPU的工作站計(jì)算時(shí)間比較 s
圖10 微粒的位移矢量圖
通過以上結(jié)果可知:利用并行重建方法能正確獲得流體中示蹤微粒位移矢量場(chǎng);在圖像分辨率為512像素×512像素、重建512個(gè)平面時(shí),利用K80采用雙線程雙GPU的速度比采用CPU的速度快40倍,其全息圖的處理速度達(dá)到3.7幀/s。
利用基于CUDA的架構(gòu)將原有串行的重建步驟進(jìn)行二級(jí)并行化處理。同時(shí)結(jié)合多線程技術(shù)實(shí)現(xiàn)數(shù)字全息圖粒子3維位移場(chǎng)的快速重建。并將其應(yīng)用到實(shí)際獲得的全息圖序列中,其處理的單幅全息圖為512像素×512像素,重建512個(gè)平面的時(shí)間為268 ms,即3.7幀/s,運(yùn)算速度為采用CPU進(jìn)行串行計(jì)算的40.6倍。
通過測(cè)試發(fā)現(xiàn),每個(gè)GPU設(shè)置不同的流的數(shù)量對(duì)實(shí)驗(yàn)結(jié)果也有影響。分別將流的數(shù)目設(shè)置為4、8和16,發(fā)現(xiàn)當(dāng)流的數(shù)目設(shè)置為8時(shí),其運(yùn)算速度最快。另外,如果減少重建平面的數(shù)量,增加GPU的數(shù)量或者采用更高性能的計(jì)算卡,那么其處理全息圖的幀率可以得到進(jìn)一步提升,完全可能達(dá)到對(duì)全息圖進(jìn)行實(shí)時(shí)處理的要求。
參考文獻(xiàn):
[1] 盧文龍,王建軍,劉曉軍.基于CUDA的高速并行高斯濾波算法[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,39(5):10-13.
[2] 朱奭,常晉義.基于CUDA的數(shù)字化放射圖像重建算法[J].計(jì)算機(jī)應(yīng)用研究,2014,31(5):1577-1580.
[3] 江順亮,黃強(qiáng)強(qiáng),董添問,等.基于CUDA的離散粒子系統(tǒng)模擬仿真及其實(shí)現(xiàn)[J].南昌大學(xué)學(xué)報(bào)(工科版),2011,33(3):290-294.
[4] 周煜坤,陳清華,余瀟.基于CUDA 的大規(guī)模流體實(shí)時(shí)模擬[J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(1):143-148.
[5] 岳田爽,趙懷慈,花海洋.基于CUDA的光線追蹤優(yōu)化算法研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(1):161-162.
[6] 王玨,曹思遠(yuǎn),鄒永寧.利用CUDA技術(shù)實(shí)現(xiàn)錐束CT圖像快速重建[J].核電子學(xué)與探測(cè)技術(shù),2010,30(3):315-320.
[7] 劉金碩.基于CUDA的并行程序設(shè)計(jì)[M].北京:科學(xué)出版社,2016.
[8] SHIMOBABA T,SATO Y,MIURA J,et al.Real-time digital holographic microscopy using the graphic processing unit[J].Opt Express,2008,16(16):97035.
[9] 朱竹青,孫敏,聶守平,等.基于GPU 的數(shù)字全息實(shí)時(shí)再現(xiàn)系統(tǒng)設(shè)計(jì)及實(shí)驗(yàn)研究[J].光電子·激光,2012,23(3):325-329.
[10] ABE Y,MASUDA N,WAKABAYASHI H,et al.Special purpose computer system for flow visualization using holography technology[J].Opt Express,2008,16(11):94254.
[11] CHEONG F C,SUN B,DREYFUS R,et al.Flow visualization and flow cytometry with holographic videomicroscopy[J].Opt Express,2009,17(15):109416.
[12] ULF S,WERNER J.Digital Holography[M].Heidelberg:Springer,2005.