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