Top Banner
PyPy The state of 2015-04 @matthiasendler
43
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The state of PyPy

PyPyThe state of

2015-04 @matthiasendler

Page 2: The state of PyPy

Why PyPy?

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

Page 3: The state of PyPy

Why PyPy?

What keeps you from using switching to Python 3?

Page 4: The state of PyPy

Why PyPy?

No more support for older versions

Major bugfixes

New language features

Improved performance

Incentives to switch to a new language version

Page 5: The state of PyPy

Why PyPy?

More speed means…

less servers

new possibilities

Page 6: The state of PyPy

Why PyPy?

Two ways to speed up a scripting language

• Improve the implementation

• Improve the runtime

Page 7: The state of PyPy

Why PyPy?

Two ways to speed up a scripting language

• Improve the implementation

• Improve the runtime

Page 8: The state of PyPy

Why PyPy?

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

Page 9: The state of PyPy

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%

Page 10: The state of PyPy

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%

Page 11: The state of PyPy

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%

Page 12: The state of PyPy

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

Page 13: The state of PyPy

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

Page 14: The state of PyPy

Why PyPy?

Two ways to speed up a scripting language

• Improve the implementation

• Improve the runtime

Page 15: The state of PyPy

Why PyPy?

Ruby Rubinius

PyPy

HHVM

Python

PHP

Page 16: The state of PyPy

About PyPy

Cottrell & Babcock's air spring printing pressSource: Scientific American, June 22, 1872

Page 17: The state of PyPy

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

Page 18: The state of PyPy

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

Page 19: The state of PyPy

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

Page 20: The state of PyPy

PyPy implementation

Tracing JIT compiler

http://www.aosabook.org/en/pypy.html

Your Python program

Page 21: The state of PyPy

PyPy implementation

Tracing JIT compiler

http://www.aosabook.org/en/pypy.html

„Hot“ loop

Page 22: The state of PyPy

PyPy implementation

Tracing JIT compiler

http://www.aosabook.org/en/pypy.html

can_enter_jit()

jit_merge_point()

Page 23: The state of PyPy

PyPy implementation

Tracing JIT compiler

http://www.aosabook.org/en/pypy.html

Optimized machine code

Page 24: The state of PyPy

PyPy Speed

speed.pypy.org

Page 25: The state of PyPy

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

Demo

Page 26: The state of PyPy

The future of PyPy

Berryman's steam trap, 1872Source: Scientific American, Sept 14,1872

Page 27: The state of PyPy

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

Page 28: The state of PyPy

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

Page 29: The state of PyPy

PyPy STM

Page 30: The state of PyPy

PyPy STM

http://dabeaz.com/GIL/gilvis/

GIL locking

Page 31: The state of PyPy

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

Page 32: The state of PyPy

PyPy STM

T1

T2

T3

xyz

Thread 1

Shared memoryT1

T2

T3

Thread 2

Page 33: The state of PyPy

PyPy STM

T1

T2

T3

x = 3

xyz

Thread 1

Shared memoryT1

T2

T3

y=5

Thread 2

Page 34: The state of PyPy

PyPy STM

T1

T2

T3

3

5

xyz

Thread 1

Shared memoryT1

T2

T3

Thread 2

Page 35: The state of PyPy

PyPy STM

T1

T2

T3

x = 18y= 12

3

5

xyz

Thread 1

Shared memoryT1

T2

T3

x = 2

Thread 2

Page 36: The state of PyPy

PyPy STM

T1

T2

T3

2

5

xyz

Thread 1

Shared memoryT1

T2

T3

Thread 2

Page 37: The state of PyPy

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

Demo

Page 38: The state of PyPy

Conclusion

…already awesome for sequential tasks

…gradually improving parallel performance

…a very important Python project

PyPy is…

Page 39: The state of PyPy

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

Page 40: The state of PyPy

Further readingRPython

http://tratt.net/laurie/blog/entries/fast_enough_vms_in_fast_enough_time

Page 41: The state of PyPy

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

Page 42: The state of PyPy

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

Page 43: The state of PyPy

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: