NumPy бенчмарки
Бенчмаркинг NumPy с Airspeed Velocity.
Использование
Airspeed Velocity управляет созданием и Python virtualenv самостоятельно, если не указано иное. Некоторые функции бенчмаркинга в runtests.py также сообщают ASV использовать NumPy, скомпилированный runtests.py. Для запуска бенчмарков вам не нужно устанавливать разработочную версию NumPy в вашу текущую среду Python.
Перед началом убедитесь, что airspeed velocity установлен. По умолчанию, asv поставляется с поддержкой anaconda и virtualenv:
pip install asv pip install virtualenv
После внесения новых бенчмарков, вы должны протестировать их локально перед отправкой запроса на добавление.
Для запуска всех бенчмарков перейдите в корневой каталог NumPy в командной строке и выполните:
python runtests.py --bench
где --bench активирует набор бенчмарков вместо набора тестов. Это создает NumPy и запускает все доступные бенчмарки, определенные в benchmarks/. (Примечание: это может занять некоторое время. Каждый бенчмарк запускается несколько раз для измерения распределения во времени выполнения.)
Для запуска бенчмарков из конкретного модуля бенчмарков, такого как bench_core.py, просто добавьте имя файла без расширения:
python runtests.py --bench bench_core
Для запуска бенчмарка, определенного в классе, например Mandelbrot из bench_avx.py:
python runtests.py --bench bench_avx.Mandelbrot
Сравните изменения в результатах бенчмарков с другой версией/коммитом/веткой:
python runtests.py --bench-compare v1.6.2 bench_core python runtests.py --bench-compare 8bf4e9b bench_core python runtests.py --bench-compare main bench_core
Все вышеперечисленные команды отображают результаты в обычном тексте в консоли, и результаты не сохраняются для сравнения с будущими коммитами. Для большего контроля, графического представления и сохранения результатов для будущих сравнений вы можете запустить команды ASV (запись результатов и генерация HTML):
cd benchmarks asv run -n -e --python=same asv publish asv preview
Подробнее о том, как использовать asv, можно найти в документации ASV. Справка по командной строке доступна, как обычно, через asv --help и asv run --help.
Написание бенчмарков
См. документацию ASV для основ написания бенчмарков.
Некоторые моменты для рассмотрения:
- Набор бенчмарков должен быть импортируемым с любой версией NumPy.
- Параметры бенчмарка и т.д. не должны зависеть от установленной версии NumPy.
- Постарайтесь сохранить время выполнения бенчмарка разумным.
- Предпочитайте методы
time_ASV для измерения времени бенчмарков вместо создания измерений времени с помощьюtime.clock, даже если это потребует некоторой подстройки при написании бенчмарка. - Подготовка массивов и т.д. обычно должна быть помещена в метод
setup, а не в методыtime_, чтобы избежать учета времени подготовки вместе со временем измеряемой операции. - Учитывайте, что большие массивы, созданные с помощью
np.emptyилиnp.zeros, могут не быть выделены в физической памяти до обращения к памяти. Если это желаемое поведение, убедитесь, что это прокомментировано в вашей функции настройки. Если вы тестируете алгоритм, маловероятно, что пользователь будет выполнять данный алгоритм на только что созданном пустом/нулевом массиве. Можно принудительно вызвать pagefaults на фазе настройки, вызвавnp.onesилиarr.fill(value)после создания массива.
© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/benchmarking.html