使用OpenCL对AMD硬件的错误答案

时间:2012-03-23 17:32:52

标签: opencl amd-processor

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

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