我试图在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;
}