gpt4 book ai didi

python - PyPy 显示不准确的基准测试结果?

转载 作者:行者123 更新时间:2023-11-28 22:01:19 25 4
gpt4 key购买 nike

我正在研究 Project Euler并想知道我是否可以使用 PyPy 加速我的解决方案。然而,我发现结果非常令人失望,因为计算需要更多时间。

d:\projeuler>pypy problem204.py
3462.08630405 mseconds

d:\projeuler>python problem204.py
1823.91602542 mseconds

由于毫秒输出是使用 python 的 time 模块计算的,所以我使用内置的基准测试命令再次运行它。

d:\projeuler>pypy -mtimeit -s "import problem204" "problem204._main()"
10 loops, best of 3: 465 msec per loop

d:\projeuler>python -mtimeit -s "import problem204" "problem204._main()"
10 loops, best of 3: 1.87 sec per loop

PyPy 报告说大约需要半秒才能完成运行。但是,我尝试多次运行 pypy problem204 并且输出从未接近基准 0.5 秒。与 pypy 不同,python 的 mtimeit 结果与输出一致。 pypy 是否提供了不准确的基准,或者是否有一些我不明白的魔法?

最佳答案

注意timeit

  1. 多次运行该语句(在您的情况下为 10 次),并且
  2. 做了几次(默认为 3 次)并给出最小值,原因 outlined in the documentation .

这取决于您的代码,但 JIT 编译器完全有可能为这个令人困惑的结果负责。每次启动新的 pypy 进程时都会产生 JIT 预热开销,但在 timeit 基准测试期间只会产生一次(因为在同一进程中多次运行 _main)。此外,如果你的代码的某些部分运行得如此频繁以至于当 _main 运行一次时它没有被编译,而只在它运行时,比如说,运行三次,那么后续运行也会更快,这进一步消除了第一个的最佳结果(即运行 pypy problem204.py 一次的那个)。

timeit 结果是正确的,因为它(大致)匹配代码在最佳情况下的速度——预热 JIT 编译器,很少将 CPU 分配给其他程序,等等。你的问题是你想知道一些不同的东西 - 时间包括 JIT 预热。

关于python - PyPy 显示不准确的基准测试结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com