PyPy The state of 2015-04 @matthiasendler
Why PyPy?
"Scientific American" Vol. XXXVI, No. 19, May 12, 1877 p.294 New York: Munn &Company (Publisher)
Why PyPy?
No more support for older versions
Major bugfixes
New language features
Improved performance
Incentives to switch to a new language version
Why PyPy?
Two ways to speed up a scripting language
• Improve the implementation
• Improve the runtime
Why PyPy?
Two ways to speed up a scripting language
• Improve the implementation
• Improve the runtime
0
35
70
105
140
1.8.7 1.9.3 2.0.0 2.1.0 2.2.0
Relative Ruby performance
Why PyPy?
Source: isrubyfastyet.com
speed (%)
version
baseline (100%)
+12%+30% +35% +36%
Why PyPy?
0
65
130
195
260
5.2 5.3 5.4 5.5 5.6 7.0
Relative PHP performance
Source: PHPNG a new core for PHP7 by Dmitry Stogov
baseline (100%)
speed (%)
version
+13%+36% +39% +50%
+149%
Why PyPy?
25
50
75
100
2.6 2.7 3.4
Relative Python performance
Source: pystone benchmark on Core i7, 16 GB RAM
baseline (100%)
speed (%)
version
-10%-3%
Why PyPy?
0
38
75
113
150
2007 2009 2011 2013 2015
PHP Python Ruby
baseline (100%)
speed (%)
time
Relative performance improvements per language over time
Why PyPy?
The net result of the 3.0 generalizations is that Python 3.0 runs the pystone benchmark around 10% slower than Python 2.5. Most likely the biggest cause is the removal of special-casing for small integers. There’s room for improvement, but it will happen after 3.0 is released!
docs.python.org/3/whatsnew/3.0.html
Why PyPy?
Two ways to speed up a scripting language
• Improve the implementation
• Improve the runtime
What is PyPy?
Followup of Psyco runtime
Version 1.0 in 2007
Python written in Python
Just-In-Time compiler
Compatible with Python 2.7 and 3.4
What is PyPy?
Followup of Psyco runtime
Version 1.0 in 2007
Python written in Python RPython
Just-In-Time compiler
Compatible with Python 2.7 and 3.4
PyPy implementation
• Variables in any given control flow path must have only a single type • No multiple inheritance • No generators • Most dunder-methods can't be used.
RPython is a subset of Python
http://www.quora.com/PyPy/How-annoying-is-writing-RPython-compared-to-Python
PyPy implementation
Tracing JIT compiler
http://www.aosabook.org/en/pypy.html
Your Python program
PyPy implementation
Tracing JIT compiler
http://www.aosabook.org/en/pypy.html
„Hot“ loop
PyPy implementation
Tracing JIT compiler
http://www.aosabook.org/en/pypy.html
can_enter_jit()
jit_merge_point()
PyPy implementation
Tracing JIT compiler
http://www.aosabook.org/en/pypy.html
Optimized machine code
Project milestones
2008 Django support
2010 First JIT-compiler
2011 Compatibility with CPython 2.7
2014 Basic ARM support
CPython 3 support
Improve compatibility with C extensions
NumPyPy
Multi-threading support
Project milestones
2008 Django support
2010 First JIT-compiler
2011 Compatibility with CPython 2.7
2014 Basic ARM support
CPython 3 support
Improve compatibility with C extensions
NumPyPy
Multi-threading support
PyPy STM
10 loops, best of 3: 1.2 sec per loop10 loops, best of 3: 822 msec per loop
from threading import Thread
def count(n): while n > 0: n -= 1
def run(): t1 = Thread(target=count, args=(10000000,)) t1.start() t2 = Thread(target=count, args=(10000000,)) t2.start() t1.join(); t2.join()
def count(n): while n > 0: n -= 1
def run(): count(10000000) count(10000000)
Inside the Python GIL - David Beazley
Conclusion
…already awesome for sequential tasks
…gradually improving parallel performance
…a very important Python project
PyPy is…
Further readingPython 3 Performance
https://speakerdeck.com/pyconslides/python-3-dot-3-trust-me-its-better-than-python-2-dot-7-by-dr-brett-cannon
https://www.youtube.com/watch?v=UJPdhx5zTaw
Further readingRPython
http://tratt.net/laurie/blog/entries/fast_enough_vms_in_fast_enough_time
Further readingPyPy STM
http://pypy.readthedocs.org/en/latest/stm.html
http://morepypy.blogspot.de/
Demo code from http://www.ripton.net/blog/?p=104
Blueprints provided by Marcel Douwe Dekker under Creative Commons. https://www.flickr.com/photos/marceldouwedekker/7564782310/in/photostream/ Blueprint by Joy Oil Co Ltd (http://commons.wikimedia.org/wiki/File:Joy_Oil_gas_station_blueprints.jpg)
Credits