[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/eigen2/Eigen/src/Core
From: BenoƮt Jacob <jacob.benoit.1 () gmail ! com>
Date: 2008-11-30 21:49:02
Message-ID: 1228081742.940998.30051.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 891007 by bjacob:
add internal documentation
M +2 -2 Dot.h
M +3 -4 Matrix.h
M +22 -4 util/Constants.h
M +5 -2 util/Macros.h
M +22 -0 util/XprHelper.h
--- trunk/kdesupport/eigen2/Eigen/src/Core/Dot.h #891006:891007
@@ -273,7 +273,7 @@
/** \returns the squared norm of *this, i.e. the dot product of *this with \
itself.
*
- * \note This is \em not the \em l2 norm.
+ * \note This is \em not the \em l2 norm, but its square.
*
* \deprecated Use squaredNorm() instead. This norm2() function is kept \
only for compatibility and will be removed in Eigen 2.0.
*
@@ -282,7 +282,7 @@
* \sa dot(), norm()
*/
template<typename Derived>
-inline typename NumTraits<typename ei_traits<Derived>::Scalar>::Real \
MatrixBase<Derived>::norm2() const +EIGEN_DEPRECATED inline typename \
NumTraits<typename ei_traits<Derived>::Scalar>::Real \
MatrixBase<Derived>::norm2() const {
return ei_real(dot(*this));
}
--- trunk/kdesupport/eigen2/Eigen/src/Core/Matrix.h #891006:891007
@@ -44,11 +44,11 @@
*
* \note <b>Fixed-size versus dynamic-size:</b>
* Fixed-size means that the numbers of rows and columns are known are \
compile-time. In this case, Eigen allocates the array
- * of coefficients as a fixed-size array on the stack. This makes sense \
for very small matrices, typically up to 4x4, sometimes up + * of \
coefficients as a fixed-size array, as a class member. This makes sense for \
very small matrices, typically up to 4x4, sometimes up
* to 16x16. Larger matrices should be declared as dynamic-size even if \
one happens to know their size at compile-time.
*
* Dynamic-size means that the numbers of rows or columns are not \
necessarily known at compile-time. In this case they are \
runtime variables,
- * and the array of coefficients is allocated dynamically, typically on \
the heap (See note on heap allocation below). + * and the array of \
coefficients is allocated dynamically, typically on the heap (See note on \
Usage of alloca() below).
*
* Note that dense matrices, be they Fixed-size or Dynamic-size, <em>do \
not</em> expand dynamically in the sense of a std::map.
* If you want this behavior, see the Sparse module.
@@ -60,7 +60,7 @@
* exceed a certain value. This happens when taking dynamic-size blocks \
inside fixed-size matrices: in this case _MaxRows and \
_MaxCols
* are the dimensions of the original matrix, while _Rows and _Cols are \
Dynamic.
*
- * \note <b> Heap allocation:</b>
+ * \note <b> Usage of alloca():</b>
* On the Linux platform, for small enough arrays, Eigen will avoid heap \
allocation and instead will use alloca() to perform a \
dynamic
* allocation on the stack.
*
@@ -85,7 +85,6 @@
* v[1] = 0.2;
* v(0) = 0.1;
* v(1) = 0.2;
-
*
* Eigen::MatrixXi m(10, 10);
* m(0, 1) = 1;
--- trunk/kdesupport/eigen2/Eigen/src/Core/util/Constants.h #891006:891007
@@ -26,7 +26,25 @@
#ifndef EIGEN_CONSTANTS_H
#define EIGEN_CONSTANTS_H
+/** This value means that a quantity is not known at compile-time, and \
that instead the value is + * stored in some runtime variable.
+ *
+ * Explanation for the choice of this value:
+ * - It should be positive and larger than any reasonable \
compile-time-fixed number of rows or columns. + * This means that it \
should be at least 128 or so. + * - It should be smaller than the sqrt of \
INT_MAX. Indeed, we often multiply a number of rows with a number + * of \
columns in order to compute a number of coefficients. Even if we guard that \
with an "if" checking whether + * the values are Dynamic, we still get a \
compiler warning "integer overflow". So the only way to get around + * \
it would be a meta-selector. Doing this everywhere would reduce code \
readability and lenghten compilation times. + * Also, disabling compiler \
warnings for integer overflow, sounds like a bad idea. + *
+ * If you wish to port Eigen to a platform where sizeof(int)==2, it is \
perfectly possible to set Dynamic to, say, 250. + */
const int Dynamic = 10000;
+
+/** This value means +Infinity; it is currently used only as the p \
parameter to MatrixBase::lpNorm<int>(). + * The value Infinity there means \
the L-infinity norm. + */
const int Infinity = -1;
/** \defgroup flags flags
@@ -199,9 +217,9 @@
};
enum {
- CompleteUnrolling,
+ NoUnrolling,
InnerUnrolling,
- NoUnrolling
+ CompleteUnrolling
};
enum {
@@ -211,9 +229,9 @@
enum {
IsDense = 0,
+ IsSparse = SparseBit,
NoDirectAccess = 0,
- HasDirectAccess = DirectAccessBit,
- IsSparse = SparseBit
+ HasDirectAccess = DirectAccessBit
};
const int FullyCoherentAccessPattern = 0x1;
--- trunk/kdesupport/eigen2/Eigen/src/Core/util/Macros.h #891006:891007
@@ -28,7 +28,10 @@
#undef minor
-/** \internal Defines the maximal loop size to enable meta unrolling of \
loops */ +/** \internal Defines the maximal loop size to enable meta \
unrolling of loops. + * Note that the value 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 + */
#ifndef EIGEN_UNROLLING_LIMIT
#define EIGEN_UNROLLING_LIMIT 100
#endif
@@ -36,7 +39,7 @@
/** \internal Define the maximal size in Bytes of L2 blocks.
* The current value is set to generate blocks of 256x256 for float */
#ifndef EIGEN_TUNE_FOR_L2_CACHE_SIZE
-#define EIGEN_TUNE_FOR_L2_CACHE_SIZE (1024*256)
+#define EIGEN_TUNE_FOR_L2_CACHE_SIZE (sizeof(float)*256*256)
#endif
#define USING_PART_OF_NAMESPACE_EIGEN \
--- trunk/kdesupport/eigen2/Eigen/src/Core/util/XprHelper.h #891006:891007
@@ -41,6 +41,10 @@
ei_no_assignment_operator& operator=(const \
ei_no_assignment_operator&); };
+/** \internal If the template parameter Value is Dynamic, this class is \
just a wrapper around an int variable that + * can be accessed using \
value() and setValue(). + * Otherwise, this class is an empty structure \
and value() just returns the template parameter Value. + */
template<int Value> class ei_int_if_dynamic EIGEN_EMPTY_STRUCT
{
public:
@@ -136,6 +140,24 @@
template<typename T> struct ei_must_nest_by_value { enum { ret = false }; \
}; template<typename T> struct ei_must_nest_by_value<NestByValue<T> > { \
enum { ret = true }; };
+/** \internal Determines how a given expression should be nested into \
another one. + * For example, when you do a * (b+c), Eigen will determine \
how the expression b+c should be + * nested into the bigger product \
expression. The choice is between nesting the expression b+c as-is, or + * \
evaluating that expression b+c into a temporary variable d, and nest d so \
that the resulting expression is + * a*d. Evaluating can be beneficial for \
example if every coefficient access in the resulting expression causes + * \
many coefficient accesses in the nested expressions -- as is the case with \
matrix product for example. + *
+ * \param T the type of the expression being nested
+ * \param n the number of coefficient accesses in the nested expression \
for each coefficient access in the bigger expression. + *
+ * Example. Suppose that a, b, and c are of type Matrix3d. The user forms \
the expression a*(b+c). + * b+c is an expression "sum of matrices", which \
we will denote by S. In order to determine how to nest it, + * the Product \
expression uses: ei_nested<S, 3>::ret, which turns out to be Matrix3d \
because the internal logic of + * ei_nested determined that in this case \
it was better to evaluate the expression b+c into a temporary. On the other \
hand, + * since a is of type Matrix3d, the Product expression nests it as \
ei_nested<Matrix3d, 3>::ret, which turns out to be + * const Matrix3d&, \
because the internal logic of ei_nested determined that since a was already \
a matrix, there was no point + * in copying it into another matrix.
+ */
template<typename T, int n=1, typename EvalType = typename \
ei_eval<T>::type> struct ei_nested {
enum {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic