本發(fā)明屬于傅里葉變換領(lǐng)域,具體涉及基于國產(chǎn)申威26010處理器的基2一維fft的高性能實現(xiàn)方法。
背景技術(shù):
快速傅里葉變換(fastfouriertransform,fft)是離散傅里葉變換的快速計算方法。離散傅里葉變換(discretefouriertransform,dft)是指傅里葉變換在時域和頻域都表示為離散狀態(tài),將信號的時域采樣變換為離散時間傅里葉變換的頻域采樣。dft將自然科學與工程技術(shù)中連續(xù)而復(fù)雜的問題轉(zhuǎn)換為離散而簡單的運算。對于數(shù)據(jù)規(guī)模為n的一維輸入序列,dft計算公式如下:
其中,ωn為旋轉(zhuǎn)因子(twiddlefactor)序列,ωn=e-i2π/n,eix=cosx+isinx,
fft主要利用ωn的對稱性和周期性,將dft分解為若干有規(guī)律的矩陣向量乘,使得dft的浮點運算量減少到o(nlogn)。fft算法種類繁多,變換形式復(fù)雜,主要處理對象有基2變換規(guī)模和非基2變換規(guī)模以及合數(shù)變換規(guī)模和素數(shù)變換規(guī)模,數(shù)據(jù)類型有單精度復(fù)數(shù)、雙精度復(fù)數(shù)、單精度實數(shù)與雙精度實數(shù)。本發(fā)明中,處理對象為基2一維fft,數(shù)據(jù)類型為雙精度復(fù)數(shù)。
國產(chǎn)申威26010處理器是江南計算技術(shù)研究所自主研制的高性能計算平臺,該平臺是1個主核與64個從核組成單個核組、并由4個核組組成單個cpu的眾核平臺。平臺使用擴展的alpha架構(gòu)指令集,支持從核核組寄存器通信機制、訪存指令和計算指令同步發(fā)射機制以及256位simd向量化運算。該高性能計算平臺性能優(yōu)越,越來越多的科學計算與工業(yè)應(yīng)用運行于該平臺,然而目前開源fftw函數(shù)庫直接應(yīng)用于該平臺的計算性能較差,因此針對該申威平臺開發(fā)fft函數(shù)庫是必需的。
技術(shù)實現(xiàn)要素:
本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)的基于開源fftw函數(shù)庫直接應(yīng)用于本平臺性能較低的問題,提供一種基于國產(chǎn)申威26010處理器的基2一維快速傅里葉變換的高性能實現(xiàn)方法,設(shè)計多種高性能優(yōu)化手段,并且提出兩層分解的fft算法結(jié)構(gòu),有效應(yīng)用于基2一維fft計算,充分提高fft函數(shù)庫性能。
傳統(tǒng)fft算法并行度有限且訪存局部性低,在申威眾核平臺上難以充分利用眾多計算資源。依據(jù)眾核計算平臺的核間拓撲結(jié)構(gòu)和存儲層次特點,本發(fā)明基于國產(chǎn)申威26010處理的一個核組,設(shè)計接口層、主核層、從核層和核心層的四層結(jié)構(gòu)框架進行fft處理。一個核組由一個主核與64個從核組成;接口層和主核層為主核上操作,且操作輸入輸出數(shù)據(jù)存儲于主核內(nèi)存,從核層和核心層為從核上操作,且操作輸入輸出數(shù)據(jù)存儲于從核局存ldm,即localdirectmemory。具體實現(xiàn)如下:
(1)接口層建立輸入數(shù)據(jù)的描述符;所述描述符設(shè)置fft計算的基本信息,所述基本信息包括fft計算中輸入序列的數(shù)據(jù)維度、數(shù)據(jù)規(guī)模、數(shù)據(jù)精度以及變換類型;所述數(shù)據(jù)維度為一維,所述數(shù)據(jù)規(guī)模為2的冪,所述數(shù)據(jù)精度包括64位雙精度數(shù)據(jù)與32位單精度數(shù)據(jù),所述變換類型為復(fù)數(shù)到復(fù)數(shù)的變換,即輸入輸出數(shù)據(jù)皆為復(fù)數(shù);本發(fā)明所述數(shù)據(jù)皆默認為雙精度復(fù)數(shù)數(shù)據(jù),若操作單精度復(fù)數(shù)數(shù)據(jù),下文無特殊說明時,所述數(shù)據(jù)規(guī)模乘2即可;
(2)基于(1)所述描述符信息,當輸入數(shù)據(jù)規(guī)模n小于等于256時,主核層直接對輸入序列進行fft計算;當輸入數(shù)據(jù)規(guī)模n大于等于512時,主核層設(shè)計基于兩層分解的算法結(jié)構(gòu)對輸入序列進行分解,分解結(jié)果為多個小因子序列,小因子數(shù)據(jù)規(guī)模小于等于32,則輸入序列的fft計算轉(zhuǎn)化為多個小因子序列的fft計算,小因子序列的fft計算在從核上執(zhí)行;此外,不計輸入數(shù)據(jù)規(guī)模n的大小,主核層負責fft計算過程中所必需的旋轉(zhuǎn)因子序列ωn的計算,
(3)主核上操作完畢之后,從核層發(fā)起dma,即直接內(nèi)存訪問directmemoryaccess,讀取主核內(nèi)存數(shù)據(jù)至從核ldm中,然后從核對ldm數(shù)據(jù)進行小因子序列的fft計算,最后dma將從核ldm內(nèi)的fft計算結(jié)果寫入主核內(nèi)存;
(4)根據(jù)(3)所述的從核對ldm數(shù)據(jù)進行小因子序列的fft計算,此計算操作由核心層完成,核心層基于256位simd進行向量化運算的小因子優(yōu)化函數(shù)進行小因子序列的fft計算;simd為單指令流多數(shù)據(jù)流,256位simd表示一條指令同時處理256位數(shù)據(jù),即fft計算粒度為256位向量數(shù)據(jù);此外,各從核分別進行小因子序列的fft計算,計算結(jié)果存儲于各自的ldm中。
步驟(2)中當輸入數(shù)據(jù)規(guī)模n大于等于512時,主核層設(shè)計基于兩層分解的算法結(jié)構(gòu)對輸入序列進行分解,該基于兩層分解的算法基于迭代的stockham計算框架,將輸入序列分解為一系列的小因子序列,分解規(guī)則為庫利-圖基即cooley-turkey算法;stockham計算框架首先基于n=n1*...*ni*...*nm的分解模式使用迭代的方法進行分解,其中i=1,2,...,m,之后對數(shù)據(jù)ni的處理分為兩種情況:
1)當數(shù)據(jù)規(guī)模ni為小因子數(shù)據(jù)規(guī)模時,則不再進行分解,即只進行一層分解;
2)當數(shù)據(jù)規(guī)模ni大于小因子數(shù)據(jù)規(guī)模時,則遞歸地基于ni=f1*...*fk*...的分解模式進行二層分解,其中k=1,2,...,且分解時確保fk為小因子數(shù)據(jù)規(guī)模,則輸入序列被分解為多個小因子序列。
步驟(3)所述的從核層發(fā)起dma,讀取主核內(nèi)存數(shù)據(jù)至從核ldm中的具體情況如下:
1)從核層發(fā)起dma讀取主核內(nèi)存數(shù)據(jù)時,數(shù)據(jù)傳輸?shù)钠鹗嫉刂窛M足128字節(jié)對齊且傳輸量至少為256字節(jié)的倍數(shù);
2)從核層讀取數(shù)據(jù)至從核ldm時,依據(jù)主核輸入數(shù)據(jù)規(guī)模,當輸入數(shù)據(jù)規(guī)模n大于等于512且小于等于2048時,8個從核ldm均勻分擔dma讀取的主核內(nèi)存數(shù)據(jù);當輸入數(shù)據(jù)規(guī)模n大于等于4096時,64個從核ldm均勻分擔dma讀取的主核內(nèi)存數(shù)據(jù)。
步驟(3)所述的從核對ldm數(shù)據(jù)進行小因子序列的fft計算,具體情況為:從核層以v*ni為工作集,其中,ni為基于n=n1*...*ni*...*nm分解模式進行分解后的數(shù)據(jù)規(guī)模,大于等于小因子數(shù)據(jù)規(guī)模,即ni大于等于32,i=1,2,...,m;v表示每次調(diào)用核心層優(yōu)化函數(shù)進行小因子序列fft計算的個數(shù),即調(diào)用核心層優(yōu)化函數(shù)一次,則進行v個小因子序列的fft計算,v≥16,若數(shù)據(jù)精度為8位單精度數(shù)據(jù),v≥32;
1)當512≤v*ni≤2048時,數(shù)據(jù)規(guī)模為v*ni的fft計算由一行8個從核共同完成計算,進一步分解ni=f1*f2,f1與f2為小因子數(shù)據(jù)規(guī)模;在核心層進行v個數(shù)據(jù)規(guī)模為f1的小因子序列的fft計算之后,以從核的寄存器通信機制對從核上計算結(jié)果進行重新排布,隨后于核心層進行v個數(shù)據(jù)規(guī)模為f2的小因子序列的fft計算;
2)v*ni大于等于4096時,數(shù)據(jù)規(guī)模為v*ni的fft計算由64個從核共同完成計算,進一步分解ni=f1*f2*...,以fk代表f1,f2,...其中之一,fk為小因子數(shù)據(jù)規(guī)模;各個數(shù)據(jù)規(guī)模為fk的小因子序列的fft計算之間,需以從核的行寄存器通信或列寄存器通信重新排布從核數(shù)據(jù)。
步驟(3)所述的從核層發(fā)起dma,讀取主核內(nèi)存數(shù)據(jù)以及從核進行小因子數(shù)據(jù)的fft計算,有下面特殊情況:受限于64個從核的ldm空間,當數(shù)據(jù)規(guī)模n大于等于65536時,需進行多次dma訪存操作,即讀取和寫入操作,因此設(shè)計從核層基于訪存-計算重疊的雙緩沖機制同時進行dma訪存操作與小因子數(shù)據(jù)的fft計算操作,即以dma訪存時間覆蓋fft計算時間。
與開源fftw技術(shù)相比:
(1)本發(fā)明基于國產(chǎn)申威26010處理器,提出基于兩層分解的stockhamfft計算框架進行fft計算,有效應(yīng)用于基2一維fft計算,充分提高fft函數(shù)庫性能。
(2)本發(fā)明設(shè)計從核內(nèi)行或列寄存器通信機制、訪存-計算重疊的雙緩沖機制和256位simd向量化運算等多種優(yōu)化技術(shù),有效解決fft計算的訪存帶寬受限問題,提升基2一維fft運算性能。
(3)以每秒浮點運算次數(shù)即gflops表示fft計算性能為例,本發(fā)明基2一維fft計算性能相比于fftw中基2一維fft計算性能的平均加速比為34.4,最高加速比高達50.3。
附圖說明
圖1為基于申威平臺的fft四層結(jié)構(gòu)框架,包含接口層、主核層、從核層和核心層;
圖2為以n=n1*n2分解模式的fft計算流程;
圖3為數(shù)據(jù)規(guī)模為64,以8*8的分解模式進行分解時,dma對數(shù)據(jù)的讀取與寫入方式,以及行寄存器通信機制對各從核ldm數(shù)據(jù)的調(diào)整;其中,(a)為數(shù)據(jù)規(guī)模為64時,數(shù)據(jù)序列于主核內(nèi)存上的存儲格式;(b)為dma讀取主核數(shù)據(jù)至8個從核之后,各從核ldm數(shù)據(jù)的存儲格式;(c)為對8個從核ldm的數(shù)據(jù)經(jīng)行寄存器通信之后,各從核ldm數(shù)據(jù)的分配格式;(d)為dma將ldm數(shù)據(jù)寫入至主核之后,數(shù)據(jù)序列于主核內(nèi)存上的存儲格式。
具體實施方式
如圖1所示,本發(fā)明是基于國產(chǎn)申威26010處理器的基2一維fft的高性能實現(xiàn)方法,設(shè)計框架包含四層:接口層、主核層、從核層、核心層,調(diào)用關(guān)系為接口層-主核層-從核層-核心層,從核層多次調(diào)用核心層。接口層建立包含輸入數(shù)據(jù)規(guī)模、數(shù)據(jù)維度等信息的描述符;主核層基于描述符信息,當輸入數(shù)據(jù)規(guī)模大于等于512時,對輸入序列進行分解,當輸入數(shù)據(jù)規(guī)模小于等于256時,直接于主核上進行fft計算;從核層依據(jù)主核層的數(shù)據(jù)分解結(jié)果,負責主存數(shù)據(jù)與局存數(shù)據(jù)的讀取與存儲,以及數(shù)據(jù)于64個從核上的分配模式;核心層負責小因子序列的fft計算。
四層設(shè)計框架具體實施方式如下:
1.接口層:描述符操作
(1)接口層首先建立描述符,設(shè)置fft計算所需的數(shù)據(jù)精度、數(shù)據(jù)維度、數(shù)據(jù)規(guī)模等基本信息;
(2)提交描述符至主核層,主核層進行fft計算所需的運算;
(3)調(diào)用從核接口傳輸數(shù)據(jù)至從核;
(4)主從核上fft計算結(jié)束后,釋放描述符。
fft計算調(diào)用從核接口時,有兩種接口類型,分別為正變換接口與逆變換接口。fft正逆變換算法相同,逆變換主要用于判斷fft算法的正確性,輸入數(shù)據(jù)x經(jīng)正變換得到輸出數(shù)據(jù)y,而后輸出數(shù)據(jù)y經(jīng)逆變換得到輸出數(shù)據(jù)z,通過比較輸入數(shù)據(jù)x與輸出數(shù)據(jù)z,即以x與z的2范數(shù)與某一閾值進行比較,確定fft算法的正確性。
2.主核層:
本發(fā)明中,fft是基于兩層分解的算法結(jié)構(gòu),算法基于迭代的stockham計算框架,將大規(guī)模fft計算分解為一系列小規(guī)模計算,分解規(guī)則為cooley-tukey算法。對于輸入數(shù)據(jù)規(guī)模n的一維fft計算,分為兩種情況:
(1)若輸入數(shù)據(jù)規(guī)模n小于等于256時,主核層直接進行輸入序列的fft計算;
(2)若輸入數(shù)據(jù)規(guī)模n大于等于512時,將數(shù)據(jù)序列均勻分布到8個或64個從核中進行計算。對于輸入序列,stockhamfft計算框架基于n=n1*...*ni*...*nm(i=1,2,...,m)的分解模式使用迭代方法將輸入數(shù)據(jù)規(guī)模為n的一維fft計算任務(wù)轉(zhuǎn)化為一系列數(shù)據(jù)規(guī)模為ni的fft計算,而后根據(jù)數(shù)據(jù)規(guī)模ni,分為兩種情況:
1)若數(shù)據(jù)規(guī)模ni為小因子數(shù)據(jù)規(guī)模,即數(shù)據(jù)規(guī)模小于等于32,則ni不再進行分解,直接調(diào)用核心層的小因子優(yōu)化函數(shù)進行小因子序列的fft計算;
2)若數(shù)據(jù)規(guī)模ni大于小因子數(shù)據(jù)規(guī)模,則對ni遞歸地應(yīng)用cooley-tukey算法進行二層分解,分解模式為ni=f1*,...,*fk*...(k=1,2,...),fk為小因子數(shù)據(jù)規(guī)模,則fk直接調(diào)用核心層的小因子優(yōu)化函數(shù)進行小因子序列的fft計算。
此外,主核層負責fft計算過程中所必需的旋轉(zhuǎn)因子序列ωn的計算,
基于cooley-tukey算法,假設(shè)輸入數(shù)據(jù)規(guī)模為n的序列分解為n=n1*n2,則輸入序列按行優(yōu)先方式映射為二維數(shù)組,具體計算步驟如圖2,其表述如下:
(1)n2個數(shù)據(jù)規(guī)模為n1的一維fft計算,每個fft計算的輸入序列為x[*,l](0≤l<n2);
(2)fft后每個數(shù)據(jù)乘旋轉(zhuǎn)因子:
(3)n1個數(shù)據(jù)規(guī)模為n2的一維fft計算,每個fft計算的輸入序列為x[j,*](0≤j<n1);
(4)fft后的二維數(shù)組轉(zhuǎn)置:x[j,l]→x[l,j],得到n點一維fft計算結(jié)果。
嚴格依照上面4個步驟執(zhí)行fft計算時,當數(shù)據(jù)規(guī)模n大于片上存儲規(guī)模nr時,需對片下內(nèi)存數(shù)組讀寫4次,則總訪存量為8n。因此,具體實現(xiàn)時,通常將步驟(2)的乘旋轉(zhuǎn)因子合并到步驟(1)中,將步驟(4)的數(shù)據(jù)轉(zhuǎn)置合并到步驟(3)中,則訪存量降低為4n。與輸入輸出數(shù)據(jù)訪存量相比,旋轉(zhuǎn)因子產(chǎn)生訪存量極低,因此忽略旋轉(zhuǎn)因子訪存量。
3.從核層:從核核組對各種規(guī)模fft的計算方案
該平臺上,通過dma實現(xiàn)主存與ldm之間數(shù)據(jù)的快速交換。數(shù)據(jù)規(guī)模為ni的一維fft計算包含三個步驟:dma傳輸輸入數(shù)據(jù)至ldm;于從核ldm上發(fā)起數(shù)據(jù)規(guī)模為ni的一維fft;dma將計算結(jié)果存入內(nèi)存。
從算法設(shè)計和訪存帶寬利用角度出發(fā),同時計算v個數(shù)據(jù)規(guī)模為ni的一維fft計算,即核組每次計算的工作集為v*ni,v表示每次調(diào)用核心層優(yōu)化函數(shù)進行小因子序列fft計算的個數(shù),即調(diào)用核心層優(yōu)化函數(shù)一次,則進行v個小因子序列的fft計算,v≥16,若數(shù)據(jù)精度為單精度復(fù)數(shù),v≥32。依據(jù)從核間通信特征,數(shù)據(jù)規(guī)模為ni的fft計算有三種方案:
(1)僅由1個從核完成,沒有從核間通信,數(shù)據(jù)v*ni分布在單個從核ldm中,直接進行v個數(shù)據(jù)規(guī)模為ni的基2一維fft;
(2)由一行(列)8個從核共同完成計算,僅涉及從核的行寄存器通信,單個從核ldm中分布數(shù)據(jù)為v*(ni/8),ni進行二次分解ni=f1*f2;
(3)由整個從核即64個從核共同完成計算,包含從核的行寄存器通信與列寄存器通信,單個從核ldm中分布數(shù)據(jù)為v*(ni/64),ni進行二次分解ni=f1*f2*f3,通常f3=8。
由于方案(1)中每次計算的分量較小,于內(nèi)存數(shù)組的遍歷次數(shù)較多,實際情況中,本方案使用概率極少。
對于方案(2),由于ldm容量限制,工作集v*ni無法完全加載到同一從核,故而由一行上8個從核協(xié)同計算。如圖3所示,ni=64,分解為ni=f1*f2=8*8進行計算,計算結(jié)果以f2*f1的維度寫入片下內(nèi)存。該方案由圖3中4個步驟組成。
1)基于cooley-tukey分解規(guī)則,f1點fft計算所需數(shù)據(jù)在片下內(nèi)存中不連續(xù)分布,如圖3中的(a)所示,通過適當?shù)膁ma傳輸方式,將f1點數(shù)據(jù)加載到同一從核中,如圖3中的(b)所示;
2)在8個從核上分別進行v個f1點fft計算,與分解ni=f1*f2產(chǎn)生的旋轉(zhuǎn)因子相乘;
3)基于從核的行寄存器通信機制,將f2點fft計算所需數(shù)據(jù)加載到同一從核中,而后于8個從核上分別進行v個f2點fft計算,如圖3中(c)所示;
4)通過dma將計算結(jié)果以f2*f1的方式寫入片下內(nèi)存中,如圖3中(d)所示。
ni為本方案其他規(guī)模時,計算方式類似,不再詳述。
對于方案(3),工作集v*ni由64個從核協(xié)同計算,ni=f1*f2*f3,分為ni=f12*f3和f12=f1*f2兩步進行計算?;赾ooley-tukey算法,依次完成f1、f2和f3點fft計算,計算結(jié)果以f3*f2*f1的維度寫入片下內(nèi)存。該方案由5個步驟組成:
1)f1點fft計算所需數(shù)據(jù)在片下內(nèi)存中不連續(xù)分布,通過適當?shù)膁ma傳輸方式,將f1維度上相應(yīng)數(shù)據(jù)加載到同一ldm中;
2)在64個從核上分別進行v個f1點fft計算,與f12=f1*f2分解產(chǎn)生的旋轉(zhuǎn)因子相乘;
3)基于從核的行寄存器通信機制,將f2維度上相應(yīng)數(shù)據(jù)加載到同一從核中,而后于64個從核上分別進行v個f2點fft計算,與ni=f12*f3分解產(chǎn)生的旋轉(zhuǎn)因子相乘;
4)基于從核的列寄存器通信機制,將f3維度上相應(yīng)數(shù)據(jù)加載到同一從核中,而后于64個從核上分別進行v個f3點fft計算;
5)通過dma將計算結(jié)果以f3*f2*f1的方式寫入片下內(nèi)存中。
ni為本方案其他規(guī)模時,計算方式類似,不再詳述。
當輸入數(shù)據(jù)規(guī)模n大于64個從核協(xié)同計算的數(shù)據(jù)規(guī)模nr時,dma需對主存數(shù)據(jù)進行多次讀寫。基于訪存-計算重疊的雙緩沖機制,當從核對dma當次讀入ldm的數(shù)據(jù)進行fft計算時,dma進行下次fft計算所需數(shù)據(jù)的讀取以及當次fft計算結(jié)果向主核內(nèi)存的寫入。輸入數(shù)據(jù)規(guī)模n越大,雙緩沖效用越明顯,有效提升fft計算性能。
4.核心層:進行小因子序列的fft計算
當輸入數(shù)據(jù)規(guī)模n劃分到小因子數(shù)據(jù)規(guī)模fk或ni時,直接調(diào)用小因子優(yōu)化函數(shù)完成小因子序列的fft計算。小因子序列的fft計算是基于256位simd進行的向量化運算,即運算粒度為256位向量數(shù)據(jù),即4個64位雙精度數(shù)據(jù)。simd指單指令流多數(shù)據(jù)流singleinstructionmultipledata,一條simd指令同時處理256位數(shù)據(jù)。因此,相對于運算粒度為單個64位雙精度數(shù)據(jù)的計算,基于256位simd的高效率計算,若單從核工作集為v*fk,即v個fk點fft計算,則v次fk點fft計算有效轉(zhuǎn)化為v/4次fk點fft計算。
本發(fā)明基于申威26010平臺,設(shè)計兩層分解的fft計算框架、寄存器通信機制、訪存計算重疊的雙緩沖機制以及simd向量化運算等與計算平臺相關(guān)的優(yōu)化手段,有效提高fft計算性能。表1統(tǒng)計了數(shù)據(jù)類型為雙精度復(fù)數(shù)時,基于本平臺的基2一維fft的性能數(shù)據(jù)與開源fftw的基2一維fft的性能數(shù)據(jù),其中,數(shù)據(jù)規(guī)模取16384、32768、65536、131072、262144、524288、4194304,由表1得知,基2一維fft平均加速比為34.4,最高加速比達到50.3。
表1基2一維fft性能
注:上述以xmath-fft表示基于國產(chǎn)申威26010處理器的fft。
提供以上實施例僅僅是為了描述本發(fā)明的目的,而并非要限制本發(fā)明的范圍。本發(fā)明的范圍由所附權(quán)利要求限定。不脫離本發(fā)明的精神和原理而做出的各種等同替換和修改,均應(yīng)涵蓋在本發(fā)明的范圍之內(nèi)。