发明名称 一种大点数FFT在处理器上的实现方法
摘要 本发明公开了一种大点数FFT在处理器上的实现方法,能够解决传统FFT算法在处理器上实现大点数快FFT时没有充分考虑Cache丢失对执行效率影响的问题,改进了传统Winograd算法处理速度有限的问题。该方法包括:将一维序列存储为二维矩阵;处理器先列FFT:每次从二维矩阵中读取i列数据,读取的i列数据分<img file="DDA00002790658900011.GIF" wi="39" he="86" />次处理,则处理器共读取并处理<img file="DDA00002790658900012.GIF" wi="54" he="86" />次;其中,在保证列长度<img file="DDA00002790658900013.GIF" wi="309" he="87" />的基础上,使行长度M小于或等于处理器所用Cache的容量;处理器再进行行FFT,一次一行,且采用新的旋转因子,并将结果按照列方向输出。
申请公布号 CN103106181A 申请公布日期 2013.05.15
申请号 CN201310034812.3 申请日期 2013.01.29
申请人 北京理工大学 发明人 高立宁;刘峰;马潇;刘腾飞
分类号 G06F17/14(2006.01)I 主分类号 G06F17/14(2006.01)I
代理机构 北京理工大学专利中心 11120 代理人 杨志兵;高燕燕
主权项 1.一种大点数FFT在处理器上的实现方法,其特征在于,包括:步骤一、将待处理的一维序列x(n)分L段存储为L×M的二维矩阵,L为列的长度,M为行的长度;设定后续步骤二中每次读取i列数据,i为正整数,则在保证<img file="FDA00002790658600011.GIF" wi="309" he="87" />的基础上,使行长度M小于或等于CacheLength;CacheLength为处理器所用Cache的容量;步骤二、处理器进行列FFT;处理器每次从L×M二维矩阵中读取i列数据,通过Cache的缓存放入内存的指定空间,然后从指定空间读取数据并进行列FFT,并将结果原位存回L×M二维矩阵;假设根据处理器数据宽度的限制,处理器每次处理数据量为w列,则i的取值为w的整数倍;读取的i列数据分<img file="FDA00002790658600012.GIF" wi="39" he="86" />次处理;处理器共读取<img file="FDA00002790658600013.GIF" wi="53" he="86" />次数据并进行列FFT,从而实现M次L点的列FFT;步骤三、处理器进行行FFT;处理器每次从步骤二处理后的L×M二维矩阵中读取一行数据,通过Cache的缓存放入内存的指定空间,然后从指定空间读取缓存数据并进行行FFT,并将结果按照列方向输出;处理器共读取L次数据并进行行FFT,从而实现L次M点的行FFT;本步骤的行FFT运算时第b级蝶形运算所用的旋转因子W(b,u)由下式确定:<maths num="0001"><![CDATA[<math><mrow><mi>W</mi><mrow><mo>(</mo><mi>b</mi><mo>,</mo><mi>u</mi><mo>)</mo></mrow><mo>=</mo><msubsup><mi>W</mi><mrow><mi>P</mi><mrow><mo>(</mo><mi>b</mi><mo>)</mo></mrow></mrow><msub><mi>k</mi><mn>0</mn></msub></msubsup><mo>&CenterDot;</mo><msubsup><mi>W</mi><mrow><mi>Q</mi><mrow><mo>(</mo><mi>b</mi><mo>)</mo></mrow></mrow><mi>u</mi></msubsup></mrow></math>]]></maths>其中,W<sub>n</sub>=e<sup>-j2π/n</sup>,P(b)=N/2<sup>c-b</sup>,Q(b)=M/2<sup>c-b</sup>;b表示FFT算法中蝶形运算的当前级数;c表示FFT算法中所包含蝶形运算的总级数,c=log<sub>2</sub>(M);u表示b级蝶形运算输出序列的序号,取值范围是u=0,1,...,Q(b)-1;k<sub>0</sub>为当前进行FFT变换的行数据的行序号。
地址 100081 北京市海淀区中关村南大街5号