OpenCL Dijkstra 算法实现的问题

lishu19801106 2019-12-14 10:57:37
算法代码来自 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] 同一个数据会被多个工作线程访问。
结果根本是错的,下面还列出的性能测试,说有多优化。

而且这个例子也没给出如何记录途径节点。

有没有同样研究过这个例子的同学。说说你的感想
...全文
150 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

601

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧