CUDAMEMCPITOSYMBOL不复制数据

CUDAMEMCPITOSYMBOL不复制数据,cuda,gpu,Cuda,Gpu,我想使用\uuuu常量\uuuu内存,它将被我所有内核中的所有线程访问 宣言是这样的 extern __constant__ float smooth [8 * 1024]; 我正在使用将数据复制到此变量 cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice); 平滑大小=7K字节 它给了我不正确的输出 但是当我在-deviceemu模式下运行它并试图在内核中打印这两个变量的内容时,

我想使用
\uuuu常量\uuuu
内存,它将被我所有内核中的所有线程访问

宣言是这样的

extern __constant__ float smooth [8 * 1024];
我正在使用将数据复制到此变量

cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice);
平滑大小=7K字节

它给了我不正确的输出

但是当我在
-deviceemu
模式下运行它并试图在内核中打印这两个变量的内容时,我得到了所有零表示平滑,并且平滑是正确的

我试着在
cudaMemcpyToSymbol
之后打印输出,但结果仍然是0


有人能解释一下我的问题吗?

要声明CUDA常量内存,它应该是这样的:

__constant__ float smooth[8 * 1024];

请注意,CUDA常量内存是其转换单元的本地内存(即,它隐式声明为静态)。这是CUDA的一个恼人的限制,因此如果需要在separet.cpp/.cu文件之间共享这些值,则必须重新声明每个.cpp/.cu文件中所需的内存。您还必须再次调用cudaMemCopyToSymbol。最后,在整个CUDA程序中,您的总内存限制为64k。

@Nishu,您解决了吗?