原子操作的算术函数:
atomicAdd():
int atomicAdd(int* address, int val);
unsigned int atomicAdd(unsigned int* address,
unsigned int val);
unsigned long long int atomicAdd(unsigned long long int* address,
unsigned long long int val);
float atomicAdd(float* address, float val);
double atomicAdd(double* address, double val);
读取全局或共享内存中地址地址处的32位或64位字,计算(old+ val),并将结果存回相同地址的存储器中。 这三个操作在一个原子事务中执行。 该函数返回旧的。
atomicAdd()的32位浮点版本仅受计算能力2.x及更高版本的设备支持。
atomicAdd()的64位浮点版本仅受计算能力6.x及更高版本的设备支持。
atomicSub():
int atomicSub(int* address, int val);
unsigned int atomicSub(unsigned int* address,
unsigned int val);
读取全局或共享内存中地址地址处的32位字节,计算(old - val),并将结果存回相同地址的存储器中。 这三个操作在一个原子事务中执行。 该函数返回旧的。
atomicExch():
int atomicExch(int* address, int val);
unsigned int atomicExch(unsigned int* address,
unsigned int val);
unsigned long long int atomicExch(unsigned long long int* address,
unsigned long long int val);
float atomicExch(float* address, float val);
读取位于全局或共享内存中地址地址的32位字节或64位字节,并将val存回相同地址的存储器中。 这两个操作在一个原子事务中执行。 该函数返回旧的。
atomicMin():
int atomicMin(int* address, int val);
unsigned int atomicMin(unsigned int* address,
unsigned int val);
unsigned long long int atomicMin(unsigned long long int* address,
unsigned long long int val);
读取位于全局或共享内存中地址地址处的32位字节或64位字节,计算old和val的最小值,并将结果存回相同地址的存储器中。 这三个操作在一个原子事务中执行。 该函数返回旧的。
atomicMin()的64位版本仅受计算能力3.5及更高版本的设备支持。
atomicInc():
unsigned int atomicInc(unsigned int* address,
unsigned int val);
读取位于全局或共享内存中地址地址的32位字节,计算((old> = val)?0:(old + 1)),并将结果存回同一地址的存储器中。 这三个操作在一个原子事务中执行。 该函数返回旧的。
atomicDec():
unsigned int atomicDec(unsigned int* address,
unsigned int val);
读取位于全局或共享内存中地址地址的32位字节,计算(((old == 0)|(old> val))?val:(old-1)),并将结果存回 内存在相同的地址。 这三个操作在一个原子事务中执行。 该函数返回旧的。
atomicCAS():
int atomicCAS(int* address, int compare, int val);
unsigned int atomicCAS(unsigned int* address,
unsigned int compare,
unsigned int val);
unsigned long long int atomicCAS(unsigned long long int* address,
unsigned long long int compare,
unsigned long long int val);
读取位于全局或共享内存中地址地址的32位字节或64位字节,计算(old == compare?val:old),并将结果存回相同地址的存储器中。 这三个操作在一个原子事务中执行。 该函数返回旧的(比较和交换)。