【问题标题】:CUDA "invalid device symbol"CUDA“无效的设备符号”
【发布时间】:2010-11-04 18:18:16
【问题描述】:

代码的骨架是

a_kernel.cu

__constant__ unsigned char carray[256];

a.cu

#include <a_kernel.cu>
...
unsigned char h_carray[256];
...
cudaMemcpyToSymbol("carray", h_carray, 256);

系统配置是
Windows7 64位
CUDA 工具包 3.1、SDK 3.1
GeForce GTX 460
SDK 3.1 中的规则文件

我在 cudaMemcpyToSymbol 有无效的设备符号错误字符串。
任何帮助,将不胜感激。 :)

【问题讨论】:

    标签: cuda


    【解决方案1】:

    如果您可以发布一些代码来重现该问题会有所帮助,也许您可​​以在CUDA forums 上执行此操作。话虽如此,__constant__ 变量具有静态(即翻译单元)范围。最简单的结构如下。请注意,CUDA 3.2 可能也值得一试。

    host_code.cpp:

    #include "cuda_funcs.h"
    
    ...
    {
      unsigned char h_carray[256];
      cudaMemcpyToSymbol("carray", h_carray, 256);
      processOnGpu(...);
    }
    ...
    

    cuda_funcs.h:

    void processOnGpu(...);
    

    cuda_funcs.cu:

    __constant__ unsigned char carray[256];
    
    __global__ void kernel(...)
    {
      ...
    }
    
    void processOnGpu(...)
    {
      ...
      kernel<<<...>>>(...);
      ...
    }
    

    【讨论】:

      【解决方案2】:

      签出cuda manual中的文档

      您需要包括记忆副本的种类或方向。也许默认是“cudaDevicetoHost”。

      cudaMemcpyToSymbol("carray", h_carray, 256, 0, cudaHostToDevice);

      【讨论】:

      • 我把 cudaMemcpyHostToDevice 但仍然发生错误。 cudaMemcpyToSymbol("carray", h_carray, 256, 0, cudaMemcpyHostToDevice);好像程序没有看到变量carry。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多