3

我想使用__constant__所有内核中的所有线程都可以访问的内存。

声明是这样的

extern __constant__ float smooth [8 * 1024];

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

cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice);

smooth_size = 7K 字节

它给了我不正确的输出

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

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

你能解释一下我的问题吗?

4

1 回答 1

6

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

__constant__ float smooth[8 * 1024];

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

于 2009-08-21T23:29:19.470 回答