Forum Programmation.autre [Résolu] valgrind & cmake

Posté par . Licence CC by-sa
3
2
mai
2015

Bonjour.

J'essaie de trouver les fonctions d'un programme (dont je ne suis pas l'auteur, donc un peu la flemme d'aller customiser un CMakeLists.txt juste pour passer 2 options) qui consomment le plus de temps d'exécution (avec callgrind), pour voir s'il y a moyen d'optimiser intelligemment.

J'ai regardé la doc de callgrind, et il y est conseillé de compiler, sous gcc, avec les options "-g -01".
Quelqu'un sait-il s'il est possible de passer ces options à CMake sans devoir modifier le fichier CMakeLists.txt?

  • # Oui

    Posté par . Évalué à 4.

    cmake -DCMAKE_C_FLAGS="-g -O1"
    en retirant l'éventuelle option CMAKE_BUILD_TYPE de la ligne de commande cmake, et sous réserve que le fichier CMakeLists.txt ne passe pas outre.

    Sinon tu peux regarder les flags de compilation activés par défaut (cmake -DCMAKE_VERBOSE_MAKEFILE=ON .. ; make -j VERBOSE=1 ) et faire un grep, la modification du fichier CMakeLists.txt devrait être facile (O3, par exemple, apparaît probablement de manière unique).

    • [^] # Re: Oui

      Posté par . Évalué à 2.

      Super merci!
      Je vais pouvoir enfin essayer de jouer avec valgrind du coup (reste à apprendre à s'en servir correctement, mais j'imagine que ça viendra avec la pratique ça).

      • [^] # Re: Oui

        Posté par . Évalué à 2.

        À noter que -Og est un niveau d'optimisation spécialement dédié à l'utilisation d'un debugger derrière (donc valgrind par exemple), tout en maintenant une optimisation correcte.

  • # CMAKE_BUILD_TYPE=Debug

    Posté par . Évalué à 3.

    Le plus simple est encore de définir la variable CMAKE_BUILD_TYPE à Debug, ça te fait un "-g -O0", permettant ainsi à Valgrind d'avoir toutes les infos qu'il lui faut (-g) et aucune optimisation (nécessaire pour faire du débug pas à pas).

    Tu peux aussi passer CMAKE_BUILD_TYPE à RelWithDebInfo, ce qui correspond à un "-g -O2". Tu auras ainsi la majorité des optimisations gérées par le compilateur. Si ta problématique est d'identifier les fonctions les plus couteuses, c'est probablement la meilleure idée.

    Si tu tiens vraiment à un "-g -O1", le plus propre est peut être d'utiliser la configuration RelWithDebInfo cité précédemment, mais en modifiant les variables CMAKE_C_FLAGS_RELWITHDEBINFO et CMAKE_CXX_FLAGS_RELWITHDEBINFO. Mais je ne suis pas convaincu que tu aies besoin d'en arriver là.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.