我的工作广泛使用Migliore,Martorana和Sciortino的算法来查找所有可能的简单路径,即在一个图中没有遇到任何节点的路径,如下所述:
An Algorithm to find All Paths between Two Nodes in a Graph.(尽管这个算法本质上是一个深度 – 第一次搜索和直观的递归本质,作者还提出了一种非递归的,基于堆栈的实现.)我想知道是否可以在GPU上实现这样的算法.目前,我正在努力在这个问题上看到任何真正的并行性.例如,监视和调度线程的成本可能使得(通过硬件线程)的协作图搜索成为禁止.或者,如果图表被分区并分配给各个硬件线程进行搜索,则可以使用分而治之策略.然而,人们必须弄清楚如何(1)分割图形(2)制定子任务和(3)组合分区上的搜索结果. 最佳答案 有点生锈. Dijkstra怎么样?
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); }
}
}
path [endNode] [i] //从startNode到endNode的路径
分区:来自节点%2
子任务:找到从节点去的地方
结合:你有共享记忆,对吗?