我的问题是如何在 CUDA 中进行原子加载。原子交换可以模拟原子存储。原子加载是否可以以类似的方式廉价地模拟?我可以使用带有 0 的原子添加来自动加载内容,但我认为它很昂贵,因为它执行原子读取-修改-写入而不是仅读取。
据我所知,目前没有办法在 CUDA 中请求原子加载,这将是一个很棒的功能。
有两种准替代方案,各有优点和缺点:
按照您的建议使用无操作原子读取-修改-写入。我过去曾提供过类似的答案。保证原子性和内存一致性,但您要付出不必要的写入成本。
在实践中,第二接近原子加载的可能是标记变量volatile,尽管严格来说语义完全不同。该语言不保证加载的原子性(例如,理论上您可能会读错),但保证您获得最新的值。但在实践中,正如 @Robert Crovella 的评论所指出的,对于最多 32 字节的正确对齐的事务来说,不可能获得撕裂读取,这确实使它们成为原子的。
解决方案 2 有点老套,我不推荐它,但它是目前唯一替代 1 的无写替代方案。理想的解决方案是添加一种直接在语言中表达原子负载的方法。
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |