2

我正在使用带有 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

谢谢

4

1 回答 1

0

似乎类似于我之前报告的这个错误:http: //devgurus.amd.com/thread/158479

所以我担心这是编译器中的一个错误,除了使用本地屏障并等到 AMD 修复他们的东西之外,你无能为力。

(请注意,正如链接主题中所建议的那样,本地 mem_fence 实际上应该足以防止编译器出现此错误。)

于 2012-03-26T20:05:33.713 回答