Fortranには、MKLのDGESVD
を使用し、Intelコンパイラで8つのコアで動作するコードがあります。コードはOpenMP経由でアクセラレーションされます。また、OpenMPとMKLにスレッド数(omp_num_threads
とmkl_num_threads
)を設定する独自の設定があることも知っています。私はスレッドの最適な数を知りたい。 LAPACKルーチンを呼び出す前にOMP_NUM_THREADS=1
を設定する必要がありますか? OpenMPスレッドの数はスレッドのMKL数に影響しますか?OpenMPとMKLスレッディング
6
A
答えて
12
MKLは、マルチスレッドドライバ用にOpenMPも使用しています。つまり、OpenMPスレッドの数はMKLスレッドの数に影響しますが、非常に複雑な方法です。
まず、OpenMPコードであるMKLは、通常のOpenMPの方法で制御され、スレッド数を設定します。 OMP_NUM_THREADS
を呼び出し、omp_set_num_threads
を呼び出します。しかし、MKL_NUM_THREADS
とmkl_set_num_threads()
の形式でオーバーライド設定メカニズムも提供します。これにより、ユーザーコードとMKLルーチンに異なる数のスレッドを持つことができます。
目的のスレッド数を設定すると、ネストされた並列処理の場合にMKLがどのように動作するかも知る必要があります。つまり、MKLは、ユーザコード内のアクティブなparallel
領域内から呼び出された場合、デフォルトではシングルスレッドを実行します。 MKLはこの動作を無効にすることができるMKL_DYNAMIC
スイッチを提供していますが、異なるOpenMPランタイム間の互換性が保証されていないため、同じOpenMPコンパイラをMKLのユーザーコードに使用する必要があります。
一般に、MKLを呼び出す前にスレッドの数を1に設定する必要はありません.MKLスレッドの数が明示的に設定されていない限り、単一スレッドになります。また、ネストされた並列処理が有効になっているときには、parallel
領域から呼び出すときは注意が必要です。
MKLのスレッド数の制御に関する詳細は、MKL's User Guideを参照してください。
関連する問題
- 1. AppDomainとスレッディング
- 2. PyGTKとスレッディング
- 3. 'sys.excepthook'とスレッディング
- 4. C#スレッディングとブロッキング
- 5. JDBCとスレッディング
- 6. スレッディングとシングルトン
- 7. NSOperationとCoreDataスレッディング
- 8. urllib2とスレッディング
- 9. スレッディングと条件
- 10. OS X用Numpy-MKL
- 11. Intel MKLとAMDの数学コアライブラリ
- 12. NumpyとNumpy-MKLの違いは?
- 13. C#スレッディングとWindowsフォーム
- 14. インスタンス変数とスレッディング
- 15. スレッディングとSOLID原則
- 16. PythonからMKLのスレッド関数を呼び出す:openmpライブラリが見つかりません?
- 17. OpenMpとQt Creator
- 18. OpenMPとコア/スレッド
- 19. OpenMPとC99データ
- 20. Boost RandomとOpenMP
- 21. OpenMPとMPIハイブリッドプログラム
- 22. OpenMPとCPUアフィニティー
- 23. 単純な並列ループ用のC++ 11スレッディングとOpenMP。それはいつですか?
- 24. インテル・フィリピンでのMKLパフォーマンス
- 25. C#HPC - MPIとOpenMP
- 26. ホテルトップとのOpenMPスレッド
- 27. カスタムトランザクションの実装 - スレッディングとロック
- 28. Swingアプリケーションのスレッディングとデッドロック
- 29. Objective-Cのスレッディングとソケット
- 30. スレッディングとpcapの問題