【问题标题】:cudaErrorInvalidValue error when calling cudaMemcpyToSymbol调用 cudaMemcpyToSymbol 时出现 cudaErrorInvalidValue 错误
【发布时间】:2012-03-23 01:14:43
【问题描述】:

在调用函数cudaMemcpyToSymbol 时,我收到无效值错误(cudaErrorInvalidValue)。发生错误的代码是这样的。

__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。为什么会出现此错误。有什么可能的原因吗?

【问题讨论】:

  • 您确定size_t 与您系统上的CUDA int 大小相同,即4 个字节吗?
  • size_t 在我的系统上是 8 个字节,因为我使用的是 64 位 Windows 系统。在这种情况下有什么问题吗?
  • 是的,当然 - CUDA int 只有 4 个字节。您不能只将 8 字节变量复制到 4 字节常量。
  • 是的,它确实有效。谢谢!也许您可以将您的评论作为答案,以便我接受。
  • 好的 - 很高兴知道 - 我现在已经回答了上述 cmets。

标签: c cuda gpu gpgpu


【解决方案1】:

您需要检查size_t 是否与您系统上的int 大小相同。如果 size_t 是 8 个字节而 int 是只有 4 个字节,那么调用将失败 - 您不能只将 8 字节变量复制到 4 字节 CUDA 设备常量。

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2017-03-06
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多