Microsoft PPL ライブラリと並列プログラミング全般について質問があります。FFTW を使用して、64 x 64 x 64 FFT と逆 FFT の大規模なセット (100,000) を実行しています。現在の実装では、並列 for ループを使用し、ループ内でストレージ配列を割り当てます。これらのケースでは、CPU 使用率が約 60 ~ 70% しか上がらないことに気付きました。(これは、私がテストした FFTW によって提供される組み込みのスレッド化された FFT よりも優れた使用率であることに注意してください)。fftw_malloc を使用しているため、完全な使用を妨げている過剰なロックが発生している可能性はありますか?
これに照らして、メイン処理ループの前に各スレッドにストレージ配列を事前に割り当てて、ループ自体の中でロックが不要になるようにすることをお勧めしますか? もしそうなら、MSFT PPL ライブラリでこれがどのように可能になるのでしょうか? 私は以前に OpenMP を使用していました。その場合、提供された関数を使用してスレッド ID を取得するのは簡単です。ただし、PPL ドキュメントで同様の関数を見たことがありません。