У меня есть несколько файлов для приложения в обработке изображений. Поскольку количество строк и колонок для изображения не изменяется при выполнении некоторого алгоритма обработки изображений, я пытался поместить эти значения в постоянную память. Мое приложение выглядит следующим образом:Неверный символ устройства при копировании в постоянную память CUDA
Imageproc.cuh
...
...
__constant__ int c_rows;
__constant__ int c_cols;
#ifdef __cplusplus
extern "C"
{
#endif
...
...
#ifdef __cplusplus
}
#endif
Imageproc.cu
...
...
int algorithm(float *a, const int rows, const int cols){
...
...
checkCudaError(cudaMemcpyToSymbol(&c_rows, &rows, sizeof(int)));
checkCudaError(cudaMemcpyToSymbol(&c_cols, &cols, sizeof(int)));
dim3 block(T, T);
dim3 grid(cols/T+1, rows/T+1);
kernel<<<grid, block>>>(...);
...
...
}
Он компилирует хорошо, но при попытке запустить программу я получаю invalid device symbol cudaMemcpyToSymbol(&c_rows, &rows, sizeof(int))
Не могу ли я поместить эти переменные в постоянную память или что мне не хватает?
Может быть, я оторваны CUDA в эти дни, но я думал, что шляпа 'cudaMemcpyToSymbol 'нужна строка для имени символа назначения? –
@PaulR: Это было устарело в CUDA 4 и удалено в CUDA 5. Теперь символ передается напрямую (что работает, потому что CUDA использует собственные заголовки ELF и компоновщик внутри). – talonmies
@talonmies: спасибо, что подтвердили, что я вне пределов досягаемости. ;-) –