私の研究では、Migliore、Martorana、Sciortinoのアルゴリズムを幅広く使用して、すべての可能な単純なパスを見つけることができます。 An Algorithm to find All Paths between Two Nodes in a Graphに記載されているようなグラフである。 (このアルゴリズムは本質的には深さ優先検索であり、直感的に再帰的であるが、非再帰的なスタックベースの実装も提示する)。現時点では、私はこの問題の真の並列性を見るのに苦労しています。たとえば、スレッドを監視しディスパッチするコストは、(ハードウェアスレッドによる)協調グラフ検索を禁止する可能性があります。あるいは、グラフが分割され、検索のために個々のハードウェアスレッドに割り当てられている場合、分割征服戦略が機能する可能性があります。しかし、(1)グラフを分割する(2)サブタスクを定式化する、(3)検索結果をパーティションに結合する方法を理解する必要があります。グラフ上の2つのノード間のすべての可能なパスのGPUベースの検索
4
A
答えて
2
これは少し錆びています。ダイクストラはどうですか?
Boolean[] visited; // [node] = true;
Boolean[][] connected; // [node][i] = node
Vector<Vector<Integer>>[] path; // this should suck
Integer startNode;
Integer endNode;
Queue queue0; //for thread 0
Queue queue1; //for thread 1
while (queue0.hasNext()) {
Integer node = queue.getNext();
if visited[node] {
continue;
} else {
visited[node] = true;
}
for (nextNode: connected[node]) {
for (i) {
path[nextNode].append(path[node][i].clone().append(node));
}
if (nextNode%2 == 0) { queue0.add(nextNode); }
if (nextNode%2 == 1) { queue1.add(nextNode); }
}
}
パスstartNode
パーティションからENDNODEする[ENDNODE] [i]は// i番目のパス:あなたが共有している:組み合わせノード
から行く場所を見つける:ノード%から2つの
サブタスクを来ましたメモリ、右?
+0
私はあなたの答えの最後の部分をあまり理解していません。各ハードウェアスレッドが深さ検索を実行することを提案していますか? – Olumide
+0
とGPUではこれを許可していません。あなたのおかげで申し訳ありません –
0
あなたの問題はGPUでより速く実行できるように簡単に移植できるとは思いません。 GPUのパワーを最大限に活用するGPUプログラム:
- スレッドの数は分かりますが、それらの数は一定です。新しいスレッドの生成や以前のスレッドの強制終了はありません。
- 融合メモリアクセスを推奨します。隣接するスレッドがメモリの異なる領域に完全にアクセスすると(通常、グラフアルゴリズムでは)遅くなります。
- 回帰とのスタックが好きではありません。最新のNVIDIA Fermiカードは関数呼び出しをサポートしており、スレッドはスタックを持つことができますが、スレッド数が多いため、スタックは非常に短い(または多くのメモリを消費します)。私はないを行う
には、効率的なGPUのアルゴリズムが存在しないと言うが、私は、効率的なコードに既存のアルゴリズムを変換する簡単な方法がないことを信じています。
関連する問題
- 1. 2つのノード間のすべてのパスのCypher
- 2. OWLオントロジ内の2つのノード間のすべてのパスを検索するクエリ
- 3. サイクルなしでグラフ内のすべての可能なパスを見つける
- 4. JavaScriptオブジェクトの検索と可能なすべてのノードの取得
- 5. C++での行列の2点間のすべての可能なパス
- 6. クイックグラフ内の2つの頂点間のすべての可能なパスを見つける
- 7. グラフ上のすべてのエッジのパスを見つける
- 8. Linux上のすべてのユーザのMatlab検索パス
- 9. 可能なバイナリ検索ツリーと次のノードを持つバイナリツリー
- 10. 最適解:グラフ問題の可能なすべての非循環パス
- 11. ツリー内の2つのノード間のパスの長さを調べる方法は?
- 12. 2つのイメージ間のイメージサブセットの検索
- 13. グラフ - 深さの最初の検索を使用して、無向グラフの到達不能ノードを見つける
- 14. 不可能 - 2つのノード間でssh鍵を移動する
- 15. BFSとDFSを使用してグラフ内の2つのノード間のパスを見つける
- 16. ノードjsグラフ検索
- 17. 同じ色のノードのパスが多色ノードのグラフの2つのノード間で見つかるかどうかを判断する最も効率的なアルゴリズム
- 18. 2つのエンティティ間で検索する
- 19. スクロール可能なTkinterキャンバス上での座標の検索
- 20. 無向グラフ内の任意の2つのノード間のパスを効率的に見つける
- 21. C#で2つのデータ型の検索可能なリストを作成する
- 22. アシスタント:ファイルの検索とパス上のループ
- 23. 1つのグラフ上の2つのプロット間の間隔を小さくする
- 24. neo4jはノード間のすべてのパスを検索します。トレックと登山路線
- 25. mXn行列のすべての可能な一意のパスを見つける
- 26. ツリー内のすべてのパスを上から下に検索します。
- 27. すべてのノードではなく、単一のノードを検索する方法
- 28. 可能なすべてのフォルダ内のファイルを検索しますか?
- 29. 特定の開始点と終了点の間にあるすべての可能なパスを見つける
- 30. N個のノードを持つグラフの長さ2の最大パス数
潜在的に指数関数的に多くのパスがあります。すべてのパスのリスト、または単にパスの数、またはすべてのパスを列挙できる暗黙的な構造を探していますか? – templatetypedef
私はすべてのそのようなパスのリストに興味があります。 – Olumide
GPUは、メモリ負荷(算術密度)の数に比べて計算回数が多いタスクに適しています。また、そのプロセッサのSIMD性質は分岐をうまく処理しないので、この問題はGPU移植には適していないと私は考えています。 – Samsdram