VS2019上配置CUDA10.1+Eigen3.3.7错误解决
最近研究CUDA,想要实现在核函数中使用Eigen数学库的一部分函数(Eigen3.3中的一部分函数可以被用于CUDA核函数)
这里用到了两套不同的环境分别是VS2017+CUDA10.0+Eigen3.3.6和VS2019+CUDA10.1+Eigen3.3.7,分别遇到了相同的编译错误,解决方法也是一致的。因为涉及到的这几个库版本都比较新,所以网上的相关教程和解决遇到的问题的方法都比较少。所以写下这篇文章来与时俱进。
使用nvcc编译带有
#include <Eigen/Eigen>
的.cu文件,使用 compute_61,sm_61 进行编译,遇到了下面这个问题
G:\VS support\Eigen-3.3.6\include\eigen3\Eigen\src/Core/arch/CUDA/Half.h(212): error : more than one instance of overloaded function “__hadd” matches the argument list:
经过搜索,这个问题已经存在了有一定时间,最早的bug report在这里
http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1526
下面也给出了解决方法
https://bitbucket.org/eigen/eigen/commits/52517c8764ad/
具体的改正方法很简单,找到
Eigen/src/Core/arch/CUDA/Half.h文件,从第212行开始,对于里面的两个函数进行如下改变
EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b) { +#if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000 + return __hadd(::__half(a), ::__half(b)); +#else return __hadd(a, b); +#endif } ... ... EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) { +#if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000 + return __hdiv(a, b); +#else float num = __half2float(a); float denom = __half2float(b); return __float2half(num / denom); +#endif }
重新编译,发现新的问题
1>G:\VS support\Eigen-3.3.6_try_to_fix_bug\include\eigen3\Eigen\src/SVD/JacobiSVD.h(614): error C2244: “Eigen::JacobiSVD<MatrixType,QRPreconditioner>::allocate”: 无法将函数定义与现有的声明匹配
1>G:\VS support\Eigen-3.3.6_try_to_fix_bug\include\eigen3\Eigen\src/SVD/BDCSVD.h(216): error C2244: “Eigen::BDCSVD<_MatrixType>::allocate”: 无法将函数定义与现有的声明匹配
等若干相同问题
经过了很长时间的检索,终于在互联网的某个犄角旮旯找到了解决方案。这个解决办法出自另外一个bug report
http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1412
很有意思的事情是这个问题是在两年以前在VS2015+CUDA8.0+Eigen3.3.0/3.3.3环境上就出现的错误,虽然下面回复中给出了问题的解决方案,但是竟然也没有把相应的代码添加到后续的release版本中。依据根据发帖子的经验,这个问题
“can be fixed by changing the definitions to use Eigen::Index instead of Index (JacobiSVD and BDCSVD)”
如果在报错的头文件里找到对应的函数声明,就能够明白具体发生了怎样的改换,这里就不再赘述了。
希望这篇完整能够对其他网友有所帮助。
- 点赞
- 收藏
- 分享
- 文章举报
- 解决IIs及vs解决方案中(配置错误:不能在此路径中使用此配置节点)的解决办法
- vs2013下配置opencv2.4.9&openNI2提示错误:error LNK2019: 无法解析的外部符号
- 配置SSD-caffe测试时出现“Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal”解决
- vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法
- OpenCV3.1.0+VS2013开发环境配置之测试程序错误解决
- CUDA出现连接错误error LNK2019: unresolved external symbol一般解决方法
- 配置SSD-caffe测试时出现“Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal”解决
- vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法
- vs 2003的一些配置错误解决
- vs2019解决scanf函数的C4996错误
- VS2015+Android环境配置【appt.exe停止运行以及packaged_resources不存在】错误解决
- vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法
- VS2013类向导“异常来自 HRESULT:0x8CE0000B”错误解决方法
- Weblogic8.1配置Servlet中出现的错误及解决办法
- 解决Maven安装配置的java环境变量错误
- VS2010升级VS2013后,出现未定义类型“PowerPacks.ShapeContainer”错误解决方法
- react-native学习(RN)--之Window环境下搭建环境配置,以及初始化建立react-native项目,(真机和模拟器运行的相关错误解决办法,android打包报错)
- Maven配置安装及错误解决
- 怎样解决“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正并正确配置 PHP 安装"
- VS2010错误“LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决办法