IntelシステムでOpenMPを使用しているときに、KMP_AFFINITY=verbose,(other options...)
を設定すると、スレッドが実際にバインドされているコアがライブラリから吐き出されることがよくあります。これは、さまざまなスレッドバインドオプションを試すときに役立ちます。現在、私はPower8システムを使用しており、GNUおよび/またはIBM OpenMPディストリビューションにはKMP_AFFINITY=verbose
相当のものがあるかどうか疑問です。言い換えれば、g ++やxlC++でOpenMP実行ファイルをコンパイルすると、スレッドの配置場所に関する情報をどのように取得できますか?gnuおよびibm openmpライブラリのKMP_AFFINITY = verboseに相当しますか?
答えて
GCC OpenMP documentation(libgomp)これは現在のところ不可能であると言う。
何libgompライブラリルーチンは、CPUアフィニティの指定が有効であるかどうかを決定することはありません。回避策として、C言語の
getenv
やFortranのGET_ENVIRONMENT_VARIABLE
などの言語固有のライブラリ関数を使用して、GOMP_CPU_AFFINITY
環境変数の設定を照会することができます。起動時に定義されたCPUアフィニティは、アプリケーションのランタイム中に変更または無効にすることはできません。
GOMP_DEBUG
を使用して、探しているものがあるかどうかを調べることができます。
'OMP_DISPLAY_ENV = VERBOSE'は' GOMP_CPU_AFFINITY'を表示しますが、明示的にOMP_PLACESを設定しても空白( 'GOMP_CPU_AFFINITY = ''')になります。 'export GOMP_DEBUG = 1'は出力に何も追加しません。私が何か間違っているのかどうか分からない、または私は非常に喋っていないlibgompのバージョンで作業している。 –
おそらく、内部制御変数(ICV)を設定する環境変数の値を出力します。 'GOMP_CPU_AFFINITY'を設定すると、その値が出力されることがあります。もう一つの可能性は、それを印刷する関数を書くことです。私は[sched_getaffinity](https://linux.die.net/man/2/sched_getaffinity)を使って行っています。この[有用な例](https://github.com/karelzak/util-linux/blob/143ea06851104ffaa9d3fe8de09c721d2364de64/lib/cpuset.c#L150)で確認できます。あなたが探していることをするlibgompにパッチを提出することさえできます。 –
ありがとうございます。私は、KMP_AFFINITYのように迅速かつ完全な解決策があることを期待していましたが、少なくともこれは私にいくつかのツールを提供します。 –
xlC++を使用すると、OMP_DISPLAY_ENV環境変数をTRUEまたはVERBOSEに設定してこの情報を取得できます。詳細はIBM Knowledge Centerにあります。
お返事ありがとうございます。私はすでにOMP_DISPLAY_ENVを試しました。出力には、OMP_PLACESを含む環境変数の値が表示されます。しかし、私は何かが見つからない限り、どのスレッドがどのスレッドにバインドされているのかをKMP_AFFINITYの方法で正確に伝えることはできません。ここでの目標は、与えられた環境変数の組み合わせに起因するスレッドの配置を見ることです。環境変数自体を知ることはそれほど役に立ちません。 –
残念なことにxlC++にはKMP_AFFINITY = verboseと同じくらい便利な機能はありませんが、コードを変更してxlC++の文書化されていない機能を試してみると、_xlsmp_thread_binding()関数があります。呼び出しスレッドそれは正式にサポートされていないので、あなたにとってはうまくいかないかもしれませんが、一発の価値があるかもしれません。 – trudeaun
ありがとう、私はそれを試みます。 –
- 1. Android Javaのset =およびgetActionCommandに相当しますか?
- 2. のOpenMPおよびスマートポインタ
- 3. のOpenMPおよびSTLベクトル
- 4. のOpenMPおよび機能
- 5. GNU gccおよびg ++
- 6. GNUパラレルおよびSolaris 11
- 7. "mvn dependency:tree" - "verbose"出力に相当するものはありますか?
- 8. R head()およびtail()関数のOctave/Matlabに相当する
- 9. C#および.netのExitThread(ExitCode)およびGetExitCodeThreadに相当するものは何ですか?
- 10. PythonでGNU splitに相当するものは何ですか?
- 11. gnu gcc標準ライブラリstdC++、gcc、およびgcc_ehはどのように再パッケージ化されますか?
- 12. Visual Studio C++ 2015およびopenMP
- 13. SQL Serverおよび/またはdb2のOracleエクスポートに相当する
- 14. JavaFxおよびAnimationTimerクラスに相当するC++とは何ですか?
- 15. pythonには、perlのNet :: BGPライブラリに相当するライブラリがありますか?
- 16. rubyにはSOAP :: Lite相当のライブラリがありますか?
- 17. ibm websphere 85およびdb2アップグレード
- 18. IBM InformixおよびODBCドライバーC#
- 19. TwitterのOstrichライブラリに相当するJavaはありますか?
- 20. Application Frameworkおよびライブラリのマネージャクラスは何をしますか?
- 21. C#のfunc_get_argに相当しますか?
- 22. XcodeおよびSPMライブラリ
- 23. C++およびGNU科学ライブラリコードのメモリリークを除去する
- 24. Pythonのxml.etree.ElementTreeはC++ XMLライブラリに相当します
- 25. NSURLSessionはAndroidに相当しますか?
- 26. RubyのcURLに相当しますか?
- 27. Passport.jsはPythonに相当しますか?
- 28. JavaのRDMA用のOracleのIBM JVerbに相当する
- 29. ファイルベースのjava.util.concurrent.locks.Lockに相当しますか?
- 30. 相互運用およびCRL活動
Libgompは、Windowsなどのターゲットに対する親和性をサポートしていません。 Intelのopenmpがgccのopenmp呼び出しをサポートするLinuxのようなターゲットの場合、それはあなたが求めるものを達成する方法になります。 – tim18