aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/I14_PreprocessorDirectives.dox
blob: cbb63d587187c4452290306db244101638081b01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
namespace Eigen {

/** \page TopicPreprocessorDirectives Preprocessor directives

You can control some aspects of Eigen by defining the preprocessor tokens using \c #define. These macros
should be defined before any Eigen headers are included. Often they are best set in the project options.

This page lists the preprocesor tokens recognised by Eigen.

<b>Table of contents</b>
  - \ref TopicPreprocessorDirectivesMajor
  - \ref TopicPreprocessorDirectivesAssertions
  - \ref TopicPreprocessorDirectivesPerformance
  - \ref TopicPreprocessorDirectivesPlugins


\section TopicPreprocessorDirectivesMajor Macros with major effects

 - \b EIGEN2_SUPPORT - if defined, enables the Eigen2 compatibility mode. This is meant to ease the transition
   of Eigen2 to Eigen3 (see \ref Eigen2ToEigen3). Not defined by default.
 - \b EIGEN_DEFAULT_TO_ROW_MAJOR - when defined, the default storage order for matrices becomes row-major
   instead of column-major. Not defined by default.
 - \b EIGEN_DEFAULT_IO_FORMAT - the IOFormat to use when printing a matrix if no #IOFormat is specified.
   Defaults to the #IOFormat constructed by the default constructor IOFormat().
 - \b EIGEN_INITIALIZE_MATRICES_BY_ZERO - if defined, all entries of newly constructed matrices and arrays are
   initializes to zero, as are new entries in matrices and arrays after resizing. Not defined by default.


\section TopicPreprocessorDirectivesAssertions Assertions

The Eigen library contains many assertions to guard against programming errors, both at compile time and at
run time. However, these assertions do cost time and can thus be turned off.

 - \b EIGEN_NO_DEBUG - disables Eigen's assertions if defined. Not defined by default, unless the
   \c NDEBUG macro is defined (this is a standard C++ macro which disables all asserts). 
 - \b EIGEN_NO_STATIC_ASSERT - if defined, compile-time static assertions are replaced by runtime assertions; 
   this saves compilation time. Not defined by default.
 - \b EIGEN_INTERNAL_DEBUGGING - if defined, enables assertions in Eigen's internal routines. This is useful
   for debugging Eigen itself. Not defined by default.


\section TopicPreprocessorDirectivesPerformance Alignment, vectorization and performance tweaking

 - \b EIGEN_DONT_ALIGN - disables alignment.
 - \b EIGEN_DONT_ALIGN_STATICALLY - disables alignment of arrays on the stack. Not defined by default, unless
   \c EIGEN_DONT_ALIGN is defined.
 - \b EIGEN_DONT_VECTORIZE - disables explicit vectorization when defined. Not defined by default, unless 
   alignment is disabled by Eigen's platform test or the user defining \c EIGEN_DONT_ALIGN.
 - \b EIGEN_FAST_MATH - enables some optimizations which might affect the accuracy of the result. The only
   optimization this currently includes is single precision sin() and cos() in the present of SSE
   vectorization. Defined by default. 
 - \b EIGEN_UNROLLING_LIMIT - defines the size of a loop to enable meta unrolling. Set it to zero to disable
   unrolling. The size of a loop here is expressed in Eigen's own notion of "number of FLOPS", it does not
   correspond to the number of iterations or the number of instructions. The default is value 100. 
 - \b EIGEN_TUNE_FOR_CPU_CACHE_SIZE - represents the maximal size in Bytes of L2 blocks. Since several blocks
   have to stay concurently in L2 cache, this value should correspond to at most 1/4 of the size of L2 cache. 


\section TopicPreprocessorDirectivesPlugins Plugins

It is possible to add new methods to many fundamental classes in Eigen by writing a plugin. As explained in
the section \ref ExtendingMatrixBase, the plugin is specified by defining a \c EIGEN_xxx_PLUGIN macro. The
following macros are supported; none of them are defined by default.

 - \b EIGEN_ARRAYBASE_PLUGIN - filename of plugin for extending the ArrayBase class.
 - \b EIGEN_ARRAY_PLUGIN - filename of plugin for extending the Array class.
 - \b EIGEN_CWISE_PLUGIN - filename of plugin for extending the Cwise class.
 - \b EIGEN_DENSEBASE_PLUGIN - filename of plugin for extending the DenseBase class.
 - \b EIGEN_MATRIXBASE_PLUGIN - filename of plugin for extending the MatrixBase class.
 - \b EIGEN_MATRIX_PLUGIN - filename of plugin for extending the Matrix class.
 - \b EIGEN_PLAINOBJECTBASE_PLUGIN - filename of plugin for extending the PlainObjectBase class.
 - \b EIGEN_QUATERNIONBASE_PLUGIN - filename of plugin for extending the QuaternionBase class.
 - \b EIGEN_TRANSFORM_PLUGIN - filename of plugin for extending the Transform class.
 - \b EIGEN_FUNCTORS_PLUGIN - filename of plugin for adding new functors and specializations of functor_traits.

*/

}