| [eigen] request for help: 4x4 matrix inverse |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hi List,
I have started coding the LU module and committed already this:
- optimized determinants for sizes <=4
(Thanks to Geoff for pointing me to the 30-mul technique for size 4).
- general matrix inversion (good for sizes >= 5)
- bruteforce matrix inversion using cofactors for sizes <=3
- unrolled version of the general method for size 4
Since the latter unrolled version is clumsy and is only used for size 4, since
after all it seems that a bruteforce (cofactor) technique would be faster,
and since size 4 is a common case that we want to optimize, I am asking:
do you have good 4x4 matrix inversion code that you could contribute? Or can
you point me to a good "algorithm" ? I put quotation marks because we know
the algorithm is just brutefore, the question is how to implement it to
minimize the number of ops and perhaps to take advantage of vectorization...
Markos: if I remember correctly, you mentioned you had AltiVec code for that.
When you mentioned it I was still hoping that the unrolled gaussian
elimination would be good but now I realize that it's not, so I'm very much
interested in your code if you want to contribute it :) Extra points if it
also works with SSE.
I am also -- and most importantly -- looking for an optimized non-vectorized
path!
As you'll see in src/LU/Inverse.h, we have a template parameter bool
CheckExistence. If true, we must carefully check that the inverse exists.
Ideally, your implementation would do that in an optimized way when
CheckExistence==true, and we would not pay any cost when
CheckExistence==false.
The API is:
Matrix4d m;
m.inverse(); // CheckExistence==true
m.quickInverse(); // CheckExistence==false
Inverse<Matrix4d> inverse_of_m(m);
// or, if you prefer, Inverse<Matrix4d> inverse_of_m = m.inverse();
if(inverse_of_m.exists())
{
cout << inverse_of_m << endl;
}
Cheers,
Benoit
Attachment:
signature.asc
Description: This is a digitally signed message part.
| Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |