错误:函数“atomicAdd(double *,double)”已经定义

时间:2016-09-01 14:37:44

标签: cuda caffe

尝试使用Cuda 8.0在Ubuntu 14.04.5上编译caffe衍生DeepLab_v2时出现此错误。

有谁知道如何解决这个问题?

DeepLab_v2在另一台拥有Cuda 7.5的计算机上编译得很好,但由于在我目前的计算机中我有一个Pascal Titan X,我可能需要使用Cuda 8.0。

1 个答案:

答案 0 :(得分:29)

我终于在@Robert Crovella的评论的帮助下得到了它。我必须通过以下方式从DeepLab_v2主分支修改文件common.cuh

#ifndef CAFFE_COMMON_CUH_
#define CAFFE_COMMON_CUH_

#include <cuda.h>

  #if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600

  #else
  static __inline__ __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;
    if (val==0.0)
      return __longlong_as_double(old);
    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);
  }


  #endif
#endif