我使用共享内存编写了一个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.那么为什么会出现这个错误呢?
答案 0 :(得分:1)
我认为您收到的错误是
error: expression must have a constant value
变量TILE
在编译器意义上不是常量。编译器在编译时询问已知的共享内存数组的维度。
可能的解决方案:
#define TILE 16
__global__ void matrix_mul_shared(float *ad,float *bd,float *cd,int N)
{
...
__shared__ float ads[TILE][TILE];
...
}