我正在使用带有 AMD 视频卡的 OpenCL,并且在 Linux 中拥有最新的驱动程序。
当我做类似的事情时:
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
我得到一个错误的结果。但如果barrier(CLK_LOCAL_MEM_FENCE);
在此之后使用 a ,我会得到正确的结果。
为什么会这样?
Ps1.:在 Linux 或 Windows 上都使用 NVIDIA 显卡,我得到了正确的答案,没有使用障碍。
该块是(使用 __global *input, __global *output ):
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
int b = get_group_id(0) > 0 ? c + a : a;
output[b + id] = input[ d + id ]; //Last kernel line
我正在使用 128 个工作组大小。我试过 HD 6790 - linux
谢谢