OpenMPを使用する私は、単純なアルゴリズムを異なるスレッドで分割しましたが、実行時間は大幅に増加しています。これは、同じCPUコアで実行されているすべてのスレッドが原因である可能性があります。 CPUがデュアルコアまたはクアッドコアであれば、スレッド数をCPUコア数よりも多く割り当てることはあまり役に立ちません。 2つのスレッドで実行時間が増えています。OpenMPの特定のスレッドを特定のCPUコアに割り当てる方法があるかどうかを知りたいですか?
0
A
答えて
-1
はい、どのCPUがスレッドを取得するかを決定できます。
例えば、Thread Affinity Interface (Linux* and Windows*)を使用することによって、タロンミーによって提案される。しかし、記事に記載されている内容に注意してください。
スレッドアフィニティはアプリケーションの速度に大きな影響を与えます。
遅く実行を取得するために、2つの主な理由が適用される場合があります:
1)あなたのコアより多くのスレッドを持っている場合は、残りのスレッドはに減少し他の人のために待機しますシリアル実行。
これで、2つのコアがあると仮定すると、実行可能な4つのスレッドがあると仮定すると、すべてのスレッドがリソース(つまりコア)を競合するため競合状態になるため、2つが実行されます他の2人は待たなければならない。
2)問題のサイズが小さい
並行走行は無料ではありません。あなたは多くのハウスキーピングをしなければならず、一般的にパラレル実行を調整しなければなりません。あなたはOpenMPを再生しなければならず、OSはもっと多くのスレッド/プロセスも処理しなければなりません。
問題のサイズが十分でない限り、パラレル実行をオーケストレーションするオーバーヘッドが実行を支配するため、スピードアップは表示されません(さらに悪いことに、あなたの場合のように減速が見られます)。あなたのアプリケーションの。
関連する問題
- 1. openMP:特定のコアに特定のスレッドを割り当てる
- 2. 特定のCPUコアにスレッドを割り当てる
- 3. CPUコアあたりのスレッド割り当て(Windowsのみ)
- 4. 特定の単一リンクリストがループであるかどうかを特定する方法はありますか?
- 5. GCを特定の%のCPUに限定する方法はありますか?
- 6. 特定のカフカコンシューマを特定のパーティションに割り当てる方法
- 7. 特定のインスタンスをEC2でHDFSに割り当てる方法
- 8. イメージプロットでNAに特定の色を割り当てる方法
- 9. OpenMPはどのようにスレッドの割り当てを行いますか?
- 10. 特定のエンティティでラジオボタンの値を割り当てる方法
- 11. 特定のポーンに特定のコントローラを動的に割り当てますか?
- 12. 特定のフィールドを変数に割り当てる方法
- 13. 特定のセルにラベルを割り当てる方法は?
- 14. メソッドを特定のスレッドに限定する方法はありますか?
- 15. 配列の特定のオブジェクトをオブジェクトの別の配列に割り当てる方法はありますか?
- 16. スレッドを特定のコアで動作させる利点はありますか?
- 17. 特定のビデオファイル(.mp4)がビジーであるかどうかを知る方法?
- 18. jstlの配列の特定のインデックスに値を割り当てる方法はありますか?
- 19. 特定のピクセルにHSV値を割り当てますか?
- 20. ValidationResultを特定のフィールドに割り当てますか?
- 21. NUMAのデータ用に特定のメモリを割り当てる方法はありますか?
- 22. 特定のMavenプロファイルをintellij実行コンフィギュレーションに割り当てるにはどうしたらいいですか?
- 23. 特定の行があるかどうかを知る方法MySQL
- 24. C#配列/タスクリストから特定のデータに割り当てる方法
- 25. (UICollectionViewの)UIViewに特定のViewControllerを割り当てるにはどうすればいいですか?
- 26. 開始したアプリケーションを特定のタスクバーアイコンに割り当てる
- 27. 特定のクラスを特定の郡に割り当てる - D3.js
- 28. 特定の列のすべてのセルにどのようにデフォルト値を割り当てるのですか?
- 29. XCode Instrumentsのメモリ割り当てを担当する特定のメソッドは、どのように見えますか?
- 30. 特定のカフカプロデューサーまたはトピックにclient-idを割り当てる方法は?
スレッドを移動させないようにOpenMPを指示するスレッドをバインドすることはできますが、少なくともOpenMP 4.0より前に調べてみると、特定のスレッドをパーティクルコアに割り当てるメソッドはありません。スレッドをバインドする場合は、コードを開始するときに定義されたトポロジでスタックされます。 OpenMP以外の関数を使用して、特定のコアにバインドするスレッドを指定する必要があります。 –
Windowsでハイパースレッディングを使用すると、少なくともデフォルトのトポロジでは、明らかに理想的ではない最初の2つのスレッドが同じコアに配置されます。私はLinuxとWindows(最初のモジュールの最初の2つのスレッド)でAMDモジュールと同じことが起こると思います。 AMDモジュールは実際には単一の浮動小数点コアです。 IntelとAMDでデフォルトのスレッド数を使用するだけでは、すべてのコアがいっぱいになるので問題はありませんが、スレッド数を少なくして論理プロセッサの数を増やすと、 –
なぜスレッド数を制御したいのですか?なぜデフォルトを使用しないのですか? –