CUDA中全局内存上的原子操作是否跨扭曲并行执行?

CUDA中全局内存上的原子操作是否跨扭曲并行执行?,cuda,nvidia,Cuda,Nvidia,我需要在CC 2.0设备上的全局内存上执行原子FP add操作。如果扭曲中引用的全局数据适合对齐的128字节扇区,这些操作是并行执行还是一次执行一个 我猜它们是平行的,但我不确定这一点 问候 Gautham Ganapathy原子操作比正常操作慢,因为它们确实不能并行发生 可能会发生的情况是,每次添加一个,但在所有线程完成添加之前,执行不会超过添加,从代码的角度来看,它看起来是并行的 我不确定访问是否会合并,但原子操作的速度损失可能会超过内存访问速度的好处。编程时,您可以将原子操作视为概念上的并

我需要在CC 2.0设备上的全局内存上执行原子FP add操作。如果扭曲中引用的全局数据适合对齐的128字节扇区,这些操作是并行执行还是一次执行一个

我猜它们是平行的,但我不确定这一点

问候
Gautham Ganapathy

原子操作比正常操作慢,因为它们确实不能并行发生

可能会发生的情况是,每次添加一个,但在所有线程完成添加之前,执行不会超过添加,从代码的角度来看,它看起来是并行的


我不确定访问是否会合并,但原子操作的速度损失可能会超过内存访问速度的好处。

编程时,您可以将原子操作视为概念上的并行操作(同时仍然满足原子性的要求)

在进行优化时,了解可能发生的序列化会有所帮助。实际发生的情况取决于您运行的硬件。性能取决于原子内存单元的位置和数量,以及并行执行的内存访问模式

例如,如果并行寻址的位置映射到完全不同的原子单位,则它们将并行发生。如果多个并行地址映射到同一个原子单元,则必须对它们进行序列化

原子操作性能从sm_11(计算能力1.1,首次出现)到sm_2x(费米设备),再到sm_3x(开普勒设备),一直在提高。开普勒将最坏情况下的原子内存操作性能(其中许多原子操作访问相同的内存地址)提高了10倍,将最佳情况下的性能(其中许多原子操作访问非常不同的内存地址)提高了2倍。开普勒的原子性能是足够高的,你可以考虑使用原子,以前你可能已经使用显式的并行还原码。有关更多详细信息,请参阅


注:本讨论适用于全局内存原子。共享内存原子是一种不同的野兽,通常会导致序列化,因此没有很高的性能。

换句话来说,原子操作将按顺序执行,但由于所有其他操作都将在此时停止,它们似乎是同时(并行)执行的。需要注意的一件重要事情是,尽管原子操作是顺序的,但它们的顺序无法控制

对。然而,我一直想知道的是,由于G200设备内存控制器足够智能,能够解决冲突和半扭曲的非平衡读/写访问,假设内存控制器有足够的独立原子操作执行单元进行处理,也许一个halfwarp上的所有操作都可以并行完成,而不会受到其他设备请求的中断。这是可能的吗?例如,如果每个扭曲执行一个更新,例如atomicAdd(baseAddress+tid,x),那么半扭曲的所有操作都可以由内存控制器并行完成,前提是它有16个加法器而不是1个加法器。问题是,情况是否如此?