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

时间:2016-01-23 02:42:42

标签: c++ boost cuda

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

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

似乎是在boost上运行nvcc时,它抱怨__float128类型。

我用Google搜索并发现devtalk.nvidia forum post,但我真的不明白如何解决这个问题。

我甚至开了a github issue但尚未得到答复。

我在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    

similar issue in fftw3似乎暗示nvcc自我标识为__GNUC__从而造成他的问题?

是否有一些解决方法?

2 个答案:

答案 0 :(得分:10)

根据bug report for boost,这实际上是一个提升1.60的问题。

您有几种选择:

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

答案 1 :(得分:1)

我有同样的问题。构建和安装boost 1.61解决了这个问题。