本發(fā)明涉及一種適合SMP的超大點(diǎn)數(shù)快速傅里葉變換算法。
背景技術(shù):
快速傅里葉變換(FFT)是足球機(jī)器人雷達(dá)成像信號(hào)處理的關(guān)鍵技術(shù),F(xiàn)FT的執(zhí)行效率直接影響成像系統(tǒng)的性能。近年來高分辨、大測繪帶寬的SAR成像系統(tǒng)的快速發(fā)展,使得FFT計(jì)算點(diǎn)數(shù)較大幅度的增加,帶來了FFT計(jì)算面臨處理器資源有限和執(zhí)行效率降低兩大問題,直接影響了SAR成像系統(tǒng)的研制進(jìn)度。
現(xiàn)有FFT算法大都基于單核處理器進(jìn)行研究,很少有文獻(xiàn)涉及針對(duì)適用于對(duì)稱多處理器(Symmetric Multiprocessor,SMP)的超大點(diǎn)數(shù)FFT算法研究??梢运阉鞯降挠幸韵路椒ǎ?/p>
1)SingLeton算法,通過對(duì)蝶形進(jìn)行重排,保證了處理器對(duì)內(nèi)存的順序操作,從而提升了處理速度,但是該重排的蝶形結(jié)構(gòu)無法適用于SMP系統(tǒng)。
2)基于GPU分塊的FFT算法,解決了圖像容量較大引起的內(nèi)存溢出問題,對(duì)于SAR成像中采用SMP計(jì)算FFT具有一定借鑒意義,但該算法很難移植到其它多核處理器平臺(tái)。
3)將一維大點(diǎn)數(shù)FFT拆分成二維行列小點(diǎn)數(shù)來處理,在有限的資源下,為實(shí)現(xiàn)更大點(diǎn)數(shù)的FFT提供了解決方法,且在大點(diǎn)數(shù)時(shí)對(duì)性能有很大提升,但是該方法基于單核處理器來設(shè)計(jì),并沒有涉及多核處理器并行優(yōu)化的研究。
隨著FFT處理點(diǎn)數(shù)的增加,單核處理器的FFT算法不僅存在處理器資源受限的問題,而且其性能也很難滿足現(xiàn)有應(yīng)用系統(tǒng)對(duì)強(qiáng)實(shí)時(shí)性的要求。目前芯片技術(shù)的發(fā)展已經(jīng)不能夠適應(yīng)摩爾定律和突破功率墻的限定,單核處理器性能已接近極限值,為了追求更高的處理性能,各芯片廠商采取在相同的面積上集成更多的處理器核。SMP匯集了一組處理器,它是應(yīng)用十分廣泛的并行技術(shù),且越來越多的雷達(dá)信號(hào)處理系統(tǒng)開始采用SMP作為主要處理芯片。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提出一種適合SMP的超大點(diǎn)數(shù)FFT算法,以提升SAR成像信號(hào)處理性能。
為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是提供了一種基于SMP的足球機(jī)器人超大點(diǎn)數(shù)FFT算法,設(shè)SMP的核處理個(gè)數(shù)為Q,待處理的一維大點(diǎn)數(shù)序列的長度為L=2n,其特征在于,所述算法包括以下步驟:
步驟1、將一維大點(diǎn)數(shù)序列L拆分成M×N的二維矩陣,且行方向順序存儲(chǔ)在片外存儲(chǔ)空間,M與N的值根據(jù)式(1)得到:
步驟2、由SMP的主核讀取片外存儲(chǔ)空間中Q列M長度的數(shù)據(jù)到片內(nèi)共享空間,并轉(zhuǎn)置成列方向連續(xù);
步驟3、SMP的每個(gè)核分別計(jì)算一列M點(diǎn)FFT,F(xiàn)FT結(jié)果乘以鉸鏈因子,其值Z(n0,k0)如式(2)所示,并將結(jié)果存儲(chǔ)到片內(nèi)共享空間,由SMP的主核原位寫回片外存儲(chǔ)空間:
式(2)中,n0=0,1,…,M-1,k0=0,1,…,N-1;
步驟4、重復(fù)步驟1~步驟3,完成列FFT和乘鉸鏈因子計(jì)算,鉸鏈因子只存儲(chǔ)第1行數(shù)據(jù),其他行的鉸鏈因子由第1行的鉸鏈因子重復(fù)計(jì)算得出;
步驟5、由SMP的主核讀取片外存儲(chǔ)空間中Q行N長度的數(shù)據(jù)到片內(nèi)共享空間;
步驟6、SMP每個(gè)核分別計(jì)算一行N點(diǎn)FFT,并將結(jié)果轉(zhuǎn)置存儲(chǔ)到片內(nèi)共享空間,由SMP的主核按照列順序?qū)懟仄獯鎯?chǔ)空間;
步驟7、重復(fù)步驟5~步驟6,完成行FFT計(jì)算,得到FFT計(jì)算結(jié)果。
本發(fā)明通過分析SMP并行處理系統(tǒng)架構(gòu)特點(diǎn),得出一種適用于SMP的超大點(diǎn)數(shù)FFT算法。該算法采取限定一維序列劃分規(guī)則最大限度降低復(fù)數(shù)乘加運(yùn)算量,并改變乘鉸鏈因子方法減少了對(duì)存儲(chǔ)資源的依賴,同時(shí)優(yōu)化數(shù)據(jù)分布和存儲(chǔ)訪問來隱藏顯性轉(zhuǎn)置。實(shí)測結(jié)果表明,該算法適用于SMP平臺(tái),能夠解決單核處理器較難實(shí)現(xiàn)超大點(diǎn)數(shù)FFT的問題,并在FFT存儲(chǔ)資源利用和執(zhí)行性能上均有明顯提升。
附圖說明
圖1為基于SMP的分布式存儲(chǔ)結(jié)構(gòu)并行處理系統(tǒng)示意圖;
圖2為隨FFT處理點(diǎn)數(shù)增加D的曲線圖;
圖3為單片SMP并行FFT處理流程及中間數(shù)據(jù)分布;
圖4為基于TMS320C6678的1024k浮點(diǎn)數(shù)FFT實(shí)現(xiàn)流程圖。
具體實(shí)施方式
為使本發(fā)明更明顯易懂,茲以優(yōu)選實(shí)施例,并配合附圖作詳細(xì)說明如下。
目前,多核處理器已成為市場主流,SMP是一種應(yīng)用廣泛的多處理器系統(tǒng)。SMP的多個(gè)處理器之間沒有區(qū)別,可以平等地訪問內(nèi)存、I/O、外設(shè)和中斷等系統(tǒng)資源,能夠使任務(wù)或數(shù)據(jù)對(duì)稱地分布于多個(gè)處理器核之上進(jìn)行處理。由于核之間的距離更近,它們之間通信的帶寬更大,時(shí)延更小,性能更佳。圖1為基于SMP的分布式存儲(chǔ)結(jié)構(gòu)并行處理系統(tǒng)示意圖。
由圖1可以看出,SMP系統(tǒng)處理的最小單位是一片SMP,每片SMP都有各自的片內(nèi)共享內(nèi)存(MSM)和片外存儲(chǔ)器,它們可以被處理器核均等的訪問,每片SMP通過互聯(lián)網(wǎng)絡(luò)相連,實(shí)現(xiàn)SMP之間的數(shù)據(jù)交互和通信功能?,F(xiàn)有算法具體工程實(shí)現(xiàn)大都基于單核處理器來完成,一般無法直接適用于SMP處理平臺(tái)。例如,在SAR成像處理系統(tǒng)中,為了最大限度提升FFT算法實(shí)現(xiàn)效率,F(xiàn)FT的實(shí)現(xiàn)過程均要結(jié)合處理器的特性,針對(duì)特有平臺(tái)來編寫實(shí)現(xiàn)。因此,研究適用于SMP并行處理系統(tǒng)的處理算法具有十分迫切的需求。
對(duì)于大點(diǎn)數(shù)FFT計(jì)算,將一維大點(diǎn)數(shù)序列FFT拆分成二維小點(diǎn)數(shù)來運(yùn)算,該方法能夠?qū)FT運(yùn)算劃分成更小的粒度來進(jìn)行處理。其實(shí)現(xiàn)的主要流程為:(1)將1維序列拆分成2維矩陣并轉(zhuǎn)置;(2)行方向FFT處理;(3)乘以鉸鏈因子;(4)對(duì)(3)的結(jié)果轉(zhuǎn)置存儲(chǔ);(5)列方向FFT處理;(6)將處理結(jié)果轉(zhuǎn)置存儲(chǔ),得到序列的FFT結(jié)果。但是,針對(duì)SMP系統(tǒng),該算法在實(shí)現(xiàn)過程中存在三個(gè)問題:一是一維序列行列如何拆分才能得到最優(yōu)化的運(yùn)算性能;二是如何均衡乘以鉸鏈因子引入額外的存儲(chǔ)空間和增加的乘法運(yùn)算次數(shù);三是三次顯性轉(zhuǎn)置需要較多額外的內(nèi)存空間,且點(diǎn)數(shù)較大時(shí)因無法在片內(nèi)存儲(chǔ)空間計(jì)算導(dǎo)致性能大幅降低。針對(duì)上述三個(gè)問題,本發(fā)明分別給出具體的優(yōu)化方法。
1)序列劃分規(guī)則優(yōu)化
設(shè)FFT一維序列長度為L,劃分成為二維序列L=M×N,細(xì)粒度行列FFT運(yùn)算采取基2-FFT算法,依據(jù)其計(jì)算量公式,可以得出實(shí)現(xiàn)FFT運(yùn)算所需運(yùn)算量為:
式(3)中,Cf為額外引入的鉸鏈因子復(fù)數(shù)乘法次數(shù),為固定值;Cmul為乘法運(yùn)算數(shù);Csum為加法運(yùn)算數(shù)。
由柯西不等式可得式(4):
由以上推導(dǎo)分析可得,當(dāng)一維序列按照行和列相等的原則來劃分時(shí),理論上可以保證FFT的復(fù)數(shù)乘法和加法的運(yùn)算量達(dá)到最小值,使其拆分性能達(dá)到最優(yōu)。一般對(duì)FFT計(jì)算來說序列的長度為2n,所以實(shí)際操作中,可以按式(5)取M與N的值:
2)鉸鏈因子計(jì)算優(yōu)化
在第(3)步時(shí)對(duì)行方向FFT的處理結(jié)果乘以鉸鏈因子,其值Z(n0,k0)如式(6)所示:
式(6)中,n0=0,1,…,M-1,k0=0,1,…,N-1。鉸鏈因子可以只存儲(chǔ)第1行數(shù)據(jù),其它行的鉸鏈因子可由第1行的鉸鏈因子重復(fù)計(jì)算得出。該處理方法可以大大節(jié)省內(nèi)存資源,這對(duì)在有限的處理器資源下實(shí)現(xiàn)超大點(diǎn)數(shù)FFT十分重要。但是,該處理方法會(huì)引入新的額外復(fù)數(shù)乘法運(yùn)算。為了得出新引入的額外復(fù)數(shù)乘法運(yùn)算對(duì)超大點(diǎn)數(shù)FFT執(zhí)行效率的影響,下面對(duì)該復(fù)數(shù)乘法運(yùn)算對(duì)整個(gè)計(jì)算量的影響作進(jìn)一步分析。
假設(shè)只考慮采用復(fù)數(shù)乘法來衡量FFT的運(yùn)算時(shí)間,按照1)節(jié)中的劃分原則,新引入的額外復(fù)數(shù)乘法占總復(fù)數(shù)乘法的比重D如式(7)所示:
取則式(7)推導(dǎo)為式(8):
式(8)和圖2可以看出,新引入的額外復(fù)數(shù)乘法在FFT總復(fù)數(shù)乘法所占比重隨著點(diǎn)數(shù)增加而逐漸減小,當(dāng)FFT點(diǎn)數(shù)大于256K時(shí),所占復(fù)數(shù)乘法比重系數(shù)D趨于0。因此,對(duì)于超大點(diǎn)數(shù)FFT而言,通過優(yōu)化鉸鏈因子計(jì)算方法,使得新引入的額外復(fù)數(shù)乘法運(yùn)算量可以忽略不計(jì),但是能夠較大程度地節(jié)省處理器片內(nèi)存儲(chǔ)資源。
3)數(shù)據(jù)分布和存儲(chǔ)訪問優(yōu)化
由于超大點(diǎn)數(shù)FFT點(diǎn)數(shù)較大,且三次顯性轉(zhuǎn)置需要至少一倍于序列長度的緩沖空間,導(dǎo)致無法將FFT的原始數(shù)據(jù)、中間緩沖轉(zhuǎn)置數(shù)據(jù)和FFT處理結(jié)果數(shù)據(jù)全部放在處理器的片內(nèi)存儲(chǔ)空間,所以必須選擇片外存儲(chǔ)器(DDR)作為大數(shù)據(jù)的存儲(chǔ)空間,但由處理器直接訪問DDR將大大降低執(zhí)行效率。因此,需要對(duì)均衡FFT數(shù)據(jù)分布和存儲(chǔ)訪問性能兩者之間的關(guān)系進(jìn)行說明。
根據(jù)SMP并行處理系統(tǒng)的特點(diǎn),單片SMP作為一個(gè)基本處理單元,由多個(gè)處理器核共同完成一個(gè)超大序列的FFT運(yùn)算。如果直接將原始數(shù)據(jù)、中間轉(zhuǎn)換數(shù)據(jù)、結(jié)果數(shù)據(jù)分布在片外存儲(chǔ)空間進(jìn)行訪問計(jì)算,勢必引起處理性能的極大下降;又因?yàn)镕FT被拆分成二維序列來處理,行或列FFT的處理點(diǎn)數(shù)變得很小,完全可以讀到片內(nèi)存儲(chǔ)空間進(jìn)行計(jì)算,所以可以采取將原始序列數(shù)據(jù)存儲(chǔ)在DDR,然后將數(shù)據(jù)搬移到片內(nèi)存儲(chǔ)空間進(jìn)行行或列FFT計(jì)算,最終再將結(jié)果寫回DDR。設(shè)SMP的核處理器個(gè)數(shù)為Q,序列長度為,則單片SMP共同處理一個(gè)超大序列的FFT流程如圖3所示。
采取數(shù)據(jù)分布和矩陣訪問優(yōu)化,將占用存儲(chǔ)空間較大的原始數(shù)據(jù)放在片外存儲(chǔ)空間DDR,按照Q為訪問粒度來讀取相應(yīng)的行或列數(shù)據(jù)到MSM,由SMP處理器核1~Q分別完成各自對(duì)應(yīng)行或列的FFT計(jì)算;矩陣轉(zhuǎn)置可以隱藏在處理流程中,而不需要額外的DDR存儲(chǔ)空間來進(jìn)行顯性轉(zhuǎn)置,不僅節(jié)省了存儲(chǔ)空間,而且提升了矩陣轉(zhuǎn)置效率。表1給出了本發(fā)明和原方法對(duì)存儲(chǔ)資源需求對(duì)比。
表1 本發(fā)明方法實(shí)現(xiàn)FFT對(duì)資源的需求
由圖3和表1可以看出,通過對(duì)超大點(diǎn)數(shù)FFT運(yùn)算的數(shù)據(jù)分布和矩陣存儲(chǔ)訪問進(jìn)行優(yōu)化,以SMP處理器核Q為數(shù)據(jù)訪問粒度,采用片內(nèi)臨時(shí)乒乓緩沖空間,使得FFT計(jì)算存取速度比直接訪問DDR更加快,進(jìn)而減少超大點(diǎn)數(shù)FFT處理延時(shí)。同時(shí),該方法大幅節(jié)省內(nèi)存存儲(chǔ)資源,使本發(fā)明存儲(chǔ)資源大約只占到原方法的25%。因此,通過優(yōu)化數(shù)據(jù)分布和矩陣訪問,在有限的處理器資源下,為高效地實(shí)現(xiàn)更大點(diǎn)數(shù)的FFT提供了可行方法。
以上主要對(duì)超大點(diǎn)數(shù)FFT算法存在三個(gè)問題進(jìn)行改進(jìn),下面給出基于SMP的改進(jìn)型的超大點(diǎn)數(shù)FFT算法實(shí)現(xiàn)流程:
(1)將一維序列L按照式(5)的原則拆分成M*N的二維矩陣,且行方向順序存儲(chǔ)在片外存儲(chǔ)空間;
(2)由SMP的主核讀取Q列M長度的數(shù)據(jù)到片內(nèi)共享空間,并轉(zhuǎn)置成列方向連續(xù);
(3)SMP每個(gè)核分別計(jì)算一列M點(diǎn)FFT,F(xiàn)FT結(jié)果乘以鉸鏈因子,并將結(jié)果存儲(chǔ)到片內(nèi)共享空間,由主核原位寫回片外存儲(chǔ)空間;
(4)重復(fù)(1)~(3)步驟,完成列FFT和乘鉸鏈因子計(jì)算;
(5)由SMP的主核讀取Q行N長度的數(shù)據(jù)到片內(nèi)共享空間;
(6)SMP每個(gè)核分別計(jì)算一行N點(diǎn)FFT,并將結(jié)果轉(zhuǎn)置存儲(chǔ)到片內(nèi)共享空間,由主核按照列順序?qū)懟仄獯鎯?chǔ)空間;
(7)重復(fù)(5)~(6)步驟,完成行FFT計(jì)算,得到FFT計(jì)算結(jié)果。
改進(jìn)后的超大點(diǎn)數(shù)FFT算法通過限定序列行列劃分規(guī)則降低了復(fù)數(shù)乘加運(yùn)算量,并改變了乘鉸鏈因子計(jì)算方法,同時(shí)采取優(yōu)化數(shù)據(jù)分布和存儲(chǔ)訪問使得FFT計(jì)算更加適合SMP架構(gòu),從而節(jié)省了存儲(chǔ)資源,提升了超大點(diǎn)數(shù)FFT算法實(shí)現(xiàn)速度。下面通過算法映射來具體說明基于SMP的超大點(diǎn)數(shù)FFT算法實(shí)現(xiàn)流程。
本發(fā)明以1024K復(fù)數(shù)點(diǎn)FFT算法映射到TMS320C6678處理器為例。TMS320C6678是TI公司新一代浮點(diǎn)DSP,由八個(gè)同構(gòu)處理器核共同組成SMP系統(tǒng)結(jié)構(gòu);每個(gè)處理器核最高支持1.4GHz的內(nèi)核時(shí)鐘,內(nèi)部集成512KB的L2存儲(chǔ)空間,八個(gè)核共享4MB片內(nèi)存儲(chǔ)空間,并且擁有強(qiáng)大處理能力和系統(tǒng)互聯(lián)能力。根據(jù)第3節(jié)分析,可以將序列劃分為1024×1024的二維序列進(jìn)行處理,行列處理粒度Q為8,其算法映射與實(shí)現(xiàn)流程如圖4所示。
實(shí)驗(yàn)驗(yàn)證與性能對(duì)比
本實(shí)驗(yàn)結(jié)果是在北京理工雷科公司研發(fā)的一款基于OpenVPX標(biāo)準(zhǔn)的通用型多DSP高速雷達(dá)信號(hào)板卡上測試得到。該板卡由一片Virtex7 FPGA和4片TMS320C6678的組成,每片DSP最大支持外掛8GB的DDR3片外存儲(chǔ)器,DSP之間通過高速串行總線Rapid IO互聯(lián)形成SMP系統(tǒng)架構(gòu)。實(shí)驗(yàn)驗(yàn)證條件和測試方法:(1)DSP內(nèi)核工作主頻為1GHz;(2)通過讀取超大點(diǎn)數(shù)FFT函數(shù)執(zhí)行前后時(shí)鐘計(jì)數(shù)周期之差來得到執(zhí)行時(shí)間?;赟MP的超大點(diǎn)數(shù)FFT實(shí)測結(jié)果如表2所示:
表2 浮點(diǎn)FFT實(shí)測結(jié)果對(duì)比(us)
本發(fā)明針對(duì)現(xiàn)有FFT算法不適用SMP并行處理平臺(tái)的問題進(jìn)行深入分析,提出了改進(jìn)型超大點(diǎn)數(shù)FFT算法。通過優(yōu)化行列劃分規(guī)則來最大程度的減少了復(fù)數(shù)乘加運(yùn)算量,并改變鉸鏈因子計(jì)算方法,降低了存儲(chǔ)資源開銷;同時(shí)給出了算法映射及1024K點(diǎn)復(fù)數(shù)浮點(diǎn)FFT在TMS320C6678上的實(shí)現(xiàn)流程。實(shí)驗(yàn)對(duì)比結(jié)果表明,本映射算法適用于SMP系統(tǒng),能夠節(jié)省近3/4的存儲(chǔ)資源,且明顯提升了大點(diǎn)數(shù)FFT處理速度,可用于改善高分辨率大測繪帶寬SAR成像雷達(dá)系統(tǒng)的實(shí)時(shí)性。