一种基于ilp和dlp的fft浮点优化方法

文档序号:10724859阅读:465来源:国知局
一种基于ilp和dlp的fft浮点优化方法
【专利摘要】本发明公开了一种基于ILP和DLP的FFT浮点优化方法,其特征是按如下步骤进行:1,确定迭代层数,并将其划分成三层结构;2,通过使用位反序指令等操作,完成入度层计算;3,完成入度层计算后,对即将进行的中间层计算进行分类,对奇数层与偶数层两种情况进行分别运算,并得到中间层计算结果;4,采用模拟宏间传输操作,将中间层计算结果进行调整,并完成出度层计算。本发明能解决算法中所存在的指令相干与结构限制的问题,并充分发挥运算部件负载效能,从而大幅度提高瓶颈资源的平均利用率。
【专利说明】
一种基于丨LP和DLP的FFT浮点优化方法
技术领域
[0001] 本发明属于向量处理机以及数字信号处理领域,具体涉及基于ILP和DLP的硬件平 台上浮点版本FFT实现高效计算的方法。
【背景技术】
[0002] 离散傅里叶变换(Discrete Fourier Transform,DFT)在现代信号处理系统领域 里应用广泛,如雷达信号处理、SAR图像处理、声呐计算、视频图像算法、频谱分析、语音识别 等。傅里叶变化计算是典型的计算密集和访存密集型应用,例如N点的DFT变换的计算复杂 度为〇(N 2)。1965年Cooley和Turkey提出一种快速傅里叶变换(Fast Fourier Transform, FFT)计算方法,可显著地减少运算量,计算复杂度由原来的0(N2)降到了 0(Nlog2N)。信号处 理应用通常对计算的实时性要求很高,FFT计算效率越高,信号处理的实时性就越好。
[0003] 指令级并行(Instruction Level Parallelism,ILP)是指处理器在同一个指令周 期内发射多条并行执行的指令。数据级并行(Data Level Parallelism,DLP)是指能够在同 一时刻对不同数据进行并行计算的体系结构。基于ILP与DLP的硬件平台通常都会采用VLIW 与SB?技术,使其能够进行大规模的高效的运算。
[0004] 由于ILP与DLP技术相结合的硬件平台较为复杂,基于其的快速傅里叶变换的研究 并没有得到展开。

【发明内容】

[0005] 本发明为克服现有技术存在的不足之处,提出一种基于ILP和DLP的FFT浮点优化 方法,以期能解决算法中指令相干及结构的限制,并充分发挥运算部件负载效能,从而大幅 度提高瓶颈资源的平均利用率。
[0006] 为了解决上述技术问题,本发明采用以下技术方案:
[0007] 本发明一种基于ILP和DLP的FFT浮点优化方法的特点是按如下步骤进行:
[0008] 步骤1、假设所要计算的FFT输入向量的长度为M,根据所述长度Μ确定迭代层数为 Ν;其中Μ = 2ν;Μ、Ν为正整数,且Ν彡6;定义迭代层数Ν的前四层为入度层,第五层到第Ν-2层 为中间层;第Ν-1层和第Ν层为出度层;
[0009] 步骤2、使用位反序指令,将所述FFT输入向量反序读取到寄存器中,并将入度层所 对应的FFT旋转因子读入到相应的寄存器中;
[0010]步骤3、对存入寄存器中的FFT输入向量和FFT旋转因子进行入度层蝶形计算,得到 的入度层计算结果存入暂存空间中;
[0011] 步骤4、将Ν-4赋值给η;
[0012] 步骤5、判断η是否为奇数,若是,则执行步骤6,否则,执行步骤8;
[0013] 步骤6、从所述暂存空间中读取入度层计算结果与第Ν-η+1层所对应的旋转因子并 进行蝶形计算,得到第Ν-η+1层计算结果覆盖存储到输入向量空间中;
[0014] 步骤7、将n-Ι赋值给η;判断η = 2是否成立,若成立,则执行步骤10,否则,执行步骤 8;
[0015] 步骤8、从所述暂存空间读取计算结果以及第N-n+1层到第N-n+5层所对应的旋转 因子并进行蝶形计算,得到计算结果覆盖存储到所述暂存空间中;
[0016] 步骤9、将n-4赋值给η;判断η = 2是否成立,若成立,则执行步骤10,否则,执行步骤 8;
[0017] 步骤10、通过模拟宏间传输操作,将所述暂存空间中的计算结果转置重排,并读取 出度层所对应的旋转因子到相应的寄存器中;
[0018] 步骤11、对转置重排后的计算结果和出度层所对应的旋转因子进行出度层蝶形计 算,得到出度层计算结果存储到输出内存空间中;从而完成FFT浮点优化方法。
[0019] 本发明所述的基于ILP和DLP的FFT浮点优化方法的特点也在于,
[0020]所述步骤10中的模拟宏间传输操作是按如下步骤进行:
[0021]步骤10.1、定义处理器存在Κ个执行宏,其中,第i个执行宏记为Pi; 1 ;Κ为正 整数;则将连续的Κ行指令作为一个Κ X Κ的模拟宏间传输操作组;
[0022] 步骤10.2、初始化」=1;
[0023] 步骤10.3、初始化1 = 1;
[0024]步骤10.4、将第j行指令中第i个执行宏Pi内的数据存储至第j行指令中第(i+j-1) mod K个执行宏P(i+j-i)Md κ内;从而将同一个执行宏中不同指令行的数据调整到对应指令行 的不同执行宏中;
[0025]步骤10.5、将i + 1赋值给i ;并判断i >K是否成立,若成立,则执行步骤10.6;否则, 返回步骤10.4;
[0026]步骤10.6、将j+Ι赋值给j;并判断j>K是否成立,若成立,则完成计算结果的转置 重排;否则,返回步骤10.3。
[0027]与已有技术相比,本发明有益效果体现在:
[0028] 1、本发明提出一种新的浮点版本FFT优化方法,以适应ILP与DLP硬件平台的特点, 通过调整基二Cooley-Tukey算法结构,压缩其计算层数的同时,采用模拟宏间传输操作、内 存乒乓操作和高速缓存操作等技术,对基于ILP与DLP技术的硬件平台,进行快速傅里叶变 换的高效部署;有效的降低了运行时钟开销,从而提高了硬件平台对于快速傅里叶变换计 算的效率;
[0029] 2、由于本发明采用三层计算结构模型,使得原本多层结构的计算,变成了三层;从 而减少了内外层循环之间调度所导致的寄存器内容刷新与流水线清空所造成的时钟开销;
[0030] 3、由于本发明采用了内存乒乓操作,使原本读数与取数存储于一个内存块之中, 分成了两块乒乓内存进行存储;从而避免了对于内存同时读写造成的时钟开销,提高了计 算效率;
[0031] 4、本发明模拟宏间传输操作是采用指令并行技术将数据级并行技术造成的不同 执行分簇中的数据,调整到相同执行分簇之中,以保证后续的计算;该操作有效的避免了内 存Bank冲突,并且提高了各个执行宏间数据调整的效率;
[0032] 5、本发明进一步的发掘蝶形因子的对称性,减少了运算中蝶形因子的预取个数, 以达到减少寄存器使用的目的;该操作可以减少近一半的旋转因子,在降低了内存使用空 间的同时,减少了寄存器被旋转因子所占用的个数;
[0033] 6、经过实验验证,本发明方法在32位浮点版本复数傅里叶变换中,对其1024点输 入的运算成功的将时钟周期压缩到了 980;各层计算结构中的瓶颈功能部件使用率分别达 到了96.68%,98·25%和 100%。
【附图说明】
[0034]图1是本发明的总流程图;
[0035]图2是本发明中模拟宏间传输操作流程图;
[0036]图3是本发明中间层计算用到的四层模型。
【具体实施方式】
[0037]本发明的目的是提出一种适用于ILP和DLP硬件平台的浮点版本FFT的优化方法, 以期能在其提供的硬件基础设施之上进行高性能的优化。下述的【具体实施方式】仅以 BWDSP104X平台作为实例进行优化方法的讨论,然而本发明中优化技术和方法并不仅局限 于BWDSP104X平台。任何ILP和DLP的硬件平台都适用于本发明的优化方案中。
[0038] BWDSP104X平台拥有4个执行宏(x,y,z,t),每个宏中有8个算术逻辑单元(ALU),8 个乘法器(MUL),4个移位器(SHIFT),1个超算器和一组包含128个寄存器的通用寄存器组。 其共有11级流水线,每个指令行最多可同时并行16字指令。
[0039]本实施例中,一种基于ILP和DLP的FFT浮点优化方法是按如下步骤进行:
[0040] 步骤1、假设所要计算的FFT输入向量的长度为M,根据所述长度Μ确定迭代层数为 Ν;本实施方案中以输入向量长度为1024为例进行说明,其它长度可按相似方案进行实施; 其中Μ=2ν;Μ、Ν为正整数,且Ν彡6;此时的1=10 4=1024;定义迭代层数_勺前四层为入度 层,第五层到第Ν-2层为中间层;第Ν-1层和第Ν层为出度层;图一为本FFT计算过程的流程 图,图中第1-4步描绘了入度层计算过程、第5-7步描绘了中间层计算过程、第8-10步描绘了 出度层计算过程;
[0041] 步骤2、使用位反序指令,将所述FFT输入向量反序读取到寄存器中,并将入度层所 对应的FFT旋转因子读入到相应的寄存器中;表一为4个执行宏的数字信号处理器,采用位 反序指令读取数据后,各个寄存器中存储的数据。由其指令特点导致了同一执行宏的不同 寄存器所读取的数据为反序,而同一寄存器的不同执行宏所读取的数据为顺序。表二列出 了入度层所需旋转因子的详情。从表二中可以看到,入度层所需旋转因子,可以用三个数来 代替,分别是:cos(3t/4),sin(>/8)与cos(3t/8)。
[0042] 表一位反序读取的数据(表中数字代表其在数组中的顺序)
[0044]表二前四层旋转因子
[0047]步骤3、对存入寄存器中的FFT输入向量和FFT旋转因子进行入度层蝶形计算,得到 的入度层计算结果存入暂存空间中;开辟暂存空间的目的是为了保证其与输入向量空间进 行内存乒乓操作,使得计算过程在满流水的时候能够同时完成读写操作;
[0048] 步骤4、将N-4赋值给η;
[0049] 步骤5、判断η是否为奇数,若是,则执行步骤6,否则,执行步骤8;
[0050] 步骤6、从所述暂存空间中读取入度层计算结果与第Ν-η+1层所对应的旋转因子并 进行蝶形计算,得到第N-n+1层计算结果覆盖存储到输入向量空间中;
[0051]步骤7、将n-1赋值给η;判断n = 2是否成立,若成立,则执行步骤10,否则,执行步骤 8;
[0052]步骤8、从所述暂存空间读取计算结果以及第N-n+1层到第N-n+5层所对应的旋转 因子并进行蝶形计算,得到计算结果覆盖存储到所述暂存空间中;本步骤中的所述暂存空 间要根据不同处理过程分别讨论;若本次FFT计算过程需要通过奇数层计算的话,此时的读 取空间为输入向量空间,存储空间为所开辟的暂存空间;若本次FFT计算过程无需通过奇数 层计算的话,此时的读取空间为所开辟的暂存空间,存储空间为输入向量空间;以上即为内 存乒乓操作的过程;
[0053]中间四层的计算模型与前四层的计算模型相类似,只是将16个数组合成一个数据 块,然后以数据块为单位,对各个单位间的数据进行计算。图三为中间四层计算模型简图, 图中以数据块为单位,各个蝶形运算分别在数据块中相应顺序的数据之间进行。图左上角 的虚线框内,对数据块进行了简单的描绘。
[0054]本发明进一步发掘了中间层旋转因子的四分之一对称性;由于本发明的中间层计 算集成了原本计算结构的四层计算,使得原各层之间所存在的数据依赖(Date DependenCe,DP),需要通过大量的寄存器保存数据来解决;这就给寄存器的使用带来了极 大的压力,尤其是对基于ILP与DLP的DSP进行大规模计算来说;此时可以根据旋转因子四分 之一对称性,将当前层的后一半旋转因子伪装成前一半的旋转因子做一次复乘运算;由式 (1)与式(1)推导出的式(3),表征了该旋转因子所具有的四分之一对称性的特点;
[0058]本实施例中对于中间层计算所需旋转因子分别为<与^ + %时,实现蝶形运算的 核心代码分别为程序段1与程序段2;以下程序段中,rll: 10与rl3:12存储所需进行的蝶形 运算的两组数;r53:52存储ω(蝶形因子的实部与虚部;rl5:14用来作为暂存寄存器,存储复 数相乘的中间结果;
[0059] 程序段1:
[0061 ] 程序段2:
[0064] 步骤9、将n-4赋值给η;判断n = 2是否成立,若成立,则执行步骤10,否则,执行步骤 8;
[0065] 步骤10、通过模拟宏间传输操作,将所述暂存空间中的计算结果转置重排,并读取 出度层所对应的旋转因子到相应的寄存器中;
[0066] 步骤11、对转置重排后的计算结果和出度层所对应的旋转因子进行出度层蝶形计 算,得到出度层计算结果存储到输出内存空间中;从而完成FFT浮点优化方法。
[0067] 其中,步骤10中的模拟宏间传输操作是按如下步骤进行:
[0068]步骤10.1、定义处理器存在K个执行宏,其中,第i个执行宏记为Pi; 1 ;K为正 整数;则将连续的Κ行指令作为一个Κ X Κ的模拟宏间传输操作组;本实施例以4个执行宏的 处理器为例进行过程的描述;表三中列出了 4X4的模拟宏间传输操作组;正如图二所示的 流程,模拟宏间传输操作的一开始就要构建一个模拟宏间传输操作组;
[0069]表三模拟宏间传输操作组
[0071]步骤 1〇.2、初始化]_ = 1;
[0072] 步骤10.3、初始化1 = 1;
[0073]步骤10.4、将第」行指令中第1个执行宏?1内的数据存储至第」行指令中第(1+」_1) mod Κ个执行宏P(i+j-i)Md κ内;从而将同一个执行宏中不同指令行的数据调整到对应指令行 的不同执行宏中;本步骤为模拟宏间传输操作的核心过程;如图二所示,本过程为 双层循环的内部关键操作;其核心程序段如下:其中四个执行宏分别以x、y、z和t来标识;
[0074] ① xrll: 10 = zr7:6 | | zr7:6 = xrll: 10 | |yrl3:12 = tr9:8 | | tr9:8 = yrl3:12
[0075] ②xr9:8 = yr7:6 I |yr7:6 = xr9:8 I I zrl3:12 = trll: 10 I I trll: 10 = zrl3:12
[0076] ③xrl3:12 = tr7:6 I I tr7:6 = xrl3:12 I |yrll: 10 = zr9:8 I I zr9:8 = yrll: 10
[0077] 步骤10.5、将i + 1赋值给i ;并判断i >K是否成立,若成立,则执行步骤10.6;否则, 返回步骤10.4;
[0078]步骤10.6、将j+Ι赋值给j;并判断j>K是否成立,若成立,则完成计算结果的转置 重排;否则,返回步骤10.3;表四给出了本实施例中最后重排得到的结果。
[0079]表四模拟宏间传输后的结果
【主权项】
1. 一种基于ILP和DLP的FFT浮点优化方法,其特征是按如下步骤进行: 步骤1、假设所要计算的FFT输入向量的长度为M,根据所述长度Μ确定迭代层数为N;其 中Μ = 2ν;Μ、Ν为正整数,且Ν多6;定义迭代层数Ν的前四层为入度层,第五层到第Ν-2层为中 间层;第Ν-1层和第Ν层为出度层; 步骤2、使用位反序指令,将所述FFT输入向量反序读取到寄存器中,并将入度层所对应 的FFT旋转因子读入到相应的寄存器中; 步骤3、对存入寄存器中的FFT输入向量和FFT旋转因子进行入度层蝶形计算,得到的入 度层计算结果存入暂存空间中; 步骤4、将Ν-4赋值给η; 步骤5、判断η是否为奇数,若是,则执行步骤6,否则,执行步骤8; 步骤6、从所述暂存空间中读取入度层计算结果与第Ν-η+1层所对应的旋转因子并进行 蝶形计算,得到第Ν-η+1层计算结果覆盖存储到输入向量空间中; 步骤7、将η-1赋值给η;判断η = 2是否成立,若成立,则执行步骤10,否则,执行步骤8; 步骤8、从所述暂存空间读取计算结果以及第Ν-η+1层到第Ν-η+5层所对应的旋转因子 并进行蝶形计算,得到计算结果覆盖存储到所述暂存空间中; 步骤9、将η-4赋值给η;判断η = 2是否成立,若成立,则执行步骤10,否则,执行步骤8; 步骤10、通过模拟宏间传输操作,将所述暂存空间中的计算结果转置重排,并读取出度 层所对应的旋转因子到相应的寄存器中; 步骤11、对转置重排后的计算结果和出度层所对应的旋转因子进行出度层蝶形计算, 得到出度层计算结果存储到输出内存空间中;从而完成FFT浮点优化方法。2. 根据权利要求1所述的基于ILP和DLP的FFT浮点优化方法,其特征是,所述步骤10中 的模拟宏间传输操作是按如下步骤进行: 步骤10.1、定义处理器存在Κ个执行宏,其中,第i个执行宏记为Pi; 1 ;Κ为正整数; 则将连续的Κ行指令作为一个Κ ΧΚ的模拟宏间传输操作组; 步骤10.2、初始化」_ = 1; 步骤10.3、初始化i = l; 步骤10.4、将第」行指令中第;[个执行宏?1内的数据存储至第」行指令中第(1+」-1)1]1〇(11( 个执行宏Pd+H-dK内;从而将同一个执行宏中不同指令行的数据调整到对应指令行的不同 执行宏中;Kj$K; 步骤10.5、将i + 1赋值给i;并判断i>K是否成立,若成立,则执行步骤10.6;否则,返回 步骤10.4; 步骤10.6、将j+Ι赋值给j;并判断j>K是否成立,若成立,则完成计算结果的转置重排; 否则,返回步骤10.3。
【文档编号】G06F9/38GK106095730SQ201610473373
【公开日】2016年11月9日
【申请日】2016年6月23日
【发明人】顾乃杰, 任开新, 叶鸿, 周文博
【申请人】中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1