再cdp快速排序的文章里有提到atomicAdd函数是先赋值后进行加法计算的,这里直接贴上它的实现函数便于更加深刻的理解。
这个代码来自官方文档:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
atomicAdd实际是调用atomicCAS函数,atomicSub、atomicMax等函数都是如此,了解一个就都明白了。从代码中看到,atomicCAS是对地址操作,将结果存在地址上,返回的是还是old值。
另外:atomicCAS本质是
old == compare ? val : old;