Re: [eigen] Best way of initializing a matrix of fixed size |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
On 2017-03-08 18:02, Matthieu Brucher wrote:
Well, the elements are not simple numbers, they are results of different
expressions like these:
https://github..com/mbrucher/AudioTK/blob/master/ATK/Preampli fier/Triode2Filter.cpp#L85
Some suggestions (no guarantee that any of them will work in your case):
* For a Vector4d (or Vector4f or anything smaller) you can also use the corresponding constructor:
Vector F(f1,f2, g1,g2);
* If you use the comma-initializer don't initialize your matrix with Zero() before (your compiler may be smart enough to optimize it away, but that operation is not necessary).
* Sometimes it may be easier for the compiler if you initialize your matrix coefficient-wise (reduces readability though ...), i.e.,
Matrix M; // don't zero-initialize unless most entries are 0
M(0,0)= -(Ib_Vbe /* + ... */ );
M(1,0) = M(0,1) = M(1,3) = M(3,1) = 0.0;
M(2,1) = -( M(1,2) = (Ib_Vce + Ic_Vce));
// ...
But as Gael said, make sure you compile with full optimization and check your assembly ...
ChristophDipl. Inf., Dipl. Math. Christoph Hertzberg
2017-03-08 13:56 GMT+00:00 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:
Strange, it usually compiles to trivial code, e.g.:
void foo(Matrix4f &m)
{
m << 1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16;
}
compiles to:
movaps LCPI0_0(%rip), %xmm0 ## xmm0 = [1065353216,1084227584,
1091567616,1095761920]
movups %xmm0, (%rdi)
movaps LCPI0_1(%rip), %xmm0 ## xmm0 = [1073741824,1086324736,
1092616192,1096810496]
movups %xmm0, 16(%rdi)
movaps LCPI0_2(%rip), %xmm0 ## xmm0 = [1077936128,1088421888,
1093664768,1097859072]
movups %xmm0, 32(%rdi)
movaps LCPI0_3(%rip), %xmm0 ## xmm0 = [1082130432,1090519040,
1094713344,1098907648]
movups %xmm0, 48(%rdi)
popq %rbp
retq
make sure you compiled with full optimization. If so, check the respective
assembly.
gael
On Tue, Mar 7, 2017 at 1:57 PM, Matthieu Brucher <
matthieu.brucher@xxxxxxxxx> wrote:
Hi,
I'm wondering what is the best way of initializing a 4x4 matrix. I'm
currently using the comma initializer, but it shows up quite high on a
valgrind profile compared to taking the inverse of the same matrix or
preprocessing the coeffs (pow, ln...).
I'm using Eigen 3.2.4, but I can upgrade.
Cheers,
Matthieu
--
Information System Engineer, Ph.D.
Blog: http://blog.audio-tk.com/
LinkedIn: http://www.linkedin.com/in/matthieubrucher
--
Universität Bremen
FB 3 - Mathematik und Informatik
AG Robotik
Robert-Hooke-Straße 1
28359 Bremen, Germany
Zentrale: +49 421 178 45-6611
Besuchsadresse der Nebengeschäftsstelle:
Robert-Hooke-Straße 5
28359 Bremen, Germany
Tel.: +49 421 178 45-4021
Empfang: +49 421 178 45-6600
Fax: +49 421 178 45-4150
E-Mail: chtz@xxxxxxxxxxxxxxxxxxxxxxxx
Weitere Informationen: http://www.informatik.uni-bremen.de/robotik
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |