4
我在图像处理中有几个应用程序文件。由于图像的行数和列数不会在更改图像处理算法时发生变化,因此我试图将这些值放入常量内存中。我的应用程序是这样的:复制到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 '需要一个字符串作为目标符号名称? – 2013-05-11 15:34:53
@PaulR:在CUDA 4中弃用并在CUDA 5中删除。现在,符号直接传递(这是因为CUDA在内部使用适当的ELF标头和链接程序而起作用)。 – talonmies 2013-05-11 15:39:29
@talonmies:谢谢你确认我没有联系。 ;-) – 2013-05-11 17:46:46