2

私はFFTW 3.1.2をFortranで使用して、実際から複雑な複雑なFFTを実行します。それは1つのスレッドで完全に動作します。共有メモリコンピュータ上のマルチスレッドFFTW 3.1.2

残念ながら私はマルチスレッドFFTW を32 CPU共有メモリコンピュータで使用するといくつかの問題があります。私は2つの計画を持っています: 複雑な9つのFFTと1つの複雑な9つの複雑なFFT(各実フィールドのサイズ :512 * 512)。私は、Fortran使用して、私は私の のコードは次のライブラリにリンク(ifortを使用して)コンパイル:

-lfftw3f_threads -lfftw3f -lm -lguide -lpthread -mp 

プログラムが正しくコンパイルするようだと、通常、非ゼロの整数値を返しますsfftw_init_threads機能、65527.

しかし、プログラムが完璧に動作しても、2 以上のスレッドでは1よりも遅くなります。 topコマンドは、奇妙なCPU負荷 が100%より大きい(そしてn_threads * 100よりはるかに大きい)ことを示しています。 htop コマンドは、 の100%の負荷で1つのプロセッサ(数字1とします)が動作していることを示していますが、 の数値を含む他のすべてのプロセッサは、0%の負荷、0%メモリおよび0時間。

ここで何が起こっているのか誰かが考えているなら...ありがとう!

答えて

2

これは同期問題の可能性があるようです。このタイプの動作は、1つを除くすべてのスレッドがロックアウトされている場合に発生します。ライブラリーコールへのセマフォーによって。

どのようにプランナーに電話しますか?すべての関数呼び出しが正しく同期されていますか?単一のスレッドまたはすべてのスレッドにプランを作成していますか?

1

FFTが非常に大きい場合を除き、FFTWでの自動マルチスレッド化はスピードを上げる可能性は低いです。ライブラリ内の同期オーバーヘッドは、実行されている計算を支配することができます。異なるサイズのプロファイルを作成し、ブレークポイントがどこにあるかを確認する必要があります。

関連する問題