Руководство по программированию CUDA говорит, что любая атомарная операция может быть реализована с использованием atomicCAS()
, и приводит пример атомарного двойного добавления:
__device__ float single(double *address,double val)
{
unsigned long long int *address_as_ull =(unsigned long long int*)address;
unsigned long long int assumed;
unsigned long long int old = *address_as_ull;
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 *address_1, int *address_2
double val_1,int val_2
результат
*address_1 = *address_1+val_1;
*address_2 = *address_2+val_2;
как я могу решить проблему? спасибо.