辛誠,周權
(國防科技大學電子對抗學院,合肥 230037)
近年來,隨著計算機計算能力的提升和波前變換器件的發展,計算全息技術在三維顯示、光學檢測和光信息處理等多個領域都具備了廣闊的發展前景[1-3]。
計算全息技術采用計算機編程方式生成全息圖,再通過諸如空間光調制器(SLM)或數字微鏡(DMD)等波前變換器件完成光波前的振幅或相位調制,從而實現全息再現或光場調制的目的。全息圖的計算生成速度決定了計算全息技術的性能效率和應用范圍。針對大量物點的全息圖生成是一項計算密集型任務。物點個數的增加和全息圖分辨率的提高都會導致傳統的基于CPU運算的全息圖生成方法耗時迅速增加,甚至無法滿足實際應用需求。
本文介紹了利用CUDA并行計算方法生成相息圖的快速算法,有效縮短了相息圖生成的計算時間,并通過空間光調制器完成了相息圖的全息再現實驗驗證。
CUDA(Compute Unified Device Architecture)是NVIDIA推出的一個基于GPU通用計算的并行計算平臺和編程模型[4]。它利用圖形處理器(GPU)多處理單元的特性,通過大量的線程級并行實現計算性能的顯著提高。
典型的CUDA程序執行流程如圖1所示。運行于CPU上的主機端(Host)程序依次完成設備初始化和數據準備等串行任務;運行于GPU上的設備端(Device)程序并行執行一系列的Kernel函數;最后完成由設備端至主機端的數據拷貝。

圖1 典型的CUDA程序執行流程
CUDA程序執行過程中,每一個執行線程都隸屬于一個特定的區塊(Block)。隸屬同一區塊的多個線程可以以一維到三維的方式進行排列。所有的區塊也會以一維或二維的方式排列在網格(Grid)內。
每個線程和區塊根據排列方式不同而具有不同的編號(ThreadIdx/BlockIdx)。其組織形式如圖2所示。

圖2 CUDA架構中線程的組織形式
相息圖是計算全息技術中特有的一種全息圖。在生成相息圖的過程中,認為物光波的振幅是恒定的,僅記錄物光波在相息面位置的相位分布。從各個物點發出的光波在相息面上( )x,y位置的復振幅分布可以表示成:

其中,N是物點總數,rn是第n個物點到相息面的距離,an,φn分別是第n個物點光波的振幅和相位。可以用A(x,y)和φ(x,y)分別表示所有物點光波在相息面上的振幅和相位分布。相息圖只記錄其中的相位信息 φ(x,y)。
考慮到相位的周期性,相位編碼只需考慮0到2π之間的相位變化,則有:

其中 φk(x ,y) 是 φ(x ,y)取模數2π 后的余數,將其歸一化至某動態范圍(0-255),即可得到相息圖對應的灰度圖。其透過率可以表示為:

根據相位角的定義,可以得到:

則相息圖的透過率為:

考慮平行光正入射到相息圖,其出射光的復振幅分布可以表示為:


假設物點個數為N,相息圖平面位置的像元個數為Px×Py。根據2.1小節中給出的相息圖生成模型,相息圖平面上的相位分布在每個像元位置均由所有物點的物光波在該處疊加形成。若通過標準的CPU程序對該問題進行求解,只能通過循環嵌套的方式遍歷所有物點和像元,時間開銷為N×Px×Py。在物點較多且像元分辨率較高的情況下,計算過程會變得非常緩慢。
由相息圖生成模型可以看出,各個像元處的相位分布相互之間無關聯,可以獨立進行計算。將CUDA并行方法應用于該計算過程時,對網格(Grid)和區塊(Block)進行合適的二維劃分,其維度為別為(Gx,Gy)和(Bx,By),且有:

這樣的劃分使得每一個線程(Thread)負責一個像元位置的相位分布計算,時間開銷為N,只與物點個數有關,相比傳統的CPU程序,可以有效的降低計算時間。
主機端串行程序執行流程如圖3所示。

圖3 主機端串行程序流程示意圖
設備端執行的Kernel函數流程如圖4所示。

圖4 設備端Kernel函數執行流程
實驗過程中采用個人計算機(i5-3320M 2.6G,NVIDIA NVS 5400M)進行相息圖的生成;并參照文獻[5]中給出的結構,利用He-Ne激光器和HOLOEYE空間光調制器(LC-R-720,1280×768,20μm)構建全息再現光路,如圖5所示。

圖5 全息再現光路示意圖
為了消除了空間光調制器本身二維結構引起的多級衍射光和相息圖對應的多級再現像,相息圖生成過程中疊加了閃耀光柵和發散球面波的相位信息,并通過位于平面2位置的濾波器進行空間濾波,在平面3

圖6 相息圖及其再現像
表1中比較了利用CUDA并行計算和傳統CPU運算生成相息圖所需的計算時間。可以看出,采用CUDA并行計算方法,計算效率提升約在200倍左右。在物點個數為100時,耗時約50ms,接近了實時幀率。

表1 兩種計算方式的耗時比較
為提高計算全息應用過程中全息圖的生成速度,本文以相息圖計算為例,提出了采用CUDA并行計算方法的相息圖快速生成算法,并對生成的相息圖進行了全息再現實驗驗證。相比利用CPU進行運算的程序,并行加速方法可以有效縮短相息圖的生成時間,計算效率提升約在200倍左右,對100個物點生成分辨率為1280×768的相息圖用時約50ms,接近實時幀率。
參考文獻:
[1]賈甲,王涌天,劉娟,等.計算全息三維實時顯示的研究進展[J].激光與光電子學進展,2012,49(5):050002.
[2]高松濤,隋永新,楊懷江.用計算全息圖對非球面的高精度檢測與誤差評估[J].光學學報,2013,33(6):102-108.
[3]孔德照,沈學舉,趙燕,等.基于計算全息和隨機相位編碼的三維信息的加密與顯示[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]沈川,張成,劉凱峰,等.基于像素結構空間光調制器的全息再現像問題研究[J].光學學報,2012,32(3):0309001.