2016-05-22 4 views
2

Mise à jour: Tel que rapporté par @PerMildner, la question ci-dessous (. Présent avec SICStus Prolog 4.3) a disparu avec la nouvelle SICStus Prolog 4.3. ! Way to go!SICStus Prolog: statistiques/2 valeurs affectées par JIT


J'utilise SICStus Prolog 4.3.2 et je suis apprendre à connaître quelques-unes des statistics/2 clés que je ne l'ai pas utilisé avant ... Voici mon code:

:- use_module(library(lists)). 

a_is_b_minus_c(A,B,C) :- 
    A is B-C. 

call_keys_deltas(Goal_0, Keys, Deltas) :- 
    maplist(statistics, Keys, Values0), 
    call(Goal_0), 
    maplist(statistics, Keys, Values1), 
    maplist(a_is_b_minus_c, Deltas, Values1, Values0). 

call_keys_deltas/3 rassemble des informations sur l'exécution des prédicats comme:

boolsA([]).       
boolsA([0|Bs]) :- boolsA(Bs). 
boolsA([1|Bs]) :- boolsA(Bs). 

%% 

bool(0). 
bool(1). 

boolsB([]). 
boolsB([B|Bs]) :- bool(B), boolsB(Bs). 

J'attends deux choicepoints pour ?- boolsA([0,0]). — mais aucun pour ?- boolsB([0,0]).

Les chiffres que je reçois immédiatement après le JIT couru diffèrent de ceux que je reçois une fois qu'il est fait:

  • Avec JIT

     
    $ export SP_JIT=enabled && sicstus 
    % ... 
    | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). 
    Ds = [112,904] ? ; 
    no 
    | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). 
    Ds = [112,16] ? ; 
    no 
    | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). 
    Ds = [0,1264] ? ; 
    no 
    | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). 
    Ds = [0,8] ? ; 
    no 
    
  • Sans JIT

     
    $ export SP_JIT=disabled && sicstus 
    % ... 
    | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). 
    Ds = [112,16] ? ; 
    no 
    | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). 
    Ds = [112,16] ? ; 
    no 
    | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). 
    Ds = [0,8] ? ; 
    no 
    | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). 
    Ds = [0,8] ? ; 
    no 
    

Je me demande si la divergence ci-dessus est intentionnelle ... Merci pour votre aide!

+2

C'est le prix pour JIT-compilation – false

+1

@false. Je comprends que JIT ne vient pas gratuitement. OTOH Je ne suis qu'un utilisateur de JIT, donc je ne devrais probablement pas obtenir ces données statistiques à moins que je ne le demande spécifiquement en utilisant la bonne interface documentée pour cela. – repeat

+1

@false. Bien sûr, ce n'était pas la vraie question que je voulais poser: "Comment quantifier la non-déterminisme" – repeat

Répondre

4

La différence n'était pas intentionnelle. Il devrait être parti dans la dernière version de SICStus Prolog (4.3.3).

Notez que le choice_used ne différait pas, même avant SICStus 4.3.3, et que cette statistique est probablement ce que vous devriez utiliser pour "quantifier la non-déterminisme".