在 CUDA 统一内存多 GPU 或多处理器中使用原子算术运算

Using atomic arithmetic operations in CUDA Unified Memory multi-GPU or multi-processor

我正在尝试实现一个使用统一内存的 CUDA 程序。我有两个统一数组,有时它们需要自动更新。

下面的问题有针对单 GPU 环境的答案,但我不确定如何扩展问题中给出的答案以适应多 GPU 平台。

问题:cuda atomicAdd example fails to yield correct output

如果您需要此信息,我有 4 个 Tesla K20,它们都更新了必须自动完成的数组的一部分。

我将不胜感激 help/recommendations。

将评论总结为答案:

  • 您可以使用 atomicAdd_system
  • 执行这种地址 space 宽原子操作
  • 但是,您只能在计算能力 6.x 或更新的设备(如果使用 Tegra 则为 7.2 或更新的设备)上执行此操作
  • 具体来说,这意味着您必须针对正确的计算能力进行编译,例如 -arch=sm_60 或类似的
  • 您在问题中说明您使用的是 Telsa K20 卡 -- 这些卡的计算能力为 3.5,不支持任何系统范围的原子功能。

一如既往,此信息在编程指南的 relevant section 中进行了简洁的总结。