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 khivapia . É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 freem . É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 khivapia . É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 cfx . É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à.
[^] # Re: CMAKE_BUILD_TYPE=Debug
Posté par freem . Évalué à 2.
C'est juste que le manuel conseillait de mettre en O1 en fait.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.