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

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

    J'ai fait quelques tests supplémentaires en utilisant la bibliothèque Core_bench (ce qui au passage m'a permis de me familiariser avec, elle est plutôt bien faite même si je n'ai pas encore fouillé assez pour voir comment générer des graphes avec les mesures).

    Après études du comportement des différentes implémentations, il s'est avéré que l'encodage de Boehm-Berrarduci ne produit pas de fold « recursif terminal » (quoi qu'à lire le code, j'aurais du le voir) : le seuil qui déclenche un stack overflow est juste un peu plus élevé.

    Néanmoins, dans le cas des semi-groupes implémentés, contrairement à ce qu'avait dit Perthmâd, cet encodage peut s'avérer plus performant que la version avec type inductif pour l'AST dans le cas où l'on parcours l'arbre plusieurs fois. En effet, la construction est plus lente mais le parcours plus rapide dans certain cas.

    De plus, pour avoir un encodage plus performant il s'est avéré qu'il valait mieux utiliser la version avec dictionnaire (comme celle du code d'Oleg Kyseliov donné dans le journal) que la version currifiée que j'ai donnée pus haut. La version avec dictionnaire ressemble à cela :

    module Boehmdic = struct
     type 'a algebra = {
     lit : int -> 'a;
     op : 'a -> 'a -> 'a;
     }
     type exp = {expi:'a. 'a algebra -> 'a}
     let lit n = {expi = fun alg -> alg.lit n}
     let op {expi=e} {expi=e'} = {expi= fun alg -> alg.op (e alg) (e' alg)}
     let plus {expi=e} =
     e {lit = (fun n -> n);
     op = ( + );}
    end

    Pour des résultats partiels de benchs, j'obtiens ce qui suit. Les résultats sont donnés en microseconde (us), les arbres sont des arbres binaires parfaits dont la profondeur est indiquée sur chaque ligne (de 7 à 10) et les test sont : construction+parcours (One) et parcours uniquement (Trav). Pour le temps de chauffe : faire la soustraction ;-). Les autres colonnes indiquent le nombre de collections mineures, de collections majeures et de promotions par exécution de la fonction (ici, je teste l'interprétation comme addition), ainsi que le pourcentage par rapport au temps le plus long.

     Name Time/Run mWd/Run mjWd/Run Prom/Run Percentage 
     ---------------------- ---------- --------- ----------- ----------- ------------ 
     One/Ast-Perf:7 5.45us 1.28kw 3.16w 3.16w 5.14% 
     One/Ast-Perf:8 11.30us 2.56kw 12.54w 12.54w 10.65% 
     One/Ast-Perf:9 23.91us 5.12kw 50.40w 50.40w 22.54% 
     One/Ast-Perf:10 51.03us 10.24kw 203.75w 203.75w 48.12% 
     One/Astk-Perf:7 9.55us 4.60kw 12.72w 12.72w 9.00% 
     One/Astk-Perf:8 19.72us 9.21kw 46.70w 46.70w 18.59% 
     One/Astk-Perf:9 42.56us 18.42kw 184.04w 184.04w 40.13% 
     One/Astk-Perf:10 96.38us 36.86kw 734.24w 734.24w 90.87% 
     One/Boehm-Perf:7 8.91us 3.83kw 20.76w 20.76w 8.40% 
     One/Boehm-Perf:8 19.13us 7.67kw 85.63w 85.63w 18.04% 
     One/Boehm-Perf:9 42.86us 15.35kw 334.80w 334.80w 40.41% 
     One/Boehm-Perf:10 106.06us 30.71kw 1_354.19w 1_354.19w 100.00% 
     One/Boehmdic-Perf:7 7.33us 3.32kw 14.65w 14.65w 6.91% 
     One/Boehmdic-Perf:8 16.33us 6.65kw 58.92w 58.92w 15.40% 
     One/Boehmdic-Perf:9 35.82us 13.31kw 235.10w 235.10w 33.78% 
     One/Boehmdic-Perf:10 86.27us 26.62kw 939.71w 939.71w 81.34% 
    Name Time/Run mWd/Run mjWd/Run Prom/Run Percentage 
     ----------------------- ---------- ------------ ---------- ---------- ------------ 
     Trav/Ast-Perf:7 2.44us 4.79% 
     Trav/Ast-Perf:8 4.88us 9.58% 
     Trav/Ast-Perf:9 9.78us 19.20% 
     Trav/Ast-Perf:10 19.56us 38.40% 
     Trav/Astk-Perf:7 6.08us 3_321.17w 0.61w 0.61w 11.94% 
     Trav/Astk-Perf:8 12.30us 6_649.33w 1.37w 1.37w 24.15% 
     Trav/Astk-Perf:9 24.82us 13_305.66w 3.11w 3.11w 48.74% 
     Trav/Astk-Perf:10 50.93us 26_618.33w 6.88w 6.88w 100.00% 
     Trav/Boehm-Perf:7 2.89us 5.67% 
     Trav/Boehm-Perf:8 5.99us 11.76% 
     Trav/Boehm-Perf:9 12.40us 24.34% 
     Trav/Boehm-Perf:10 24.98us 49.04% 
     Trav/Boehmdic-Perf:7 2.22us 3.00w 4.36% 
     Trav/Boehmdic-Perf:8 4.50us 3.00w 8.84% 
     Trav/Boehmdic-Perf:9 9.07us 3.00w 17.81% 
     Trav/Boehmdic-Perf:10 18.43us 3.00w 36.20% 
    

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