ネストされたforループを使用してシーケンシャルプログラムを設計し、それをOpenMPと並列に変換し、デバッグするために作業していると仮定すると...一番外側のループで最初に作業し、あなたのやり方で作業するか、最も内側のループから開始しますか?私は折りたたみ機能を認識していますが、すべてのネストされたループが折り畳まれるわけではありません。OpenMPのネストループ設計方針
答えて
が最も内側のループにあります。これは、開始スレッドは一般的に高価であるためです。
一方、最も内側のループでスレッドを開始するよりも実行するリソースが多い場合は、それほど大きな違いはありません。それ以外の場合は、最も外側のループが常に最良の選択です。
もちろん、これは非常に幅広い質問で非常に幅広い答えです。異なる特殊ケースごとに異なる答えが常にあります。
一方、このような複雑な問題がある場合は、低レベルのstd::thread
を使用し、スレッドを手動で制御することをお勧めします。それはより多くの作業を必要としますが、より多くの制御と最良の結果が得られます。次に、スレッドプールを使用し、最も効率的なソリューションを使用できます。
これは非常に思慮深く、詳細な答えです(はい、広い質問です.2次元行列の周りを横切る/解析することを念頭に置いていましたが、故意にこのビットを残しました。私がそれを掲示すれば必然的に得たはずの、私の特定の問題に対する答えではなく、一般的な力学と問題解決の方法が不思議です)。ありがとうございました。 – theupandup
行列は1次元ベクトルとして格納する必要があります。それはそれを行う最も効率的な方法です。 OpenBLAS(またはArmadilloなどのラッパー)などの高性能ライブラリの使用方法を学ぶことを検討してください。あなたは車輪を再発明するべきではありません。マトリックス演算は巨大なフィールドです。 –
私は現在、クラスに入っていますが、通常、特定のプロジェクトでは特定のライブラリのみを使用することになっています。 2Dベクトルは、この課題(と私たちが使用するように指示されたもの)には問題ありません – theupandup
- 1. OpenMPネストループ並列処理
- 2. アナログ時計の分針と時針を効率的に更新する方法
- 3. OpenMPはどのようにネストループを処理しますか?
- 4. ソフトウェアの設計指針(アンドロイド図書館プロジェクト)
- 5. CでopenMPを使用してネストループをパラレル化
- 6. NodeJSクラスタスケジューリング方針
- 7. プロットゲージチャートで針の位置を計算する方法
- 8. パフォーマンスOpenMPの崩壊と大規模なネストループの崩壊の比較
- 9. Windowsのパスワード変更方針を設定する方法
- 10. Hibernate命名方針
- 11. openmpにタスクを含むアルゴリズムを設計する
- 12. Linuxカーネルのスケジューリング方針
- 13. PHPのための乾草の針針
- 14. OpenMP、コア数、乱数計算の精度
- 15. 針が針の配列であるhaystackで針を見つける
- 16. Javascriptネストループ
- 17. CUDAネストループ
- 18. SQL Serverのネストループ
- 19. ブレードテンプレートのLaravelネストループ
- 20. 回して時計の針使用してバニラJS
- 21. 式指向の方針指向のアプローチ
- 22. Matlabの散乱データの微分方針
- 23. オブジェクト指向の実装方針
- 24. webpack-encoreプロジェクトのバージョン管理方針
- 25. Struts1からStruts2への移行方針
- 26. Javascriptのネストループ - Ajax/Json
- 27. Python haystackと針
- 28. Androidクロック秒針
- 29. Javaネストループ:インデントテキスト
- 30. ネストループはJavaScriptで
これはかなり広い質問です。推薦には多くの要因があります。一般的なネストされたループのいくつかの詳細を、最も好ましくは実際のコードの形で提供することによって、それを絞り込むことができます。 – Zulan
ところで、私はできるだけ外側に、必要に応じて内側と言います。しかし、私はそれを有用な答えとは考えていません。 – Zulan
'collapse'節で折りたたむことができないいくつかのネストされたループは手で折りたたむことができます。三角形ループ。とにかくループを手で倒す方法を学ぶと便利です。 –