图论 – 基于GPU的搜索图上两个节点之间的所有可能路径

我的工作广泛使用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
子任务:找到从节点去的地方
结合:你有共享记忆,对吗?

点赞