12#ifndef _CU_BASIC_ALGEBRA_ATOMIC_ADD_H_
13#define _CU_BASIC_ALGEBRA_ATOMIC_ADD_H_
19#include <cuda_runtime.h>
32#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600
34__device__
double atomicAdd(
double* address,
double val)
36 unsigned long long int* address_as_ull = \
37 (
unsigned long long int*)address;
38 unsigned long long int old = *address_as_ull, assumed;
45 __double_as_longlong(val + __longlong_as_double(assumed)));
49 }
while (assumed != old);
51 return __longlong_as_double(old);