解释gprof输出并识别该特征函数

时间:2017-02-21 14:37:57

标签: c++ eigen gprof

我刚刚运行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&)

1 个答案:

答案 0 :(得分:1)

此功能将一个MatrixXd分配给另一个:

MatrixXd a, b;
b = a;

因此意味着大部分时间用于复制矩阵。

因此,请确保您使用优化ON(-O3)进行编译,否则您的分析结果毫无意义。如果是这样,那么请确保通过引用而不是按值传递矩阵,如果使用std::vector<MatrixXd>等,请小心。