79. __device__ double atomicAdd(double *address, const double val){
unsigned long long int *address_as_ull = (unsigned long long int *)address;
unsigned long long int old = *address_as_ull;
unsigned long long int assumed;
do{
assumed = old;
old = atomicCAS(address_as_ull, assumed, __double_as_longlong(val
+ __longlong_as_double(assumed)));
}while(assumed != old);
return __longlong_as_double(old);
}
double型に対するatomicAdd()
2015/07/23先端GPGPUシミュレーション工学特論81
double型を返すデバイス関数を作成
コンパイラが引数の型を判断して適切な関数を選択
関数のオーバーロード