NVCC和Boost 1.60错误:标识符"__float128"未定义

Æle*_*lex 1 c++ boost cuda

我试图caffee从BVLC(https://github.com/BVLC/caffe)编译,但我遇到了一个特殊的错误:

NVCC src/caffe/util/math_functions.cu
/usr/local/boost/config/suffix.hpp(510): error: identifier "__float128" is undefined
Run Code Online (Sandbox Code Playgroud)

它似乎是在运行nvcc时boost就抱怨了这种__float128类型.

我google了一下,发现了一个devtalk.nvidia论坛帖子,但我真的不明白如何解决这个问题.

我甚至打开了一个github问题,但尚未得到答复.

我在Debian 8上使用nvcc-6.5 boost 1.60和gcc-4.8.4(我手动安装了boost),违规行似乎在#510行:

 506 // same again for __float128:                                                                                                          
 507 #if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus)                                                                                
 508 namespace boost {                                                                                                                      
 509 #  ifdef __GNUC__                                                                                                                      
 510    __extension__ typedef __float128 float128_type;                                                                                     
 511 #  else                                                                                                                                
 512    typedef __float128 float128_type;                                                                                                   
 513 #  endif                                                                                                                               
 514 }                                                                                                                                      
 515 #endif    
Run Code Online (Sandbox Code Playgroud)

fftw3中类似问题似乎表明nvcc自我认同__GNUC__因此造成了他的问题?

这有什么解决方法吗?

hav*_*ogt 10

根据提升的错误报告,这实际上是一个提升1.60的问题.

你有几个选择:

  • 在链接中提到nvcc(来自CUDA 7.5)__float128如果你使用的话可以处理-std=c++11.您需要检查这是否是一个选项caffee.
  • 你可能会尝试将升级降级到1.59(有问题的行是用1.60引入的).
  • 应用链接中提到的补丁.