在 CUDA Unified Memory 多 GPU 或多处理器中使用原子算术运算

Posted

技术标签:

【中文标题】在 CUDA Unified Memory 多 GPU 或多处理器中使用原子算术运算【英文标题】:Using atomic arithmetic operations in CUDA Unified Memory multi-GPU or multi-processor 【发布时间】:2020-09-27 17:31:48 【问题描述】:

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

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

问题:cuda atomicAdd example fails to yield correct output

如果您需要此信息,我有 4 个 Tesla K20,所有这些都更新了必须以原子方式完成的部分阵列。

如果有任何帮助/建议,我将不胜感激。

【问题讨论】:

你不能用你所拥有的硬件做你想做的事 Tesla K20(计算能力 3.5)不支持超出单个 GPU 的原子,请参阅 here,无论有无统一内存。 @talonmies 我在一个集群上,我可以请求另一个节点,所以硬件的生成不是问题。现在,我怎样才能实现这种原子增量? @RobertCrovella 哦,我现在看到指南了,谢谢!! 如果您有 6.x 或更好的硬件,请使用原子的 _system 变体。它在我已经链接的编程指南中。 【参考方案1】:

将 cmets 总结为一个答案:

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

与往常一样,此信息在编程指南的relevant section 中得到了简洁的总结。

【讨论】:

以上是关于在 CUDA Unified Memory 多 GPU 或多处理器中使用原子算术运算的主要内容,如果未能解决你的问题,请参考以下文章

CUDA_ERROR_OUT_OF_MEMORY

Tensorflow GPU错误CUDA_ERROR_OUT_OF_MEMORY:内存不足

并行程序设计---cuda memory

CUDA内存类型memory

CUDA:Out Of Memory问题

关于CUDA统一虚拟内存的困惑