FFT有多少FLOPS?

时间:2016-10-14 06:46:06

标签: algorithm fft flops

我想知道有多少FLOPS快速傅立叶变换(FFT)执行。

所以,如果我有一个1维数N浮点数,我想计算这组数的FFT,那么需要执行多少FLOPS

我知道这取决于使用的算法,但最快可用的是什么?

我也知道FFT的缩放大约为N*log(N),但这不能回答我的问题。

4 个答案:

答案 0 :(得分:3)

这取决于实施。最快不一定意味着最低 FLOP 也不是最高 FLOPS 。通常通过利用 HW 架构而不是降低 FLOP 来实现速度。有太多的实现,所以你的问题没有实际的代码和架构是无法回答的。

我喜欢预先计算的W矩阵实现,因为我经常多次使用 FFT 进行单分辨率矩阵,所以每个分辨率不需要再计算W次。这可以显着减少每个递归层的 FLOP

例如,此DFFTcc每次迭代仅使用+,-,*次操作时有14次 FLOP 。假设 1D FFT 情况N=8并使用基本数据类型,如果我没有犯任何愚蠢的错误:

FLOP = 8*14 + (4+4)*14 +(2+2+2+2+2)*14 +(1+1+1+1+1+1+1+1)*2 = 14*N*log2(N) + 2*N = 352

如果使用Real输入/输出,您甚至可以降低第一个/最后一个递归层的值。但简单的 FLOP 计数是不够的,因为有些操作比其他操作更复杂。并且 FLOP 也不是影响速度的唯一因素。

现在要获得 FLOPS ,只需衡量time [s] FFT

FLOPS = FLOP/time

答案 1 :(得分:0)

您可以在FFTW benchmark page估算触发器效果。稍微过时,但包含最有效的FFT实现的结果。

对于3.0 GHz Intel Xeon Core Duo来说,粗略估计约为5000 MFlops

答案 2 :(得分:0)

"最快可用"不仅非常依赖于处理器,而且我的测试可能使用完全不同的算法。但我计算了一个bog-simple非递归就地抽取时间基数-2 FFT的触发器,它采用旧的ACM算法教科书进行长度为1024的FFT,得到20480 fmuls和30720 fadds (这是使用预先计算的旋转因子表,因此超越函数计算不包括在翻牌计数中)。但请注意,此代码还使用了大量的整数数组索引计算,正弦表查找和数据移动,这可能比FPU花费了更多的CPU周期。更大的FFT可能还会导致大量额外的数据缓存未命中和其他内存延迟惩罚。在这种情况下,可以通过添加更多FLOP来加速代码,以换取减少的内存层次延迟惩罚。所以,YMMV。

答案 3 :(得分:0)

正如Spektre所强调的那样,实际的FLOPS(每秒浮点运算)取决于特定的硬件和实现,而较高的FLOP(浮点运算)算法可能对应于较低的{{1}实现,只是因为有了这样的实现,你可以更有效地利用硬件。

如果要计算时间抽取基数 - FLOPS 方法的浮点运算次数,可以参考下图:

enter image description here

2要转换的序列的长度。总共有N个阶段,每个阶段包含log2N个蝴蝶。让我们再考虑通用蝴蝶:

enter image description here

让我们重写通用蝴蝶的输出

N/2

蝴蝶因此涉及一个复数乘法和两个复数加法。在根据实部和虚部重写上述方程时,我们有

E(i + 1) = E(i) + W * O(i)
O(i + 1) = E(i) - W * O(i)

因此,我们有

4次乘法

real(E(i + 1)) = real(E(i)) + (real(W) * real(O(i)) - imag(W) * imag(O(i)))
imag(E(i + 1)) = imag(E(i)) + (real(W) * imag(O(i)) + imag(W) * real(O(i)))

real(O(i + 1)) = real(O(i)) - (real(W) * real(O(i)) - imag(W) * imag(O(i)))
imag(O(i + 1)) = imag(O(i)) - (real(W) * imag(O(i)) + imag(W) * real(O(i)))

6总和

real(W) * real(O(i)), 
imag(W) * imag(O(i)), 
real(W) * imag(O(i)), 
imag(W) * real(O(i)).

因此,抽取时间基数real(W) * real(O(i)) – imag(W) * imag(O(i)) (1) real(W) * imag(O(i)) + imag(W) * real(O(i)) (2) real(E(i)) + eqn.1 imag(E(i)) + eqn.2 real(E(i)) – eqn.1 imag(E(i)) – eqn.2 方法的操作次数为

2

如果乘法排列不同,这些操作计数可能会改变,请参阅Complex numbers product using only three multiplications

相同的结果适用于频率基数2N * log2(N) multiplications 3N * log2(N) additions 抽取的情况,见图

enter image description here