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