我正在研究Project Euler,并想知道是否可以使用PyPy加速我的解决方案。然而,我发现结果令人失望,因为计算需要更多时间。PyPy显示不准确的基准测试结果?
d:\projeuler>pypy problem204.py
3462.08630405 mseconds
d:\projeuler>python problem204.py
1823.91602542 mseconds
由于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,输出甚至从未接近基准测试.5秒。与pypy不同,python的mtimeit结果与输出一致。 Pypy给我不准确的基准,还是有一些我不明白的魔法?
+1。如果你需要比较像web应用程序那样无限期运行的程序的子程序的速度,以及像这样运行一次的程序的命令行“time”包装器(不是python模块),我会使用'timeit' 。 –
@AndrewGorcester同意,尽管在某些平台上“时间”令人遗憾地不可用(*咕噜* Windows *咕* *)。 Powershell显然有一个相同的,但我还没有弄清楚它是如何工作的。 – delnan
请注意,timeit只做更少的事情(如在CPython中禁用GC)。此外,由于在多篇论文中列出的原因,最小值是不正确的(例如你有一个gc每3个循环收集一次,然后最小值会跳过硬的)。 PyPy没有修改timeit,但是对于带JIT编译器的解释器来说,它更没有意义。 – fijal