我使用这样的共享内存编写了一个 CUDA 代码:
__global__ void matrix_mul_shared(float *ad,float *bd,float *cd,int N)
{
float pvalue=0;
int TILE=blockDim.x;
int ty=threadIdx.y;
int tx=threadIdx.x;
//allocate shared memory per block
__shared__ float ads[1][1];
__shared__ float bds[1][1];
.
. . }
此代码有效,但以下代码失败;
__global__ void matrix_mul_shared(float *ad,float *bd,float *cd,int N)
{
float pvalue=0;
int TILE=blockDim.x;
int ty=threadIdx.y;
int tx=threadIdx.x;
//allocate shared memory per block
__shared__ float ads[TILE][TILE];
__shared__ float bds[TILE][TILE];
.
.
.
}
编译器期望在我分配共享内存的行中保持不变。它说(我忘记了确切的错误,但它是这样的):
参数应该是常数
我能够使用 printf 并打印 TILE 的值,结果是 1。那么为什么会出现这个错误?