引言
现代的高度并行式处理器的进展如AnalogDevices的TigerSHARC®系列处理器,要求寻找更为有效的方法来并行实现许多标准算法的操作。该应用手记不仅解释最快的16位FFT如何在TigerSHARC上的实现,而且提供指导算法的开发,使你能够将同一技术施于其他算法。一般来说,大多数算法有几个层次的优化级,该手记将给予详细讨论。第一和最直截了当的优化级是指令的并行,这是处理器架构所允许的。这种工作是简单而又烦人的。优化的第二级是循环体展开( loop unrolling)和软件的流水线操作,以取得最大并行性,避免流水线停止工作。虽然比简单的一级并行复杂,但可按描述的步骤进行工作,无需深入了解算法,几乎没有独创性。第三级是重建算法的数学操作,仍产生有效的结果,但更适合处理器的架构。这需要彻底了解算法,不像软件的流水线操作那样,它没有既定的引导你走向最佳方案的步骤。这在写最佳代码中是最有趣的。在实际应用中,常常不需要用到所有的优化层次。当所有的优化级需要时,最好以反向的顺序进行这些级的优化。在代码完全被流水化操作以后,再来尝试改变基本的底层算法已经太迟了。由此,程序师必须要先考虑算法结构,随后组织代码。然后通常将优化层次1和2(并行、展开以及流水线操作)同时进行。
本手记中所参考使用的代码由模拟器件公司提供。具体例子使用一个256-点FFT,但其中的数学算法和理念同样适于其它大小(不小于16点)的变换。
如同所见,重建的算法将FFT打散成更小的部分而后可被并行。在256点FFT(其代码列表在该应用手记的尾部)的情形下, FFT被分成一个个16点的FFT有16个,16点FFT以基数4(radix-4)的格式来完成(即每个只有两个阶)。如果我们做一个512=点 FFT,我们将不得不一次做16个32点的FFT(或者一次做32个16点的FFT) ,每个32点FFT以基数4格式先完成前两个阶,最后一阶做成基数2格式。这种不同意味着书写FFT大小统配( FFT size-generic)的代码是困难的。虽然实现的算法是通用的,可同等地适于所有大小的FFT,但代码却不能这样,它必须针对每一种点大小FFT进行手工调整,以便能够完全达到最优化。带上这些一并考虑,让我们进入TigerSHARC园地里迷人的定点FFT世界吧。
完整的文档请通过百度云盘下载:链接:http://pan.baidu.com/s/1o6Zm650 密码:0nqd
ADI DSP任何问题,可联系OP的QQ:5516164,邮箱:sale@openadsp.com |