测试了 Eigen::SelfAdjointView::rankUpdate with Eigen::Matrix4d
与朴素 A += w*w.transpose(( 相比 而且慢了 2 倍。
- 我做错了什么?
- 我可以加快此计算速度吗?
对于小型固定大小的表达式,您无法使用SelfAdjointView::rankUpdate
保存任何内容,而是会增加开销,因为它需要确保只修改一半元素。在您的情况下,一个简单的
A.noalias() += w*w.adjoint();
应该给出接近最佳的代码(添加.noalias()
避免将副本复制到临时代码中(。