分割可能なタスクを使用して作業を共有したいコードを作成することを計画しています。シリアルバージョンでは、ルートタスクで初期化されたスタックを使用します。スタックは、タスクを繰り返しポップすることによって空になります。その後、タスクが実行または分割され、サブタスクがスタックにプッシュバックされます。これを並行して実装するための最良の(最も効率的で簡単な)方法とインターフェース(tbb、openmpなど)は何ですか?このようなパラレルスタックは、スレッドパラレルインターフェイスによって明示的にサポートされていますか(またはスタックのより良い代替手段がありますか)?
1 に答える
2
あなたが実際に説明しているのは、ワークスティーリング キューです。これは、Cilk プログラミング言語 (http://en.wikipedia.org/wiki/Cilk) から始まり、Intel コンパイラの一部である Cilk++ に引き継がれています。Linux の無料評価版を入手できます。
Intel TBB は、ワーク スティーリング キューも備えており、タスクの自動分割をサポートし、自分で分割したい場合は追加の制御をサポートします。OpenMP にはこの種の制御はありませんが、不可能ではないと思います。
また、Sandia (https://code.google.com/p/qthreads/) の qthreads もあります。これは、M:N スケジューラ (N OS スレッド上の M ユーザー レベル スレッド) を使用できる優れたパッケージです。
于 2012-02-23T09:08:57.247 に答える