Относительный бенчмаркинг в R с поправкой на спецификации локальной машины

У меня есть вопрос относительно бенчмаркинга в R. Как я могу правильно оценить относительную скорость функций по сравнению с пользовательской функцией.

Скажем, у меня есть 3 пользовательские функции f, g и h, и я хочу сообщить, как g и h работают с точки зрения скорости по сравнению с f. Измерить каждую из них не проблема (я знаю несколько библиотек), а разделить скорость g на скорость f — хорошая идея. Но как я могу настроить это измерение так, чтобы оно не слишком зависело от моей локальной машины и ОС (или это даже необходимо)? Конечно, 100-процентная точность кажется маловероятной, но моя конечная цель состоит в том, чтобы иметь такой показатель, чтобы пользователь или студент мог почувствовать, насколько велико улучшение в скорости, не проверяя мои и ее характеристики.

Итак, что я ищу?

  • Известная метрика для такого рода задач
  • Пакет, который делает это/сообщает такую ​​метрику
  • Приблизительное отношение скорости к моим спецификациям, поэтому я хотя бы приблизительно знаю, как относительная скорость на моей машине будет вести себя на других (линейная, экспоненциальная, ...)

Последнее замечание: мой доступ к различным машинам ограничен, поэтому просто протестировать его и посмотреть, как они себя ведут, — это вариант, но мой последний. Вместо этого я бы предпочел хорошее приближение.


person Erin Sprünken    schedule 18.06.2020    source источник


Ответы (1)


Относительное соотношение производительности двух функций может различаться на разных аппаратных средствах. например один может быть более чувствительным к пропускной способности FMA (и отставать от Zen1 или Intel до Haswell), в то время как другой (возможно, с использованием таблицы поиска или мемоизации) может быть более чувствительным к объему кэш-памяти и работать медленнее после некоторого порогового размера, который зависит от размеров кэша L2 и L3 машины.

Вероятно, было бы полезно посмотреть (на одной машине) на простую относительную производительность (соотношение времени) для разных размеров задач, времени (g)/времени (f) и времени (ч)/времени (f).

Таким образом, вы можете построить график y = производительность (в микросекундах) против x = размер проблемы для всех трех функций, чтобы увидеть абсолютную форму кривых производительности.

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

Если есть параметры, отличные от одного размера, то есть больше проблемного пространства для изучения с графиками...

person Peter Cordes    schedule 18.06.2020
comment
Я понимаю вашу точку зрения, и это действительно то, на что стоит обратить внимание, однако я вижу проблему, заключающуюся в том, что, учитывая некоторый фиксированный набор входных данных A для функций, я не могу делать заявления о том, как относительное быстродействие g по сравнению с f, если я не знать что-либо о машине какого-либо пользователя. Но я полагаю, что мне просто нужно использовать свое ограниченное распространение на разные машины, чтобы оценить, как они будут себя вести. - person Erin Sprünken; 19.06.2020
comment
@ErinSprünken: Правильно, утверждение g быстрее, чем f для всех входных данных, не может быть доказано на разных машинах, если вы можете проверить только на одной. Однако у вас часто могут быть веские основания ожидать, что это правда: например. если g — это версия f, которая оптимизирует часть работы и не добавляет новых различных видов работы, то, вероятно, это правда. Возможность обобщения на разные типы машин требует либо тестирования, либо некоторого понимания того, что делает вещи быстрыми, а какие медленными на разных процессорах. - person Peter Cordes; 19.06.2020
comment
Я боялся, что это трудно или невозможно оценить теоретически. Спасибо за старания! - person Erin Sprünken; 19.06.2020