代码的骨架是
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上收到了无效的设备符号错误字符串 任何帮助,将不胜感激。 :)
答案 0 :(得分:0)
您需要包含内存副本的种类或方向。也许默认是“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<<<...>>>(...);
...
}