在“异构无种族记忆模型”一文中,作者陈述如下:
“...在OpenCL 2.0中,可以编写一个完整的程序 如果那些原子不使用范围,则完全由原子组成 正确...“
这怎么可能?有人可以解释一下吗?
答案 0 :(得分:2)
OpenCL 2.0 specification (page 14)表示程序包含数据竞争,如果:
它包含两个不同工作项或主机线程中的操作
一个操作修改内存位置,另一个操作读取或修改相同的内存位置,
这些操作中至少有一个不是原子的,或者相应的内存范围不包括在内,
- 醇>
这些操作是全局 - 发生 - 之前关系无序的全局操作,或者是由无关紧要的本地操作 本地发生之前的关系。
第二个条款暗示即使两个动作都是原子的,如果内存范围不包含在内,你仍然可以进行数据竞争。非包容性内存范围的示例是:尝试使用workgroup
范围在不同设备上的工作项之间进行同步。
在实践中,如果你的范围是非包容性的,很可能不会发生任何不好的事情。但从技术上讲,具有非包容性内存范围的程序违反了规范定义的合同,因此其行为未定义。