NumPy 基准测试#
使用 Airspeed Velocity 对 NumPy 进行基准测试.
用法#
Airspeed Velocity 自行管理构建和 Python 虚拟环境,除非另有指示.要运行基准测试,您不需要将 NumPy 的开发版本安装到当前的 Python 环境中.
在开始之前,请确保 airspeed velocity 已安装.默认情况下,`asv` 附带对 anaconda 和 virtualenv 的支持:
pip install asv
pip install virtualenv
在贡献新的基准测试之后,你应该在提交拉取请求之前在本地测试它们.
要运行所有基准测试,请在命令行中导航到 NumPy 根目录并执行:
spin bench
这将构建 NumPy 并运行 benchmarks/
中定义的所有可用基准测试.(注意:这可能需要一段时间.每个基准测试都会多次运行以测量执行时间的分布.)
对于本地**测试**基准,最好在没有复制的情况下运行这些:
cd benchmarks/
export REGEXP="bench.*Ufunc"
asv run --dry-run --show-stderr --python=same --quick -b $REGEXP
正则表达式用于匹配基准测试的部分存储在 $REGEXP
中,而 –quick 用于避免重复.
要运行特定基准测试模块中的基准测试,例如 bench_core.py
,只需附加不带扩展名的文件名:
spin bench -t bench_core
要运行一个在类中定义的基准测试,例如来自 bench_creation.py
的 MeshGrid
:
spin bench -t bench_creation.MeshGrid
比较基准测试结果与另一个版本/提交/分支的变化,使用 --compare
选项(或等效的 -c
):
spin bench --compare v1.6.2 -t bench_core
spin bench --compare 20d03bcfd -t bench_core
spin bench -c main -t bench_core
以上所有命令在控制台中以纯文本形式显示结果,并且这些结果不会保存以供将来与提交进行比较.为了获得更大的控制、图形视图,并保存结果以供将来比较,您可以运行 ASV 命令(记录结果并生成 HTML):
cd benchmarks
asv run -n -e --python=same
asv publish
asv preview
更多关于如何使用 asv
的信息可以在 ASV 文档 中找到.命令行帮助可以通过 asv --help
和 asv run --help
获取.
基准版本#
要在本地不同机器上仅对发布进行基准测试或可视化,可以在使用 asv
运行之前生成带有其提交的标签,如下所示:
cd benchmarks
# Get commits for tags
# delete tag_commits.txt before re-runs
for gtag in $(git tag --list --sort taggerdate | grep "^v"); do
git log $gtag --oneline -n1 --decorate=no | awk '{print $1;}' >> tag_commits.txt
done
# Use the last 20
tail --lines=20 tag_commits.txt > 20_vers.txt
asv run HASHFILE:20_vers.txt
# Publish and view
asv publish
asv preview
有关贡献这些的详细信息,请参见 基准测试结果仓库.
编写基准测试#
请参阅 ASV 文档 以了解如何编写基准测试的基础知识.
一些需要考虑的事情:
基准测试套件应该可以使用任何版本的 NumPy 导入.
基准参数等不应依赖于安装的 NumPy 版本.
尽量保持基准测试的运行时间合理.
建议使用 ASV 的
time_
方法进行时间基准测试,而不是通过time.clock
自行编写时间测量,即使这需要在编写基准时进行一些调整.准备数组等操作通常应该放在
setup
方法中,而不是time_
方法中,以避免将准备时间与基准操作时间一起计算.请注意,使用
np.empty
或np.zeros
创建的大数组可能直到访问内存时才会在物理内存中分配.如果这是期望的行为,请确保在设置函数中对此进行注释.如果您正在基准测试一个算法,用户不太可能在新创建的空/零数组上执行该算法.可以在设置阶段通过在创建数组后调用np.ones
或arr.fill(value)
来强制发生页面错误.