2017-02-21 46 views
0

我剛跑gprof來剖析我的一些代碼。這是平面輪廓的前幾行。超過75%的時間被第一個函數使用。這個功能是什麼?這是什麼告訴我我如何濫用特徵庫?解釋gprof輸出並識別該特徵函數

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

此功能分配一個MatrixXd到另一個問題:

MatrixXd a, b; 
b = a; 

因此意味着大部分的時間都花在複製矩陣。

因此,請確保您的優化ON(-O3)編譯,否則你的分析結果是沒有意義的。如果是這樣,那麼請確保您通過參考而不是按值傳遞矩陣,如果您使用std::vector<MatrixXd>等,請小心。

+0

你是什麼意思「要小心,如果你使用std :: vector ?我使用了很多'std :: vector's ​​ – Taylor

+0

我不會去考慮它。像這樣的東西,但對於'MatrixXd's(http://eigen.tuxfamily.org/dox-devel/group__TopicStlContainers.html)。這非常有幫助;非常感謝 – Taylor

+0

我並不是指對齊問題,因爲那些不涉及'MatrixXd',而是關於禁止性拷貝。確保使用C++ 11並正確使用std :: vector,以便發生移動語義。 – ggael