cudaMemcpyToSymbol不会复制数据。

3
我希望使用__constant__内存,以便所有线程在所有内核中都可以访问。
声明如下:
extern __constant__ float smooth [8 * 1024];

我正在使用以下方式将数据复制到这个变量中:

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

平滑尺寸 = 7K字节

这个程序给了我不正确的输出。

但是当我在-deviceemu模式下运行它,并尝试在内核中打印这两个变量的内容时,我得到的平滑值全为零,而平滑本地的值是正确的。

我尝试在cudaMemcpyToSymbol之后立即打印输出,但仍然得到了0.

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


@Nishu,你解决了吗? - elect
1个回答

6
为了声明CUDA常量内存,代码如下:
__constant__ float smooth[8 * 1024];

请注意,CUDA常量内存是局部于其翻译单元的(即它被隐式声明为静态)。这是CUDA的一个令人烦恼的限制之一,因此如果您需要在不同的.cpp/.cu文件之间共享这些值,则必须在每个所需的.cpp/.cu文件中重新声明内存。您还必须再次调用cudaMemCopyToSymbol。最后,您的整个CUDA程序的常量内存总计只能达到64k。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接