0
我寫使用共享存儲器這樣的CUDA代碼:誤差在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.爲什麼這個錯誤?
所以你的意思是在編譯時TILE不是一個常數,但仍blockDimx.x,這還沒有計算爲1? – user25108
@ user25108是的,這裏的問題是'TILE'的值在編譯時是未知的。 – JackOLantern