Я хотел бы понять разницу между микротестом R и system.time()? Как они внутренне измеряют время выполнения функции?
В чем разница между использованием R microbenchmark и system.time?
Ответы (1)
В обоих случаях время выполнения рассчитывается с использованием средств операционной системы, поэтому способ расчета времени выполнения зависит от ОС.
Как описано в разделе «Подробности» документа ?system.time
:
system.time вызывает функцию proc.time, вычисляет expr, а затем снова вызывает proc.time, возвращая разницу между двумя вызовами proc.time.
proc.time
является примитивным, а код C находится в src/main/times.c
. Комментарии в этом файле:
proc.time() использует currentTime() для прошедшего времени и getrusage, затем times для процессорного времени в Unix-подобном, GetProcessTimes в Windows.
Из раздела «Примечания» на странице ?microbenchmark
:
В зависимости от базовой операционной системы для синхронизации используются разные методы. В Windows интерфейс QueryPerformanceCounter используется для измерения прошедшего времени. В Linux используется API clock_gettime, а в Solaris — функция gethrtime. Наконец, в MacOS X используется недокументированная функция mach_absolute_time, чтобы избежать зависимости от CoreServices Framework.
Я не могу найти репозиторий микробенчмарков, поэтому вам придется загрузить исходный код, чтобы увидеть точные детали, но время определяется do_microtiming
в src/nanotimer.c
, который вызывает зависящую от ОС версию get_nanotime
в src/nanotimer_nanotimer_gettime.h
/src/nanotimer_nanotimer_macosx.h
/src/nanotimer_nanotimer_rtposix.h
. /src/nanotimer_nanotimer_windows.h
.
?microbenchmark
дает довольно подробные сведения о том, как он измеряет время выполнения. Что конкретно вы хотите узнать? - person josliber♦   schedule 18.02.2015microbenchmark
основан на повторяющихся итерациях.system.time
- это время для одного запуска. - person IRTFM   schedule 18.02.2015