error: function "atomicAdd(double *, double)" has already been defined
error: function "atomicAdd(double *, double)" has already been defined
我在尝试使用 Cuda 8.0 在 Ubuntu 14.04.5 上编译 caffe 衍生物 DeepLab_v2 时遇到此错误。
有人知道怎么解决吗?
DeepLab_v2 在另一台装有 Cuda 7.5 的计算机上可以正常编译,但由于在我当前的计算机上有 Pascal Titan X,我可能需要使用 Cuda 8.0。
在@Robert Crovella 的评论的帮助下,我终于让它工作了。我必须按以下方式从 DeepLab_v2 master 分支修改文件 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
我在尝试使用 Cuda 8.0 在 Ubuntu 14.04.5 上编译 caffe 衍生物 DeepLab_v2 时遇到此错误。
有人知道怎么解决吗?
DeepLab_v2 在另一台装有 Cuda 7.5 的计算机上可以正常编译,但由于在我当前的计算机上有 Pascal Titan X,我可能需要使用 Cuda 8.0。
在@Robert Crovella 的评论的帮助下,我终于让它工作了。我必须按以下方式从 DeepLab_v2 master 分支修改文件 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