OpenCL Dijkstra 算法实现的问题
算法代码来自 OpenCL编程指南,第16章。
我试着把工程搭建起来跑了一下。
真的很坑。中间有一段 cl 代码。
for(int edge = edgeStart; edge < edgeEnd; edge++)
{
int nid = edgeArray[edge];
if (updatingCostArray[nid] > (costArray[tid] + weightArray[edge]))
{
updatingCostArray[nid] = (costArray[tid] + weightArray[edge]);
}
}
这段代码跟本就有同步问题。 当网络中有一个节点,有多条边进入的时候。updatingCostArray[nid] 同一个数据会被多个工作线程访问。
结果根本是错的,下面还列出的性能测试,说有多优化。
而且这个例子也没给出如何记录途径节点。
有没有同样研究过这个例子的同学。说说你的感想