2010-11-04 75 views
0

代码的骨架是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的64位
CUDA工具包3.1,SDK 3.1
GeForce GTX 460
SDK 3.1中的规则文件

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

回答

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<<<...>>>(...); 
    ... 
} 
0

结帐在cuda manual

您需要包括内存复制的种类和方向的文件。也许默认是“cudaDevicetoHost”。

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

+0

我把cudaMemcpyHostToDevice但仍然出现了错误。 cudaMemcpyToSymbol(“carray”,h_carray,256,0,cudaMemcpyHostToDevice);看起来程序没有看到变量carray。 – superscalar 2010-11-04 04:04:36