Concurrency OpenCL是否允许对同一内存地址进行并发写入?

Concurrency OpenCL是否允许对同一内存地址进行并发写入?,concurrency,shared-memory,opencl,Concurrency,Shared Memory,Opencl,在OpenCL中,是否允许两个(或更多)不同的线程写入全局空间中的同一内存位置?写入总是将uchar从0更改为1,因此结果应该是可预测的,但我的程序中得到的结果不稳定,因此我想知道原因是否可能是某些写入失败 声明缓冲区为只读并随后将其复制到只读缓冲区是否有帮助?您是否尝试使用cl\u khr\u global\u int32\u base\u atomics扩展和atom\u inc固有函数?我会首先将数据存储在int32上,而不是uchar作为概念证明,然后优化数据结构的内存占用。您是否尝试使

在OpenCL中,是否允许两个(或更多)不同的线程写入全局空间中的同一内存位置?写入总是将uchar从0更改为1,因此结果应该是可预测的,但我的程序中得到的结果不稳定,因此我想知道原因是否可能是某些写入失败


声明缓冲区为只读并随后将其复制到只读缓冲区是否有帮助?

您是否尝试使用
cl\u khr\u global\u int32\u base\u atomics
扩展和
atom\u inc
固有函数?我会首先将数据存储在
int32
上,而不是
uchar
作为概念证明,然后优化数据结构的内存占用。

您是否尝试使用
cl\u khr\u global\u int32\u base\u atomics
扩展和
atom\u inc
固有功能?我会首先将数据存储在
int32
而不是
uchar
上作为概念证明,然后优化数据结构的内存占用。

最重要的是,OpenCL不支持写入
uchar
数组(或指针),除非您启用了cl\u khr\u byte\u addressable\u存储扩展。谢谢,这似乎就是问题所在(尽管我仍然不知道同时写入是否有效,因为我将代码改为同时读取)。好吧,我确实启用了扩展,但它似乎不起作用。。。然而,使用uchar对我来说并不重要,而改为int则起到了关键作用:)最重要的是,OpenCL不支持写入
uchar
数组(或指针),除非您启用了cl\u khr\u byte\u addressable\u存储扩展。谢谢,这似乎就是问题所在(虽然我仍然不知道同时写入是否有效,因为我将代码改为同时读取)。好吧,我确实启用了扩展,但它似乎不起作用……但是,使用uchar对我来说并不重要,而改为int就成功了:)我通过将算法改为同时读取来避免同时写入问题。尽管如此,直到我使用int而不是uchar,它才起作用,尽管我相信我已经启用了cl_khr_byte_addressable_存储扩展。虽然我现在不打算尝试你的原子学技巧,因为它现在似乎工作得很好,但无论如何还是要感谢你的技巧:)我通过改变算法,改为同时读取,从而避免了同时写入的问题。尽管如此,直到我使用int而不是uchar,它才起作用,尽管我相信我已经启用了cl_khr_byte_addressable_存储扩展。不过,我现在不打算尝试你的原子学技巧,因为它现在似乎工作得很好,但还是要感谢你的技巧:)