Eric
Eric

Reputation: 5091

Python 3.7 really faster than python 3.6?

I used to run Python 3.6.7 in ubuntu. Today, I tried the very new python 3.7.3 but I am a little bit disappointed : It seems to me that 3.7 is slower than 3.6 :

Both versions has been taken from deadsnakes/ppa, and when I run Python benchmark suite, many tests where 3.7 should be faster than 3.6 (dixit speed.python.org), I noticed the opposite :

python 3.6:

[ 1/47] 2to3...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_2to3.py --output /tmp/tmp27lejbkn`
.....................
2to3: Mean +- std dev: 319 ms +- 5 ms
[ 2/47] chameleon...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_chameleon.py --output /tmp/tmp_jvgzmw7`
.....................
chameleon: Mean +- std dev: 8.99 ms +- 0.13 ms
[ 3/47] chaos...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_chaos.py --output /tmp/tmpbpea7n4x`
.....................
chaos: Mean +- std dev: 114 ms +- 2 ms
[ 4/47] crypto_pyaes...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_crypto_pyaes.py --output /tmp/tmptbh2r8k1`
.....................
crypto_pyaes: Mean +- std dev: 103 ms +- 1 ms
[ 5/47] deltablue...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_deltablue.py --output /tmp/tmpm_fyde6p`
.....................
deltablue: Mean +- std dev: 7.19 ms +- 0.12 ms[1/1] 
raytrace...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_raytrace.py --output /tmp/tmpeaeg9hxq`
.....................
raytrace: Mean +- std dev: 536 ms +- 8 ms

python 3.7:

[ 1/47] 2to3...
INFO:root:Running `/home/elapouya/tmp/venv37/bin/python -u /home/elapouya/tmp/venv37/lib/python3.7/site-packages/performance/benchmarks/bm_2to3.py --output /tmp/tmp96xnk361`
.....................
2to3: Mean +- std dev: 349 ms +- 4 ms
[ 2/47] chameleon...
INFO:root:Running `/home/elapouya/tmp/venv37/bin/python -u /home/elapouya/tmp/venv37/lib/python3.7/site-packages/performance/benchmarks/bm_chameleon.py --output /tmp/tmpzj3vo0qn`
.....................
chameleon: Mean +- std dev: 11.7 ms +- 0.2 ms
[ 3/47] chaos...
INFO:root:Running `/home/elapouya/tmp/venv37/bin/python -u /home/elapouya/tmp/venv37/lib/python3.7/site-packages/performance/benchmarks/bm_chaos.py --output /tmp/tmp5nfno0s9`
.....................
chaos: Mean +- std dev: 132 ms +- 2 ms
[ 4/47] crypto_pyaes...
INFO:root:Running `/home/elapouya/tmp/venv37/bin/python -u /home/elapouya/tmp/venv37/lib/python3.7/site-packages/performance/benchmarks/bm_crypto_pyaes.py --output /tmp/tmpq3mv75iz`
.....................
crypto_pyaes: Mean +- std dev: 124 ms +- 2 ms
[ 5/47] deltablue...
INFO:root:Running `/home/elapouya/tmp/venv37/bin/python -u /home/elapouya/tmp/venv37/lib/python3.7/site-packages/performance/benchmarks/bm_deltablue.py --output /tmp/tmp01whaidm`
.....................
deltablue: Mean +- std dev: 8.93 ms +- 0.15 ms
[ 6/47] django_template...
[1/1] raytrace...
INFO:root:Running `/home/elapouya/tmp/venv37/bin/python -u /home/elapouya/tmp/venv37/lib/python3.7/site-packages/performance/benchmarks/bm_raytrace.py --output /tmp/tmpce_59p1p`
.....................
raytrace: Mean +- std dev: 603 ms +- 12 ms

I also tried to compile python 3.7.3 source code (with --enable-optimizations), but it is not really faster.

Where I am wrong ? why, with official benchmark suite I ran, python3.7 is not faster than 3.6 unlike speed.python.org says ?

Upvotes: 3

Views: 3064

Answers (1)

Stephan Garland
Stephan Garland

Reputation: 155

Looking through the build logs of all the 3.6 and 3.7 releases there, the 3.6 releases had -O2 in CFLAGS, 3.7 did not. That's probably the difference. I just had to recompile 3.7.3 on my RPi after finding that performance on a large sort operation I was benchmarking for a project had dramatically dropped.

With the stock 3.5.3, it could do a radix sort of 10^6 ints in about 139 seconds; with a fresh 3.7.3 install using nothing other than --enable-optimizations, that changed to 765 seconds. Matching CFLAGS and config args to the 3.5.3 installation dropped the sort down to 143 seconds. Most of that, I believe, is due to -O2 and --enable-computed-gotos in CFLAGS and config args, respectively.

You could find out by downloading the 3.7.3 source and doing an altinstall with -O2 and --enable-computed-gotos to find out.

EDIT: 10^6 ints, not 10^7.

Upvotes: 5

Related Questions