1 CML_ENABLE_MATRIX_BRACES
2 - Allow matrices to be accessed as A[row][col] in addition to A(row,col).
3 This is primarily for testing, and is not used anywhere in the library
4 proper since the proxy object mechanism that's used is not guaranteed to
7 CML_NO_DEFAULT_EXPR_TRAITS
8 - Don't use default expression traits for built-in types. This is handy
9 for debugging, since no classes or built-in types will have an expression
10 traits class by default (i.e. the expression traits class must be created
13 CML_DEFAULT_BASIS_ORIENTATION
14 - Either cml::row_basis or cml::col_basis. This determines the basis
15 vector orientation for the matrix result of a vector outer product. The
16 default is cml::col_basis.
18 CML_DEFAULT_ARRAY_LAYOUT
19 - Either cml::row_major or cml::col_major. This determines the layout of the
20 resulting matrix when promoting matrices with different layouts. If the
21 matrices have the same layout, the promoted type will also have that layout,
22 unless CML_ALWAYS_PROMOTE_TO_DEFAULT_LAYOUT is defined. This parameter also
23 determines the default 2D array memory layout.
25 CML_DEFAULT_ARRAY_ALLOC
26 - Defines the default allocator for arrays generated at run-time by the type
27 deduction system. The default value is std::allocator<void>.
29 CML_ALWAYS_PROMOTE_TO_DEFAULT_LAYOUT
30 - If this is defined, 2D arrays will always be promoted to the default layout.
31 This is useful if matrix expressions should always be handled in
32 a particular orientation for efficiency.
34 CML_VECTOR_UNROLL_LIMIT=<N>
35 - <N> is the maximum vector length that should be automatically unrolled by
36 the expression template engine. If the vector (expression) is longer,
37 the normal for loop is used. Note also that unrolling is available only
38 for fixed-size vectors.
41 - Use a 2D unroller for matrix expressions. This causes very poor code for
42 most of the supported compilers, but with GCC4/G5, it's required for
43 optimal code. Note that unrolling is available only for fixed-size
46 CML_MATRIX_UNROLL_LIMIT=<N>
47 - <N> is the maximum number of matrix elements (#rows x #cols) that
48 a matrix (expression) can have before being unrolled. A 2D loop is used
49 for matrices with more than <N> elements. When either CML_2D_UNROLLER or
50 CML_2D_TO_1D_UNROLLER is defined, this must also be defined.
53 - Don't unroll at all, just use a loop. This seems to generate the best
54 code on at least GCC4/x86 and Intel 9/Linux/x86.
56 CML_RECIPROCAL_OPTIMIZATION
57 - Use "*= 1./x" instead of "/= x" for per-element division. This may generate
58 better code for certain systems, but isn't yet tested for any configuration.
60 CML_AUTOMATIC_VECTOR_RESIZE_ON_ASSIGNMENT
61 - Enable automatic resizing of dynamic vectors on assignment and copy from
62 other vectors and expressions. This guarantees that vectors have the right
63 size on assignment, but imposes a significant performance penalty when
64 vectors already have the correct size. Without this option, however,
65 assigned-to vectors must be constructed with the correct size, or must be
66 explicitly resized with the resize() method. Note that this has no
67 effect when assigning using a scalar operator, since the vector must already
68 have the proper size. Also note that temporaries will be automatically
69 resized as necessary regardless of the setting of this option.
71 CML_CHECK_VECTOR_EXPR_SIZES
72 - Verify that all arguments in a vector expression have the proper size. This
73 is particularly handy for debugging when CML_AUTOMATIC_VECTOR_RESIZE is
74 undefined. Note that the performance penalty for defining this option is
75 dependent upon the number of binary expressions and the compiler. Also,
76 this has no effect for expressions composed of entirely fixed-size vectors,
77 since the sizes are automatically checked at compile time.
79 CML_AUTOMATIC_MATRIX_RESIZE_ON_ASSIGNMENT
80 CML_CHECK_MATRIX_EXPR_SIZES
81 CML_CHECK_MATVEC_EXPR_SIZES
82 - Same as CML_AUTOMATIC_VECTOR_RESIZE and CML_CHECK_VECTOR_EXPR_SIZES, but for
85 CML_USE_GENERATED_MATRIX_ASSIGN_OP
86 - Allow the compiler to generate its own matrix assignment code. This yields
87 better performance at least on Intel C++ 9/x86 Linux.