Где блекджек, где мои шлюхи? Ничерта не работает! Войти !bnw Сегодня Клубы
Привет, TbI — HRWKA! 1239.0 пользователей не могут ошибаться!
?6941
прекрасное6442
говно5903
говнорашка5512
хуита4706
anime3064
linux2649
music2633
bnw2597
рашка2565
log2352
ололо2151
pic1815
дунч1808
сталирасты1491
украина1439
быдло1436
bnw_ppl1409
дыбр1238
гімно1158

Пока я жду когда же кофе начнёт действовать, давайте поговорим о бенчмарках. Нет, я не предлагаю ставить phoronix test suite и бряцать своими железками, поговорим о муках выбора между двумя имплементациями функции.
Допустим я написал функцию f(const char,size_t) которая делает преобразование данных и делает это хорошо (но долго). Допустим я написал функцию f2(const char,size_t), которая делает то же самое преобразование и тоже делает это хорошо (и тоже долго). Как определить какая функция работает быстрее (на сферических данных в вакууме)?
Обычно я запускаю каждую функцию по сто раз (или по десять, если они реально медленные) и засекаю, сколько времени функции потратили на выполнение ста итераций, и вывожу количество затраченных миллисекунд в консоль. От запуска к запуску цифры скачут на 10-15%. Тогда я пишу ещё один внешний цикл, который запускает сто итераций десять раз и выводит лучшие времена среди этих десяти. Цифры теперь скачут на 5% — тут уже ничего не поделать, фрагментация памяти, случайные контекст свитчи, фазы луны. Можно увеличить количество итераций и тогда разброс стабилизируется, но всё равно мне ни разу не удалось сделать его менее одного процента, а время выполнения бенчмарка всё растёт и растёт.
Вопрос, как правильно выбирать критерий останова для подобных бенчмарках? Как сделать запуски сферическими в вакууме, чтобы ничего программе не мешало? callgrind не предлагать — он меряет количество выполненных процессорных операций, которое не обязательно отражает точное время (ибо кэшмиссы и прочее).

#OMQRIH (25) / @hirthwork / 3725 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.