Collez les temps bruts de plusieurs implémentations et obtenez moyenne, médiane, écart-type, min, max et vitesse relative dans un tableau de comparaison unique, plus une version Markdown à coller partout.
Transformez une pile de temps en tableau de comparaison. Une suite par ligne, un libellé, deux-points, puis vos mesures brutes. Il calcule les statistiques habituelles, classe tout par rapport au plus rapide, et vous donne un tableau Markdown pour la pull request.
Une suite par ligne au format « nom : valeur, valeur, valeur ». Les virgules, points-virgules ou espaces servent tous de séparateurs.
Suite
Exécutions
Moyenne
Médiane
Écart-type
Min
Max
Relatif
Ajoutez au moins une ligne au format « nom : 1, 2, 3 » pour voir la comparaison.
Lire un tableau de benchmark sans se laisser tromper
Moyenne et médiane divergent pour une raison
Le tableau affiche les deux, et l'écart entre elles est la première chose à regarder. Si la moyenne se situe bien au-dessus de la médiane, un petit nombre d'exécutions lentes tire la moyenne vers le haut — une pause de garbage collection, une tempête de cache miss, le système d'exploitation décidant de planifier autre chose sur votre cœur. La médiane ignore cela ; la moyenne non.
Aucune des deux n'est automatiquement la bonne à citer. Si vous dimensionnez un serveur pour un débit en régime permanent, c'est la moyenne qui compte, car ces exécutions lentes consomment bien du temps. Si vous comparez deux implémentations pour décider quel algorithme est meilleur, la médiane est généralement le chiffre le plus juste, car les valeurs aberrantes mesurent votre machine plutôt que votre code. Citez celle sur laquelle vous raisonnez réellement, et dites laquelle c'est.
L'écart-type vous dit si la comparaison est réelle
Une différence de moyennes ne veut dire quelque chose que si elle est grande par rapport à la dispersion. Deux suites à 12,0 et 12,4 millisecondes avec un écart-type de 0,05 sont réellement différentes. Les mêmes deux moyennes avec un écart-type de 3,0 sont le même nombre portant des chapeaux différents, et toute conclusion tirée en est du bruit.
Cet outil utilise l'écart-type sur échantillon, en divisant par n-1 plutôt que n. C'est le bon choix ici : vos exécutions sont un échantillon tiré de la population de toutes les exécutions possibles, pas la population entière, et diviser par n sous-estimerait systématiquement la dispersion. Avec une seule exécution il n'y a pas de dispersion à calculer, donc la colonne affiche zéro — ce qui rappelle qu'une mesure n'est pas un benchmark.
La vitesse relative est le chiffre dont on se souvient
La dernière colonne exprime chaque suite comme un multiple de la plus rapide, car c'est la forme sous laquelle le résultat est généralement répété. « Le nouveau parseur est 2,4x plus rapide » voyage ; « le nouveau parseur fait en moyenne 8,2 millisecondes » non, à moins que l'auditeur ne connaisse déjà la référence.
Deux mises en garde. D'abord, le ratio hérite de toute l'incertitude des deux moyennes derrière lui, donc une différence de 1,05x sur des données bruitées n'est pas une différence du tout. Ensuite, les ratios de moyennes ne sont pas les moyennes de ratios, et si les exécutions varient beaucoup en taille, les deux peuvent pointer dans des directions différentes. Quand les chiffres sont proches, indiquez la dispersion à côté du ratio et laissez le lecteur juger.
Questions fréquemment posées
Dans quel format les mesures doivent-elles être saisies ?
Une ligne par suite : un libellé, deux-points, puis les nombres. Les virgules, points-virgules, espaces et tabulations comptent tous comme séparateurs, donc la plupart des sorties collées fonctionnent sans édition.
Le sélecteur d'unité convertit-il quelque chose ?
Non. Il ne fait qu'étiqueter la sortie. Les statistiques sont calculées sur les nombres exactement comme vous les avez saisis, donc toutes les suites de la page doivent déjà être dans la même unité.
Pourquoi l'écart-type est-il zéro pour une seule exécution ?
L'écart-type sur échantillon divise par n-1, qui vaut zéro quand n vaut un. Une seule mesure n'a pas de dispersion à rapporter, et le zéro rappelle que vous devriez collecter plus d'exécutions.
Comment le « relatif » est-il calculé ?
La moyenne de chaque suite est divisée par la plus petite moyenne de la page. La suite la plus rapide est étiquetée comme telle plutôt qu'afficher 1,00x, car cela se lit mieux dans le tableau exporté.
Puis-je coller directement une sortie d'outil de benchmark ?
Généralement. Tant que chaque ligne a un nom, deux-points et quelques nombres, la ponctuation supplémentaire est traitée comme un séparateur. Les lignes sans deux-points sont ignorées plutôt que de provoquer une erreur.
Le tableau Markdown est-il sûr à coller dans une pull request ?
Oui — c'est du Markdown GitHub standard avec une ligne d'en-tête et une ligne de séparation. Les en-têtes de colonnes suivent la langue de la page, donc changez de langue d'abord si vous les voulez en anglais.