Fortran でFFTW 3.1.2を使用して、実数から複素数、および複素数から実数の FFT を実行します。1つのスレッドで完全に機能します。
残念ながら、32 CPU 共有メモリ コンピュータでマルチスレッド FFTW を使用すると、いくつかの問題が発生します。9 つの実数から複素数への FFT 用と 9 つの複素数から実数への FFT (各実数フィールドのサイズ: 512*512) の 2 つの計画があります。私は Fortran を使用ifort
し、次のライブラリにリンクするコードを (を使用して)コンパイルします。
-lfftw3f_threads -lfftw3f -lm -lguide -lpthread -mp
プログラムは正しくコンパイルされているようで、関数sfftw_init_threads
はゼロ以外の整数値 (通常は 65527) を返します。
ただし、プログラムは完全に実行されますが、スレッドが 1 つよりも 2 つ以上あると遅くなります。top
コマンドは、100% を超える (および n_threads*100 よりもはるかに大きい) 奇妙な CPU 負荷を示します。コマンドは、1 つのプロセッサ (番号 1 としましょう) がプログラムで 100% の負荷で動作しているhtop
ことを示していますが、番号 1 を含む他のすべてのプロセッサは、このまったく同じプログラムで、負荷 0%、メモリ 0% で動作しています。そして0回。
誰かがここで何が起こっているのか知っているなら...どうもありがとう!