J'ai trouvé que l'horloge habituelle (), tout le monde le recommande ici, pour une raison quelconque, s'écarte énormément d'une exécution à l'autre, même pour du code statique sans aucun effet secondaire, comme dessiner à l'écran ou lire des fichiers. Cela pourrait être dû au fait que le processeur change les modes de consommation d'énergie, que le système d'exploitation donne différentes priorités, etc.
Ainsi, le seul moyen d'obtenir de manière fiable le même résultat à chaque fois avec clock () est d'exécuter le code mesuré en boucle plusieurs fois (pendant plusieurs minutes), en prenant des précautions pour empêcher le compilateur de l'optimiser: les compilateurs modernes peuvent précalculer le code sans effets secondaires en cours d'exécution dans une boucle, et déplacez-le hors de la boucle., comme c'est-à-dire en utilisant une entrée aléatoire pour chaque itération.
Une fois que suffisamment d'échantillons ont été collectés dans un tableau, on trie ce tableau et prend l'élément central, appelé médiane. La médiane est meilleure que la moyenne, car elle élimine les écarts extrêmes, comme par exemple l'antivirus occupant tout le processeur ou le système d'exploitation faisant une mise à jour.
Voici un utilitaire simple pour mesurer les performances d'exécution du code C / C ++, en faisant la moyenne des valeurs proches de la médiane: https://github.com/saniv/gauge
Je suis moi-même toujours à la recherche d'un moyen plus robuste et plus rapide de mesurer le code. On pourrait probablement essayer d'exécuter le code dans des conditions contrôlées sur du métal nu sans aucun système d'exploitation, mais cela donnera un résultat irréaliste, car en réalité, le système d'exploitation s'implique.
x86 a ces compteurs de performances matérielles, qui incluent le nombre réel d'instructions exécutées, mais ils sont difficiles à accéder sans l'aide du système d'exploitation, difficiles à interpréter et ont leurs propres problèmes ( http://archive.gamedev.net/archive/reference/articles /article213.html ). Ils pourraient tout de même être utiles pour enquêter sur la nature du col de la bouteille (accès aux données ou calculs réels sur ces données).