【问题标题】:Does OpenCL allow concurrent writes to same memory address?OpenCL 是否允许并发写入相同的内存地址?
【发布时间】:2010-05-18 21:50:59
【问题描述】:

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

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

【问题讨论】:

  • 最重要的是,OpenCL 不支持写入uchar 数组(或指针),除非您启用了 cl_khr_byte_addressable_store 扩展。
  • 谢谢,这似乎是问题所在(尽管我仍然不知道同时写入是否有效,因为我将代码更改为同时读取)。 AFAIK 我确实启用了扩展,但它似乎不起作用......但是,使用 uchar 对我来说并不重要,更改为 int 就可以了 :)

标签: concurrency shared-memory opencl


【解决方案1】:

您是否尝试使用cl_khr_global_int32_base_atomics 扩展和atom_inc 内在函数?我会首先将数据存储在 int32 而不是 uchar 作为概念证明,然后优化数据结构的内存占用。

【讨论】:

  • 我通过更改我的算法来进行同时读取来规避同时写入问题。尽管如此,在我使用 int 而不是 uchar 之前它还是没有用,尽管我相信我已经启用了 cl_khr_byte_addressable_store 扩展。不过,我现在不打算尝试您的 atomics-tip,因为它现在似乎运行良好,但无论如何感谢您的提示 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多