March 2026

S M T W T F S
12 34567
891011121314
151617 18192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Monday, August 20th, 2007 01:04 pm

Допустим, у меня есть процедура, вычисляющая некую функцию f(x). Есть модификация, который позволяет эту процедуру ускорить, и надо проверить, насколько именно. Процедура довольно быстрая - скажем, порядка десятков миллисекунд (все цифры условные для примера). Т.е. чтобы ее мерять достаточно уверенно, надо написать бенчмарк, который ее запускает, скажем, 1000 раз и меряет, сколько времени заняло. Тут начинается интересное - бенчмарк дает разброс между, скажем, 10.8 секунды и 10.1 секунды. Какое значение использовать? Можно посчитать среднее, но с другой стороны - если некоторые бенчмарки выполняются за 10.1 секунды, не значит ли это, что именно настолько быстрая эта функция и есть, а значения выше этого - это мусор, вызванный каким-то другими эффектами в системе?
Имеет ли смысл удлинять тест, тестировать не 1000, а 10000, скажем? С одной стороны, относительный разброс становится меньше, с другой - больше вероятности, что во время теста случится что-нибудь, что повлияет на результаты (к сожалению, в современной ОС без значительных усилий трудно знать, не решит ли какой-нибудь процесс прямо сейчас что-нибудь поделать)?
Теперь дальше - меряем улучшеную функцию, получаем разброс, скажем, от 8.9 до 8.2. Можно ли утверждать, что мы ускорили функцию с 10.1 до 8.2 - т.е. практически на 20% - или же надо опять считать средние и сравнивать их?
Я знаю, что обычно принято считать среднее, но не очень понятно, почему именно в этом случае это будет лучше (для ясности - мне надо знать не насколько быстрая сама функция, а насколько конкретная модификация ее ускоряет).
Tuesday, August 21st, 2007 10:23 am (UTC)
///если некоторые бенчмарки выполняются за 10.1 секунды, не значит ли это, что именно настолько быстрая эта функция и есть, а значения выше этого - это мусор, вызванный каким-то другими эффектами в системе///

Так и есть. Запускаешь раз 10 - 20, берешь наименьший результат и всё.

///Теперь дальше - меряем улучшеную функцию, получаем разброс, скажем, от 8.9 до 8.2. Можно ли утверждать, что мы ускорили функцию с 10.1 до 8.2 - т.е. практически на 20% ///

Да, можно. Также прогоняешь тесть раз 10 - 20, берешь минимальный результат - это есть время работы функции. Всё остальное - мусор.