我正在研究欧拉计划并想知道我是否可以使用 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 给我的基准是不准确的,还是有一些我不明白的魔法?
注意时间
- 多次运行该语句(在您的情况下运行 10 次),并且
- 执行多次(默认为 3 次)并给出最小值,原因如下文档中概述.
这取决于您的代码,但 JIT 编译器完全有可能是造成这种令人困惑的结果的原因。每次启动新的 pypy 进程时都会产生 JIT 预热开销,但在 timeit 基准测试期间只发生一次(因为该进程运行_main
在同一过程中多次)。此外,如果代码的某些部分运行得太频繁,以至于在_main
运行一次,但只有当它运行三次时,后续运行也会更快,这进一步消除了第一次运行的最佳结果(即运行的结果)pypy problem204.py
once).
The timeit
结果是正确的,因为它(大致)匹配代码在最佳情况下的速度 - 预热 JIT 编译器,很少将 CPU 分配给其他程序等。
你的问题是你想知道一些不同的东西——包括 JIT 预热的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)