Slide 1

Slide 1 text

PyPy The state of 2015-04 @matthiasendler

Slide 2

Slide 2 text

Why PyPy? "Scientific American" Vol. XXXVI, No. 19, May 12, 1877 p.294 New York: Munn &Company (Publisher)

Slide 3

Slide 3 text

Why PyPy? What keeps you from using switching to Python 3?

Slide 4

Slide 4 text

Why PyPy? No more support for older versions Major bugfixes New language features Improved performance Incentives to switch to a new language version

Slide 5

Slide 5 text

Why PyPy? More speed means… less servers new possibilities

Slide 6

Slide 6 text

Why PyPy? Two ways to speed up a scripting language •Improve the implementation •Improve the runtime

Slide 7

Slide 7 text

Why PyPy? Two ways to speed up a scripting language •Improve the implementation •Improve the runtime

Slide 8

Slide 8 text

Why PyPy? Warning:
 Benchmarks are always error-prone.
 Always measure yourself!
 This is just a trend.

Slide 9

Slide 9 text

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%

Slide 10

Slide 10 text

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%

Slide 11

Slide 11 text

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%

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Why PyPy? Two ways to speed up a scripting language •Improve the implementation •Improve the runtime

Slide 15

Slide 15 text

Why PyPy? Ruby Rubinius PyPy HHVM Python PHP

Slide 16

Slide 16 text

About PyPy Cottrell & Babcock's air spring printing press Source: Scientific American, June 22, 1872

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

PyPy implementation Tracing JIT compiler http:/ /www.aosabook.org/en/pypy.html Your Python program

Slide 21

Slide 21 text

PyPy implementation Tracing JIT compiler http:/ /www.aosabook.org/en/pypy.html „Hot“ loop

Slide 22

Slide 22 text

PyPy implementation Tracing JIT compiler http:/ /www.aosabook.org/en/pypy.html can_enter_jit() jit_merge_point()

Slide 23

Slide 23 text

PyPy implementation Tracing JIT compiler http:/ /www.aosabook.org/en/pypy.html Optimized machine code

Slide 24

Slide 24 text

PyPy Speed speed.pypy.org

Slide 25

Slide 25 text

Upright boring machine, 1872 Source: Scientific American, Nov 23,1872 Demo

Slide 26

Slide 26 text

The future of PyPy Berryman's steam trap, 1872 Source: Scientific American, Sept 14,1872

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

PyPy STM

Slide 30

Slide 30 text

PyPy STM http://dabeaz.com/GIL/gilvis/ GIL locking

Slide 31

Slide 31 text

PyPy STM 10 loops, best of 3: 1.2 sec per loop 10 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

Slide 32

Slide 32 text

PyPy STM T1 T2 T3 x y z Thread 1 Shared memory T1 T2 T3 Thread 2

Slide 33

Slide 33 text

PyPy STM T1 T2 T3 x = 3 x y z Thread 1 Shared memory T1 T2 T3 y=5 Thread 2

Slide 34

Slide 34 text

PyPy STM T1 T2 T3 3 5 x y z Thread 1 Shared memory T1 T2 T3 Thread 2

Slide 35

Slide 35 text

PyPy STM T1 T2 T3 x = 18
 y= 12 3 5 x y z Thread 1 Shared memory T1 T2 T3 x = 2 Thread 2

Slide 36

Slide 36 text

PyPy STM T1 T2 T3 2 5 x y z Thread 1 Shared memory T1 T2 T3 Thread 2

Slide 37

Slide 37 text

Lathrop's sewing machine, 1872 Source: Scientific American, Oct 26,1872 Demo

Slide 38

Slide 38 text

Conclusion …already awesome for sequential tasks …gradually improving parallel performance …a very important Python project PyPy is…

Slide 39

Slide 39 text

Further reading Python 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

Slide 40

Slide 40 text

Further reading RPython http:/ /tratt.net/laurie/blog/entries/ fast_enough_vms_in_fast_enough_time

Slide 41

Slide 41 text

Further reading PyPy STM http:/ /pypy.readthedocs.org/en/latest/stm.html http:/ /morepypy.blogspot.de/ Demo code from http:/ /www.ripton.net/blog/?p=104

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

by Simon Child and by Luis Prado by Océan Bussard by Luis Rodrigues by Mister Pixel by Alexander Wiefel by Darin S by spotted paint 
 The icons used in this presentation were downloaded from The Noun Project.
 Thanks to the following artists: