1
私はgpuに共有メモリがないので、グローバルメモリのgpuに並列リダクション合計を書いています(ローカルメモリを使用できないと思います)。 問題は、私が入力した数字の数に応じて数百から数百の間違った解を出力し始める1024 * 4の数より多くの数を追加しようとすると問題になります。理由は何でしょうか? Aは入力、Cは出力です。gpuのパラレルリダクション合計が間違ったopenclを計算する
__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];
}
予定しているワークグループの数とワークグループのサイズは? – doqtor
私は2048のワークグループのように、1024 * 4のグローバルサイズと2のローカルサイズを持っています。 – Fluffy
私はいくつかの種類の上限に入り、1024 * 4のグローバルサイズを超えたときにすでに追加されているランダムなグローバル値を追加することになりますか? – Fluffy