摘要:光學干涉檢測領域的不斷發展要求檢測儀器具備更高的橫向分辨率。高分辨率意味著處理時間變長,測試效率變低。為提高測試效率,提出了一種利用 CPU/GPU 異構計算并行加速的Zernike 多項式絕對平面檢測方法。該方法使用CPU 進行流程控制,利用GPU 多核優勢將檢測平面中的元素離散并行求解,并在Zernike 系數求解中使用混合精度,在峰谷值和均方根值求解中使用線程束原語指令進一步優化性能。結果顯示,使用RTX3070– Laptop,在512×512、1 024×1 024、2 048×2 048 和4 096×4 096 分辨率的光學平面檢測中,該方法整體處理速度比CPU 處理速度分別提高了近47、56、58 和70 倍。
關鍵詞:絕對平面檢測;異構并行計算;Zernike 多項式擬合
中圖分類號:TN 206 文獻標志碼:A
引 言
光學平面是光學系統和儀器工程中最常見的光學元件。在光學干涉測量中,平面波前像差標準是其他各種測試的基礎。標準參考面的形狀會影響傳統相對測量方法的精度。當需要較高的測量精度(如精度高于1/20 波長)時,必須消除干涉儀的系統誤差和參考面誤差。為了解決這個問題,提出了絕對平面測量。絕對平面測量是通過消除光學儀器的系統誤差和參考平面誤差對測量結果的影響,來獲得測試平面的絕對表面的方法。目前, 使用最廣泛的方法是由Fritz[1] 于1984 年提出的,是一種基于傳統三面互檢的可編程三面互檢法。首先,利用 Zernike 多項式性質將平面的表面形狀誤差分解為正交基函數;然后,再利用最小二乘法對這些基函數的系數進行擬合;最終,得到被測絕對平面。許多研究人員在此方法的基礎上進行了改進研究[2],并提出了許多新方法[3-5]。但由于計算復雜或條件苛刻,其中大多數方法并未在工業領域得到廣泛應用[6]。隨著測量技術的發展,人們對大型精密光學測量儀器的需求更加迫切,如美國國家點火裝置以及中國神光–Ⅲ裝置[7] 均需要數千塊超大口徑光學器件。這些超大口徑光學器件對干涉儀器的橫向分辨率提出了更高的要求,然而現有算法的測量效率尚不能滿足這一要求。因此,本研究采用了圖形處理單元(graphics processing unit,GPU)加速技術,旨在提升測量效率。在干涉測量儀器中獲取到干涉圖像后,先提取相位,然后對提取的相位進行解包裹,最后使用Zernike 多項式擬合的方法實現絕對平面測量。在此流程中,針對干涉圖的異構并行相位提取和相位解包裹已有諸多學者進行了探索和研究[8-9]。但是,對Zernike 多項式擬合的絕對平面測量步驟進行探索的還比較少。在Zernike 多項式的應用方面,大多數研究人員關注的是 Zernike 多項式的 GPU 并行實現及其在圖像處理中的應用[10]。例如,Toharia 等[11]將 Zernike 多項式應用于射擊邊界檢測,并通過多GPU 多中央處理單元(central processing unit,CPU) 異構計算實現了超過1 000 幀/s 的檢測率。然而,針對光學波前像差擬合異構并行技術,測量參數求解的并行化和分辨率優化的研究較少。
本文旨在解決傳統絕對平面檢測Zernike 多項式計算算法在處理高分辨率干涉圖時效率低下的問題。為了提高計算效率,提出了一種CPU–GPU 異構并行加速算法。該算法通過在CPU 和GPU 之間分配計算任務,優化了笛卡爾坐標系下的Zernike 多項式計算、多項式擬合系數求解、理想平面擬合以及測量指標[ 如峰谷(peakto-valley, PV) 值和均方根( root mean square,RMS)值] 計算等關鍵步驟。此外,本文還采用協作組線程束原語指令和混合精度方法,進一步提升了算法的執行效率。
1 并行算法設計
1.1 異構并行計算
傳統的科學計算性能提升依賴于 CPU 的時鐘頻率。然而,芯片上高密度晶體管的功耗和散熱所造成的物理瓶頸極大地延緩了 CPU 頻率的提升[12]。與 CPU 不同,GPU 自誕生之日起就被用于計算與圖像相關的數據。
從圖1 可知,GPU 包含比 CPU 更多的核心數量,因此,GPU 比CPU 更適合處理大規模數據的并行計算,但它的核心頻率、緩存和控制單元較弱,對復雜問題處理能力較弱。為了充分發揮兩者優勢,有人提出了異構并行計算方式。異構并行計算就是將算法分解為復雜流程控制部分和簡單并行處理部分,由CPU 處理復雜邏輯運算部分,GPU 處理簡單高吞吐運算部分,從而達到高性能的訴求。在科學計算領域,越來越多的學者采用異構并行計算來解決相關領域問題:趙鍇坤等[13] 將CPU/GPU 異構并行計算用于物理領域,計算加速重力場反演,將計算性能提升了380 倍;李浩[14] 將異構并行計算用于天文數據處理,在進行相干消色散脈沖星數據處理時,該計算相較于CPU 處理速度提升了2 倍。
先討論有關GPU 并行算法的設計和應用,圖2 展示了GPU 內核運行方式。在CPU 端啟動核函數并根據問題動態分配資源后,GPU 會根據核函數中的代碼進行運行。在GPU 端運行核函數時,每個核函數會啟動線程網格,每個線程網格由若干線程塊組成,而線程塊由多個線程構成,這些線程負責處理數據。同一個線程塊中若干個線程組成一個線程束,線程束中的線程以不同數據資源執行相同的指令。