再帰を含むシーケンシャルコードを、openmp、CUDAまたはMPIで書かれた同等のパラレルコードに変換することは非常に困難です。 なぜそうですか?なぜ再帰アルゴリズムを効率的に並列化できないのですか?
答えて
コードが再帰アルゴリズムとして記述されている場合、再帰の各レベルで実行される計算は、次の結果に依存する可能性があります。これは、異なる再帰的ステップからの計算を並行して行うことが難しいことを意味する。
このことについての別の考え方は、反復を反復処理にフラット化することです(たとえばCan every recursion be converted into iteration?を参照)。再帰アルゴリズムは、各反復が他の反復の結果に依存する平坦化バージョンを生成する可能性が高く、反復を並行して実行することは困難です。
これは部分的にのみ正確です。あなたが望むなら、それぞれの非終端に4つの枝があり、同じ深さに渡って木があります。 4つのプロセスがある場合、ツリー内の要素の検索を並列化する簡単なオプションは、各プロセッサにルートからの分岐の1つを与えることです。反復に変換せずに簡単に並列化できる再帰アルゴリズムがあります。 –
私はさらに進んで、明らかに間違っていないと誤解を招く可能性が非常に高いと言います。 1)タスクや同様のパラダイムを使って再帰的コードをフラット化することなく、再帰的コードを並列化することは完全に可能です。 2)平坦化された再帰的アルゴリズムでは、反復は以前の反復に必ずしも依存しない。この答えが適切な唯一のケースは、常に単一の再帰呼び出しがある場合です。 – Zulan
@HighPerformanceMarkこれは、異なる再帰的なステップを並行して行うのではなく、ステップ内で並列化する方が好きです。しかし、私はあなたの要点を取っています - 再帰を組み込んだアルゴリズムは、すべての形式を取ることができますし、並行して行うのが簡単な部分があるかもしれません。私は、私の推論がもっと例になるように言い換えようとします。 –
- 1. 効率的な再帰的乗法
- 2. c#再帰関数をコード化する効率的な方法
- 3. なぜパラメータベースの定義は再帰よりも効率的ですか?
- 4. フレーズアナグラムの効率的なアルゴリズム
- 5. アルゴリズムの効率的な書き方
- 6. f#fibbonaci効率的なアルゴリズム
- 7. 効率的な並列戦略
- 8. なぜmatplotlib.collectionsが効率的ですか?
- 9. 効率的なアルゴリズムを提案する
- 10. 効率的な遺伝的アルゴリズム
- 11. LINQを使った効率的なグラフトラバーサル - 再帰の排除
- 12. フィルタリングのための効率的なアルゴリズム
- 13. サイトマップを生成する最も効率的なアルゴリズムですか?
- 14. Stackを実装する効率的なアルゴリズムは何ですか?
- 15. Mergesortアルゴリズム(Python)の再帰的な動作はどうですか?
- 16. 不変グラフ上で効率的な非再帰的トポロジカルソートを行う方法
- 17. 再帰的な単語検索アルゴリズム
- 18. 非再帰アルゴリズムへの再帰的な再帰の手助けが必要
- 19. 最も効率的なantichessアルゴリズムですか?
- 20. Cでの並列再帰
- 21. gitignoreが再帰的なファイルで動作しないのはなぜですか?
- 22. 単純な配列を再帰的なラムダ関数で平坦化しない
- 23. リスト内の大きなdata.frameオブジェクトを効率的にサブセット化できますか?
- 24. numpy再配列での効率的なGROUP BYクエリ
- 25. 再帰的マージソート、大きな配列のセグメント化エラー
- 26. 非効率的な階乗計算がなぜ効率的(高速)であるのですか?
- 27. スパース行列での効率的なアクセス
- 28. JSオブジェクトの配列対JSオブジェクトの効率的で効率的な配列
- 29. mapplyを効率的に並列化する方法はありますか?
- 30. なぜコードブロック内で変数を再帰的に定義できないのですか?
あなたの質問にはまだ計算されていないぶら下がった依存関係が含まれています:どのコード、厳密に厳しいもの、そして誰がどこから引用したり正確に引用していますか? – StarShine