我想使用__constant__
内存,这些内存将被我所有内核中的所有线程访问。
声明是这样的
extern __constant__ float smooth [8 * 1024];
我正在使用
将数据复制到此变量cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice);
smooth_size = 7K字节
它给了我错误的输出
但是当我在-deviceemu
模式下运行它并尝试在内核中打印这两个变量的内容时,我得到了所有零的平滑和smooth_local是正确的。
我尝试在cudaMemcpyToSymbol
之后打印输出,但它仍然给我0。
你能否解决我的问题?
答案 0 :(得分:6)
要声明CUDA常量内存,它将如下所示:
__constant__ float smooth[8 * 1024];
请注意,CUDA常量内存对于其转换单元是本地的(即它被隐式声明为静态)。这是CUDA令人讨厌的限制之一,所以如果你需要在separete .cpp / .cu文件之间共享这些值,你将不得不重新声明它所需的每个.cpp / .cu文件中的内存。你也会有再次拨打cudaMemCopyToSymbol。最后,在整个CUDA程序中,您总是限制为64k的常量内存。