1

アルゴリズムの最適化に時間を費やし、準シリアル(明示的な並列化なし)コードは、95%の時間を、fftn密な単一(フロート)行列の乗算を実行する行に費やしました。

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

パフォーマンスの向上はごくわずかでしたが、FFTにいくつかの知恵を加えてみました。

このコードを高速化する方法がわからなくなっていますが、FFTWをコンパイルするとパフォーマンスが向上する可能性があると思いますか?私は第3世代i7にMatlab2012bを使用しています。

編集

私はタイプミスをしたようです、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 に答える