【发布时间】:2017-01-15 12:40:27
【问题描述】:
我试图增加全局缓冲区中某个值的值。让我把骨架给你。
__kernel void relax_a_point(__global float* pivot_indices)
{
int gid = get_global_id(0);
pivot_indices[gid * 8 + 2] = pivot_indices[gid * 8 + 2] + 1.f;
}
不是将值增加 1,而是将值增加 1024/1023/1022。如果我添加 0.f,则该值保持不变。知道为什么会这样吗?对 pivot_indices 任何元素的任何其他更改(交换等)都会导致输出错误。
pivot_indices 缓冲区是使用 CL_MEM_READ_WRITE 标志创建的。
【问题讨论】:
-
尝试将 gid 添加到该值而不是 1.f。检查内核是否在具有 [1,1024,1] ndrange 设置的 2D 线程数组上执行
-
我正在启动 2D 内核,本地大小为 16x16,全局大小为 1024x1024。一旦我切换回本地大小为 1 和全局大小为 1024 的一维内核启动,它就可以正常工作了。