引言
現(xiàn)代的高度并行式處理器的進(jìn)展如AnalogDevices的TigerSHARC®系列處理器,要求尋找更為有效的方法來并行實(shí)現(xiàn)許多標(biāo)準(zhǔn)算法的操作。該應(yīng)用手記不僅解釋最快的16位FFT如何在TigerSHARC上的實(shí)現(xiàn),而且提供指導(dǎo)算法的開發(fā),使你能夠?qū)⑼患夹g(shù)施于其他算法。一般來說,大多數(shù)算法有幾個層次的優(yōu)化級,該手記將給予詳細(xì)討論。第一和最直截了當(dāng)?shù)膬?yōu)化級是指令的并行,這是處理器架構(gòu)所允許的。這種工作是簡單而又煩人的。優(yōu)化的第二級是循環(huán)體展開( loop unrolling)和軟件的流水線操作,以取得最大并行性,避免流水線停止工作。雖然比簡單的一級并行復(fù)雜,但可按描述的步驟進(jìn)行工作,無需深入了解算法,幾乎沒有獨(dú)創(chuàng)性。第三級是重建算法的數(shù)學(xué)操作,仍產(chǎn)生有效的結(jié)果,但更適合處理器的架構(gòu)。這需要徹底了解算法,不像軟件的流水線操作那樣,它沒有既定的引導(dǎo)你走向最佳方案的步驟。這在寫最佳代碼中是最有趣的。在實(shí)際應(yīng)用中,常常不需要用到所有的優(yōu)化層次。當(dāng)所有的優(yōu)化級需要時,最好以反向的順序進(jìn)行這些級的優(yōu)化。在代碼完全被流水化操作以后,再來嘗試改變基本的底層算法已經(jīng)太遲了。由此,程序師必須要先考慮算法結(jié)構(gòu),隨后組織代碼。然后通常將優(yōu)化層次1和2(并行、展開以及流水線操作)同時進(jìn)行。
本手記中所參考使用的代碼由模擬器件公司提供。具體例子使用一個256-點(diǎn)FFT,但其中的數(shù)學(xué)算法和理念同樣適于其它大小(不小于16點(diǎn))的變換。
如同所見,重建的算法將FFT打散成更小的部分而后可被并行。在256點(diǎn)FFT(其代碼列表在該應(yīng)用手記的尾部)的情形下, FFT被分成一個個16點(diǎn)的FFT有16個,16點(diǎn)FFT以基數(shù)4(radix-4)的格式來完成(即每個只有兩個階)。如果我們做一個512=點(diǎn) FFT,我們將不得不一次做16個32點(diǎn)的FFT(或者一次做32個16點(diǎn)的FFT) ,每個32點(diǎn)FFT以基數(shù)4格式先完成前兩個階,最后一階做成基數(shù)2格式。這種不同意味著書寫FFT大小統(tǒng)配( FFT size-generic)的代碼是困難的。雖然實(shí)現(xiàn)的算法是通用的,可同等地適于所有大小的FFT,但代碼卻不能這樣,它必須針對每一種點(diǎn)大小FFT進(jìn)行手工調(diào)整,以便能夠完全達(dá)到最優(yōu)化。帶上這些一并考慮,讓我們進(jìn)入TigerSHARC園地里迷人的定點(diǎn)FFT世界吧。
完整的文檔請通過百度云盤下載:鏈接:http://pan.baidu.com/s/1o6Zm650 密碼:0nqd
ADI DSP任何問題,可聯(lián)系OP的QQ:5516164,郵箱:sale@openadsp.com |