簡體   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