【发布时间】:2014-06-05 06:24:38
【问题描述】:
在CUDA programming guide 中指出,映射固定主机内存上的原子操作“从主机或其他设备的角度来看不是原子操作。” 我从这句话中得到的是如果主机内存区域仅由一个 GPU 访问,则可以在映射的固定主机内存上执行原子操作(即使在多个同时内核中)。
另一方面,在 Nicholas Wilt 所著的《the CUDA Handbook》一书中第 128 页指出:
不要尝试在映射的固定主机内存上使用原子,无论是用于主机(锁定比较交换)还是设备(
atomicAdd())。在 CPU 方面,为锁定操作强制互斥的设施对于 PCI Express 总线上的外围设备是不可见的。相反,在 GPU 方面,原子操作仅适用于本地设备内存位置,因为它们是使用 GPU 的本地内存控制器实现的。
在 CUDA 内核中在映射的固定主机内存上执行原子操作是否安全?我们可以依靠PCI-e总线来保持atomics的read-modify-write的原子性吗?
【问题讨论】:
-
我不相信它可以工作。 Nick Wilt 在 SO 上发帖为 archaeasoftware。我希望他能找到这个问题并回答它。我很确定他会重申书中的内容。
-
好吧,my simple tests 不会失败,使用原子对于我的测试获得正确答案至关重要。我有兴趣看一个反例(从单个 GPU 对映射固定内存的原子更新失败)。
-
你还没有说你是在映射的固定主机内存上做 CPU 还是 GPU 原子。
-
我编辑了问题。