cudaMemcpyToSymbol不复制数据

时间:2009-08-11 17:59:19

标签: cuda gpu

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

声明是这样的

extern __constant__ float smooth [8 * 1024];

我正在使用

将数据复制到此变量
cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice);

smooth_size = 7K字节

它给了我错误的输出

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

我尝试在cudaMemcpyToSymbol之后打印输出,但它仍然给我0。

你能否解决我的问题?

1 个答案:

答案 0 :(得分:6)

要声明CUDA常量内存,它将如下所示:

__constant__ float smooth[8 * 1024];

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