aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Mainpage.dox11
-rw-r--r--doc/examples/class_CwiseBinaryOp.cpp27
2 files changed, 36 insertions, 2 deletions
diff --git a/doc/Mainpage.dox b/doc/Mainpage.dox
index 755027f81..8dde22963 100644
--- a/doc/Mainpage.dox
+++ b/doc/Mainpage.dox
@@ -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>
diff --git a/doc/examples/class_CwiseBinaryOp.cpp b/doc/examples/class_CwiseBinaryOp.cpp
new file mode 100644
index 000000000..2a0f11a75
--- /dev/null
+++ b/doc/examples/class_CwiseBinaryOp.cpp
@@ -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;
+}