Created by: zhangting2020
Others PR types
Others PR changes
Describe
重要修改:remove EIGEN_MAX_CPP_VER=11;并通过添加patch,修改了Eigen/src/Core/MathFunctions.h中970行。
之前在Eigen升级中,#23203 通过添加编译选项-DEIGEN_MAX_CPP_VER=11避免编译错误(因为eigen中用到的一些const expression在c++11还未支持,c++14后才完全支持)。
添加了这个编译选项,是将EIGEN_HAS_CONSTEXPR设置为0,从而使Eigen/src/Core/MathFunctions.h中970行处的if条件为false走else分支,避免编译错误。因为当EIGEN_HAS_CONSTEXPR为1时,会定义EIGEN_CONSTEXPR_ARE_DEVICE_FUNC,从而MathFunctions.h#L970 if条件为true,进入引发编译错误的分支。详细可见Eigen源码。
简单讲,通过添加编译选项-DEIGEN_MAX_CPP_VER=11使EIGEN_HAS_CONSTEXPR设置为0的修改方式,是为了不修改Eigen源码的前提下避免在不支持C++14的编译器下发生编译错误。
但是发现这种方式下,EIGEN_HAS_CONSTEXPR设置为0会有负作用:导致某些优化在开启GPU编译时不生效,例如无法使用Eigen::IndexList。
因此本PR,移除之前EIGEN_MAX_CPP_VER=11的设置,仍然使EIGEN_HAS_CONSTEXPR为1。但为了避免此时由于定义了EIGEN_CONSTEXPR_ARE_DEVICE_FUNC,从而使MathFunctions.h#L970为true进入引发编译错误的分支,同时强制修改了此处的条件判断语句使其执行else分支。即将:
#if (!defined(EIGEN_GPUCC) || defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC))
修改为
#if (!defined(EIGEN_GPUCC))