NumPy 基准测试#
使用 Airspeed Velocity 对 NumPy 进行基准测试。
用法#
除非另有说明,Airspeed Velocity 自行管理构建和 Python virtualenvs。要运行基准测试,您不需要在当前的 Python 环境中安装 NumPy 的开发版本。
开始之前,请确保已安装空速速度。默认情况下,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
要运行类中定义的基准测试,例如MeshGrid
from bench_creation.py
:
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)
创建数组后强制在设置阶段发生页面错误,