|Summary:||Crash while evaluating product of AutoDiffScalar matrices|
|Component:||Core - matrix products||Assignee:||Nobody <eigen.nobody>|
|Version:||3.3 (current stable)|
|Hardware:||x86 - 64-bit|
|Bug Depends on:|
Description twan_koolen 2016-02-01 21:40:46 UTC
Comment 1 twan_koolen 2016-02-01 21:41:46 UTC
Created attachment 650 [details] Trace
Comment 2 Gael Guennebaud 2016-02-03 17:29:23 UTC
Fixed: https://bitbucket.org/eigen/eigen/commits/7b1fb73c5346/ however, a cleaner solution would be to to fallback to another product implementation for heavy scalar types. Using R.lazyProduct(....) instead of R*... is very likely to be much faster.
Comment 3 Gael Guennebaud 2016-02-03 17:32:49 UTC
(In reply to Gael Guennebaud from comment #2) > Using R.lazyProduct(....) instead of R*... is very likely to be much faster. Indeed, a quick bench tell me 1.11ms versus 0.17ms for lazyProduct.
Comment 4 twan_koolen 2016-02-03 19:45:23 UTC
Thank you for the fix! > Indeed, a quick bench tell me 1.11ms versus 0.17ms for lazyProduct. Hmm, that's very interesting. Sorry, I wasn't quite clear on this: did you mean that as a recommendation for us or as a possible future improvement on your end? A lot of our code is templated on the scalar type and supposed to work for (at least) both double and AutoDiffScalar<...> types, with a heavier performance requirement on the double template instantiations. This means that switching everything to lazyProduct outright is not the best option for us. I suppose we could select which product implementation to use based on the scalar type. But having that done automatically by Eigen would be incredible for us given the potential huge speedup and would mean we could keep our code more readable.
Comment 5 Gael Guennebaud 2016-02-03 20:47:58 UTC
This comment was mostly for Eigen, but actually, if R is always as small as 3x3, then better use lazyProduct even for double.
Comment 6 Nobody 2019-12-04 15:24:39 UTC
-- GitLab Migration Automatic Message -- This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1161.