gpt4 book ai didi

optimization - 特征是否具有自转置乘法优化,如 H.transpose()*H

转载 作者:行者123 更新时间:2023-12-04 12:18:48 25 4
gpt4 key购买 nike

我已经浏览了 Eigen 的教程
https://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixArithmetic.html

它说
“注意:对于担心性能的 BLAS 用户,诸如 c.noalias() -= 2 * a.adjoint() * b; 之类的表达式已完全优化并触发单个类似 gemm 的函数调用。”

但是像 H.transpose() * H 这样的计算怎么样,因为它的结果是一个对称矩阵,所以它应该只需要正常 A*B 的一半时间,但在我的测试中,H.transpose() * H 花费与 H 相同的时间.transpose() * B. eigen 对这种情况有特殊的优化吗,和opencv一样,也有类似的功能。

我知道对称优化会破坏矢量化,我只想知道 Eigen 是否有可以提供对称优化和矢量化的解决方案

最佳答案

你是对的,你需要告诉 Eigen 结果是这样对称的:

Eigen::MatrixXd H = Eigen::MatrixXd::Random(m,n);
Eigen::MatrixXd Z = Eigen::MatrixXd::Zero(n,n);
Z.template selfadjointView<Eigen::Lower>().rankUpdate(H.transpose());

最后一行计算 Z += H * H^T在下三角部分内。上半部分保持不变。你想要一个完整的矩阵,然后将下半部分复制到上半部分:

Z.template triangularView<Eigen::Upper>() = Z.transpose();

rankUpdate例程是完全矢量化的,可与 BLAS 等效项进行比较。对于小矩阵,更好地执行完整的产品。

另请参阅相应的 doc .

关于optimization - 特征是否具有自转置乘法优化,如 H.transpose()*H,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com