:- use_module(library(timeout)). test(Tms, N, Cpums) :- statistics(cputime,_), time_out(do_counting(0),Tms,_), statistics(cputime,[_,Cpums]), nb_getval(counter,N). do_counting(N1) :- nb_setval(counter,N1), N2 is N1+1, do_counting(N2). run :- ( T_ms = 1 ; between(1,50,T_ms) ), ( test(T_ms, N0, Cpu0), mm_init(count,N0), mm_init(cpu,Cpu0), Npms0 is N0 / Cpu0, mm_init(npms,Npms0), between(1,1000,I), test(T_ms, N, Cpu), mm_update(count,N), mm_update(cpu,Cpu), Npms is N / Cpu, mm_update(npms,Npms) ; mm_print(T_ms) ), false. mm_print(T_ms) :- nb_getval(count,CountInt), nb_getval(cpu,CpuInt), nb_getval(npms,MpmsInt), portray_clause(T_ms: [CpuInt,CountInt,MpmsInt]). mm_init(Key,Val) :- nb_setval(Key,Val..Val). mm_update(Key,Val) :- nb_getval(Key,Min..Max), NMin is min(Val,Min), NMax is max(Val,Max), nb_setval(Key,NMin..NMax).