CUDA“无效的设备符号”

时间:2010-11-04 02:41:57

标签: cuda

代码的骨架是

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 64bit
CUDA工具包3.1,SDK 3.1
GeForce GTX 460
SDK 3.1中的规则文件

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

2 个答案:

答案 0 :(得分:0)

cuda manual

中查看文档

您需要包含内存副本的种类或方向。也许默认是“cudaDevicetoHost”。

  
    

cudaMemcpyToSymbol(“carray”,h_carray,256,0,cudaHostToDevice);

  

答案 1 :(得分:0)

如果您可以发布一些代码来重现问题会有所帮助,也许您可​​以在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<<<...>>>(...);
  ...
}