Изменения

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

33 байта добавлено, 14:19, 27 февраля 2014
м
Нет описания правки
== Функция <code>system.time</code> ==
Самый простой инструмент для измерения времени выполнения кода - функция <code>system.time()</code> из пакета <code>{{r-package|base</code>|core=true}}. В качестве аргумента функция <code>system.time()</code> принимает выражения и возвращает время выполнения данного выражения. Измерим время выполнения функции <code>Sys.sleep()</code>, которая останавливает выполнение кода на заданный интервал времени (в секундах):
{{r-code|code=
В примере выше мы взяли только значения <code>elapsed</code> и рассчитали медиану <ref>Медиана является более устойчивой мерой центральной тенденции при асимметрии распределения, что, как правило, характерно для измерения времени.</ref>.
Вместо подобных решений можно использовать специальные пакеты, предназначенные для измерения производительности кода, в частности, пакеты <code>{{r-package|rbenchmark</code> }} и <code>{{r-package|microbenchmark</code>}}. Основной принцип работы этих пакетов заключается в многократном выполнении выражений и расчёта ряда интегральных показателей, в частности, суммы, среднего значения или медианы времени выполнения всех попыток.
== Пакет <code>{{r-package|rbenchmark</code}}> ==
Основа пакета <code>{{r-package|rbenchmark</code> }} - функция <code>benchmark()</code>. Данная функция работает следующим образом: указанные в качестве аргументов выражения выполняются заданное количество раз (по умолчанию 100) и вычисляется время, затраченное на выполнение всех попыток. В качестве аргументов функции <code>benchmark()</code> необходимо передать выражения или функции, а также количество повторений, передаваемых аргументом replications<ref>Анализ функции <code>benchmark()</code> показал, что, данная функция использует <code>system.time()</code> и <code>replicate()</code>, рассмотренные в предыдущем разделе.</ref>.
Для примера возьмём несколько способов расчёта среднего арифметического для сгенерированного массива данных.
}}
Теперь, подключив пакет {{r-package|rbenchmark}}, мы можем сравнить время работы каждого из выбранных нами способов вычисления средних по столбцам:
{{r-code|code=
}}
== Пакет <code>{{r-package|microbenchmark</code> }} ==
Функция <code>microbenchmark()</code> одноименного пакета работает сходным с функцией <code>benchmark()</code> образом, но предоставляет более гибкие средства по управлению процессом выполнения выражений<ref>Но в отличии от функции benchmark() использует собственную реализацию измерения времени выполнения и организацию повторных испытаний.</ref>. Особенностями реализованных в пакете <code>{{r-package|microbenchmark</code> }} являются:
* Возможность измерения времени выполнения выражения вплоть до наносекунд;
Умножение на <math>10^{-6}</math> --- это перевод в миллисекунды. Чтобы получить секунды, нужно, соответственно, умножить на <math>10^{-9}</math>.
Помимо настройки формата вывода, выбора показателей, наличие информации о времени выполнения выражения в каждой попытке позволяет визуализировать результаты оценки времени выполнения выражения. Например, с помощью функции <code>autoplot()</code> из пакета <code>{{r-package|ggplot2</code>}}, можно получить следующий график:
{{r-code|code=