当constant不是数组时,cudaMemcpyToSymbol会失败

时间:2015-08-07 16:38:36

标签: cuda

所有发布的代码示例中的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));
}

1 个答案:

答案 0 :(得分:4)

设备符号与普通主机代码C变量或地址不同。您使用符号名称是否是"普通"设备变量或数组。

请改为:

    __constant__ int dev;

int main()
{
    int host = 2;
    cudaError_t error = cudaMemcpyToSymbol(dev, &host, sizeof(host));
    printf(cudaGetErrorString(error));
}

我所做的就是删除dev

前面的&符号