我对工作项和全局内存之间的数据传输方式有一些疑问。让我们考虑以下非常低效的内存绑定内核。
__kernel void reduceURatios(__global myreal *coef, __global myreal *row, myreal ratio)
{
size_t gid = get_global_id(0);//line no 1
myreal pCoef = coef[gid];//line no 2
myreal pRow = row[gid];//line no 3
pCoef = pCoef - (pRow * ratio);//line no 4
coef[gid] = pCoef;//line no 5
}
答案 0 :(得分:1)
在下面找到我的答案:(感谢sharpneli获得AMD GPU和warp的好评)
barriers
和mem_fences
存在的原因。例如,一些GPU仅按顺序执行WG的WI的子集。在CPU中,它们甚至可能完全无序运行。注意:如果您尝试写入全局内存,则会应用相同的过程。在写入全局之前,许多WI在本地存储器中操作总是更好。但如果每个WI写入全局的唯一地址,则直接写入。