2012-03-05 324 views
2

调用函数cudaMemcpyToSymbol时,出现无效值错误(cudaErrorInvalidValue)。发生错误的代码就是这样的。cudaErrorInvalidValue调用cudaMemcpyToSymbol时出错

__constant__ int c_queryLength; //Length of query sequence in chunks of 4 
............... 
if((cuda_err = cudaMemcpyToSymbol(c_queryLength,&queryLengthInChunks, 
    sizeof(queryLengthInChunks),0, cudaMemcpyHostToDevice))!=cudaSuccess) 
{ 
// Check which error occured; 
............... 
} 

这里的queryLengthInChunks的价值,这是size_t型的,是36为什么会出现这种错误。任何可能的原因呢?

+0

您确定'size_t'与您的系统上的CUDA'int'大小相同,即4个字节? – 2012-03-05 15:16:02

+0

size_t在我的系统上是8个字节,因为我使用的是64位Windows系统。在这种情况下是否会造成任何问题? – MetallicPriest 2012-03-05 15:17:16

+0

是的,当然 - CUDA int只有4个字节。您不能只将8字节变量复制到4字节常量。 – 2012-03-05 15:17:55

回答

3

您需要检查系统上的size_tint的尺寸是否相同。如果size_t是8个字节,并且int只有4个字节,则调用将失败 - 您不能将8字节变量复制到4字节CUDA设备常量。