Как измерить время выполнения метода в ECLiPSe CLP? В настоящее время у меня есть это:Измерение времени выполнения ECLiPSe CLP (или Prolog)
measure_traditional(Difficulty,Selection,Choice):-
statistics(runtime, _),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
time(solve_traditional(Difficulty,Selection,Choice,_)),
statistics(runtime,[_|T]), % T
write(T).
Мне нужно написать время, которое потребовалось, чтобы выполнить метод solve_traditional (...) и записать его в текстовый файл. Однако это недостаточно точно. Иногда время будет печатать 0.015 или 0.016 секунд для данного метода, но обычно он печатает 0.0 секунд.
Полагая, что метод выполняется слишком быстро, я решил использовать статистику (runtime, ...) для измерения времени, которое требуется между двумя вызовами времени выполнения. Затем я мог бы измерить, например, время, необходимое для завершения 20 вызовов метода и деления измеренного времени T на 20.
Только проблема состоит в том, что 20 вызовов T равны либо 0, 16, 32, либо 48 миллисекунд. По-видимому, он измеряет время для каждого вызова метода отдельно и находит сумму времени выполнения (которое часто составляет всего 0,0 с). Это превосходит всю цель измерения времени выполнения для N вызовов метода и деления времени T на N.
Одним словом: текущие методы, которые я использую для измерения времени выполнения, являются недостаточными. Есть ли способ сделать его более точным (например, 9 десятичных знаков)?
Вместо измерения 'once (Goal)', напишите '\ + (между (1, F, _), \ + Goal)' с установленным 'F' соответствующим образом – false