2017-02-21 1 views
0

Je viens de lancer gprof pour mettre en profil mon code. Voici les premières lignes du profil plat. Plus de 75% du temps est utilisé par la première fonction. Quelle est cette fonction? Qu'est-ce que cela me dit sur la façon dont j'utilise abusivement la bibliothèque Eigen?Interprétation de la sortie gprof et identification de cette fonction propre

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&) 

est ici que le nom de la fonction dans un peu plus agréable mise en forme:

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&) 

Répondre

1

Cette fonction assigner un MatrixXd un à l'autre:

MatrixXd a, b; 
b = a; 

signifie donc que la plupart du temps est consacré matrices de copie. Par conséquent, assurez-vous que vous avez compilé avec les optimisations activées (-O3), sinon vos résultats de profilage n'auront aucun sens. Si oui, alors assurez-vous de passer les matrices par référence et non par valeur, soyez prudent si vous utilisez std::vector<MatrixXd>, etc.

+0

que voulez-vous dire "soyez prudent si vous utilisez std :: vector ?" J'utilise pas mal de 'std :: vector's – Taylor

+0

je ne vais pas m'y intéresser. quelque chose comme ça, mais pour 'MatrixXd's (http://eigen.tuxfamily.org/dox-devel/group__TopicStlContainers.html). C'était très utile. merci beaucoup – Taylor

+0

Je ne parlais pas de problème d'alignement, car ceux-ci ne concernent pas MatrixXd mais plutôt des copies prohibitives. Assurez-vous d'utiliser C++ 11 et utilisez correctement std :: vector pour que move-sémantique ait lieu. – ggael