例如
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线程分配?
谢谢
答案 0 :(得分:1)
首先,请阅读有关this one的精彩文章。
要获得更多的尺寸,只需将其展平为单个一维阵列即可。
index1D = indexX + SizeY * indexY + SizeY * SizeZ * indexZ;
当然,您必须用网格设计的表示形式替换indexX,-Y,-Z。