相关疑难解决方法(0)

CUDA atomicAdd用于双精度定义错误

在以前的CUDA版本中,atomicAdd没有实现双精度,所以通常在这里实现这一点.使用新的CUDA 8 RC,当我尝试编译包含这样一个函数的代码时,我遇到了麻烦.我想这是因为使用Pascal和Compute Capability 6.0,添加了原生双重版本的atomicAdd,但不知何故,以前的Compute Capabilities没有正确忽略.

下面的代码用于编译和运行以前的CUDA版本,但现在我得到此编译错误:

test.cu(3): error: function "atomicAdd(double *, double)" has already been defined
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除我的实现,我会得到此错误:

test.cu(33): error: no instance of overloaded function "atomicAdd" matches the argument list
            argument types are: (double *, double)
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,如果我编译-arch=sm_35或类似,我只会看到这个.如果我编译-arch=sm_60我获得预期的行为,即只有第一个错误,并在第二种情况下成功编译.

编辑:此外,它是特定的atomicAdd- 如果我更改名称,它运作良好.

它看起来像编译器错误.其他人可以确认是这种情况吗?

示例代码:

__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 = …
Run Code Online (Sandbox Code Playgroud)

cuda atomic nvidia

11
推荐指数
1
解决办法
9129
查看次数

标签 统计

atomic ×1

cuda ×1

nvidia ×1