我有一些看起来像这样的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.
。可能因为缓存等对全局内存的一些写入覆盖了其他内容?在写入全局内存之前或之后是否需要设置屏障?