J'écris un ray tracer. Récemment, j'ai ajouté un thread au programme pour exploiter les cœurs supplémentaires sur mon i5 Quad Core.Pourquoi mon code s'exécute-t-il plus lentement avec plusieurs threads qu'avec un seul thread lorsqu'il est compilé pour le profilage (-pg)?
Dans un étrange tour d'événements, la version de débogage de l'application s'exécute maintenant plus lentement, mais la version optimisée s'exécute plus rapidement qu'avant d'ajouter le thread.
Je passe les drapeaux "-g -pg" à gcc pour la construction de débogage et le drapeau "-O3" pour la construction optimisée.
Système hôte: Ubuntu Linux 10.4 AMD64.
Je sais que les symboles de débogage ajoutent une surcharge significative au programme, mais les performances relatives ont toujours été maintenues. C'est à dire. un algorithme plus rapide s'exécutera toujours plus vite dans les versions de débogage et d'optimisation.
Une idée de pourquoi je vois ce comportement?
La version de débogage est compilée avec "-g3 -pg". Version optimisée avec "-O3".
Optimized no threading: 0m4.864s
Optimized threading: 0m2.075s
Debug no threading: 0m30.351s
Debug threading: 0m39.860s
Debug threading after "strip": 0m39.767s
Debug no threading (no-pg): 0m10.428s
Debug threading (no-pg): 0m4.045s
Cela me convainc que « -g3 » n'est pas à blâmer pour le delta de la performance étrange, mais qu'il est plutôt le commutateur « -pg ». Il est probable que l'option "-pg" ajoute une sorte de mécanisme de verrouillage pour mesurer la performance du fil.
Comme "-pg" est brisé sur les applications filetées de toute façon, je vais juste l'enlever.
'strip' votre version de débogage, mesurez les performances de la version de débogage supprimée et ajoutez cette information à votre question. –
Je vais y aller, merci. – fluffels
'-pg' n'ajoute pas de symboles de débogage, donc votre question est erronée. La réponse à la question "Pourquoi les symboles de débogage affectent-ils négativement les performances" est "ils ne le font pas". –