如何并行化三个嵌套的for循环,以便在CUDA中添加三个向量?

时间:2019-02-12 05:15:53

标签: cuda

例如

for(i = 0 to 1000){
 for(j= 0 to 1000){
  for(k = 0 to 1000){
   add(a[i],b[j],c[k]);
  }
 }
}

这是串行代码结构。在CUDA中,我可以写

__global__ void add (int *a, int *b, int *c, int *d)
{
  int tidx = blockIdx.x*blockDim.x+threadIdx.x;

  if(tidx<1000){
     for(j= 0 to 1000){
       for(k = 0 to 1000){
        d[tidx] = a[idx]+b[j]+c[k];
       }
     }

     add<<<1,1000>>>(a,b,c,d);//1D thread
  }
}

如何为上述代码使用3D线程分配?

谢谢

1 个答案:

答案 0 :(得分:1)

首先,请阅读有关this one的精彩文章。

要获得更多的尺寸,只需将其展平为单个一维阵列即可。

index1D = indexX + SizeY * indexY + SizeY * SizeZ * indexZ;

当然,您必须用网格设计的表示形式替换indexX,-Y,-Z。