Comment utiliser le profil guidée des optimisations dans g++?
Aussi, quelqu'un peut-il m'indiquer un bon tutoriel sur le sujet? Je ne peux pas en trouver.
- un bon tutoriel sur le sujet de quoi? Un g++ commutateur vous ne savez pas quoi utiliser pour?
- Merci pour le -1. J'ai essayé de jouer avec
-fprofile-arcs
il y a quelque temps. Et il a créé quelques fichiers que j'ai compris ont des profils de branches et ainsi de suite... Mais, je suis tombé sur-fprofile-use
et-fprofile-generate
aujourd'hui, alors j'ai pensé à poser cette question. Je vais modifier ma question. - Pourquoi est-ce faire de downvoted et a voté la fermeture? C'est une question tout à fait pertinente.
- Peut-être qu'ils sont utilisés pour activer le profil guidée optimisations?
- c'est une question tout à fait pertinente sur la façon d'utiliser le profil guidée optimisations
- Non, une question tout à fait pertinente sur que ce serait "comment puis-je utiliser le profil guidée optimisations avec G++". Cette question apparemment sélectionne aléatoirement commutateur de compilateur (à partir de
g++ --help
?) et puis demande "c'est quoi". Est l'OP de se demander "comment puis-je utiliser le profil de l'optimisation orientée", ou "qu'est-ce que le profilage", ou "j'ai vu -fprofile-générer utilisé dans un fichier makefile, et je n'ai aucune idée de ce que signifie"? À partir de la question posée ici, je n'ai aucune idée. - Je vais changer de "qu'est-Ce que l'utilisation de ..." à "Comment utiliser ...". Serait-ce vous satisfaire. Même si je sais que la plupart des gens comprennent ce que je demande dans cette question.
- si vous voulez savoir comment le faire, profil de l'optimisation orientée dans G++, puis se poser la question. Lorsque vous demandez comme ça, je me demande si c'est l'commutateurs qui vous intéresse, ou que l'objectif général de "à l'aide du profil de l'optimisation orientée pour accélérer ma demande".
- optimisation :" C'est la première fois que j'ai entendu cette phrase même. J'ai édité la question deux fois maintenant. Je vais modifier de nouveau, dans l'espoir d'obtenir une réponse 🙁
Vous devez vous connecter pour publier un commentaire.
-fprofile-générer sera l'instrument de l'application avec le profilage de code. L'application, en cours d'exécution, ouvrez certains événements qui pourraient améliorer les performances si cette consommation a été connu au moment de la compilation. Les Branches, la possibilité pour l'in-lining, etc, peuvent tous être connecté, mais je ne sais pas en détail comment GCC met en œuvre.
Après le programme s'arrête, il va vider toutes ces données dans *.gcda fichiers, qui sont essentiellement des données de journal pour l'exécution d'un test. Après la reconstruction de l'application avec-fprofile-use, GCC va prendre l' *.gcda les données du journal en compte lors de ses optimisations, généralement en augmentant le rendement de manière significative. Bien sûr, cela dépend de nombreux facteurs.
-fprofile-correction
pour la deuxième invocation de la GCC.gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch
encore l'obtention de la couverture-erreur d'incompatibilité. Ce que je fais mal?De cet exemple:
Essentiellement, vous devez d'abord compiler et lier avec cet indicateur supplémentaire pour la compilation et la liaison:
-fprofile-generate
(à partir de ici).Ensuite, lorsque vous l'exécutez, par défaut, il va créer .gcda fichiers "suivant" pour votre .o fichiers, il me semble (codé en dur le chemin complet où ils ont été construits).
Vous pouvez éventuellement changer de où il les crée .gcda les fichiers avec l'-fprofile-dir=XXX réglage.
Puis vous vous rappelez de la compilation et de la relier à l'aide de la
-fprofile-use
paramètre, et il le compile en utilisant le profil guidée de la bonté.-fprofile-correction
pour la deuxième invocation de g++.gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch
encore l'obtention de la couverture-erreur d'incompatibilité. Ce que je fais mal?Le problème est la configuration de la makefiles.
Vous avez certainement besoin de séparer la sortie des répertoires pour les fichiers objets. Je recommande de les nommer "profil" et "libération". Vous pourriez avoir à copier les *.gcda fichiers qui résultent du profil de fonctionner de telle sorte que GCC trouve dans la libération étape de génération.
Le résultat sera presque certainement être plus rapide. Il sera probablement plus grand que le bien. L'-fprofile-utiliser l'option permet à de nombreuses autres démarches d'optimisation qui sont par ailleurs ne activé par -O3.