J'ai juste une remarque sur ton bench : "10 boucles et moyennes de 3 meilleurs".
Si tu traces une courbe des temps d’exécution de chaque boucle, tu verras un temps décroissant sur les 3 ou 4 premières exécution puis un plateau, et parfois des pics (allocation mémoire, switch de contexte...).
En fait, tu remplit tes caches, et ensuite, ils sont "chaud", le code est ainsi le plus rapide. Mais c'est loin de la réalité. Dans la réalité, tu ne ré-exécutes jamais le même code sur les même données 2 fois de suite.
Ce genre de bench ne permet pas d'estimer tout code d'optimisation d'usage du cache (tiling, accès linéaire à la mémoire,...).
A l'inverse, si tu nettoies complètement les caches (boucles entre 2 exécutions sur des données externes). Tu te places dans un pire cas : le cache "froid". Ce n'est peut être pas non plus réaliste.
Dans tous les cas, je préfère utiliser une courbe (ici tu aurais 10 points). Tu as 3 cas, donc 3 courbes. Tu peux voir l'efficacité de la 1er exécution, l'augmentation de perf ensuite, et visualiser tous problèmes avec les données (point aberrant dû à changement de contexte par exemple)
# micro bench dans une loupe
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Pythran 0.7 - PyDataParis. Évalué à 10.
J'ai juste une remarque sur ton bench : "10 boucles et moyennes de 3 meilleurs".
Si tu traces une courbe des temps d’exécution de chaque boucle, tu verras un temps décroissant sur les 3 ou 4 premières exécution puis un plateau, et parfois des pics (allocation mémoire, switch de contexte...).
En fait, tu remplit tes caches, et ensuite, ils sont "chaud", le code est ainsi le plus rapide. Mais c'est loin de la réalité. Dans la réalité, tu ne ré-exécutes jamais le même code sur les même données 2 fois de suite.
Ce genre de bench ne permet pas d'estimer tout code d'optimisation d'usage du cache (tiling, accès linéaire à la mémoire,...).
A l'inverse, si tu nettoies complètement les caches (boucles entre 2 exécutions sur des données externes). Tu te places dans un pire cas : le cache "froid". Ce n'est peut être pas non plus réaliste.
Dans tous les cas, je préfère utiliser une courbe (ici tu aurais 10 points). Tu as 3 cas, donc 3 courbes. Tu peux voir l'efficacité de la 1er exécution, l'augmentation de perf ensuite, et visualiser tous problèmes avec les données (point aberrant dû à changement de contexte par exemple)
"La première sécurité est la liberté"