我正在使用带有AMD视频卡的OpenCL,并拥有最新的Linux驱动程序。
当我做类似的事情时:
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
我得到了错误的结果。但如果在此之后使用barrier(CLK_LOCAL_MEM_FENCE);
,我会得到正确的结果。
为什么会这样?
Ps1。:在Linux或Windows上使用NVIDIA显卡,我得到正确答案而不使用屏障。
该块是(使用__global * input,__ global *输出):
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
由于
答案 0 :(得分:0)
似乎与我之前报告的这个错误相似:http://devgurus.amd.com/thread/158479
所以我担心这是编译器中的一个错误,除了使用本地屏障并等到AMD修复他们的东西之外,你无能为力。
(请注意,正如链接主题中所建议的那样,本地mem_fence实际上应足以阻止编译器发出此错误。)