问题
我试图将一个 int
数组复制到设备的常量内存中,但是我一直收到以下错误:
[ERROR] 'invalid argument' (11) in 'main.cu' at line '386'
代码
有很多开发代码,所以我将简化我现有的内容。
我已经在主文件 main.cu 的顶部声明了一个设备 __constant__
变量,在任何函数之外。
__device__ __constant__ int* dic;
我还有一个托管变量flatDic
,它是在main()
内进行以下方式的分配的:
int* flatDic = (int *)malloc(num_codewords*(bSizeY*bSizeX)*sizeof(int));
接下来我尝试将flatDic
的内容复制到dic
中,方法如下,在main()
函数中实现:
cudaMemcpyToSymbol(dic, flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
这个错误出现在 main.cu 的第 386 行,是由
cudaMemcpyToSymbol()
调用引起的。
我尝试过的方法
到目前为止,我已经尝试了以下所有方法,但仍然返回相同的错误:cudaMemcpyToSymbol(dic, &flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
cudaMemcpyToSymbol(dic, flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
cudaMemcpyToSymbol(dic, &flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int), 0, cudaMemcpyHostToDevice);
cudaMemcpyToSymbol(dic, flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int), 0, cudaMemcpyHostToDevice);
我也尝试使用 cudaMalloc()
分配 dic
变量的内存,在调用 cudaMemcpyToSymbol()
之前。在 cudaMalloc()
中没有出现任何错误,但是 cudaMemcpyToSymbol()
错误仍然存在。
cudaMalloc((void **) &dic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
我也在网上、文档、论坛、示例等地广泛搜索,但都没有结果。
有人看到我的代码有什么问题吗?先谢谢了。