在下面两种静态分配共享内存的方法中,哪种方法是正确的,为什么?我得到了相同的结果,但我试图了解的行为更详细一点。
内核1:
__shared__ int as[3][3],bs[3][3];
__global__ void Sharesum(int* a,int* b,int* c,int n)
{
int s,k,i,sum=0;
int tx,ty,bx,by;
tx=threadIdx.x;
ty=threadIdx.y;
as[ty][tx]=a[tx+n*ty];
bs[ty][tx]=b[tx+n*ty];
sum += as[ty][tx]+bs[ty][tx];
c[tx*n+ty]=sum;
}
内核2:
__global__ void Sharesum(int* a,int* b,int* c,int n)
{
__shared__ int as[3][3],bs[3][3];
int s,k,i,sum=0;
int tx,ty,bx,by;
tx=threadIdx.x;
ty=threadIdx.y;
as[ty][tx]=a[tx+n*ty];
bs[ty][tx]=b[tx+n*ty];
sum += as[ty][tx]+bs[ty][tx];
c[tx*n+ty]=sum;
}
1条答案
按热度按时间kknvjkwl1#
这两个方法之间不应该有任何区别 * 对于你所展示的 *。我不确定是否有一个答案表明一个是“正确的”,一个不是。
然而,第一个,我们可以称之为“全局作用域”声明,影响模块中定义的所有内核。这意味着所有内核将根据全局定义保留并具有可用的共享分配。
第二个只影响它所作用的内核。
其中一个或两个都可能是正确的,这取决于你想要的意图。