Eigen::SelfAdjointView::rankUpdate 比 A += w*w.transpose() 慢

Eigen::SelfAdjointView::rankUpdate slower than A += w*w.transpose()

Eigen::SelfAdjointView::rankUpdate 与 Eigen::Matrix4d

的测试速度

与天真的 A += w*w.transpose() 相比 它慢了 2 倍。

  1. 我做错了什么?
  2. 我可以加快计算速度吗?

对于固定大小的小表达式,您不能使用 SelfAdjointView::rankUpdate 保存任何内容,它反而会增加开销,因为它需要确保只修改一半的元素。在你的情况下,一个简单的

A.noalias() += w*w.adjoint();

应该给出接近最佳的代码(添加 .noalias() 避免复制到临时文件中)。