Правильная статистика для отчетов о результатах ускорения

12

Скажем, у меня есть медленные и быстрые версии некоторого кода, и я хочу сообщить число ускорений, сравнивая их. Я запускаю медленную версию раз и быструю версию m раз, производя времена ( s 1 , , s n ) и ( f 1 , , f m ) . Самый простой способ получить ускорение - это усреднить средние значения: ˉ snm(s1,,sn)(f1,,fm) Однако это не учитывает выбросы.

s¯f¯=mi<nsinj<mfj

Вопрос : Какую статистику лучше всего использовать при сообщении номеров ускорения?

Джеффри Ирвинг
источник
3
Насколько велико стандартное отклонение по сравнению со средним? Что бы вы ни делали, вы должны сообщать о том, что вы сделали, и, возможно, ставить полосы ошибок, если они большие. Если они действительно большие, вы должны исследовать источник. Большая часть компьютерного кода должна выполняться довольно детерминистически во времени, если в самой программе нет случайного компонента или если вы не используете ресурсы компьютера совместно с другими (это может быть сеть или диск, а не только узлы кластера). Если проблема заключается в конкуренции за дисковые ресурсы, вы можете рассмотреть возможность создания отчетов о производительности с отключенным вводом-выводом (довольно часто) - просто обратите внимание на это.
Билл Барт
На Эдисоне (суперкомпьютере Cray) разница между двумя образцами составляет 2%. На моем ноутбуке я вижу стандартное отклонение 6-8%, измеренное для 10 образцов. Оба предназначены только для вычислительного ядра, без ввода-вывода.
Джеффри Ирвинг
Чтобы прояснить, почему я упоминаю выбросы, если дисперсии уже достаточно малы: это достаточно фундаментальная статистическая величина, и я хотел бы знать идеальный способ сообщить об этом, даже если неидеальные способы хороши в этом конкретном случае.
Джеффри Ирвинг
2
Вопрос в том, что вы пытаетесь сообщить, и формула будет сообщать это лучше всего? Я не думаю, что когда-либо видел документ, в котором сообщается о непостоянной разнице в ускорении, если только причина не была центральной в статье. Учитывая, что мы устанавливаем линейную зависимость между временем выполнения и количеством процессоров / задач / потоков, вы, вероятно, можете использовать соотношение средних значений, но затем погрешность с соотношением max-to-min и min-to-max если вы думаете, показывать диапазон важно. Кроме того, вам, вероятно, следует обратить внимание на параметры масштабирования частоты и закрепления задач, чтобы уменьшить изменчивость. :)
Билл Барт
Там может быть много хитрости в устранении IO. Между оптимизацией компилятора к трюкам «Копировать при записи» могут быть действительно неочевидные связи вниз. Я обычно следую за прототипом d1 = loadData (); d2 = копия (d1); R1 = Algo (d2); r2 = algo (d1) и учитывает только время второго запуска.
meawoppl

Ответы:

9

В дополнение ко всему, что Билл Барт уже сказал выше, позвольте мне упомянуть, что люди часто сообщают о самом быстром из нескольких пробежек. Обоснование состоит в том, что фактическое время выполнения - это идеальное время выполнения плюс любое количество замедлений, вызванных другими процессами, задержками ОС, задержками в сети и т. Д. Поскольку все эти шумы нас не интересуют, использование самого быстрого времени выполнения ближе всего к тому, который мы действительно хотим знать.

Вольфганг Бангерт
источник
К сожалению, этот принцип не помогает при сообщении об ускорении между двумя алгоритмами.
Джеффри Ирвинг
3
@ GeoffreyIrving, почему бы и нет? Оба алгоритма имеют теоретическое ожидание производительности в зависимости от размера проблемы (или количества процессоров или другого нестатистического параметра), а члены низкого порядка и независимые от параметра члены игнорируются. Использование самого быстрого времени (и отмечая этот факт) просто помогает вам игнорировать эти дополнительные условия. Что кажется хорошей стратегией. Если вы не скажете нам по-другому, кажется, что вы пытаетесь выяснить, как наиболее эффективно сообщить разницу между алгоритмами, и предложение Вольфганга является традиционным и ожидаемым, поэтому оно может лучше всего передать эту информацию.
Билл Барт,
1
Ой, да, ты прав. Я с радостью отозвал свое заявление.
Джеффри Ирвинг
(+1) Дополнительный вопрос: я полностью понимаю вашу точку зрения о несимметричном распределении шума и т. Д. Допустим, что я делаю реализацию A, а реализацию B и тестирую их, и после разумного количества прогонов 25-й квантиль, а медиана и среднее значение в ~ 4,5 раза быстрее в А, чем В, в то время как в 0% квантиль ~ 3х. При сравнении реализации A с B, несмотря на то, что: yes A is theoretically only ~3x fasterразве не может ожидаться ускорение в 3 раза, не представляющее ускорения при использовании реализации A вместо B? (Кстати, это реальный пример)
usεr11852
1
@ usεr11852: Все зависит от системы, в которой вы находитесь. Если ваш средний или 25-й квантиль настолько далеко друг от друга, что искажает статистику в том виде, в каком вы здесь выдвигаете гипотезу, то, скорее всего, вы находитесь в системе с большим количеством шума. Например, он может использоваться другими одновременно, и т. Д. Это может не отражать системы, которые другие используют для своих повторных экспериментов, и мне показалось бы, что вы в этом случае перепродаете свои результаты. Итак, я все же предлагаю сообщить о лучших пробегах. Что бы вы ни делали, вы должны сообщить в газете, какую статистику вы используете.
Вольфганг Бангерт
1

Я предлагаю вам использовать медиану для статистической оценки. В отличие от среднего, медиана не искажается выбросами.

январь
источник
1
Для данных, где весь шум положительный (т. Е. С несимметричным распределением шума), медиана так же плоха, как и любая другая статистика. Для времени выполнения, это действительно так, см. Мой ответ выше.
Вольфганг Бангерт
0

Если стандартное отклонение не пренебрежимо мало, вы можете использовать два боксовых графика бок о бок, построенных каждый со временем одного из алгоритмов. Они, безусловно, не являются стандартными в численном анализе, но они отлично справляются с отображением такого рода информации.

Федерико Полони
источник