Re: [eigen] On lazy evaluation and temporary matrices |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] On lazy evaluation and temporary matrices
- From: Jose Luis Blanco <joseluisblancoc@xxxxxxxxx>
- Date: Thu, 25 Nov 2010 02:45:10 +0100
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=qGQdqld+ZlNmC14UQLRvdv/KSyvkeGiys+lu1gGnz1M=; b=RvhU1PRpakXhSpDLnO45+7gDl1mrlv4Fo906Ges0yhDRrh85K/xzrlR9lhT2FRy0FI 88gIImEg7/ME0Slsb0pq43G985IPQ+qkp3mwtg6dBSq3Xw/bsShXkvuD7XbIM1tfG2gw VW5q2Y2gOcNA/Er+GIRYfDnVdnlk9CKQtMEcc=
- 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=uBdd1abbDjkG7prCHTj7Eza+11pr8TlAewq2Uy+WybKo7TMdiOgzaviUWMhDJ7ekIa ZK69yuXnmvEuTiuqkGzFXT2aAesZC9eZddrG5GrWi4JG7eyySX2t4LSPmDQGutgIGEES rIzQq6Yum044WPNZt+qafS77A3kliv8E4bI0g=
Hi Thomas,
Thanks, I added the EIGEN_ALIGN16 macro to all the number arrays, it
definitively makes sense... but it behaves exactly the same :-(
Best,
JL
PS: And yes, it's beta3*, actually an hg checkout from a few days ago...
On Thu, Nov 25, 2010 at 2:22 AM, Thomas Capricelli
<orzel@xxxxxxxxxxxxxxx> wrote:
> It looks like an alignement problem. You should ensure "numbers" is aligned,
> see bottom of http://eigen.tuxfamily.org/dox-devel/
>
> (I assume you use the devel branch.. 3.0beta*)
>
> regards,
>
> --
>
> Thomas Capricelli <orzel@xxxxxxxxxxxxxxx>
>
> http://www.freehackers.org/thomas
>
> On Thursday 25 November 2010 02:01:48 Jose Luis Blanco wrote:
>
>> Hi guys,
>
>>
>
>> I need the help of someone knowing the inner workings of Eigen. I've
>
>> spent a few days stuck debugging an error in some silly computations
>
>> with Eigen matrices, and want to rule out potential errors...
>
>> Consider this code:
>
>>
>
>> ======================
>
>> void func( Matrix<...> &m_out )
>
>> {
>
>> Matrix<...> I = ....
>
>> const double numbers[] = { 1.0, x(), -y()*x() , whatever, .... };
>
>> m_out = I * Matrix<...>(numbers);
>
>> }
>
>>
>
>> int main()
>
>> {
>
>> Matrix<...> M;
>
>> func(M);
>
>> cout << M << endl;
>
>> }
>
>> ======================
>
>>
>
>> Is it a problem for the temporary object "Matrix<...>(numbers)" to be
>
>> created with a pointer to memory on the stack, while the evaluation of
>
>> the object for the matrix product is actually evaluated *out* of that
>
>> function (where obviously that pointer is invalid)??
>
>>
>
>> I ask because I'm having a very erratic behavior in code like above
>
>> (on GCC doesn't work, it does on MSVC; adding a "cout << ..." for an
>
>> unrelated matrix changes the result, etc...).
>
>> Is it necessary to use instead:
>
>>
>
>> ( I * Matrix<...>(numbers) ).eval();
>
>>
>
>> or not even with this .eval() is my code correct?
>
>> I'm still having random wrong matrix elements with and without eval(),
>
>> so I wanted to be sure on this part before keep on debugging...
>
>>
>
>> Thanks for your time!
>
>> JL
>
>>
>
>>
>
>>
--
___________________________________________________________
Dr. Jose-Luis Blanco-Claraco
Dpt. Ing. Civil, Mat. y Fabric - Phone: +34 952 152435
E.T.S.I. Industriales - Despacho 2.037
Dpt. Ing. Sist. y Automática - Phone: +34 952 132848
E.T.S.I. Telecomunicacion - Lab. 2.3.6
Universidad de Malaga - Campus Universitario de Teatinos
29071 Malaga, Spain
http://www.isa.uma.es/jlblanco
http://www.mrpt.org/
___________________________________________________________