Я переношу данные на определенный символ CUDA, моя версия CUDA - 10.1, GPU - Tesla 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));
он скомпилировался хорошо, но при запуске программы получил cudaErrInvalidSymbol
,
13: Invalid device symbol
Если я изменил свой код следующим образом,
<.h>
#include <cuda_runtime.h>
__device__ __constant__ float scoreRatio;
<.cpp>
const float ScoreRatio;
cudaErr=cudaMemcpyToSymbol(scoreRatio,&ScoreRatio,sizeof(ScoreRatio));
тогда компиляция не удалась бы из-за несовместимого типа параметра, поскольку первый параметр - FLOAT, а функция запрашивает VOID *, здесь я нашел определение функции в cuda_runtime_api.h,
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));
CouldКто-нибудь, пожалуйста, дайте несколько советов, высоко ценится.