Author: Maciej Fijalkowski <fij...@gmail.com> Branch: extradoc Changeset: r4868:53b9c87e31e9 Date: 2012-10-17 09:52 +0200 http://bitbucket.org/pypy/extradoc/changeset/53b9c87e31e9/
Log: merge diff too long, truncating to 2000 out of 11558 lines diff --git a/blog/draft/py3k-status-update-6.rst b/blog/draft/py3k-status-update-6.rst --- a/blog/draft/py3k-status-update-6.rst +++ b/blog/draft/py3k-status-update-6.rst @@ -58,7 +58,7 @@ Finally, I would like to thank Amaury Forgeot d'Arc and Ariel Ben-Yehuda for their work on the branch; among other things, Amaury recently worked on ``cpyext`` and on the PyPy ``_cffi_backend``, while Ariel submitted a patch to -implement `PEP 3138`. +implement `PEP 3138`_. .. _donated: http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html .. _`py3k proposal`: http://pypy.org/py3donate.html diff --git a/planning/2.0/todo.txt b/planning/2.0/todo.txt new file mode 100644 --- /dev/null +++ b/planning/2.0/todo.txt @@ -0,0 +1,10 @@ +Things to do +============ + +* Fix ctypes performnace for 2.0 beta +* result-in-resop (maybe) +* NumPy speed for 2.0 final +* cffi on pypy on windows +* raw malloc virtuals +* bug tracker gardening +* all green buildbots diff --git a/planning/todo.txt b/planning/todo.txt deleted file mode 100644 --- a/planning/todo.txt +++ /dev/null @@ -1,13 +0,0 @@ -PyPy todo areas -================== - -This is a todo list that lists various areas of PyPy that should be cleaned up -(for whatever reason: less mess, less code duplication, etc). - -translation toolchain ---------------------- - - - clean up the tangle of including headers in the C backend - - make approach for loading modules more sane, mixedmodule capture - too many platform dependencies especially for pypy-cli - diff --git a/talk/dls2012/presentation/talk.tex b/talk/dls2012/presentation/talk.tex new file mode 100644 --- /dev/null +++ b/talk/dls2012/presentation/talk.tex @@ -0,0 +1,144 @@ +\documentclass[utf8x]{beamer} + +% This file is a solution template for: + +% - Talk at a conference/colloquium. +% - Talk length is about 20min. +% - Style is ornate. + +\mode<presentation> +{ + \usetheme{Warsaw} + % or ... + + %\setbeamercovered{transparent} + % or whatever (possibly just delete it) +} + + +\usepackage[english]{babel} +\usepackage{listings} +\usepackage{ulem} +\usepackage{color} +\usepackage{alltt} + +\usepackage[utf8x]{inputenc} + + +\newcommand\redsout[1]{{\color{red}\sout{\hbox{\color{black}{#1}}}}} + +% or whatever + +% Or whatever. Note that the encoding and the font should match. If T1 +% does not look nice, try deleting the line with the fontenc. + + +\title{Loop-Aware Optimizations in PyPy’s Tracing JIT} + +\author[Ardö, Bolz, Fijałkowski]{Håkan Ardö$^1$ \and \emph{Carl Friedrich Bolz}$^2$ \and Maciej Fijałkowski} +% - Give the names in the same order as the appear in the paper. +% - Use the \inst{?} command only if the authors have different +% affiliation. + +\institute[Lund, Düsseldorf]{ +$^1$Centre for Mathematical Sciences, Lund University \and +$^2$Heinrich-Heine-Universität Düsseldorf, STUPS Group, Germany +} + +\date{2012 DLS, 22nd of October, 2012} +% - Either use conference name or its abbreviation. +% - Not really informative to the audience, more for people (including +% yourself) who are reading the slides online + + +% If you have a file called "university-logo-filename.xxx", where xxx +% is a graphic format that can be processed by latex or pdflatex, +% resp., then you can add a logo as follows: + + + + +% Delete this, if you do not want the table of contents to pop up at +% the beginning of each subsection: +%\AtBeginSubsection[] +%{ +% \begin{frame}<beamer> +% \frametitle{Outline} +% \tableofcontents[currentsection,currentsubsection] +% \end{frame} +%} + + +% If you wish to uncover everything in a step-wise fashion, uncomment +% the following command: + +%\beamerdefaultoverlayspecification{<+->} + + +\begin{document} + +\begin{frame} + \titlepage +\end{frame} + +\begin{frame} + \frametitle{Why do tracing JITs work?} + \begin{itemize} + \item They are good at selecting interesting and common code paths + \item both through user program and through the runtime + \item the latter is particularly important for dynamic languages + \pause + \item traces are trivial to optimize + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Optimizing traces} + \begin{itemize} + \item Traces trivial to optimize, because there's no control flow + \item most optimizations are one forward pass + \item optimizers are often like symbolic executors + \item can do optimizations that are untractable with full control flow + \item XXX example + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Problems with this approach} + \begin{itemize} + \item most traces actually are loops + \item naive foward passes ignore this bit of control flow optimization available + \item how to fix that without sacrifing simplicity? + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Idea for solution} + \begin{itemize} + \item idea first proposed and implemented in LuaJIT by Mike Pall + \item this talk presents the implementation of the same approach in RPython's tracing JIT + \end{itemize} + \pause + \begin{block}{Approach} + \begin{itemize} + \item do a pre-processing step on the traces + \item apply the unchanged forward-pass optimizations + \item do some post-processing + \item pre-processing is done in such a way that the normal optimizations become loop-aware + \item intuition: give the optimizations a second iteration of context to work with + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \frametitle{Pre-processing the loops} + \begin{itemize} + \item pre-processing does loop unrolling + \item peels off one iteration of the loop, duplicating the trace + \item the optimizations optimize both iterations together + \item this yields loop-invariant code motion and related optimizations + \end{itemize} +\end{frame} + + +\end{document} diff --git a/talk/ep2012/jit/abstract.rst b/talk/pycon-uk-2012/abstract.rst copy from talk/ep2012/jit/abstract.rst copy to talk/pycon-uk-2012/abstract.rst diff --git a/talk/ep2012/jit/talk/Makefile b/talk/pycon-uk-2012/talk/Makefile copy from talk/ep2012/jit/talk/Makefile copy to talk/pycon-uk-2012/talk/Makefile diff --git a/talk/pycon-uk-2012/talk/author.latex b/talk/pycon-uk-2012/talk/author.latex new file mode 100644 --- /dev/null +++ b/talk/pycon-uk-2012/talk/author.latex @@ -0,0 +1,8 @@ +\definecolor{rrblitbackground}{rgb}{0.0, 0.0, 0.0} + +\title[PyPy JIT under the hood]{PyPy JIT under the hood} +\author[antocuni] +{Antonio Cuni} + +\institute{PyCon UK 2012} +\date{September 28, 2012} diff --git a/talk/ep2012/jit/talk/beamerdefs.txt b/talk/pycon-uk-2012/talk/beamerdefs.txt copy from talk/ep2012/jit/talk/beamerdefs.txt copy to talk/pycon-uk-2012/talk/beamerdefs.txt diff --git a/talk/ep2012/jit/talk/diagrams/architecture.svg b/talk/pycon-uk-2012/talk/diagrams/architecture.svg copy from talk/ep2012/jit/talk/diagrams/architecture.svg copy to talk/pycon-uk-2012/talk/diagrams/architecture.svg diff --git a/talk/ep2012/jit/talk/diagrams/pypytrace.svg b/talk/pycon-uk-2012/talk/diagrams/pypytrace.svg copy from talk/ep2012/jit/talk/diagrams/pypytrace.svg copy to talk/pycon-uk-2012/talk/diagrams/pypytrace.svg diff --git a/talk/ep2012/jit/talk/diagrams/trace.svg b/talk/pycon-uk-2012/talk/diagrams/trace.svg copy from talk/ep2012/jit/talk/diagrams/trace.svg copy to talk/pycon-uk-2012/talk/diagrams/trace.svg diff --git a/talk/ep2012/jit/talk/diagrams/tracetree.svg b/talk/pycon-uk-2012/talk/diagrams/tracetree.svg copy from talk/ep2012/jit/talk/diagrams/tracetree.svg copy to talk/pycon-uk-2012/talk/diagrams/tracetree.svg diff --git a/talk/ep2012/jit/talk/diagrams/tracing-phases.svg b/talk/pycon-uk-2012/talk/diagrams/tracing-phases.svg copy from talk/ep2012/jit/talk/diagrams/tracing-phases.svg copy to talk/pycon-uk-2012/talk/diagrams/tracing-phases.svg diff --git a/talk/ep2012/jit/talk/stylesheet.latex b/talk/pycon-uk-2012/talk/stylesheet.latex copy from talk/ep2012/jit/talk/stylesheet.latex copy to talk/pycon-uk-2012/talk/stylesheet.latex diff --git a/talk/pycon-uk-2012/talk/talk.pdf.info b/talk/pycon-uk-2012/talk/talk.pdf.info new file mode 100644 --- /dev/null +++ b/talk/pycon-uk-2012/talk/talk.pdf.info @@ -0,0 +1,11 @@ +AvailableTransitions=[Crossfade] +TransitionDuration = 100 +EstimatedDuration = 60*60 # in seconds +MinutesOnly = True + +PageProps = { + 1: { + 'reset': FirstTimeOnly, + 'progress': False, + }, +} diff --git a/talk/pycon-uk-2012/talk/talk.rst b/talk/pycon-uk-2012/talk/talk.rst new file mode 100644 --- /dev/null +++ b/talk/pycon-uk-2012/talk/talk.rst @@ -0,0 +1,587 @@ +.. include:: beamerdefs.txt + +================================ +PyPy JIT under the hood +================================ + +About me +--------- + +- PyPy core dev + +- PyPy py3k tech leader + +- ``pdb++``, ``fancycompleter``, ... + +- Consultant, trainer + +- You can hire me :-) + +- http://antocuni.eu + + +About this talk +---------------- + +* What is PyPy? (in 30 seconds) + +* Overview of tracing JITs + +* The PyPy JIT generator + + +Part 0: What is PyPy? +---------------------- + +* RPython toolchain + + - subset of Python + + - ideal for writing VMs + + - JIT & GC for free + +* Python interpreter + + - written in RPython + +* Whatever (dynamic) language you want + + - smalltalk, prolog, javascript, ... + + +Part 1 +------ + +**Overview of tracing JITs** + +Compilers +--------- + +* When? + + - Batch or Ahead Of Time + + - Just In Time + +|pause| + +* How? + + - Static + + - Dynamic or Adaptive + +|pause| + +* What? + + - Method-based compiler + + - Tracing compiler + +|pause| + +* PyPy: JIT, Dynamic, Tracing + + +Assumptions +----------- + +* Pareto Principle (80-20 rule) + + - the 20% of the program accounts for the 80% of the runtime + + - **hot-spots** + +* Fast Path principle + + - optimize only what is necessary + + - fall back for uncommon cases + +|pause| + +* Most of runtime spent in **loops** + +* Always the same code paths (likely) + + +Tracing JIT +----------- + +* Interpret the program as usual + +* Detect **hot** loops + +* Tracing phase + + - **linear** trace + +* Compiling + +* Execute + + - guards to ensure correctness + +* Profit :-) + + +Tracing JIT phases +------------------- + +.. animage:: diagrams/tracing-phases-p*.pdf + :align: center + :scale: 100% + + +Tracing Example (1) +-------------------- + +.. we use java instead of RPython to avoid confusion with applevel Python + + +|scriptsize| +|example<| |small| java |end_small| |>| + +.. sourcecode:: java + + interface Operation { + int DoSomething(int x); + } + class IncrOrDecr implements Operation { + public int DoSomething(int x) { + if (x < 0) return x-1; + else return x+1; + } + } + class tracing { + public static void main(String argv[]) { + int N = 100; + int i = 0; + Operation op = new IncrOrDecr(); + while (i < N) { + i = op.DoSomething(i); + } + System.out.println(i); + } + } + +|end_example| +|end_scriptsize| + + +Tracing Example (2) +-------------------- + +|scriptsize| +|column1| +|example<| |small| Java bytecode |end_small| |>| + +.. sourcecode:: java + + class IncrOrDecr { + ... + public DoSomething(I)I + ILOAD 1 + IFGE LABEL_0 + ILOAD 1 + ICONST_1 + ISUB + IRETURN + LABEL_0 + ILOAD 1 + ICONST_1 + IADD + IRETURN + } + +|end_example| + +|pause| + +|column2| +|example<| |small| Java bytecode |end_small| |>| + +.. sourcecode:: java + + class tracing { + ... + public static main( + [Ljava/lang/String;)V + ... + LABEL_0 + ILOAD 2 + ILOAD 1 + IF_ICMPGE LABEL_1 + ALOAD 3 + ILOAD 2 + INVOKEINTERFACE + Operation.DoSomething (I)I + ISTORE 2 + GOTO LABEL_0 + LABEL_1 + ... + } + +|end_example| +|end_columns| +|end_scriptsize| + + +Tracing example (3) +------------------- + +.. animage:: diagrams/trace-p*.pdf + :align: center + :scale: 80% + + +Trace trees (1) +--------------- + +|scriptsize| +|example<| |small| tracetree.java |end_small| |>| + +.. sourcecode:: java + + public static void trace_trees() { + int a = 0; + int i = 0; + int N = 100; + + while(i < N) { + if (i%2 == 0) + a++; + else + a*=2; + i++; + } + } + +|end_example| +|end_scriptsize| + +Trace trees (2) +--------------- + +.. animage:: diagrams/tracetree-p*.pdf + :align: center + :scale: 34% + + +Part 2 +------ + +**The PyPy JIT generator** + +General architecture +--------------------- + +.. animage:: diagrams/architecture-p*.pdf + :align: center + :scale: 24% + + +PyPy trace example +------------------- + +.. animage:: diagrams/pypytrace-p*.pdf + :align: center + :scale: 40% + + +PyPy optimizer +--------------- + +- intbounds + +- constant folding / pure operations + +- virtuals + +- string optimizations + +- heap (multiple get/setfield, etc) + +- ffi + +- unroll + + +Intbound optimization (1) +------------------------- + +|example<| |small| intbound.py |end_small| |>| + +.. sourcecode:: python + + def fn(): + i = 0 + while i < 5000: + i += 2 + return i + +|end_example| + +Intbound optimization (2) +-------------------------- + +|scriptsize| +|column1| +|example<| |small| unoptimized |end_small| |>| + +.. sourcecode:: python + + ... + i17 = int_lt(i15, 5000) + guard_true(i17) + i19 = int_add_ovf(i15, 2) + guard_no_overflow() + ... + +|end_example| + +|pause| + +|column2| +|example<| |small| optimized |end_small| |>| + +.. sourcecode:: python + + ... + i17 = int_lt(i15, 5000) + guard_true(i17) + i19 = int_add(i15, 2) + ... + +|end_example| +|end_columns| +|end_scriptsize| + +|pause| + +* It works **often** + +* array bound checking + +* intbound info propagates all over the trace + + +Virtuals (1) +------------- + +|example<| |small| virtuals.py |end_small| |>| + +.. sourcecode:: python + + def fn(): + i = 0 + while i < 5000: + i += 2 + return i + +|end_example| + + +Virtuals (2) +------------ + +|scriptsize| +|column1| +|example<| |small| unoptimized |end_small| |>| + +.. sourcecode:: python + + ... + guard_class(p0, W_IntObject) + i1 = getfield_pure(p0, 'intval') + i2 = int_add(i1, 2) + p3 = new(W_IntObject) + setfield_gc(p3, i2, 'intval') + ... + +|end_example| + +|pause| + +|column2| +|example<| |small| optimized |end_small| |>| + +.. sourcecode:: python + + ... + i2 = int_add(i1, 2) + ... + +|end_example| +|end_columns| +|end_scriptsize| + +|pause| + +* The most important optimization (TM) + +* It works both inside the trace and across the loop + +* It works for tons of cases + + - e.g. function frames + + +Constant folding (1) +--------------------- + +|example<| |small| constfold.py |end_small| |>| + +.. sourcecode:: python + + def fn(): + i = 0 + while i < 5000: + i += 2 + return i + +|end_example| + + +Constant folding (2) +-------------------- + +|scriptsize| +|column1| +|example<| |small| unoptimized |end_small| |>| + +.. sourcecode:: python + + ... + i1 = getfield_pure(p0, 'intval') + i2 = getfield_pure(<W_Int(2)>, + 'intval') + i3 = int_add(i1, i2) + ... + +|end_example| + +|pause| + +|column2| +|example<| |small| optimized |end_small| |>| + +.. sourcecode:: python + + ... + i1 = getfield_pure(p0, 'intval') + i3 = int_add(i1, 2) + ... + +|end_example| +|end_columns| +|end_scriptsize| + +|pause| + +* It "finishes the job" + +* Works well together with other optimizations (e.g. virtuals) + +* It also does "normal, boring, static" constant-folding + + +Out of line guards (1) +----------------------- + +|example<| |small| outoflineguards.py |end_small| |>| + +.. sourcecode:: python + + N = 2 + def fn(): + i = 0 + while i < 5000: + i += N + return i + +|end_example| + + +Out of line guards (2) +---------------------- + +|scriptsize| +|column1| +|example<| |small| unoptimized |end_small| |>| + +.. sourcecode:: python + + ... + quasiimmut_field(<Cell>, 'val') + guard_not_invalidated() + p0 = getfield_gc(<Cell>, 'val') + ... + i2 = getfield_pure(p0, 'intval') + i3 = int_add(i1, i2) + +|end_example| + +|pause| + +|column2| +|example<| |small| optimized |end_small| |>| + +.. sourcecode:: python + + ... + guard_not_invalidated() + ... + i3 = int_add(i1, 2) + ... + +|end_example| +|end_columns| +|end_scriptsize| + +|pause| + +* Python is too dynamic, but we don't care :-) + +* No overhead in assembler code + +* Used a bit "everywhere" + +* Credits to Mark Shannon + + - for the name :-) + +Guards +------- + +- guard_true + +- guard_false + +- guard_class + +- guard_no_overflow + +- **guard_value** + +Promotion +--------- + +- guard_value + +- specialize code + +- make sure not to **overspecialize** + +- example: type of objects + +- example: function code objects, ... + +Conclusion +----------- + +- PyPy is cool :-) + +- Any question? diff --git a/talk/ep2012/jit/talk/title.latex b/talk/pycon-uk-2012/talk/title.latex copy from talk/ep2012/jit/talk/title.latex copy to talk/pycon-uk-2012/talk/title.latex diff --git a/talk/googlezurich2012/Makefile b/talk/pyconza2012/stm-talk/Makefile copy from talk/googlezurich2012/Makefile copy to talk/pyconza2012/stm-talk/Makefile diff --git a/talk/pyconza2012/stm-talk/author.latex b/talk/pyconza2012/stm-talk/author.latex new file mode 100644 --- /dev/null +++ b/talk/pyconza2012/stm-talk/author.latex @@ -0,0 +1,8 @@ +\definecolor{rrblitbackground}{rgb}{0.0, 0.0, 0.0} + +\title[PyPy in Production]{PyPy} +\author[Armin Rigo] +{Armin Rigo} + +\institute{PyCon ZA 2012} +\date{October 4, 2012} diff --git a/talk/googlezurich2012/beamerdefs.txt b/talk/pyconza2012/stm-talk/beamerdefs.txt copy from talk/googlezurich2012/beamerdefs.txt copy to talk/pyconza2012/stm-talk/beamerdefs.txt --- a/talk/googlezurich2012/beamerdefs.txt +++ b/talk/pyconza2012/stm-talk/beamerdefs.txt @@ -89,7 +89,7 @@ -.. |snake| image:: ../img/py-web-new.png +.. |snake| image:: ../../img/py-web-new.png :scale: 15% diff --git a/talk/pyconza2012/stm-talk/demo1.py b/talk/pyconza2012/stm-talk/demo1.py new file mode 100644 --- /dev/null +++ b/talk/pyconza2012/stm-talk/demo1.py @@ -0,0 +1,19 @@ + +class Number(object): + + def __init__(self, num): + self.num = num + + def __add__(self, other): + return Number(self.num + other.num) + + def __invert__(self): + return Number(~self.num) + +def foo(n): + total = Number(0) + for i in range(n): + total += Number(i) + total += ~ Number(i) + return total.num + diff --git a/talk/googlezurich2012/standards.png b/talk/pyconza2012/stm-talk/standards.png copy from talk/googlezurich2012/standards.png copy to talk/pyconza2012/stm-talk/standards.png diff --git a/talk/googlezurich2012/stylesheet.latex b/talk/pyconza2012/stm-talk/stylesheet.latex copy from talk/googlezurich2012/stylesheet.latex copy to talk/pyconza2012/stm-talk/stylesheet.latex diff --git a/talk/pyconza2012/stm-talk/talk.rst b/talk/pyconza2012/stm-talk/talk.rst new file mode 100644 --- /dev/null +++ b/talk/pyconza2012/stm-talk/talk.rst @@ -0,0 +1,205 @@ +.. include:: beamerdefs.txt + +============================================================ +PyPy +============================================================ + + +PyPy is... +-------------------------- + +* Another Python interpreter + +* with a JIT compiler + + +PyPy was... +------------------- + +* Around since 2003 + +* (advertised as) production ready since December 2010 + + - release 1.4 + +* Funding + + - EU FP6 programme + + - Eurostars programme + + - donations + + - ... + + +PyPy 1.9: current status +------------------------ + +* Faster + + - **1.7x** than 1.5 (Summer 2011) + + - **2.2x** than 1.4 (December 2010) + + - **5.5x** than CPython + +* Implements Python 2.7.3 + +* Many more "PyPy-friendly" programs than before + +* Packaging + + - |scriptsize| Debian, Ubuntu, Fedora, Homebrew, Gentoo, ArchLinux, ... |end_scriptsize| + + - |scriptsize| Windows (32bit only), OS X |end_scriptsize| + +* C extension compatibility + + - runs (big part of) **PyOpenSSL** and **lxml** + + +PyPy organization +----------------- + +* Part of SFC -- Software Freedom Conservancy + + - Bradley successfully fighting U.S. bureaucracy + + - we are happy about it + + +* Funding model + + - py3k, numpy, STM + + - more than 100'000$ in donations + + - from individuals, large companies and the PSF + + +PyPy's JIT compiler +------------------- + +* Removes abstraction + +* Almost never gives up + +* x86-32, x86-64, ARMv7, (POWER64) + +* (Works with other languages) + + +Real world applications +----------------------- + +* Positive feedback + +* http://speed.pypy.org/ + + + +py3k +------------------------ + +* ``py3k`` branch in mercurial + + - developed in parallel + + - Python 3 written in Python 2 + +* Focus on correctness + +* Dropped some interpreter optimizations for now + +* First 90% done, remaining 90% not done + +* Majority of the funds by Google + + +NumPy +----- + +* progress going slowly + +* multi dimensional arrays, broadcasting, fancy indexing + +* all dtypes, except complex, strings and objects + +* good results for performance + + +STM +--------------------------- + +* Software Transactional Memory + +* "Remove the GIL" + +* But also, new models (better than threads) + + + +Calling C +--------- + +.. image:: standards.png + :scale: 60% + :align: center + +Calling C landscape +------------------- + +* CPython C extensions + +* SWIG, SIP, wrapper generators + +* ctypes + +* Cython + +* CFFI (our new thing) + +CFFI +---------- + +|scriptsize| +|example<| Example |>| + + .. sourcecode:: pycon + + >>> from cffi import FFI + >>> ffi = FFI() + >>> ffi.cdef(""" + ... int printf(const char *format, ...); + ... """) + >>> C = ffi.dlopen(None) + >>> arg = ffi.new("char[]", "world") + >>> C.printf("hi there, %s!\n", arg) + hi there, world! + +|end_example| +|end_scriptsize| + +CFFI +---- + +* Many more examples + +* Including macro calls and most subtleties of C + +* http://cffi.readthedocs.org + + +STM +--- + + +Conclusion +---------- + +* Try out PyPy on real code + +* http://pypy.org/ + +* Thank you! diff --git a/talk/googlezurich2012/title.latex b/talk/pyconza2012/stm-talk/title.latex copy from talk/googlezurich2012/title.latex copy to talk/pyconza2012/stm-talk/title.latex --- a/talk/googlezurich2012/title.latex +++ b/talk/pyconza2012/stm-talk/title.latex @@ -1,5 +1,5 @@ \begin{titlepage} \begin{figure}[h] -\includegraphics[width=60px]{../img/py-web-new.png} +\includegraphics[width=60px]{../../img/py-web-new.png} \end{figure} \end{titlepage} diff --git a/talk/vmil2012/Makefile b/talk/vmil2012/Makefile --- a/talk/vmil2012/Makefile +++ b/talk/vmil2012/Makefile @@ -42,6 +42,9 @@ logs:: tool/run_benchmarks.sh +slides: + $(MAKE) -C presentation + clean: rm -f *.aux *.bbl *.blg *.log *.tdo rm -f *.pdf diff --git a/talk/vmil2012/presentation/Makefile b/talk/vmil2012/presentation/Makefile new file mode 100644 --- /dev/null +++ b/talk/vmil2012/presentation/Makefile @@ -0,0 +1,16 @@ +talk.pdf: talk.tex figures/data.tex figures/go_data.tex tool/data.py + pdflatex talk.tex &> /dev/null + +UNAME := $(shell "uname") +view: talk.pdf +ifeq ($(UNAME), Linux) + evince talk.pdf & +endif +ifeq ($(UNAME), Darwin) + open talk.pdf & +endif + + +figures/go_data.tex: tool/data.py +figures/data.tex: tool/data.py + python tool/data.py diff --git a/talk/vmil2012/presentation/charts.ods b/talk/vmil2012/presentation/charts.ods new file mode 100644 index 0000000000000000000000000000000000000000..94300512c367f6ea2553953adde39281e950b27c GIT binary patch [cut] diff --git a/talk/vmil2012/presentation/figures/bridge_compiled.graffle b/talk/vmil2012/presentation/figures/bridge_compiled.graffle new file mode 100644 --- /dev/null +++ b/talk/vmil2012/presentation/figures/bridge_compiled.graffle @@ -0,0 +1,1457 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>ActiveLayerIndex</key> + <integer>0</integer> + <key>ApplicationVersion</key> + <array> + <string>com.omnigroup.OmniGrafflePro</string> + <string>139.16.0.171715</string> + </array> + <key>AutoAdjust</key> + <true/> + <key>BackgroundGraphic</key> + <dict> + <key>Bounds</key> + <string>{{0, 0}, {1118, 783}}</string> + <key>Class</key> + <string>SolidGraphic</string> + <key>ID</key> + <integer>2</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + </dict> + <key>BaseZoom</key> + <integer>0</integer> + <key>CanvasOrigin</key> + <string>{0, 0}</string> + <key>ColumnAlign</key> + <integer>1</integer> + <key>ColumnSpacing</key> + <real>36</real> + <key>CreationDate</key> + <string>2012-07-24 10:50:56 +0000</string> + <key>Creator</key> + <string>David Schneider</string> + <key>DisplayScale</key> + <string>1.000 cm = 1.000 cm</string> + <key>GraphDocumentVersion</key> + <integer>8</integer> + <key>GraphicsList</key> + <array> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>16</integer> + <key>Info</key> + <integer>1</integer> + </dict> + <key>ID</key> + <integer>63</integer> + <key>Points</key> + <array> + <string>{427, 250}</string> + <string>{328, 162}</string> + <string>{188, 113}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>36</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>16</integer> + <key>Info</key> + <integer>1</integer> + </dict> + <key>ID</key> + <integer>62</integer> + <key>Points</key> + <array> + <string>{188, 250}</string> + <string>{206, 184}</string> + <string>{188, 113}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>27</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>42</integer> + </dict> + <key>ID</key> + <integer>61</integer> + <key>Points</key> + <array> + <string>{83, 205}</string> + <string>{42, 264.875}</string> + <string>{83, 334.75}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>24</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>Group</string> + <key>Graphics</key> + <array> + <dict> + <key>Bounds</key> + <string>{{232.00001379686913, 294.74999999999989}, {150.99998620313085, 93.5}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>59</integer> + <key>Magnets</key> + <array> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Monaco;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs20 \cf0 read backend map\ +decode resume data\ +retrieve stack and register values\ +...\ +return to interpreter}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{232, 261.25}, {151, 33.5}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>60</integer> + <key>Magnets</key> + <array> + <string>{0, 1}</string> + <string>{0, -1}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 compensation code}</string> + </dict> + </dict> + </array> + <key>ID</key> + <integer>58</integer> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>40</integer> + </dict> + <key>ID</key> + <integer>56</integer> + <key>Points</key> + <array> + <string>{531, 333.75}</string> + <string>{555, 351}</string> + <string>{580.89735689328165, 373.74999618530273}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>Pattern</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>44</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>41</integer> + </dict> + <key>ID</key> + <integer>55</integer> + <key>Points</key> + <array> + <string>{531, 301.25}</string> + <string>{580, 278}</string> + <string>{580.415709839653, 277.88418648722006}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>Pattern</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>43</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>39</integer> + </dict> + <key>ID</key> + <integer>54</integer> + <key>Points</key> + <array> + <string>{82.536736108577472, 339.10023442863826}</string> + <string>{52, 351.5}</string> + <string>{34.428503435249759, 361.50264298468693}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>Pattern</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>42</integer> + <key>Info</key> + <integer>2</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>38</integer> + </dict> + <key>ID</key> + <integer>53</integer> + <key>Points</key> + <array> + <string>{83, 301.25}</string> + <string>{60, 286}</string> + <string>{33.993974985969523, 268.75}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>Pattern</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>37</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>44</integer> + </dict> + <key>ID</key> + <integer>52</integer> + <key>Points</key> + <array> + <string>{532, 205}</string> + <string>{566, 277}</string> + <string>{531, 333.75}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>34</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>43</integer> + </dict> + <key>ID</key> + <integer>51</integer> + <key>Points</key> + <array> + <string>{532, 159}</string> + <string>{569, 211}</string> + <string>{531, 301.25}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>32</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>59</integer> + </dict> + <key>ID</key> + <integer>50</integer> + <key>Points</key> + <array> + <string>{428, 301.25}</string> + <string>{404, 330}</string> + <string>{383, 341.49999999999989}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>43</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>59</integer> + </dict> + <key>ID</key> + <integer>49</integer> + <key>Points</key> + <array> + <string>{479.5, 350.5}</string> + <string>{427, 385.25}</string> + <string>{383, 341.49999999999989}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>44</integer> + <key>Info</key> + <integer>1</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>59</integer> + </dict> + <key>ID</key> + <integer>48</integer> + <key>Points</key> + <array> + <string>{134.5, 351.5}</string> + <string>{186, 384}</string> + <string>{232.0000137968691, 341.49999999999989}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>42</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>59</integer> + </dict> + <key>ID</key> + <integer>47</integer> + <key>Points</key> + <array> + <string>{186, 301.25}</string> + <string>{211, 307}</string> + <string>{232.0000137968691, 341.49999999999989}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>37</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>37</integer> + </dict> + <key>ID</key> + <integer>45</integer> + <key>Points</key> + <array> + <string>{83, 159}</string> + <string>{42, 222}</string> + <string>{83, 301.25}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <true/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>18</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{428, 317}, {103, 33.5}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>44</integer> + <key>Magnets</key> + <array> + <string>{0, 1}</string> + <string>{0, -1}</string> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Trampoline #4}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{428, 284.5}, {103, 33.5}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>43</integer> + <key>Magnets</key> + <array> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Trampoline #3}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{83, 318}, {103, 33.5}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>42</integer> + <key>Magnets</key> + <array> + <string>{0, 1}</string> + <string>{0, -1}</string> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Trampoline #2}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{575.00001069962946, 254.25000040105692}, {85, 47}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>41</integer> + <key>Magnets</key> + <array> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Cloud</string> + <key>Style</key> + <dict/> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 backend map #3}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{575, 350.24999618530273}, {85, 47}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>40</integer> + <key>Magnets</key> + <array> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Cloud</string> + <key>Style</key> + <dict/> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 backend map #4}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{-46, 338.25}, {85, 47}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>39</integer> + <key>Magnets</key> + <array> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Cloud</string> + <key>Style</key> + <dict/> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 backend map #2}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{-46, 245.25}, {85, 47}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>38</integer> + <key>Magnets</key> + <array> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Cloud</string> + <key>Style</key> + <dict/> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 backend map #1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{83, 284.5}, {103, 33.5}}</string> + <key>Class</key> + <string>ShapedGraphic</string> _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit