Question

Quelqu'un sait ce compilateur fonctionnalité?Il semble GCC soutien.Comment ça fonctionne?Quel est le potentiel de gain?Dans ce cas, c'est bon?Boucles internes?

(cette question est spécifique, et non pas sur l'optimisation en général, merci)

Était-ce utile?

La solution

Il fonctionne en plaçant un code supplémentaire pour compter le nombre de fois que chaque codepath est pris.Lorsque vous compilez un deuxième temps, le compilateur utilise les connaissances acquises au sujet de l'exécution de votre programme, il ne pouvait deviner avant.Il ya un couple de choses PGO peuvent travailler vers:

  • Décider quelles fonctions doivent être incorporé ou pas, en fonction de la fréquence à laquelle ils sont appelés.
  • Décider comment mettre en place des conseils sur la branche d'un "si" déclaration doit être prédit sur la base du pourcentage d'appels, d'une manière ou l'autre.
  • Décider comment optimiser les boucles en fonction du nombre d'itérations se prendre à chaque fois que la boucle est appelée.

Vous ne savez jamais vraiment comment beaucoup de ces choses peuvent aider jusqu'à ce que vous le tester.

Autres conseils

PGO donne environ 5% de boost de vitesse lors de la compilation de x264, le projet sur lequel je travail, et nous l'avons intégré dans le système pour qu'il (faire fprofiled).Son une belle gratuitement boost de vitesse, dans certains cas, et probablement plus dans les applications qui, à la différence de x264, sont moins composé de manuscrits de l'assemblée.

Jason conseiller est à droite sur.Les meilleures accélérations, vous allez obtenir viens de "découvrir" que vous laissez un O(n2 l'algorithme se glisser dans une boucle interne, quelque part, ou que vous pouvez mettre en cache certains calculs à l'extérieur de cher les fonctions.

Par rapport à la micro-optimisations que PGO peut déclencher, ce sont les grands gagnants.Une fois que vous avez fait que le niveau de l'optimisation PGO pourriez être en mesure de vous aider.Nous n'avons jamais eu beaucoup de chance avec le bien - le coût de l'instrumentation a été tel que notre demande de devenir unusably lente (de plusieurs ordres de grandeur).

J'ai comme l'utilisation de Intel VTune comme un générateur de profils, principalement parce qu'il est non-invasive par rapport à instrumentant profileurs qui modifient le comportement de trop.

La chose amusante à propos de l'optimisation est que les gains de vitesse sont trouvés dans l'improbable des lieux.

C'est aussi la raison pour laquelle vous avez besoin d'un profiler, plutôt que d'essayer de deviner où la vitesse de problèmes.

Je recommande de commencer avec un profiler (gperf si vous utilisez GCC) et commencer à fouiller les résultats de l'exécution de votre demande par le biais de certaines opérations normales.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top