Concurrency OpenCL是否允许对同一内存地址进行并发写入?
在OpenCL中,是否允许两个(或更多)不同的线程写入全局空间中的同一内存位置?写入总是将uchar从0更改为1,因此结果应该是可预测的,但我的程序中得到的结果不稳定,因此我想知道原因是否可能是某些写入失败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作为概念证明,然后优化数据结构的内存占用。您是否尝试使
声明缓冲区为只读并随后将其复制到只读缓冲区是否有帮助?您是否尝试使用
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_存储扩展。不过,我现在不打算尝试你的原子学技巧,因为它现在似乎工作得很好,但还是要感谢你的技巧:)