我想知道有多少FLOPS
快速傅立叶变换(FFT)执行。
所以,如果我有一个1
维数N
浮点数,我想计算这组数的FFT,那么需要执行多少FLOPS
?
我知道这取决于使用的算法,但最快可用的是什么?
我也知道FFT的缩放大约为N*log(N)
,但这不能回答我的问题。
答案 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
方法的浮点运算次数,可以参考下图:
让2
要转换的序列的长度。总共有N
个阶段,每个阶段包含log2N
个蝴蝶。让我们再考虑通用蝴蝶:
让我们重写通用蝴蝶的输出
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
中抽取的情况,见图