[eigen] Index types change pushed |

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

*To*: eigen <eigen@xxxxxxxxxxxxxxxxxxx>*Subject*: [eigen] Index types change pushed*From*: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>*Date*: Sun, 30 May 2010 16:10:44 -0400*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=HOA4yd6s5CXTwOMGhVTPFtC9pB4/Pz5ab0bWls9TIoc=; b=jpUHZ6G6ueDAaKhS6mqj4TzIBHniF0AxDrJPaXBmUc95LOEc11neH5JNFScwB9i9Od v8Yr1xWrTQQEzn/+6xT6yp9JOSK9qC1r2/qZvvSARA1nLJaB3ineRWw+IM2ttWH7cIQu QwQWBIx1Z1idJsC2dnSWDHJUidsRMtzpGyqWY=*Domainkey-signature*: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=jfXp5G1J62rTIEucjAbHY+ywsZnaYpE/DPdojCiYf7kK+QXU65BGLkroxK+WYxySjB JCfHEZokHfXtGqh0XnYLswqzGxU4TBcIe3YUMlseZcZs54YUinj9yrfZ/45D7HnTCS1U j9BVo8Q5YH0fkDytmM3NwIMRUBW5j1J2qWB6w=

Hi list, The huge "index types" change is pushed to the development branch. *** What changed *** Before, we used type int for all indices. A recent huge thread on this list showed that while the choice of a signed type was sensible, it would be good to make it more adaptable. This is what this change does: - dense matrices now default to std::ptrdiff_t, which means that you're sure to be able to address half the size of your address space (half, because it's signed). - sparse matrices are still using int, because the sizeof() matters a lot there (since we are story arrays of indices). You can change that at will by defining EIGEN_DEFAULT_DENSE_INDEX_TYPE and EIGEN_DEFAULT_SPARSE_INDEX_TYPE. Of course, this breaks ABI compatibility. In the future we'll probably add an option to Sparse matrix types to specify different index types. On the other hand, for Dense matrices, I don't think there can ever be a valid reason to use something else than ptrdiff_t. Notice that for fixed-size matrices, this doesn't have any cost as the sizes aren't stored as runtime variables. *** How this works *** This works per-StorageKind. So if in the future we add a new StorageKind for "Dense matrix stored over distributed storage", we're free to specify e.g. long long int for them, without affecting the rest. See in XprHelper.h, the new struct ei_index, see this code: template<typename StorageKind> struct ei_index {}; template<> struct ei_index<Dense> { typedef EIGEN_DEFAULT_DENSE_INDEX_TYPE type; }; typedef typename ei_index<Dense>::type DenseIndex; Then in the macro EIGEN_DENSE_PUBLIC_INTERFACE, we now have: typedef typename Eigen::ei_traits<Derived>::StorageKind StorageKind; \ typedef typename Eigen::ei_index<StorageKind>::type Index; \ this means that all expressions have a Index typedef that means the right thing. Normally, we propagate this recursively as appropriate. However there are some contexts where we know we are only dealing with Dense expressions, and don't have a MatrixType to work with (e.g. in some public functions). There, it's OK to specify explicitly DenseIndex. Then, we have the same thing in the Sparse module, in SparseUtil.h: template<> struct ei_index<Sparse> { typedef EIGEN_DEFAULT_SPARSE_INDEX_TYPE type; }; typedef typename ei_index<Sparse>::type SparseIndex; etc, etc. Benoit

**Follow-Ups**:**[eigen] Re: Index types change pushed***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen]** - Next by Date:
**[eigen] Today's joke** - Previous by thread:
**Re: [eigen] skipXxx / computeXxx parameters in Eigenvalues module** - Next by thread:
**[eigen] Re: Index types change pushed**

Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |