mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
* Added generic unary operators (replace Opposite and Conjugate)
* functor templates are not template template parameter anymore (this allows to make templated functors !) * Main page: extented compiler discussion * A small hack to support gcc 3.4 and 4.0 (see the main page) * Fix a cast type issue in Cast * Various doxygen updates (mainly Cwise stuff and added doxygen groups in MatrixBase to split the huge memeber list, still not perfect though) * Updated Gael's email address
This commit is contained in:
@@ -71,9 +71,16 @@ The To-do wiki for Eigen is here: <a href="http://techbase.kde.org/index.php?tit
|
||||
|
||||
Eigen is standard C++98 and so should theoretically be compatible with any compliant compiler. Of course, in practice, things are slightly different.
|
||||
|
||||
Eigen is well tested with recent versions of GCC and gives very good performance with GCC 4.2. For some reason the performance is not so great with GCC 4.1.
|
||||
Eigen is well tested with recent versions of GCC and ICC. Both GCC 4.2 and ICC gives very good performance. ICC might provide even better performance when the auto-vectorization makes sense. For some reason the performance is not so great with GCC 4.1.
|
||||
|
||||
Eigen is also known to compile with GCC 3.4 and 4.0. However, these later ones seems to not correctly handle friend class with the CRT design pattern. Therefore, at the moment, for any GCC versions earlier than 4.1, all private members of Eigen's classes are made public. It is up to the user to take care to access public members only.
|
||||
|
||||
For best performance, we recommend the following compilation flags:
|
||||
<ul>
|
||||
<li>\b GCC: \c -O3 \c -DNDEBUG \c -finline-limit=10000 \c -falign-functions=64 </li>
|
||||
<li>\b ICC: \c -O3 \c -DNDEBUG \c -xT \c -ipo \c -no-prec-div \c -no-inline-max-size </li>
|
||||
</ul>
|
||||
|
||||
Eigen is also well tested on ICC, and gives even better performance with it than with GCC 4.2.
|
||||
|
||||
<a name="news"></a>
|
||||
<h2>News</h2>
|
||||
|
||||
27
doc/examples/class_CwiseBinaryOp.cpp
Normal file
27
doc/examples/class_CwiseBinaryOp.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
#include <Eigen/Core>
|
||||
USING_PART_OF_NAMESPACE_EIGEN
|
||||
using namespace std;
|
||||
|
||||
// define a custom template binary functor
|
||||
struct CwiseMinOp {
|
||||
template<typename Scalar>
|
||||
static Scalar op(const Scalar& a, const Scalar& b) { return std::min(a,b); }
|
||||
};
|
||||
|
||||
// define a custom binary operator between two matrices
|
||||
template<typename Scalar, typename Derived1, typename Derived2>
|
||||
const Eigen::CwiseBinaryOp<CwiseMinOp, Derived1, Derived2>
|
||||
cwiseMin(const MatrixBase<Scalar, Derived1> &mat1, const MatrixBase<Scalar, Derived2> &mat2)
|
||||
{
|
||||
return Eigen::CwiseBinaryOp<CwiseMinOp, Derived1, Derived2>(mat1.ref(), mat2.ref());
|
||||
// Note that the above is equivalent to:
|
||||
// return mat1.template cwise<CwiseMinOp>(mat2);
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
Matrix4d m1 = Matrix4d::random(), m2 = Matrix4d::random();
|
||||
cout << cwiseMin(m1,m2) << endl; // use our new global operator
|
||||
cout << m1.cwise<CwiseMinOp>(m2) << endl; // directly use the generic expression member
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user