Изменения

Перейти к: навигация, поиск

R:Измерение времени выполнения выражений

43 байта добавлено, 15:56, 22 января 2014
м
Нет описания правки
== Функция system.time() ==
Самый простой инструмент для измерения времени выполнения кода --- функция {{Inline-code|system.time()|lang=rsplus}} из пакета {{Inline-code|base|lang=rsplus}}. В качестве аргумента функция {{Inline-code|system.time()|lang=rsplus}} принимает выражения и возвращает время выполнения данного выражения. Измерим время выполнения функции {{Inline-code|Sys.sleep()|lang=rsplus}}, которая останавливает выполнение кода на заданный интервал времени (в секундах):
<syntaxhighlight lang="rsplus">
Функция возвращает 3 значения:
* {{Inline-code|user|lang=rsplus}} --- время CPU, которое занял пользователь;* {{Inline-code|system|lang=rsplus}} --- время CPU, которое заняла система;* {{Inline-code|elapsed|lang=rsplus}} --- реальное время, которое заняло выполнение команды.
\end{itemize}
К сожалению, подобный способ достаточно ненадежен, так как для оценки времени выполнения выражения функция {{Inline-code|system.time()|lang=rsplus}} обращается к системным значениям времени. Следовательно, если во время выполнения кода параллельно производятся и другие операции на компьютере (а такое случается практически в ста процентах случаев), то возможно увеличение времени выполнения R-кода. Некоторую вариативность результатов можно увидеть, даже если выполнить функцию {{Inline-code|system.time()|lang=rsplus}} несколько раз подряд. Подобной неточности оценки можно избежать путём многократного повторения выполняемых выражений и вычислением среднего времени, что позволит сгладить часть вариаций.
Базоый пакет позволяет реализовать процедуру многократного повторения выражения функции как минимум двумя способами. Первый --- функция {{Inline-code|replicate()|lang=rsplus}}. Приведенное выше сопоставление времени выполнения двух выражений при использовании функции {{Inline-code|replicate()|lang=rsplus}} будет выглядеть следующим образом:
<syntaxhighlight lang="rsplus">
</syntaxhighlight>
В примере выше мы взяли только значения {{Inline-code|elapsed|lang=rsplus}} и рассчитали медиану (<ref>Медиана является более устойчивой мерой центральной тенденции при асимметрии распределения, что, как правило, характерно для измерения времени).</ref>.
Вместо подобных решений можно использовать специальные пакеты, предназначенные для измерения производительности кода, в частности, пакеты {{Inline-code|rbenchmark|lang=rsplus}} и {{Inline-code|microbenchmark|lang=rsplus}}. Основной принцип работы этих пакетов заключается в многократном выполнении выражений и расчёта ряда интегральных показателей, в частности, суммы, среднего значения или медианы времени выполнения всех попыток.
== Пакет microbenchmark ==
 
== Примечания ==
<references />
[[Категория:R]]

Навигация