Parallel processing OpenCL atomic_add()在NVIDIA GPU设备上返回错误结果

Parallel processing OpenCL atomic_add()在NVIDIA GPU设备上返回错误结果,parallel-processing,opencl,nvidia,Parallel Processing,Opencl,Nvidia,我想在全局内存上执行一个原子添加。为此,我在内核源代码中指定了以下pragma #pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable 假设我在一个工作组中有n个工作项,在全局内存中有一个整数数组 __global int *outData; int gId = get_group_id(0); outData已初始化为0,正在执行 atomic_add(&outData[gId], 1) 应将outD

我想在全局内存上执行一个原子添加。为此,我在内核源代码中指定了以下pragma

#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
假设我在一个工作组中有n个工作项,在全局内存中有一个整数数组

 __global int *outData; int gId = get_group_id(0);
outData已初始化为0,正在执行

atomic_add(&outData[gId], 1)
应将outData[gId]更改为n。当平台为OpenCL 1.2 AMD-APP(923.1)但使用OpenCL 1.1 CUDA 4.1.1平台导致垃圾值(-572662154)时,它仅给出了预期结果


请帮帮我。

如何将缓冲区初始化为0?@EricBainville
outData
是一个内核参数,因此我可以通过数据传输命令排队(
clEnqueueWriteBuffer
)从主机端写入缓冲区。只是想一想:outData应该是不稳定的。我不知道你是否真的在代码中指定了它。如果不是,AMD编译器可能检测到变量是易失的,英伟达一个也不….. @显然,即使显式声明<代码> OutDATAs/COD>作为易失性也不起作用。