CUDA函数CUDAMEMCPITOSYMBOL()中的问题

CUDA函数CUDAMEMCPITOSYMBOL()中的问题,cuda,Cuda,我正在将数据传输到特定的CUDA符号,我的CUDA版本是10.1,GPU是特斯拉K80。我在VS2017上编译了代码,代码由compute_35和sm35生成。当我这样写代码时 <.h> #include <cuda_runtime.h> __device__ __constant__ float scoreRatio; <.cpp> const float ScoreRatio; cudaErr=cudaMemcpyToSymbol(&scoreR

我正在将数据传输到特定的CUDA符号,我的CUDA版本是10.1,GPU是特斯拉K80。我在VS2017上编译了代码,代码由compute_35和sm35生成。当我这样写代码时

<.h>
#include <cuda_runtime.h>
__device__ __constant__ float scoreRatio;

<.cpp>
const float ScoreRatio;
cudaErr=cudaMemcpyToSymbol(&scoreRatio,&ScoreRatio,sizeof(ScoreRatio));
printf("%d: %s.\n",cudaErr,cudaGetErorString(cudaErr));

如果我像这样修改代码

<.h>
#include <cuda_runtime.h>
__device__ __constant__ float scoreRatio;

<.cpp>
const float ScoreRatio;
cudaErr=cudaMemcpyToSymbol(scoreRatio,&ScoreRatio,sizeof(ScoreRatio));
任何人都可以提供一些建议,非常感谢。

这:

<.h>
#include <cuda_runtime.h>
__device__ __constant__ float scoreRatio;

<.cpp>
const float ScoreRatio;
cudaErr=cudaMemcpyToSymbol(&scoreRatio,&ScoreRatio,sizeof(ScoreRatio));
printf("%d: %s.\n",cudaErr,cudaGetErorString(cudaErr));

它将正确编译和运行。有关为什么需要更改
cudaMemcpyToSymbol
调用的第一个参数的说明,请参见。

什么是
\uuuu contant\uuu
?我建议您展示您正在编译的实际完整代码,以及VSI的实际编译错误输出抱歉犯了这个愚蠢的错误,感谢您的回答,我只是编辑了我的问题。大多数情况下,这似乎可以通过更改&scoreRatio to scoreRatio来解决,但它显然不能满足cudaMemcpyToSymbol()定义的参数类型要求。您不能在.cpp文件中引用标记有
\uuuu device\uuuuuuuuu
\uuuuu constant\uuuuuuu
的变量。普通的主机C++编译器不知道这是什么。您需要将所有这些放在一个.cu文件中,并让nvcc编译器驱动程序处理。谢谢。在CUDA 4.0之前,在.cpp文件中引用decive变量似乎是可行的,因为函数CUDAMEMCPITOSYMBOL()接受将变量命名为第一个参数的字符串。由于此规则已被弃用并删除,如何在.cpp中将值从主机传输到设备?或者根本不可能?在.cu文件中创建一个包装函数,在该文件中定义了
\uuuuu设备\uuuuuu
\uuuu常量\uuuu
变量。包装器函数接受一个参数,该参数是要存储在
\uuuuu设备\uuuuuuuuuu
\uuuuuuu常量\uuuuuuuuuuuu
变量中的数据,并调用
cudaMemcpyToSymbol
。在.cpp文件中,如果要更新
\uuuu设备\uuuuuu
\uuuu常量\uuuuu
变量,请调用包装函数。感谢您的回复。实际上,我正在将以前用CUDA4.0编写的代码更新到CUDA10.1。这是一个相当大的程序,所以如果我只是简单地将.cpp改为.cu,就会出现更多的错误。无论如何,我正在努力,再次感谢你。
extern __host__ cudaError_t CUDARTAPI cudaMemcpyToSymbol(const void *symbol, const void *src, size_t count, size_t offset __dv(0), enum cudaMemcpyKind kind __dv(cudaMemcpyHostToDevice));
<.h>
#include <cuda_runtime.h>
__device__ __constant__ float scoreRatio;

<.cpp>
const float ScoreRatio;
cudaErr=cudaMemcpyToSymbol(&scoreRatio,&ScoreRatio,sizeof(ScoreRatio));
printf("%d: %s.\n",cudaErr,cudaGetErorString(cudaErr));
<.cu>
#include <.h>
....
const float ScoreRatio;
cudaErr=cudaMemcpyToSymbol(scoreRatio, &ScoreRatio, sizeof(ScoreRatio));
printf("%d: %s.\n", cudaErr, cudaGetErorString(cudaErr));