CUDA常量内存无效符号

发布于 2024-09-26 09:00:14 字数 338 浏览 2 评论 0原文

struct d_struct {
// stuff
};

__device__ __constant__ d_struct structs[SIZE];

当我调用

cudaMemcpyToSymbol("structs", &h_struct, sizeof(d_struct), index * sizeof(d_struct), cudaMemcpyHostToDevice)

主机内存中的 d_struct "h_struct" 时,我收到 无效设备符号 cuda 错误。

struct d_struct {
// stuff
};

__device__ __constant__ d_struct structs[SIZE];

When I call

cudaMemcpyToSymbol("structs", &h_struct, sizeof(d_struct), index * sizeof(d_struct), cudaMemcpyHostToDevice)

on a d_struct "h_struct" in host memory, I get an invalid device symbol cuda error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无畏 2024-10-03 09:00:14

如果您可以提供更多详细信息,将会有所帮助,例如您正在运行什么平台以及哪个主机编译器版本?哪个 CUDA 工具包版本?什么设备?

同时,一些建议:

  • 确保您使用的是最新的 CUDA 工具包。目前 3.1 是最新版本,3.2 是候选版本
  • 如果您在 Windows 中使用 CUDA 向导运行,请尝试切换到 NVIDIA 提供的标准规则文件
  • 您是否正在构建正确的计算能力?只需检查您是否没有针对 sm_13 进行编译并在 sm_12 上运行,例如
  • 您是否从声明 constant 的同一文件调用 cudaMemcpyToSymbol() ?如果没有,那么它应该仍然可以工作,因为查找是通过名称而不是符号完成的,但请检查您是否没有将其声明为 extern "C" 并且您正在从 C++ 调用
  • 鉴于您'遗漏了很多代码,最好检查一下 - d_struct 不是模板化的,是吗?

If you can provide more details it will help, for example what platform are you running on and which host compiler version? Which CUDA toolkit version? What device?

In the meantime, some suggestions:

  • Make sure you are using the latest CUDA toolkit. At this time 3.1 is current and 3.2 is a Release Candidate
  • If you are running in Windows using the CUDA Wizard, try switching to the standard rules files provided by NVIDIA
  • Are you building for the correct Compute Capability? Just check that you aren't compiling for sm_13 and running on sm_12 for example
  • Are you calling cudaMemcpyToSymbol() from the same file where the constant is declared? If not, then it should still work since the lookup is done by name rather than symbol but check that you haven't declared it as extern "C" and that you are calling from C++
  • Given that you've left out a lot of code it's best to check - d_struct is not templated is it?
落墨 2024-10-03 09:00:14

CUDA 编程指南 v4.2 D.2.2.1,它说

不允许使用 __device____shared____constant__ 限定符:

  • classstructunion 数据成员,
  • 形式参数,
  • 在主机上执行的函数内的局部变量。

In CUDA Programming Guide v4.2 D.2.2.1, it says that

The __device__, __shared__ and __constant__ qualifiers are not allowed on:

  • class, struct, and union data members,
  • formal parameters,
  • local variables within a function that executes on the host.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文