OpenCL主机同步要求



我的OpenCL内核遇到了一个奇怪的错误。基本上,它是升级到N的双音排序!=pow为2。我所做的是,我在主机上检查序列是否正确,而让我来到这里的是答案不是。

现在这个错误很难追踪,因为它是随机发生的。我以相同的方式对每次生成的许多不同序列进行排序,只是出现了一个序列没有排序,然后是另一个。。然而,高百分比的输出是正确的,而且我在for循环中的主机实现也正确地对相同的输入进行了排序。最有趣的是,当我保持输入并在设备上再次运行时,它突然被正确排序了。

我想到这可能是种族状况,因为它的行为就是这样。然而,我并没有在设备代码中放置这样的东西,所以唯一的可能性是主机。我有一个有序的队列,我的读写都被阻塞了,所以这应该不会有问题,但我在执行内核后没有同步点。

是否需要这样的同步?OpenCL为有序队列保证了什么?我是否可能在内核完成对同一内存块的所有操作之前读取?

这种随机发生的唯一另一个想法是设备中的内存故障,但这是我接受的最后一个选项,所以我也欢迎其他一些关于OpenCL何时会得到随机结果/错误的想法。

根据规范,如果您有一个有序的队列,您的内核和内存读/写将按照它们排队的顺序完成:请参阅此处的clCreateCommandQueuehttp://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/.

如果你想100%确定是这样的,你可以在读取内存之前将一个屏障排队。

最新更新