小编tao*_*njl的帖子

atomicAdd()for GPU上的double

我正在GPU上做一个项目,我必须使用atomicAdd()for double,因为cuda不支持double,所以我使用下面的代码,这是NVIDIA提供的.

__device__ double atomicAdd(double* address, double val)
{
    unsigned long long int* address_as_ull =
                                          (unsigned long long int*)address;
    unsigned long long int old = *address_as_ull, 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);
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道为什么工具需要一个循环,而(假设!=旧)

cuda atomic

8
推荐指数
1
解决办法
5214
查看次数

标签 统计

atomic ×1

cuda ×1