Я написал код 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 и напечатать значение ПЛИТКИ, и это выходит 1. так почему эта ошибка?
так вы имеете в виду в то время TILE компиляции не является постоянной, но до сих пор blockDimx.x, которая еще не оценена в 1? – user25108
@ user25108 Да, проблема здесь в том, что значение 'TILE' неизвестно во время компиляции. – JackOLantern