Update: Wie @PerMildner berichtete, die folgende Ausgabe (. Gegenwart mit SICStus Prolog 4.3) hat mit dem neuen SICStus Prolog 4.3 verschwunden. ! Weg zu gehen!SICStus Prolog: Statistiken/2 Werte von JIT betroffen
Ich verwende SICStus Prolog 4.3.2 und ich bin immer einige der statistics/2
Schlüssel zu wissen, dass ich noch nie benutzt haben ... Hier ist mein 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
sammelt einige Informationen über die Ausführung von Prädikaten wie:
boolsA([]).
boolsA([0|Bs]) :- boolsA(Bs).
boolsA([1|Bs]) :- boolsA(Bs).
%%
bool(0).
bool(1).
boolsB([]).
boolsB([B|Bs]) :- bool(B), boolsB(Bs).
ich zwei Choice fürerwartet— aber keine für ?- boolsB([0,0]).
Die Zahlen, die ich sofort erhalten, nachdem der JIT von denen, die ich bekommen unterscheiden lief sobald es fertig ist:
Mit 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
Ohne 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
Ich frage mich, ob obige Diskrepanz absichtlich ist ... Vielen Dank für Ihre Hilfe!
Das ist der Preis für JIT-Compilation – false
@ false. Ich bekomme, dass JIT nicht umsonst ist. OTOH Ich bin nur ein JIT-Benutzer, also sollte ich diese Statistikdaten wahrscheinlich nicht erhalten, es sei denn, ich frage ausdrücklich danach, ob ich die richtige, dokumentierte Schnittstelle dafür verwende. – repeat
@false. Natürlich war das nicht die eigentliche Frage, die ich stellen wollte: "Wie man Nicht-Bestimmtheit quantifiziert" – repeat