[pypy-commit] extradoc extradoc: merged upstream

alex_gaynor noreply at buildbot.pypy.org
Sat Mar 10 00:14:03 CET 2012


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: extradoc
Changeset: r4143:6a25e43bf857
Date: 2012-03-09 15:10 -0800
http://bitbucket.org/pypy/extradoc/changeset/6a25e43bf857/

Log:	merged upstream

diff --git a/planning/jit.txt b/planning/jit.txt
--- a/planning/jit.txt
+++ b/planning/jit.txt
@@ -74,6 +74,9 @@
 - optimize arraycopy also in the cases where one of the arrays is a virtual and
   short. This is seen a lot in translate.py
 
+- calling string equality does not automatically promote the argument to
+  a constant.
+
 
 PYTHON EXAMPLES
 ---------------
@@ -90,18 +93,6 @@
 BACKEND TASKS
 -------------
 
-- Look into avoiding double load of constant into register on 64bit.
-  In case we want to first read a value, increment it and store (for example),
-  we end up with double load of constant into register. Like:
-
-    movabs 0xsomemem,r11
-    mov    (r11), r10
-    add    0x1, r10
-    movabs 0xsomemem,r11
-    mov    r10, (r11)
-
-    (second movabs could have been avoided)
-
 - Look into this: http://paste.pocoo.org/show/450051/
   commenting out the first line of f makes ~30% improvement. This is due to
   the fact of reordering locals and valuestack when jumping across incompatible
diff --git a/talk/pycon2012/jit/slides.tex b/talk/pycon2012/jit/slides.tex
--- a/talk/pycon2012/jit/slides.tex
+++ b/talk/pycon2012/jit/slides.tex
@@ -207,6 +207,7 @@
 \begin{verbatim}
 # arguments to loop
 [p0, p1, p2, p3, i4, p5, i6, i7, p8, p9, p10, p11, p12, p13]
+# while i < limit
 #25 LOAD_FAST
 guard_value(i6, 3)
 guard_nonnull(p10)
@@ -228,12 +229,13 @@
 \begin{frame}[fragile]{JIT IR example - computing modulo}
 \footnotesize{
 \begin{verbatim}
+# n % i
 #37 LOAD_FAST
 guard_nonnull(p8)
 #40 LOAD_FAST
 #43 BINARY_MODULO
 guard_class(p8, W_IntObject)
-i22 = getfield_gc_pure(p8, <W_IntObject.inst_intval>)
+i22 = ((W_IntObject)p8)->inst_intval)
 i23 = int_is_zero(i18)
 guard_false(i23)
 i25 = int_eq(i22, -9223372036854775808)
@@ -245,7 +247,7 @@
 i31 = int_and(i18, i30)
 i32 = int_add(i26, i31)
 p34 = new_with_vtable(W_IntObject)
-setfield_gc(p34, i32, <W_IntObject.inst_intval>)
+((W_IntObject)p34)->inst_intval = i32
 \end{verbatim}
 }
 \end{frame}
@@ -253,6 +255,7 @@
 \begin{frame}[fragile]{JIT IR example - check modulo}
 \footnotesize{
 \begin{verbatim}
+# if <modulo> == 0:
 #44 LOAD_CONST
 guard_value(p3, ConstPtr(ptr35))
 #47 COMPARE_OP')
@@ -266,14 +269,15 @@
 \begin{frame}[fragile]{JIT IR example - finish loop}
 \footnotesize{
 \begin{verbatim}
+# i += 1
 #57 LOAD_FAST
 #60 LOAD_FAST
 #63 INPLACE_ADD
-i38 = getfield_gc_pure(p10, <W_IntObject.inst_intval>)
+i38 = ((W_IntObject)p10)->inst_intval
 i40 = int_add_ovf(i38, 1)
 guard_no_overflow()
 p42 = new_with_vtable(W_IntObject)
-setfield_gc(p42, i40, <W_IntObject.inst_intval>)
+((W_IntObject)p42)->inst_inval = i40
 #64 STORE_FAST
 #67 JUMP_ABSOLUTE
 \end{verbatim}
@@ -369,6 +373,16 @@
 \includegraphics[scale=.45]{instancemap.png}
 \end{frame}
 
+\begin{frame}{Conclusion}
+\begin{itemize}
+\item JIT generated from RPython description of interpreter
+\item metainterpreter traces hot loops and functions
+\item optimizations remove indirection
+\item adapt to new runtime information with bridges
+\item interpreter optimized for JIT with special hints and data structures
+\end{itemize}
+\end{frame}
+
 \begin{frame}[fragile]{Thank you}
 Questions?
 
@@ -376,8 +390,10 @@
 \begin{itemize}
 \item \#pypy on Freenode
 \item http://morepypy.blogspot.com
+\item PyPy sprint
+\item http://morepypy.blogspot.com
 \item pypy-dev at python.org
-\item The Architecture of Open Source Applications, Volume 2
+\item The Architecture of Open Source Applications, Volume 2 (coming out soon)
 \end{itemize}
 
 
diff --git a/talk/pycon2012/qualcomm/Makefile b/talk/pycon2012/qualcomm/Makefile
new file mode 100644
--- /dev/null
+++ b/talk/pycon2012/qualcomm/Makefile
@@ -0,0 +1,13 @@
+
+
+talk.pdf: talk.rst author.latex title.latex stylesheet.latex
+	rst2beamer.py --input-encoding=utf-8 --output-encoding=utf-8 --stylesheet=stylesheet.latex --documentoptions=14pt --theme=Warsaw talk.rst talk.latex || exit
+	sed 's/\\date{}/\\input{author.latex}/' -i talk.latex || exit
+	sed 's/\\maketitle/\\input{title.latex}/' -i talk.latex || exit
+	pdflatex talk.latex  || exit
+
+view: talk.pdf
+	evince talk.pdf &
+
+clean:
+	rm -f talk.pdf talk.latex
diff --git a/talk/pycon2012/qualcomm/author.latex b/talk/pycon2012/qualcomm/author.latex
new file mode 100644
--- /dev/null
+++ b/talk/pycon2012/qualcomm/author.latex
@@ -0,0 +1,7 @@
+\definecolor{rrblitbackground}{rgb}{0.0, 0.0, 0.0}
+
+\title[PyPy]{Writing VMs using PyPy}
+\author[fijal]{Maciej Fija&#322;kowski, Alex Gaynor, Armin Rigo}
+
+\institute{Qualcomm 2012}
+\date{8 March 2012}
diff --git a/talk/pycon2012/qualcomm/stylesheet.latex b/talk/pycon2012/qualcomm/stylesheet.latex
new file mode 100644
--- /dev/null
+++ b/talk/pycon2012/qualcomm/stylesheet.latex
@@ -0,0 +1,10 @@
+\usetheme{Warsaw}
+\setbeamercovered{transparent}
+\setbeamertemplate{navigation symbols}{}
+
+\definecolor{darkgreen}{rgb}{0, 0.5, 0.0}
+\newcommand{\docutilsrolegreen}[1]{\color{darkgreen}#1\normalcolor}
+\newcommand{\docutilsrolered}[1]{\color{red}#1\normalcolor}
+
+\newcommand{\green}[1]{\color{darkgreen}#1\normalcolor}
+\newcommand{\red}[1]{\color{red}#1\normalcolor}
diff --git a/talk/pycon2012/qualcomm/talk.pdf b/talk/pycon2012/qualcomm/talk.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..bed6b09fdeffae519362f1da5f10c7e6675149f6
GIT binary patch

[cut]

diff --git a/talk/pycon2012/qualcomm/talk.rst b/talk/pycon2012/qualcomm/talk.rst
new file mode 100644
--- /dev/null
+++ b/talk/pycon2012/qualcomm/talk.rst
@@ -0,0 +1,60 @@
+
+.. include:: ../tutorial/beamerdefs.txt
+
+===============================
+Building interpreters with PyPy
+===============================
+
+What is PyPy?
+=============
+
+* a fast Python interpreter with a JIT
+
+* **a framework to write dynamic language interpreters**
+
+* an open source project on the BSD license
+
+* an agile project with contributors from all over the world
+
+A bit about the architecture
+============================
+
+* describe your VM in a **high level language**
+
+* implement your object model, types etc.
+
+* you get a **GC** and **JIT** for free
+
+|pause|
+
+* with a few hints for the JIT
+
+PyPy's architecture
+===================
+
+* RPython program, imported and initialized
+
+* transformed to control flow graphs
+
+* compiled do C -OR- JVM -OR- graphs for JIT
+
+* this is a very high-level overview
+
+JIT architecture
+================
+
+* works on the level of the **interpreter**
+
+* by design complete
+
+* from a single source code of the **interpreter**
+
+Links
+=====
+
+* morepypy.blogspot.com
+
+* doc.pypy.org
+
+* #pypy on freenode
+
diff --git a/talk/pycon2012/qualcomm/title.latex b/talk/pycon2012/qualcomm/title.latex
new file mode 100644
--- /dev/null
+++ b/talk/pycon2012/qualcomm/title.latex
@@ -0,0 +1,5 @@
+\begin{titlepage}
+\begin{figure}[h]
+\scalebox{0.8}{\includegraphics[width=80px]{../../img/py-web-new.png}}
+\end{figure}
+\end{titlepage}
diff --git a/talk/pycon2012/tutorial/examples/05_obj_vs_dict.py b/talk/pycon2012/tutorial/examples/05_obj_vs_dict.py
--- a/talk/pycon2012/tutorial/examples/05_obj_vs_dict.py
+++ b/talk/pycon2012/tutorial/examples/05_obj_vs_dict.py
@@ -9,7 +9,7 @@
     a = A(1, 2, 3)
     s = 0
     for i in range(SIZE):
-        s += a.a + a.b + a.c
+        s += getattr(a, 'a') + a.b + a.c
     return s
 
 def obj_bad():
diff --git a/talk/pycon2012/tutorial/examples/08_re_jit.py b/talk/pycon2012/tutorial/examples/08_re_jit.py
new file mode 100644
--- /dev/null
+++ b/talk/pycon2012/tutorial/examples/08_re_jit.py
@@ -0,0 +1,20 @@
+import re
+import timeit
+
+welcome = "Welcome to PyCon 2011\n" * 10
+
+inc_year_re = re.compile("(?P<year>\d+)")
+
+
+def inc_year(m):
+    return str(int(m.group('year')) + 1)
+
+
+simple_re = re.compile("(?P<year>\d+)")
+
+
+print "simple_replace", timeit.timeit(lambda: simple_re.sub("2012", welcome),
+                                      number=10000)
+
+print "inc_replace", timeit.timeit(lambda: inc_year_re.sub(inc_year, welcome),
+                                   number=10000)
diff --git a/talk/pycon2012/tutorial/slides.pdf b/talk/pycon2012/tutorial/slides.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a9659cab234f73faae419a58814eb03b1fbedd8a
GIT binary patch

[cut]



More information about the pypy-commit mailing list