所有发布的代码示例中的 CUDA 常量内存似乎都是数组,但我在文档中找不到它作为要求。那么为什么 cudaMemcpyToSymbol 在以下情况中会因 cudaErrorInvalidSymbol 而失败:
__constant__ int dev;
int main()
{
int host = 2;
cudaError_t error = cudaMemcpyToSymbol(&dev, &host, sizeof(host));
printf(cudaGetErrorString(error));
}
Run Code Online (Sandbox Code Playgroud)
而以下成功?
__constant__ int dev[1];
int main()
{
int host = 2;
cudaError_t error = cudaMemcpyToSymbol(dev, &host, sizeof(host));
printf(cudaGetErrorString(error));
}
Run Code Online (Sandbox Code Playgroud)
设备符号不像普通的主机代码 C 变量或地址。无论是“普通”设备变量还是数组,都可以使用符号名称。
改为这样做:
__constant__ int dev;
int main()
{
int host = 2;
cudaError_t error = cudaMemcpyToSymbol(dev, &host, sizeof(host));
printf(cudaGetErrorString(error));
}
Run Code Online (Sandbox Code Playgroud)
我所做的就是删除前面的&符号 dev