问:C28x、C28x FPU和 VCU上的 FFT执行有哪些不同?如何选择使用哪一个?
Annie Liu:
差异:
32 位定点
此实现使用 C28 定点 CPU。它使用 CPU 的片上 32 位定点数学功能。根据经验,对于优化的 32 位实现,每个 FFT 蝶形计算需要大约 20 个周期。
16 位定点
此实现可使用 C28 定点 CPU 或具有 VCU 增强功能的 C28x(C28x+VCU)。
C28x 定点
此实现使用 C28x 定点 CPU 的 16 位数学功能。如果使用 C28 CPU 内核,每个 FFT 蝶形计算需要大约 16 个周期
具有 VCU 的 C28x
此实现使用具有 VCU 的 C28x 的 16 位数学功能。除了定点 CPU 外,VCU 还提供优化的 16 位复杂数学功能。如果使用 C28x+VCU 增强功能,每个 FFT 蝶形计算需要大约 5 个周期。目前有两个版本的 VCU,0 类通常称为 VCU-I,2 类称为 VCU-II。VCU-II 上的 FFT 显著加快,蝶形计算平均需要约 2.5 个周期来完成。
注意:VCU 并非在所有器件上都可用,也没有计划在其他器件上提供。
32 位浮点
此实现使用扩展浮点指令集。它使用 C28x+FPU 的 32 位浮点数学功能以及重复块 (RPTB) 指令。根据经验,每个 FFT 蝶形计算需要大约 10 个周期。如果是在浮点器件上实现并且需要 32 位,这是优选实现。
具有 TMU 的 32 位浮点
三角函数加速器 (TMU) 是 32 位单精度浮点单元 (FPU) 的扩展。它提供了以周期有效的方式执行某些三角函数和算术函数的指令。TMU 特定指令用于通过有效计算平方根、除法和反正切来加速幅度和相位计算。可以通过设置以下编译器选项来启用 TMU:
注意:请参阅 C2000 编译器用户指南 (http://www.ti.com/cn/lit/spru514) 了解所有与浮点相关的编译器选项。
–float_support=fpu32 和 –tmu_support=tmu0。
如果用户希望在 C 代码中使用 TMU,则必须打开附加选项。
–fp_mode=relaxed
这将导致编译器用 TMU 指令替换对标准 C 数学库的调用,如正弦或余弦。
结论:
16 位实现
虽然 C28x+VCU 实现可提供出色性能,但并非在所有器件上都可用,也没有计划在其他器件上提供。 VCU 幅度和相位计算与定点器件上的计算相同。这是因为 VCU 没有改进这些算法的增强功能。
32 位定点 FFT 性能
提升 32 位定点 FFT 性能的方法:
考虑使用浮点器件。FPU 可以使性能翻倍。此外,幅度和相位计算速度更快,因为 FPU 在这方面比 32 位定点数学的性能更高。32 位定点和 32 位浮点实现之间的分辨率权衡可忽略不计。
如果应用可以容忍 16 位实现,则考虑使用 C28x+VCU。与 32 位定点实现相比,这会更快。但是,VCU 没有改进幅度或相位计算性能的指令。这些操作最好在浮点中完成。
32 位 FPU 与 16 位 VCU
16 位 VCU 与 32 位 FPU 实现之间的性能差异并不大。VCU-I(0 型)没有改进幅度和相位计算性能的增强功能。VCU-II 有一个新指令,可在单个周期内计算 16 位定点复变量的幅度;它在相位计算方面没有任何改进。
CLA
虽然 CLA 本身不太适合完整的 FFT 算法,但可以考虑将其用于幅度和相位计算。这将减轻 CPU 执行这些操作的负载。例如,在 F2806x 之类的器件上,可以在主 C28x+FPU 上执行浮点 FFT,并在 CLA 上执行幅度计算。 由于 CLA 的 RAM 有限,因此点数将受到限制。