所以我在全局内存中写了一个关于gpu的并行减少总和,因为我的gpu没有共享内存(我相信这意味着我不能使用本地内存?)。 问题是,当我尝试添加超过1024 * 4的数字时,它开始输出错误的解决方案,通常根据我输入的数量,它会关闭几百到几千。原因是什么? A是输入,C是输出。
__kernel void GMM(__global float *A, __global float *B, __global float *C)
{
uint global_id =get_global_id(0);
uint group_size=get_global_size(0);
B[global_id]=A[global_id];
for(int stride = group_size/2;stride>0;stride /=2)
{
if(global_id<stride)
{
B[global_id]+=B[global_id+stride];
}
}
if(global_id == 0)
C[get_group_id(0)]=B[0];
}
答案 0 :(得分:0)
显然解决了我确实有共享内存。通过使用__本地内存和本地障碍,解决方案是一致和正确的!