来自CUDA 编程指南:
unsigned int atomicInc(unsigned int* address, unsigned int val);
读取位于全局或共享内存
old
中地址的 32 位字,计算并将结果存储回同一地址的内存中。这三个操作在一个原子事务中执行。函数返回。address
((old >= val) ? 0 : (old+1))
old
这很好,花花公子。但在哪里
unsigned int atomicInc(unsigned int* address);
哪个只是增加值address
并返回旧值?和
void atomicInc(unsigned int* address);
它只是增加 at 的值address
并且什么都不返回?
注意:当然我可以通过包装实际的 API 调用来“自己动手”,但我认为硬件的操作更简单,可能更便宜。