cudaMemcpyToSymbol不复制数据

3 cuda gpu

我想使用__constant__内存,这些内存将被我所有内核中的所有线程访问.

声明是这样的

extern __constant__ float smooth [8 * 1024];
Run Code Online (Sandbox Code Playgroud)

我正在使用数据将数据复制到此变量

cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)

smooth_size = 7K字节

它给了我不正确的输出

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

我尝试打印输出后cudaMemcpyToSymbol仍然给它0.

你们有人能说清楚我的问题吗?

Eri*_*ric 6

要声明CUDA常量内存,它看起来像这样:

__constant__ float smooth[8 * 1024];
Run Code Online (Sandbox Code Playgroud)

请注意,CUDA常量内存是其转换单元的本地内存(即它隐式声明为静态).这是CUDA令人讨厌的限制之一,所以如果你需要在separete .cpp/.cu文件之间共享这些值,你必须重新声明它所需的每个.cpp/.cu文件中的内存.你也会有再次拨打cudaMemCopyToSymbol.最后,在整个CUDA程序中,您总是限制为64k的常量内存.