【问题标题】:CUDA atomic operations and concurrent kernel launchCUDA 原子操作和并发内核启动
【发布时间】:2014-01-11 10:16:18
【问题描述】:

目前我开发了一个基于 GPU 的程序,该程序使用多个内核,这些内核通过多个流同时启动。

在我的应用程序中,多个内核需要访问一个队列/堆栈 我计划使用原子操作。

但我不知道原子操作是否在同时启动的多个内核之间起作用。 请任何知道GPU上原子操作的确切机制的人帮助我 或者谁有这个问题的经验。

【问题讨论】:

  • 你有没有尝试过?这根本不是我的领域,但如果您尝试过其他用户将能够通过一些代码更好地提供帮助:)
  • 来自 CUDA C 编程指南:原子函数对驻留在全局或共享内存中的一个 32 位或 64 位字执行读-修改-写原子操作。 [...] 操作是原子的,因为它保证在不受其他线程干扰的情况下执行。 来自 CUDA C 最佳实践指南:在能够并发内核执行的设备上,流也可用于同时执行多个内核,以更充分地利用设备的多处理器-
  • 把这两件事放在一起,我想说,如果你启动不同的内核处理不同流中的独立数据并且每个内核使用原子操作,那么每个内核中的操作可以“序列化”,但内核仍然可以利用 GPU 中可用的不同资源(内核、加载/存储单元和特殊功能单元)同时运行。

标签: concurrency cuda gpu-atomics


【解决方案1】:

Atomics 在 GPU 的 L2 缓存硬件中实现,所有内存操作都必须通过该硬件。没有硬件来确保主机和设备内存之间或不同 GPU 之间的一致性;但只要内核在同一个 GPU 上运行并使用该 GPU 上的设备内存进行同步,原子将按预期工作。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2013-01-31
    相关资源
    最近更新 更多