我正在尝试使用cuda实现Dijsktra的算法。我得到了一个使用map执行相同操作的代码。减少这是链接http://famousphil.com/blog/2011/06/a-hadoop-mapreduce-solution-to-dijkstra%E2%80%99s-algorithm/但我希望实现与链接中给出的类似的东西,使用cuda使用共享和全局记忆。请告诉我如何继续,因为我是cuda的新手..我不知道是否有必要以矩阵的形式提供主机和设备上的输入以及我应该在内核中执行什么操作功能
答案 0 :(得分:1)
这样的事情是什么(Dislaimer这不是map-reduce解决方案)。
假设您有一个图G
N
状态的邻接矩阵A
,条目A [i,j]表示从节点i到节点j的成本图形。
这个Dijkstras算法包含一个表示前面'V'的向量,其中V [i]是从原点到节点i的当前最小距离 - 在Dijkstras算法中,这个信息将被存储在一个堆中并加载到该堆中。每个循环的堆顶部。
现在运行算法开始看起来很像矩阵代数,因为只需使用Vector并使用以下命令将adjancicy矩阵应用于它:
V[i] <- min{V[j] + A[j,i] | j in Nodes}
对于V中的所有i值。只要有V的更新就可以运行(可以在设备上检查,无需来回加载V来检查!),还可以存储转换后的版本邻接矩阵允许顺序读取。
最多这个运行时间对应于图中最长的非循环路径。
现在有趣的问题是如何在计算块之间分配这个问题,但基于行索引的分片似乎很明显。
答案 1 :(得分:1)