我需要在CC 2.0设备上对全局内存执行原子FP添加操作。如果warp中引用的全局数据适合对齐的128字节扇区,这些操作是并行完成还是一次执行一次?
我的猜测是他们是平行的,但我不确定这个
此致 Gautham Ganapathy
答案 0 :(得分:2)
编程时,您可以将原子操作视为概念上的并行(同时仍然满足原子性的要求)。
优化时有助于了解可能发生的序列化。实际发生的情况取决于您运行的硬件。性能取决于原子存储单元的位置和数量,以及并行执行的存储器访问模式。
例如,如果并行寻址的位置映射到完全不同的原子单位,它们将并行发生。如果并行的许多地址映射到同一个原子单元,则必须将它们序列化。
从sm_11(首次出现的计算能力1.1)到sm_2x(费米设备),再到sm_3x(开普勒设备),原子操作性能始终如一。 Kepler将最坏情况下的原子内存操作性能(许多原子操作访问相同的内存地址)提高了10倍,最佳情况性能(许多原子操作访问非常不同的内存地址)提高了2倍。开普勒的原子性能足够高,您可以考虑使用原子,而以前您可能已使用显式并行缩减代码。有关详细信息,请参阅this presentation。
注意:此讨论适用于全局内存原子。共享内存原子是一种不同的野兽,通常导致序列化,因此没有很高的性能。
答案 1 :(得分:0)
原子操作比正常操作慢,因为它们实际上不能并行发生。
可能会发生的事情是每次添加都会一次完成一次,但是在所有线程完成之前执行不会超过添加,从代码的角度来看,它看起来是平行的。
我不确定访问是否会被合并,但原子操作的速度损失可能会超过内存访问速度的好处。
答案 2 :(得分:0)
重新说明已经说过的内容:ATOMIC操作将按顺序执行,但由于此时所有其他操作都将暂停,因此它们将同时执行(并行)。需要注意的一件重要事情是,尽管原子操作是有序的,但它们的ORDER无法控制。