使用cudaMemcpyToSymbol时,CUDA无效的设备符号错误

时间:2014-09-04 06:09:18

标签: c++ cuda

我试图在Win7上使用CUDA 6.0修改我的C ++程序,从命令行接受参数,然后将它们复制到常量内存中。我收到了无效的设备符号错误,我不明白为什么。

编辑:我确实在Invalid device symbol when copying to CUDA constant memory看到了解决方案,但不同之处在于我的设备常量是变量,而不是数组。我尝试在那里复制解决方案,但我在intellisense(或其他任何东西)中得到一个错误,指出" int类型的参数与const void *"类型的参数不兼容。

__device__ __constant__ int nc;

int main(int argc, char** argv)
{
    int hnc =2;  //Default value if no args passed in.

    if (argc > 1)
        hnc = strtod(argv[1], NULL);

    cudaMemcpyToSymbol(&nc, &hnc, sizeof(int));

    return 0;
}

最初,我想使用一个结构,以便我可以轻松更改默认的模型运行参数,但我得到了同样的错误。

struct modelParameters  //Contains other parameters, but reduced for readability.
{
    modelParameters() : nc(2) {}
    int nc;                             //Nucleus Size

} knowles;

__device__ __constant__ int nc;

int main(int argc, char** argv)
{
    int hnc = knowles.nc;    //Default value if no args passed in.

    if (argc > 1)
        hnc = strtod(argv[1], NULL);

    cudaMemcpyToSymbol(&nc, &hnc, sizeof(int));

    return 0;
}

0 个答案:

没有答案