繁体   English   中英

gpu上的并行减少总和计算错误的opencl

[英]Parallel reduction sum on gpu computes wrong opencl

所以我在全局内存中的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];
}

解决了,显然我确实有共享内存。 并且通过使用__local内存和局部障碍,解决方案是一致且正确的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM