次のように共有メモリを使用して 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 が出てきました。では、なぜこのエラーが発生するのでしょうか。