在CPU上覆盖OpenCL输出值

时间:2017-03-18 04:25:38

标签: opencl memory-barriers

我有一些看起来像这样的OpenCL代码:

__kernel void calc(__global double* output) {
    size_t a = get_global_id(0);
    size_t b = get_global_id(1);
    double tot = 0.;
    if(a == b) {
        tot += f();
    }
    output[a * get_global_size(1) + b] = tot;
}

即,某些工作项执行的时间比其他工作项要多。当我在GPU上运行此代码时,一切都按预期工作。但是当我在Intel CPU上运行时,某些输出最终错误地为0.。可能因为缓存等对全局内存的一些写入覆盖了其他内容?在写入全局内存之前或之后是否需要设置屏障?

0 个答案:

没有答案