1

我花了一些时间优化我的算法,而我的准串行(无显式并行化)代码将 95% 的时间花在执行fftn密集单(浮点)矩阵乘法的行上

for k=1:10
    q = q +  x{k}.* fftn( mArray{k}.* ifftn( mOther{k} .* z ) );

尽管性能提升可以忽略不计,但我尝试为 FFT 添加一些智慧。

我不知道如何加快这段代码的速度,你认为编译 FFTW 会导致性能提升吗?我正在将 Matlab 2012b 用于第三代 i7。

编辑

我似乎打错了,x 取决于 k,否则就太容易了。我希望有人可以谈论优化实际的fft。

    q = q +  x.* fftn( mArray{k}.* ifftn( mOther{k} .* z ) );
    q = q +  x{k}.* fftn( mArray{k}.* ifftn( mOther{k} .* z ) );
4

2 回答 2

2

您应该在 fftn 转换和乘以 xeg 之前将 q 加在一起

A = 0;
for k=1:10
     A = A + mArray{k}.* ifftn( mOther{k} .* z );
end
q = q + x.*fftn(A);

IMO 这应该是等效的。

于 2013-02-06T15:31:37.490 回答
0

您是否考虑过使用卷积而不是来回 FFT?

于 2013-02-07T14:54:08.083 回答