1

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

我的猜测是它们是平行的,但我不确定

问候 Gautham Ganapathy

4

3 回答 3

3

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

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

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

从 sm_11(首次出现的计算能力 1.1)到 sm_2x(费米设备),再到 sm_3x(开普勒设备),原子操作性能不断提高。Kepler 将最坏情况的原子内存操作性能(许多原子操作访问相同的内存地址)提高了 10 倍,将最佳情况的性能(许多原子操作访问非常不同的内存地址)提高了 2 倍。Kepler 上的原子性能足够高,您可以考虑在以前可能使用显式并行缩减代码的地方使用原子。有关更多详细信息,请参阅此演示文稿

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

于 2012-09-10T05:59:31.690 回答
0

原子操作比普通操作慢,因为它们真的不能并行发生。

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

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

于 2010-07-27T04:49:34.927 回答
0

重新表述已经说过的内容:原子操作将按顺序执行,但由于此时所有其他操作都将停止,因此它们将显示为同时(并行)执行。需要注意的一件重要事情是,尽管原子操作是顺序的,但它们的 ORDER 是无法控制的。

于 2012-10-16T23:34:19.377 回答