gpt4 book ai didi

cudaMemcpyToSymbol 不复制数据

转载 作者:行者123 更新时间:2023-12-01 11:09:48 25 4
gpt4 key购买 nike

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

声明是这样的

extern __constant__ float smooth [8 * 1024];

我正在使用

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

smooth_size = 7K 字节

它给我错误的输出

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

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

谁能解释一下我的问题?

最佳答案

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

__constant__ float smooth[8 * 1024];

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

关于cudaMemcpyToSymbol 不复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com