我刚刚运行gprof
来分析我的一些代码。以下是平面轮廓的前几行。超过75%的时间被第一个功能使用。那是什么功能?什么告诉我如何滥用Eigen库?
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
75.16 368.61 368.61 void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::internal::assign_op<double> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::internal::assign_op<double> const&)
这是一个更好的格式化的函数名称:
void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<double, -1, 1, 0, -1, 1>,
Eigen::Matrix<double, -1, 1, 0, -1, 1>,
Eigen::internal::assign_op<double> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&,
Eigen::Matrix<double, -1, 1, 0, -1, 1> const&,
Eigen::internal::assign_op<double> const&)
答案 0 :(得分:1)
此功能将一个MatrixXd
分配给另一个:
MatrixXd a, b;
b = a;
因此意味着大部分时间用于复制矩阵。
因此,请确保您使用优化ON(-O3
)进行编译,否则您的分析结果毫无意义。如果是这样,那么请确保通过引用而不是按值传递矩阵,如果使用std::vector<MatrixXd>
等,请小心。