• [^] # Re: C'est bien la peine !

    Posté par . En réponse au journal EDSL et F-algèbres. Évalué à 1.

    L'écart de performance diminue quand on augmente la taille de la structure, et la version avec type inductif devient plus performante sur la traversée également. Voilà un bench uniquement sur la traversée de la structure avec des arbres parfaits dont la profondeur varie de 10 à 20 avec un pas de 2 :

     Name Time/Run mWd/Run Percentage 
     ----------------------- ------------- --------- ------------ 
     Trav/Ast-Perf:10 20.46us 0.08% 
     Trav/Ast-Perf:12 82.03us 0.31% 
     Trav/Ast-Perf:14 326.56us 1.23% 
     Trav/Ast-Perf:16 1_436.95us 5.42% 
     Trav/Ast-Perf:18 5_867.21us 22.12% 
     Trav/Ast-Perf:20 23_295.92us 87.81% 
     Trav/Boehmdic-Perf:10 18.40us 3.00w 0.07% 
     Trav/Boehmdic-Perf:12 78.27us 3.00w 0.30% 
     Trav/Boehmdic-Perf:14 326.51us 3.00w 1.23% 
     Trav/Boehmdic-Perf:16 1_669.57us 3.00w 6.29% 
     Trav/Boehmdic-Perf:18 6_665.36us 3.00w 25.13% 
     Trav/Boehmdic-Perf:20 26_528.52us 3.00w 100.00% 
    

    Pour les arbres en forme de peigne (qui s'apparente à des listes, ceux que je construisais dans mes premières mesures), que le peigne parte vers la droite ou vers la gauche, la version « classique » est toujours plus performante que l'encodage de Boehm-Berarducci. Comme c'est une traversée en profondeur qui prend le sous-arbre gauche en premier, c'est plus lent sur des peignes qui partent à gauche. Mais dans les deux cas, la version « classique » avec type inductif est la plus performante. Avec des peignes vers la gauche, par exemple :

     Name Time/Run mWd/Run Percentage 
     ------------------------- ---------- --------- ------------ 
     Trav/Ast-Left:500 5.28us 6.76% 
     Trav/Ast-Left:1000 11.54us 14.78% 
     Trav/Ast-Left:1500 17.67us 22.64% 
     Trav/Ast-Left:2000 23.99us 30.73% 
     Trav/Ast-Left:2500 30.99us 39.70% 
     Trav/Ast-Left:3000 36.98us 47.38% 
     Trav/Ast-Left:3500 43.60us 55.85% 
     Trav/Ast-Left:4000 51.75us 66.30% 
     Trav/Ast-Left:4500 58.19us 74.56% 
     Trav/Ast-Left:5000 64.97us 83.23% 
     Trav/Boehmdic-Left:500 5.68us 3.00w 7.27% 
     Trav/Boehmdic-Left:1000 12.59us 3.00w 16.13% 
     Trav/Boehmdic-Left:1500 19.81us 3.00w 25.38% 
     Trav/Boehmdic-Left:2000 27.60us 3.00w 35.36% 
     Trav/Boehmdic-Left:2500 34.10us 3.00w 43.69% 
     Trav/Boehmdic-Left:3000 41.66us 3.00w 53.37% 
     Trav/Boehmdic-Left:3500 51.37us 3.00w 65.81% 
     Trav/Boehmdic-Left:4000 59.99us 3.00w 76.86% 
     Trav/Boehmdic-Left:4500 68.38us 3.00w 87.61% 
     Trav/Boehmdic-Left:5000 78.05us 3.00w 100.00% 
    

    et vers la droite pour de petites tailles :

     Name Time/Run mWd/Run Percentage 
     ------------------------- ------------ --------- ------------ 
     Trav/Ast-Right:10 104.64ns 5.82% 
     Trav/Ast-Right:30 310.75ns 17.28% 
     Trav/Ast-Right:50 490.14ns 27.26% 
     Trav/Ast-Right:70 655.54ns 36.46% 
     Trav/Ast-Right:90 828.10ns 46.05% 
     Trav/Ast-Right:110 996.24ns 55.40% 
     Trav/Ast-Right:130 1_229.26ns 68.36% 
     Trav/Ast-Right:150 1_340.23ns 74.53% 
     Trav/Ast-Right:170 1_515.82ns 84.30% 
     Trav/Ast-Right:190 1_717.04ns 95.49% 
     Trav/Boehmdic-Right:10 125.31ns 3.00w 6.97% 
     Trav/Boehmdic-Right:30 323.75ns 3.00w 18.00% 
     Trav/Boehmdic-Right:50 508.61ns 3.00w 28.29% 
     Trav/Boehmdic-Right:70 696.69ns 3.00w 38.74% 
     Trav/Boehmdic-Right:90 879.47ns 3.00w 48.91% 
     Trav/Boehmdic-Right:110 1_069.22ns 3.00w 59.46% 
     Trav/Boehmdic-Right:130 1_245.08ns 3.00w 69.24% 
     Trav/Boehmdic-Right:150 1_442.02ns 3.00w 80.19% 
     Trav/Boehmdic-Right:170 1_620.29ns 3.00w 90.11% 
     Trav/Boehmdic-Right:190 1_798.15ns 3.00w 100.00% 
    

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.