【问题标题】:what does the last parameter mean for cudaHostGetDevicePointer最后一个参数对 cudaHostGetDevicePointer 意味着什么
【发布时间】:2015-04-15 09:49:38
【问题描述】:

最后一个参数的大部分解释是“Flags for extensions (must be 0 for now)”。链接在这里:http://www.cs.cmu.edu/afs/cs/academic/class/15668-s11/www/cuda-doc/html/group__CUDART__MEMORY_ga475419a9b21a66036029d5001ea908c.html#ga475419a9b21a66036029d5001ea908c

那么它的具体含义是什么?有人可以帮我提供一些代码解释吗?

【问题讨论】:

  • 当前文档是here,它声明“flags 为将来的版本提供。现在,它必须设置为0。”这意味着它只是一个占位符。在某些未来的 CUDA 版本(cuda 7.0 之后)中,可能会使用该值。目前它不会导致任何行为变化,但您仍应将其指定为零。
  • 一般情况下,cudaHostGetDevicePointer 函数与zero-copy mapped 内存一起使用,可以从主机和设备访问。要从设备访问它,您需要设备指针(在非 UVA 环境中)。此函数提供与先前分配/固定/映射的主机指针关联的设备指针。 Here 是一个使用示例。
  • @RobertCrovella 看起来我现在无能为力,我可能只是将其设置为 0。非常感谢您的快速响应!
  • @user12551 您不仅可以将其设置为0,还必须将其设置为0。这是为了确保您不会在未来版本的 CUDA 开始使用此标志字段时无意中设置标志而导致问题。
  • 我认为标志词永远不会设置为除 0 以外的任何值,这是 API 设计的史诗般的胜利。这意味着 API 是面向未来的,不需要选择加入。在 CUDA API 的其他地方包含标志字有一些明显的失败。 (我在看着你,cudaEventCreateWithFlags()

标签: cuda


【解决方案1】:

cudaHostGetDevicePointer 的当前文档是 here

来自文档:

flags 提供未来版本。目前,它必须设置为 0。

这意味着它只是一个占位符。在某些未来的 CUDA 版本(CUDA 7.0 之后)中,可能会使用该值。目前它不会导致任何行为变化,但您仍然需要将其指定为零。将其指定为零应该可以在任何未来的 CUDA 版本中实现兼容性(不改变行为),即使非零值会导致行为差异。

关于cudaHostGetDevicePointer函数的使用:

它与零拷贝映射内存一起使用,可以从主机和设备访问。要从设备访问它,您需要设备指针,它可能与非UVA 环境中的主机指针不同。此函数提供与先前分配/固定/映射的主机指针关联的设备指针。

Here 是一个使用示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2018-09-04
    • 1970-01-01
    • 2011-12-28
    • 2020-10-12
    相关资源
    最近更新 更多