使用面向FPGA的OpenCL設(shè)計(jì)兩百萬點(diǎn)頻域?yàn)V波器
除了復(fù)制一個(gè)片外FFT計(jì)算流水線,還將以下部件加入到系統(tǒng)中:
本文引用地址:http://2s4d.com/article/281882.htm1. 頻域的復(fù)數(shù)乘法被加入到第三個(gè)F1T模塊中。coef緩沖保存了兩百萬復(fù)數(shù)乘法系數(shù)。
2. 增加了I/O輸入和I/O輸出內(nèi)核,對(duì)萬兆以太網(wǎng)通道上的外部存儲(chǔ)器負(fù)載進(jìn)行逼真的建模 。采用這些內(nèi)核,能夠繼續(xù)純軟件開發(fā),在內(nèi)核計(jì)算流水線完全優(yōu)化好之后,再集成以太網(wǎng)通道。I/O輸入內(nèi)核在每一時(shí)鐘周期產(chǎn)生一個(gè)采樣,I/O輸出每一時(shí)鐘周期占用一個(gè)采樣。
正如片外FFT試驗(yàn)所示,只能適配兩個(gè)F1T模塊,采用POINTS=4。因此,要完成全部計(jì)算,數(shù)據(jù)要通過硬件兩次。對(duì)于2M點(diǎn)數(shù),系統(tǒng)總吞吐量只有120 MSPS,低于目標(biāo)150 MSPS。通過把數(shù)據(jù)長(zhǎng)度減小到1M點(diǎn),能夠適配POINTS=8版本,吞吐量達(dá)到198 MSPS。這表明,只要能夠讓POINTS=8版本適配2M點(diǎn)數(shù),就還能提高性能!
在圖2中,找出全流水線的優(yōu)化結(jié)構(gòu)是整個(gè)設(shè)計(jì)過程的下一步。首先能夠提高的是去掉tmp3緩沖。兩邊都以同樣的方式訪問它(轉(zhuǎn)置寫和讀操作)。因此,可以通過通道把第二和第三個(gè)F1T模塊直接連接起來。這要求轉(zhuǎn)置內(nèi)核將其輸出寫入到外部存儲(chǔ)器中,或者通道中,獲取內(nèi)核也是相似的修改。這類修改是由主機(jī)動(dòng)態(tài)控制的,因此,可以使用獲取內(nèi)核的一個(gè)物理例化。注意,這改變了與外部存儲(chǔ)器的連接。但是,根本不用對(duì)此擔(dān)心——OpenCL編譯器已經(jīng)為系統(tǒng)生成了高效的定制外部存儲(chǔ)器互聯(lián)。
進(jìn)一步的改進(jìn)是,把第二個(gè)轉(zhuǎn)置“T”從寫到tmp1改為從tmp1讀(tmp1中的數(shù)據(jù)以不同的方式存儲(chǔ),但是效果一樣)。這樣,轉(zhuǎn)置就不需要本地存儲(chǔ)器緩沖了。
原來是通過兩級(jí)來實(shí)現(xiàn)轉(zhuǎn)置的:第一,所需的數(shù)據(jù)被裝入到本地存儲(chǔ)器中,然后,使用轉(zhuǎn)置地址從本地存儲(chǔ)器讀取。為高效的使用這類流水線,OpenCL編譯器自動(dòng)將本地存儲(chǔ)器系統(tǒng)的緩沖加倍。以這種方式,流水線的裝入部分能夠?qū)?shù)據(jù)裝入到一個(gè)副本中,而讀部分能夠從另一副本讀取以前的數(shù)組。自動(dòng)雙緩沖非常適合的轉(zhuǎn)置算法,但是太昂貴了。相反,重新編寫轉(zhuǎn)置內(nèi)核。這一內(nèi)核只需要一個(gè)緩沖,支持同時(shí)讀寫多個(gè)數(shù)據(jù)點(diǎn)。對(duì)這一轉(zhuǎn)置內(nèi)核的介紹已經(jīng)超出了本文的范圍。
經(jīng)過以上修改后,能夠采用POINTS=8配置適配2M點(diǎn)的FFT,吞吐量達(dá)到164 MSPS。
4 調(diào)度
只能適配F1T的兩個(gè)副本。圖3顯示了怎樣調(diào)度數(shù)據(jù)流,以便完全利用流水線。注意,在穩(wěn)定狀態(tài)下,流水線交替處理第二和第三組數(shù)據(jù),不需要額外的緩沖。由CPU上運(yùn)行的主程序控制這種調(diào)度,使用動(dòng)態(tài)分析工具進(jìn)行驗(yàn)證。
5 緩沖分配
在OpenCL系統(tǒng)中,主程序控制了包含那個(gè)緩沖區(qū)的DDR塊。DDR塊只要不是同時(shí)讀寫,在讀操作或者寫操作時(shí)的效率最高,因此,在兩個(gè)DDR塊之間按以下原則來分配5個(gè)緩沖:
? DDR塊#0分配input和tmp2。
? DDR塊#1分配tmp1、coef和out。
給DDR塊分配一個(gè)緩沖就是在OpenCL主程序中修改一行代碼。編譯器和底層平臺(tái)完成其他任務(wù)。能夠自動(dòng)完成這一過程,在2-DDR和4-DDR電路板上進(jìn)行了試驗(yàn),為每一塊電路板找到緩沖到存儲(chǔ)器塊的最佳映射。
6 結(jié)論
在本文中,介紹了怎樣使用為FPGA提供的Altera OpenCL SDK,設(shè)計(jì)2M點(diǎn)數(shù)頻域?yàn)V波器。使用軟件類型的仿真對(duì)所有功能進(jìn)行了驗(yàn)證。每一個(gè)硬件編譯都能夠正確工作。并沒有打開硬件仿真器,也不用擔(dān)心時(shí)序收斂問題。
參考文獻(xiàn):
[1]D. H. Bailey. FFTs in external of hierarchical memory Proc. of ACM/IEEE Conf. on Supercomputing’89 (SC89), 1989, 234-242
[2]FFT (1D) Off-Chip Design Example.[EB/OR] https://www.altera.com/support/support-resources/design-examples/design-software/opencl/fft-1d-offchip.html
評(píng)論