Cuda AtomicAdd for int3



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

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

(在CUDA中,int3无论如何都不能作为单个数量加载。编译器保证将其拆分为多个加载,因此尽管异步读取int3会有危险,但无论是否使用原子,这种危险都是存在的。

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

int3为96位类型。

CUDA原子仅支持最高64位的操作。以下是float2(64位类型)的原子添加示例,您可以为short3short4做类似的事情。

您可以选择使用约简方法或临界区。这里有很多关于SOcuda标签的问题,讨论了约简和临界部分。

减少方法可以实现如下:

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

  2. 一旦列表生成完成,启动一个内核对列表进行并行约简,从而产生属于该位置的最终约简数量。

相关内容

  • 没有找到相关文章

最新更新