web-dev-qa-db-fra.com

Quelles informations le GCC Profile Guided Optimization (PGO) collecte-t-il et quelles optimisations l'utilisent?

Quelles informations GCC collecte-t-il lorsque j'active -fprofile-generate et quelle optimisation utilise en fait les informations collectées (lors de la définition de -fprofile-use drapeau) ?

J'ai besoin de citations ici. J'ai cherché pendant un certain temps mais je n'ai rien trouvé de documenté.

Des informations sur l'optimisation du temps de liaison (LTO) seraient un plus! = D

39
JohnTortugo

-fprofile-generate active -fprofile-arcs, -fprofile-values et -fvpt.

-fprofile-use active -fbranch-probabilities, -fvpt, -funroll-loops, -fpeel-loops et -ftracer

Source: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Optimize-Options.html#Optimize-Options

PS. Informations sur LTO également sur cette page.

38
chill

"Ce que chaque programmeur devrait savoir sur la mémoire" par Ulrich Drepper https://people.freebsd.org/~lstewart/articles/cpumemory.pdfhttp://www.akkadia.org /drepper/cpumemory.pdf

Dans la section 7.4

  • la compilation avec --profile-generate génère un fichier .gcno pour chaque fichier objet. (le même fichier utilisé pour les rapports de couverture gcov)
  • puis vous devez exécuter quelques tests, pendant l'exécution, il enregistre les données de couverture dans des fichiers .gcda
  • recompiler avec --profile-use: il rassemblera les données de couverture et déduira si une branche est probable (__builtin_expect (.., 1) ou peu probable (__builtin_expect (.., 0)

Le résultat devrait s'exécuter plus rapidement car il devrait être préférable de pré-extraire le code dans le cache d'instructions du processeur.

14
MichaelMoser