Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > измерение скорости кода


Автор: zyxerr 22.12.2008, 17:32
Добрый день!
.
1. вопрос по терминологии. Можно ли назвать "профилированием" посчет дельты времени с помощью объекта Time::HiRes? или это хронометраж?
2. вопрос по существу. Предположим, я хочу померять скорость регулярных выражений. Операция занимает одну миллионную секунды. Какой результат будет более точным: одиночная проверка или цикл из миллиона проверок(в целом - секунда)? По идее чем больше проверок, тем меньше погрешность. Но ведь чем больше проверок, тем больше вероятность влияния системных процессов, работающих в фоне

Автор: KSURi 22.12.2008, 18:22
1. нет
2. скорее цикл из множества проверок. хотя не понятно, честно говоря, зачем вам это нужно.

ЗЫ: не забудьте вынести регулярки в qr// =)

Автор: zyxerr 22.12.2008, 18:30
1. т.е. это хронометраж получается
2. я пишу работу по оптимизации рег.выражений. Уже получил несколько интересных результатов.
немного непонятно, зачем выносить регулярки в в qr// ...

Автор: ginnie 22.12.2008, 18:42
zyxerr,

1. да, обычно результаты статистически обрабатываются (т.е. указывается количество выполнений строки и среднее время).
2. зависит от разрядности таймера. Если размерность более чем на порядок превышает время выполнения, то более точным будет среднее значение. На моем сервере Time::HiRes имеет разрядность до 0.000001, поэтому в Вашем случае оба результата можно проигнорировать - точность их одинаково неприемлемая.


KSURi, что Вы подразумеваете под "профилированием"?

Автор: KSURi 22.12.2008, 18:55
Профилирование - процесс выявления узких мест в программе, путем измерения времени работы каждого ее участка (участком может быть как одна строка/инструкция, так и целая подпрограмма). Если судить по вашему, то рефакторингом можно назвать любое изменение кода.

Добавлено через 1 минуту и 48 секунд
А вот википедия говорит, что в профилировку еще и проверка code coverage входит. Мне таким заниматься не приходилось.

Автор: ginnie 22.12.2008, 18:59
KSURi, тогда другой вопрос:

Почему нельзя назвать "профилированием" посчет дельты времени с помощью объекта Time::HiRes?

Автор: zyxerr 22.12.2008, 19:07
может быть кто-то знает, с какой точностью работает Time::HiRes ?
резульат выдало такой: 1.9073486328125e-006
насколько я понимаю, это 1.9 в степени -6 (т.е. 1.9 миллионных)

Автор: ginnie 22.12.2008, 19:32
zyxerr, выдает с точностью системной функции gettimeofday(), а она у меня на FreeBSD с точностью до микросекунд.

Автор: KSURi 22.12.2008, 19:54
ginnie, потому что сам по себе подсчет не является профилированием. Вроде это вытекает из моего предыдущего поста)
Профилирование - совокупность действий, одним из которых является замер времени, и конечной целью которого, чаще всего, является повышение быстродействия программы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)