Re: [eigen] Index types change pushed |

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

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Index types change pushed*From*: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>*Date*: Wed, 2 Jun 2010 18:27:31 +0200*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:content-type; bh=eYYg88nJjXqdTXANMlmJyN6lAWG/KNf/xjWHDRvk74Q=; b=TWhzdaT0ESpZHjA9SDa3skcXnzetzg9xvaZDgAW25oDTVTg9omdsyOLr9x7/adbWzk fQggqpZJBC5u6AzAkO7CYB9T3IhxhCL2BQD1ZSsODKjBjLdDp3R1R9mHiZiNE5Cq/6qY 5rRuzNZK+RC/BACh8Jz/KPowQC6YO/PDrIibw=*Domainkey-signature*: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; b=Oj2t2xjpPWuGICZVR/g0lngau3AHXfylP57TtKeMr8C0AaxWjehAjcxhF5KaMiDcDp X/EE5lczNuKx7alCJVy0VFOKJnLnwuGQ2qCPKpt/hOwwtetmEnCnc01NcDloMSxI8dDQ X0tsJCxVYPP2Gscu9MrTVATi69nI0GeS/Bo1s=

if you don't mind I would slightly change the implementation details to propagate the Index type trough the traits structure. Indeed, this is needed to add such a template paramter to the sparse matrix.

gael

On Sun, May 30, 2010 at 10:10 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:

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**:**Re: [eigen] Index types change pushed***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] Blocked QR algorithm - lapack compatible ?** - Next by Date:
**Re: [eigen] Index types change pushed** - Previous by thread:
**Re: [eigen] Blocked QR algorithm - lapack compatible ?** - Next by thread:
**Re: [eigen] Index types change pushed**

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