Re: [eigen] Tiny matrix in Eigen2 |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Tiny matrix in Eigen2
- From: Rohit Garg <rpg.314@xxxxxxxxx>
- Date: Thu, 17 Sep 2009 14:23:05 +0530
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=93byPyqC43tMJX8t3KqJBs2Xp6dPSV4WTTIjqPC2KPw=; b=EFPmaQ0vdEJmdJ+HphxDUp9i499Dx+dWSx4eXsv4O7q06DyIkkuuvAhYJ2LG+Nq8E2 beCHChXbaYE7LPCbNU131HBmLJmnOoXBUBQpegsgJZKm5FmC37jZ2q8Iq/lIo1/HtsFe OdCI2QKQoEJnhsAxFexau65556lpcCPTmpM9w=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=uVx898Km2wB/Qv8tg6ln96WB8Ix4OEOLvyJpf659VIzQ8mgbF3GaJcfVciA/t99fkk V7oGVHfg5wo9ERVdqL06wqGQUvNFGp3C5qaROnd9M7WdsshL+fuP+xHQM5nS+iNeDvOd Hkt1DVwuUWHATJq7BpPmBs1IINOif3ij8XUCQ=
On Thu, Sep 17, 2009 at 2:03 PM, WANG Xuewen <xuewen.wang@xxxxxxxxx> wrote:
> Hi,
>
> We are trying to replace our home made matrix vector library with Eigen2
> which provides an unified interface between tiny matrix and medium size
> matrix and sounds promising on performance. Surprisingly, it is 10%
> slower for tiny matrix (with 2.0.5, not sure about the devel branch
> since same code doesn't compile using it), so I wonder if there is
> something wrong that I've made and anything that can help improving it.
>
> Our tiny matrix whose dimension limits to 7 but the exact dimension is
> not known at compile time. The most costly computation on the matrix is
> to compute the exponential of a real or complex matrix. We use the
> method similar to MatrixExponential in unsupported.
>
> I've used something like
>
> typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic,
> Eigen::RowMajor | Eigen::DontAlign,
> NMaxTinyMatrixDimension, NMaxTinyMatrixDimension>
> TinyRMatrix;
>
> typedef Eigen::Matrix<std::complex<double>, Eigen::Dynamic, Eigen::Dynamic,
> Eigen::RowMajor | Eigen::DontAlign,
> NMaxTinyMatrixDimension, NMaxTinyMatrixDimension>
> TinyCMatrix;
>
> typedef Eigen::Matrix<double, Eigen::Dynamic, 1,
> Eigen::RowMajor | Eigen::DontAlign,
> NMaxTinyMatrixDimension, 1>
> TinyRVector;
>
> typedef Eigen::Matrix<std::complex<double>,
> Eigen::Dynamic, 1,
> Eigen::RowMajor | Eigen::DontAlign,
> NMaxTinyMatrixDimension, 1>
> TinyCVector;
>
> Where NMaxTinyMatrixDimension is 7.
>
> My questions are:
>
> 1. Is the chosen storage the right choice for my problem? Should I just
> use Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> etc?
Then your matrix would be stored in column major order. See if that
affects you. If not I'd just go with this declaration.
>
> 2. Even if the storage is in the stack, but the dimension is not known
> at compile time. Will the loop get unrolled for most operations?
AFAIK, if the dimensions are not known at compile time, then it wont
be stored on stack. I am not sure but I think it wont unroll.
Use -funroll-loops with gcc to do it in case eigen doesn't unroll it.
>
> 3. We do something like M = N + scalar * Matrix::Identity(); as seen in
> unsupported. Is this optimal? Does it really matter?
>
> 4. Our internal library stores a complex matrix by using two matrix, one
> for the real part and another for the imaginary part. It seems that this
> improves but is it still preferred even with Eigen2?
>
> Sorry that I don't know (yet) much about the internal of Eigen2 so
> haven't figured out the answer to my questions myself so your
> suggestions will be very appreciated.
>
> thanks,
>
> Xuewen
>
> P.S. I'm sorry if you have received the mail twice since apparently I used
> the wrong email address the first time.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
--
Rohit Garg
http://rpg-314.blogspot.com/
Senior Undergraduate
Department of Physics
Indian Institute of Technology
Bombay