gpt4 book ai didi

c++ - 用于 int3 的 Cuda AtomicAdd

转载 作者:行者123 更新时间:2023-12-05 04:28:18 28 4
gpt4 key购买 nike

在 Cuda 中,double 的 AtomicAdd 可以使用 while 循环和 AtomicCAS 操作来实现。但是我怎样才能有效地为类型 int3 实现原子添加呢?

最佳答案

经过进一步考虑,我不确定 int3 上的 atomicAdd 与 3 个单独的 atomicAdd 操作有何不同,每个在 int 位置。为什么不这样做呢?

(int3 无论如何都不能作为单个数量加载 in CUDA at the machine level 。编译器保证将其拆分为多个加载,因此尽管异步读取 会有危险int3,无论如何,无论有没有原子,这种危险都会存在。)

但是要回答您提出的具体问题,使用原子是不可能的。

int3 是 96 位类型。

CUDA 原子仅支持最多 64 位的操作。 Herefloat2(一种 64 位类型)的原子添加示例,您可以做类似的事情,例如short3short4

您也可以使用缩减方法或关键部分。这里有很多关于 SO cuda 标签的问题,讨论了缩减和关键部分。

减少方法可以实现如下:

  1. 每个想要对特定 int3 位置进行原子更新的线程使用 this method创建原子更新数量的队列或列表。

  2. 列表生成完成后,启动内核执行 parallel reduction在 list 上,从而产生属于该位置的最终减少数量。

关于c++ - 用于 int3 的 Cuda AtomicAdd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72647540/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com