0

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

4

1 回答 1

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

    ...
}
于 2013-10-05T15:31:17.023 回答