我什么时候应该支持更具体的原子操作而不是使用 atomicCAS?
When should I favor a more specific atomic operation over using atomicCAS?
在我的第一个并行程序中,我一直在 do-while
循环中使用 atomicCAS
来执行各种需要的算术运算。我看到还有其他操作,例如 atomicInc
,这与在 do-while
中使用 atomicCAS
递增是一样的,对吗?这会更有效(就时钟周期而言),还是没有必要摆脱我对 atomicCAS
的过度使用?
这个问题唯一明智的答案是"every scenario where there is a purpose built atomic primitive for performing the same operation"。
在 nVIDIA GPU 上,只有当您别无选择时,使用 atomicCAS 作为围绕算术运算的伪互斥锁才有意义。即使今天没有明显的性能差异,通过使用转换为 PTX 指令的原子原语,随着 NVIDIA 改进其实现,您也为您的代码提供了在未来硬件和未来工具链上获得性能提升的可能性。
在我的第一个并行程序中,我一直在 do-while
循环中使用 atomicCAS
来执行各种需要的算术运算。我看到还有其他操作,例如 atomicInc
,这与在 do-while
中使用 atomicCAS
递增是一样的,对吗?这会更有效(就时钟周期而言),还是没有必要摆脱我对 atomicCAS
的过度使用?
这个问题唯一明智的答案是"every scenario where there is a purpose built atomic primitive for performing the same operation"。
在 nVIDIA GPU 上,只有当您别无选择时,使用 atomicCAS 作为围绕算术运算的伪互斥锁才有意义。即使今天没有明显的性能差异,通过使用转换为 PTX 指令的原子原语,随着 NVIDIA 改进其实现,您也为您的代码提供了在未来硬件和未来工具链上获得性能提升的可能性。