2011-01-17 19 views
0

だから私は役に立たない時間をオンラインで見てきました。私はOpenMPを使用していないので、ここでは用語がわからないが、OMPThread(omp_get_thread_num();によって与えられる)とスレッドが実行される物理的なコアからの特定のマシンのマッピングを理解する方法があるか?物理コアへのOpenMPスレッドのマッピング

また、同じコードが同じマシンで実行されているときに、スレッド0が常に同じ場所で実行されるなど、OMPがスレッドを割り当てた正確な方法に興味がありましたか?ありがとう。

答えて

1

通常、OSはOpenMPを含むコアにスレッドを割り当てます。これは設計上のことですが、通常はOSがアプリケーションを中断させるため、必要に応じてOSがコアを介してスレッドを(アプリケーションに透過的に)移動できるようにしたいと考えています。

一部のオペレーティングシステムAPIでは、スレッドアフィニティを設定できます。たとえば、WindowsではSetThreadAffinityMaskを使用して特定のコアにスレッドを強制的に適用できます。

0

ほとんどの場合、Reedは正しいですが、OpenMPはコア(またはプロセッサ)へのスレッドの割り当てには関心がありません。しかし、キャッシュの再利用やデータのローカリティなどの理由から、コアにスレッドを割り当てるとOpenMPのパフォーマンスが向上するケースが多いことがわかりました。したがって、ほとんどのOpenMP実装を見ると、通常はスレッドをコアに「バインド」するように設定できる環境変数があることがわかります。 OpenMP ARBはこれを行うための "標準的な"方法をまだ指定していないので、この時点でOpenMPの実装に任せて、これをどうすればよいか、どうすればよいかを決定します。これをOpenMP仕様に含めるべきかどうか、もしそうならば、どのようにして最善の方法で行うべきかについて、多くの議論がありました。

+0

これは実際に私が周囲を遊んでいるもので、アフィニティ設定に基づいて状況が悪くなったり悪くなったりするのを見ています – WtLgi

関連する問題