cuda共享内存静态分配中的错误

时间:2013-10-05 15:09:10

标签: c cuda gpu nvidia

我使用共享内存编写了一个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.那么为什么会出现这个错误呢?

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];

    ...
}