辛誠,周權(quán)
(國防科技大學(xué)電子對(duì)抗學(xué)院,合肥 230037)
近年來,隨著計(jì)算機(jī)計(jì)算能力的提升和波前變換器件的發(fā)展,計(jì)算全息技術(shù)在三維顯示、光學(xué)檢測(cè)和光信息處理等多個(gè)領(lǐng)域都具備了廣闊的發(fā)展前景[1-3]。
計(jì)算全息技術(shù)采用計(jì)算機(jī)編程方式生成全息圖,再通過諸如空間光調(diào)制器(SLM)或數(shù)字微鏡(DMD)等波前變換器件完成光波前的振幅或相位調(diào)制,從而實(shí)現(xiàn)全息再現(xiàn)或光場(chǎng)調(diào)制的目的。全息圖的計(jì)算生成速度決定了計(jì)算全息技術(shù)的性能效率和應(yīng)用范圍。針對(duì)大量物點(diǎn)的全息圖生成是一項(xiàng)計(jì)算密集型任務(wù)。物點(diǎn)個(gè)數(shù)的增加和全息圖分辨率的提高都會(huì)導(dǎo)致傳統(tǒng)的基于CPU運(yùn)算的全息圖生成方法耗時(shí)迅速增加,甚至無法滿足實(shí)際應(yīng)用需求。
本文介紹了利用CUDA并行計(jì)算方法生成相息圖的快速算法,有效縮短了相息圖生成的計(jì)算時(shí)間,并通過空間光調(diào)制器完成了相息圖的全息再現(xiàn)實(shí)驗(yàn)驗(yàn)證。
CUDA(Compute Unified Device Architecture)是NVIDIA推出的一個(gè)基于GPU通用計(jì)算的并行計(jì)算平臺(tái)和編程模型[4]。它利用圖形處理器(GPU)多處理單元的特性,通過大量的線程級(jí)并行實(shí)現(xiàn)計(jì)算性能的顯著提高。
典型的CUDA程序執(zhí)行流程如圖1所示。運(yùn)行于CPU上的主機(jī)端(Host)程序依次完成設(shè)備初始化和數(shù)據(jù)準(zhǔn)備等串行任務(wù);運(yùn)行于GPU上的設(shè)備端(Device)程序并行執(zhí)行一系列的Kernel函數(shù);最后完成由設(shè)備端至主機(jī)端的數(shù)據(jù)拷貝。
圖1 典型的CUDA程序執(zhí)行流程
CUDA程序執(zhí)行過程中,每一個(gè)執(zhí)行線程都隸屬于一個(gè)特定的區(qū)塊(Block)。隸屬同一區(qū)塊的多個(gè)線程可以以一維到三維的方式進(jìn)行排列。所有的區(qū)塊也會(huì)以一維或二維的方式排列在網(wǎng)格(Grid)內(nèi)。
每個(gè)線程和區(qū)塊根據(jù)排列方式不同而具有不同的編號(hào)(ThreadIdx/BlockIdx)。其組織形式如圖2所示。
圖2 CUDA架構(gòu)中線程的組織形式
相息圖是計(jì)算全息技術(shù)中特有的一種全息圖。在生成相息圖的過程中,認(rèn)為物光波的振幅是恒定的,僅記錄物光波在相息面位置的相位分布。從各個(gè)物點(diǎn)發(fā)出的光波在相息面上( )x,y位置的復(fù)振幅分布可以表示成:
其中,N是物點(diǎn)總數(shù),rn是第n個(gè)物點(diǎn)到相息面的距離,an,φn分別是第n個(gè)物點(diǎn)光波的振幅和相位。可以用A(x,y)和φ(x,y)分別表示所有物點(diǎn)光波在相息面上的振幅和相位分布。相息圖只記錄其中的相位信息 φ(x,y)。
考慮到相位的周期性,相位編碼只需考慮0到2π之間的相位變化,則有:
其中 φk(x ,y) 是 φ(x ,y)取模數(shù)2π 后的余數(shù),將其歸一化至某動(dòng)態(tài)范圍(0-255),即可得到相息圖對(duì)應(yīng)的灰度圖。其透過率可以表示為:
根據(jù)相位角的定義,可以得到:
則相息圖的透過率為:
考慮平行光正入射到相息圖,其出射光的復(fù)振幅分布可以表示為:
假設(shè)物點(diǎn)個(gè)數(shù)為N,相息圖平面位置的像元個(gè)數(shù)為Px×Py。根據(jù)2.1小節(jié)中給出的相息圖生成模型,相息圖平面上的相位分布在每個(gè)像元位置均由所有物點(diǎn)的物光波在該處疊加形成。若通過標(biāo)準(zhǔn)的CPU程序?qū)υ搯栴}進(jìn)行求解,只能通過循環(huán)嵌套的方式遍歷所有物點(diǎn)和像元,時(shí)間開銷為N×Px×Py。在物點(diǎn)較多且像元分辨率較高的情況下,計(jì)算過程會(huì)變得非常緩慢。
由相息圖生成模型可以看出,各個(gè)像元處的相位分布相互之間無關(guān)聯(lián),可以獨(dú)立進(jìn)行計(jì)算。將CUDA并行方法應(yīng)用于該計(jì)算過程時(shí),對(duì)網(wǎng)格(Grid)和區(qū)塊(Block)進(jìn)行合適的二維劃分,其維度為別為(Gx,Gy)和(Bx,By),且有:
這樣的劃分使得每一個(gè)線程(Thread)負(fù)責(zé)一個(gè)像元位置的相位分布計(jì)算,時(shí)間開銷為N,只與物點(diǎn)個(gè)數(shù)有關(guān),相比傳統(tǒng)的CPU程序,可以有效的降低計(jì)算時(shí)間。
主機(jī)端串行程序執(zhí)行流程如圖3所示。
圖3 主機(jī)端串行程序流程示意圖
設(shè)備端執(zhí)行的Kernel函數(shù)流程如圖4所示。
圖4 設(shè)備端Kernel函數(shù)執(zhí)行流程
實(shí)驗(yàn)過程中采用個(gè)人計(jì)算機(jī)(i5-3320M 2.6G,NVIDIA NVS 5400M)進(jìn)行相息圖的生成;并參照文獻(xiàn)[5]中給出的結(jié)構(gòu),利用He-Ne激光器和HOLOEYE空間光調(diào)制器(LC-R-720,1280×768,20μm)構(gòu)建全息再現(xiàn)光路,如圖5所示。
圖5 全息再現(xiàn)光路示意圖
為了消除了空間光調(diào)制器本身二維結(jié)構(gòu)引起的多級(jí)衍射光和相息圖對(duì)應(yīng)的多級(jí)再現(xiàn)像,相息圖生成過程中疊加了閃耀光柵和發(fā)散球面波的相位信息,并通過位于平面2位置的濾波器進(jìn)行空間濾波,在平面3
圖6 相息圖及其再現(xiàn)像
表1中比較了利用CUDA并行計(jì)算和傳統(tǒng)CPU運(yùn)算生成相息圖所需的計(jì)算時(shí)間??梢钥闯觯捎肅UDA并行計(jì)算方法,計(jì)算效率提升約在200倍左右。在物點(diǎn)個(gè)數(shù)為100時(shí),耗時(shí)約50ms,接近了實(shí)時(shí)幀率。
表1 兩種計(jì)算方式的耗時(shí)比較
為提高計(jì)算全息應(yīng)用過程中全息圖的生成速度,本文以相息圖計(jì)算為例,提出了采用CUDA并行計(jì)算方法的相息圖快速生成算法,并對(duì)生成的相息圖進(jìn)行了全息再現(xiàn)實(shí)驗(yàn)驗(yàn)證。相比利用CPU進(jìn)行運(yùn)算的程序,并行加速方法可以有效縮短相息圖的生成時(shí)間,計(jì)算效率提升約在200倍左右,對(duì)100個(gè)物點(diǎn)生成分辨率為1280×768的相息圖用時(shí)約50ms,接近實(shí)時(shí)幀率。
參考文獻(xiàn):
[1]賈甲,王涌天,劉娟,等.計(jì)算全息三維實(shí)時(shí)顯示的研究進(jìn)展[J].激光與光電子學(xué)進(jìn)展,2012,49(5):050002.
[2]高松濤,隋永新,楊懷江.用計(jì)算全息圖對(duì)非球面的高精度檢測(cè)與誤差評(píng)估[J].光學(xué)學(xué)報(bào),2013,33(6):102-108.
[3]孔德照,沈?qū)W舉,趙燕,等.基于計(jì)算全息和隨機(jī)相位編碼的三維信息的加密與顯示[J].激光與光電子學(xué)進(jìn)展,2015,52(10):116-120.
[4]Sanders J,Kandrot E.CUDA by Example:An Introduction to General-Purpose GPU Programming[M].Addison-Wesley Professional,2010.
[5]沈川,張成,劉凱峰,等.基于像素結(jié)構(gòu)空間光調(diào)制器的全息再現(xiàn)像問題研究[J].光學(xué)學(xué)報(bào),2012,32(3):0309001.