所有发布的代码示例中的CUDA常量内存似乎都是数组,但我在文档中找不到这个要求。那么为什么cudaMemcpyToSymbol在下面的cudaErrorInvalidSymbol失败了:
__constant__ int dev;
int main()
{
int host = 2;
cudaError_t error = cudaMemcpyToSymbol(&dev, &host, sizeof(host));
printf(cudaGetErrorString(error));
}
而以下成功?
__constant__ int dev[1];
int main()
{
int host = 2;
cudaError_t error = cudaMemcpyToSymbol(dev, &host, sizeof(host));
printf(cudaGetErrorString(error));
}
答案 0 :(得分:4)
设备符号与普通主机代码C变量或地址不同。您使用符号名称是否是"普通"设备变量或数组。
请改为:
__constant__ int dev;
int main()
{
int host = 2;
cudaError_t error = cudaMemcpyToSymbol(dev, &host, sizeof(host));
printf(cudaGetErrorString(error));
}
我所做的就是删除dev