CPython results, 2017

This page lists benchmarks which became faster in CPython.

Optimizations

2016-12-14: speedup method calls

Optimization: Speedup method calls 1.2x, commit f2392133.

Benchmark

2016-12-01 (27580c1fb5e8)

2017-01-01 (67e1aa0b58be)

call_method

14.1 ms

11.2 ms: 1.26x faster (-21%)

call_method_slots

13.9 ms

11.1 ms: 1.25x faster (-20%)

call_method_unknown

16.0 ms

14.3 ms: 1.12x faster (-11%)

2016-04-22: pymalloc allocator

Optimization: PyMem_Malloc() now uses the fast pymalloc allocator, commit f5c4b990.

Changes of at least 5%:

Benchmark

2016-04-21 (5439fc4901db)

2016-04-22 (f5c4b99034fa)

unpickle_list

10.4 us

7.64 us: 1.36x faster (-27%)

json_dumps

28.0 ms

25.2 ms: 1.11x faster (-10%)

unpickle_pure_python

741 us

678 us: 1.09x faster (-9%)

unpickle

33.9 us

31.3 us: 1.08x faster (-8%)

meteor_contest

197 ms

183 ms: 1.08x faster (-7%)

mako

36.9 ms

34.3 ms: 1.07x faster (-7%)

pathlib

41.0 ms

38.4 ms: 1.07x faster (-6%)

call_method_slots

14.8 ms

13.9 ms: 1.07x faster (-6%)

telco

19.5 ms

18.3 ms: 1.07x faster (-6%)

scimark_lu

413 ms

388 ms: 1.07x faster (-6%)

nqueens

221 ms

207 ms: 1.07x faster (-6%)

fannkuch

937 ms

882 ms: 1.06x faster (-6%)

regex_compile

319 ms

301 ms: 1.06x faster (-6%)

raytrace

1.16 sec

1.09 sec: 1.06x faster (-5%)

pickle_pure_python

1.11 ms

1.05 ms: 1.05x faster (-5%)

genshi_text

70.1 ms

66.6 ms: 1.05x faster (-5%)

2015-12-07: Optimize ElementTree.iterparse(), xml_etree_iterparse

Optimization: Issue #25638: Optimized ElementTree.iterparse(); it is now 2x faster, commit 9ec5e25f2.

Benchmark

2015-12-01 (df144092a340)

2016-01-01 (71db90356390)

xml_etree_iterparse

423 ms

206 ms: 2.05x faster (-51%)

2015-09-19: PGO uses test suite, pidigits

Optimization: Issue #24915: Add Clang support to PGO builds and use the test suite for profile data, commit 7188a3ef.

Changes of at least 5%:

Benchmark

2015-09-18 (4b363e270108)

2015-09-18_22-13 (7188a3efe07b)

pickle

33.7 us

26.4 us: 1.28x faster (-22%)

pidigits

332 ms

286 ms: 1.16x faster (-14%)

pickle_list

9.90 us

8.84 us: 1.12x faster (-11%)

unpickle

37.2 us

33.3 us: 1.12x faster (-11%)

unpickle_list

11.1 us

9.95 us: 1.11x faster (-10%)

regex_dna

330 ms

297 ms: 1.11x faster (-10%)

regex_effbot

6.43 ms

5.80 ms: 1.11x faster (-10%)

pickle_dict

69.3 us

64.1 us: 1.08x faster (-8%)

mako

39.1 ms

36.2 ms: 1.08x faster (-7%)

call_simple

12.2 ms

11.6 ms: 1.05x faster (-5%)

genshi_xml

175 ms

166 ms: 1.05x faster (-5%)

Changes of at least 5%, sadly two benchmarks also became slower:

Benchmark

2015-09-18_14-32-master-4b363e270108

2015-09-18_22-13-master-7188a3efe07b

unpickle_pure_python

776 us

821 us: 1.06x slower (+6%)

regex_v8

49.5 ms

52.6 ms: 1.06x slower (+6%)

2015-05-30: C implementation of collections.OrderedDict, html5lib

Optimization: Issue #16991: Add a C implementation of collections.OrderedDict, commit 96c6af9b.

Benchmark

2015-05-02 (3b4d30a27bd6)

2015-06-01 (41874c570cf3)

html5lib

285 ms

233 ms: 1.23x faster (-19%)

2015-05-23: C implementation of functools.lru_cache(), sympy

Optimization: Issue #14373: Added C implementation of functools.lru_cache(), commit 1c858c35.

Changes of at least 5%:

Benchmark

2015-05-23_19-15-master-c70908558d8e

2015-05-23_19-42-master-1c858c352b8c

sympy_expand

1.45 sec

1.14 sec: 1.27x faster (-21%)

sympy_sum

308 ms

247 ms: 1.25x faster (-20%)

sympy_str

621 ms

500 ms: 1.24x faster (-19%)

sympy_integrate

54.2 ms

45.7 ms: 1.19x faster (-16%)

scimark_lu

497 ms

471 ms: 1.06x faster (-5%)

pickle_dict is seen as 1.06x slower, but since pickle doesn’t use functools.lru_cache(), the change is ignored in the table.

Slowdown

2016-09-11: regex_compile

Slowdown: convert re flags to (much friendlier) IntFlag constants (issue #28082), commit f93395bc.

Benchmark

2016-04-01 (6b6abd4cf10e)

2016-07-01 (355048970b2a)

2016-10-01 (78a111c7d867)

regex_compile

339 ms

309 ms: 1.10x faster (-9%)

383 ms: 1.13x slower (+13%)

Timeline

April, 2016 -> May, 2016

2016-04-01 .. 2016-05-01:

Benchmark

2016-04-01 (dcfebb32e277)

2016-05-01 (f1e2671fdf88)

nqueens

255 ms

207 ms: 1.23x faster (-19%)

raytrace

1.31 sec

1.09 sec: 1.19x faster (-16%)

float

290 ms

243 ms: 1.19x faster (-16%)

chaos

273 ms

235 ms: 1.16x faster (-14%)

hexiom

21.0 ms

18.6 ms: 1.13x faster (-11%)

deltablue

16.4 ms

14.6 ms: 1.12x faster (-11%)

go

557 ms

502 ms: 1.11x faster (-10%)

nbody

254 ms

232 ms: 1.10x faster (-9%)

call_method

Timeline 2016-04-01 .. 2017-01-01:

Benchmark

2016-04-01 (6b6abd4cf10e)

2016-07-01 (355048970b2a)

2016-10-01 (78a111c7d867)

2017-01-01 (67e1aa0b58be)

call_method

15.8 ms

14.9 ms: 1.06x faster (-6%)

14.1 ms: 1.13x faster (-11%)

11.2 ms: 1.42x faster (-29%)

call_method_slots

15.7 ms

15.2 ms: 1.03x faster (-3%)

14.0 ms: 1.13x faster (-11%)

11.1 ms: 1.42x faster (-29%)

call_method_unknown

17.7 ms

15.9 ms: 1.11x faster (-10%)

15.6 ms: 1.13x faster (-11%)

14.3 ms: 1.23x faster (-19%)

crypto_pyaes

Benchmark

2016-04-01 (master)

2016-05-01 (master)

crypto_pyaes

226 ms

205 ms: 1.10x faster (-9%)

2016-03-01 .. 2016-06-01:

Benchmark

2016-03-01 (13d09afff127)

2016-06-01 (d80ab7d94578)

crypto_pyaes

231 ms

199 ms: 1.16x faster (-14%)

json_loads

Progress on 21 months, 2015-01-01 .. 2016-10-01:

Benchmark

2015-01-01 (52074ac866eb)

2016-10-01 (78a111c7d867)

json_loads

64.0 us

56.6 us: 1.13x faster (-11%)

logging_silent

Benchmark

2016-01-01 (899b72cee21c)

2016-07-01 (355048970b2a)

logging_silent

718 ns

606 ns: 1.18x faster (-16%)

pickle

pickle, 2016-08-02 .. 2016-09-08:

Benchmark

2016-08-02 (133138a284be)

2016-09-08 (10427f44852b)

pickle

25.5 us

21.4 us: 1.19x faster (-16%)

pickle dict/list:

Benchmark

2016-04-01 (6b6abd4cf10e)

2016-10-01 (78a111c7d867)

pickle_dict

64.5 us

57.7 us: 1.12x faster (-11%)

pickle_list

9.06 us

7.79 us: 1.16x faster (-14%)

unpickle:

Benchmark

2015-07-01 (d7982beca93c)

2015-10-01 (30b7138fe12b)

unpickle

36.9 us

32.8 us: 1.13x faster (-11%)

python_startup

2015-04-01 .. 2015-10-01:

Benchmark

2015-04-01 (4fd929b43121)

2015-10-01 (30b7138fe12b)

python_startup

16.4 ms

17.2 ms: 1.05x slower (+5%)

python_startup_no_site

8.65 ms

8.90 ms: 1.03x slower (+3%)

2016-04-01 .. 2017-01-01:

Benchmark

2016-04-01 (6b6abd4cf10e)

2017-01-01 (67e1aa0b58be)

python_startup

17.3 ms

14.5 ms: 1.20x faster (-16%)

python_startup_no_site

8.89 ms

8.39 ms: 1.06x faster (-6%)

regex_compile

Benchmark

2016-04-01 (6b6abd4cf10e)

2016-07-01 (355048970b2a)

2016-10-01 (78a111c7d867)

regex_compile

339 ms

309 ms: 1.10x faster (-9%)

383 ms: 1.13x slower (+13%)

telco

Benchmark

2016-01-01 (899b72cee21c)

2016-04-01 (6b6abd4cf10e)

2016-07-01 (355048970b2a)

2016-10-01 (78a111c7d867)

2017-03-31 (cdcac039fb44)

telco

19.6 ms

19.2 ms: 1.02x faster (-2%)

18.3 ms: 1.08x faster (-7%)

15.1 ms: 1.30x faster (-23%)

13.9 ms: 1.41x faster (-29%)

scimark

2016-10-01 .. 2017-03-31:

Benchmark

2016-10-01 (78a111c7d867)

2017-01-01 (67e1aa0b58be)

2017-03-31 (cdcac039fb44)

scimark_lu

423 ms

378 ms: 1.12x faster (-11%)

318 ms: 1.33x faster (-25%)

scimark_sor

426 ms

403 ms: 1.06x faster (-5%)

375 ms: 1.14x faster (-12%)

sqlalchemy_declarative

Benchmark

2014-10-01 (5a789f7eaf81)

2015-10-01 (30b7138fe12b)

sqlalchemy_declarative

345 ms

301 ms: 1.15x faster (-13%)

sympy

2016-04-01 .. 2016-10-01:

Benchmark

2016-04-01 (6b6abd4cf10e)

2016-07-01 (355048970b2a)

2016-10-01 (78a111c7d867)

sympy_expand

1.10 sec

1.01 sec: 1.09x faster (-8%)

942 ms: 1.17x faster (-14%)

sympy_integrate

46.6 ms

42.9 ms: 1.09x faster (-8%)

41.2 ms: 1.13x faster (-11%)

sympy_sum

247 ms

233 ms: 1.06x faster (-6%)

199 ms: 1.24x faster (-19%)

sympy_str

483 ms

454 ms: 1.07x faster (-6%)

427 ms: 1.13x faster (-12%)

xml_etree_generate

Benchmark

2015-04-01 (4fd929b43121)

2015-07-01 (d7982beca93c)

2015-10-01 (30b7138fe12b)

2016-01-01 (899b72cee21c)

2016-07-01 (355048970b2a)

xml_etree_generate

282 ms

267 ms: 1.06x faster (-5%)

256 ms: 1.10x faster (-9%)

237 ms: 1.19x faster (-16%)

212 ms: 1.33x faster (-25%)