[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] update
- From: "Schleimer, Ben" <bensch128@xxxxxxxxx>
- Date: Mon, 8 Oct 2007 15:20:24 -0700 (PDT)
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID; b=sO8aoghI5w37KmS0909mEKGcGrq8CQSAV3Zu4nGX5kP4sBxZnRYveWBj0Hc+VrlkhnMMyY1tOr5+uail2dczqmG6dyCExO5nlx3tAwF2CRuAVTYXVCu0IWRSn60br915FDYyWsXNPNvI0IoDEMNwXjYeRWPUP9EoLYoD6PdtHLY=;
Hi Benoit,
Maybe we talked about this already but are sparse matrices/vectors going to be implemented in
Eigen2? I know it won't be able to use expressions but I'm hoping the basic data structures will
be there (ala gmm++) so we can use it for adjacency graph calculations.
Cheers
Ben
--- Benoît Jacob <jacob@xxxxxxxxxxxxxxx> wrote:
> Hi List,
>
> Here's an update (the best part is the last one):
>
> 0) I committed a file that I had forgotten to "svn add", sorry about that.
>
> 1) Michael contributed the first meta loop unrolling one week ago. Michael,
> your work is now in CopyHelper.h. I added you copyright on that file.
>
> 2) numeric traits, providing a uniform way to deal with various number types.
>
> 3) row-vectors are now treated on an equal footing with column vectors. The
> Vector typedefs are still column vectors, but there now also are RowVector
> typdefs. The row() method now returns a row vector. Operator[] accesses the
> coefficiens of a vector in an uniform way, for both row and column vectors.
>
> 4) matrix conjugation, transposition, adjunction, trace; vector dot product. I
> decided to not overload operator|. So do v.dot(w), that's all. I don't think
> that I want to add a global dot(v,w) after all.
>
> 5) I extended meta unrolling to all the loops we have. I could think of some
> cases where the compiler would have failed to unroll them, so at least now
> that won't happen. We won't unroll every loop in the future, but these ones
> were really important.
>
> 6) Big reorganization of the header files
>
> 7) Optimization: I reversed the order of some loops (like the inner loop of
> matrix-matrix multiplication) and got a *huge* speedup.
> Here's the result I get with our benchmark (g++ 4.2.1, Intel Core1 1.66GHz):
>
> TVMET: 6.1 seconds
> Eigen2 with hand-unrolling of the matrix-product: 5.2 seconds
> Eigen2 with meta-unrolling: 5.5 seconds
> Eigen2 with reversed meta-unrolling: 3.4 seconds
>
> Trying to understand this speedup I ran cachegrind (with only 100000
> repetitions) and found this difference:
> without reversing of loops:
> ==9840== D refs: 8,648,008 (6,065,012 rd + 2,582,996 wr)
> with reversing of loops:
> ==9834== D refs: 5,048,066 (2,765,055 rd + 2,283,011 wr)
>
> Anyway, Eigen2 is now almost twice faster than before -- when it already was
> faster than TVMET and Eigen1.
>
> Cheers,
> Benoit
>