Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: extradoc Changeset: r4846:cfdba0fcd517 Date: 2012-10-11 14:07 +0200 http://bitbucket.org/pypy/extradoc/changeset/cfdba0fcd517/
Log: fill the slides with a first rough draft diff --git a/talk/vmil2012/presentation/talk.tex b/talk/vmil2012/presentation/talk.tex --- a/talk/vmil2012/presentation/talk.tex +++ b/talk/vmil2012/presentation/talk.tex @@ -90,6 +90,7 @@ \begin{itemize} \item for interesting, commonly executed code paths \item produces a linear list of operations (trace) + \item automatically does (potentially deep) inlining \end{itemize} \item trace is optimized and then turned into machine code \end{itemize} @@ -97,7 +98,19 @@ \begin{frame} \frametitle{Guards} - + \begin{itemize} + \item Points of control flow divergence are marked with guards + \item Operations that check whether conditions are still true + \item When a guard fails, execution of the trace stops and continues in the interpreter + \pause + \begin{block}{Guard Characteristics} + \begin{itemize} + \item lots of them, up to 20\% guards + \item most never fail + \item costly to implement + \end{itemize} + \end{block} + \end{itemize} \end{frame} % this talk wants to go over a lot of details that are usually glossed over as @@ -105,10 +118,21 @@ \begin{frame} \frametitle{Bridges} + \begin{itemize} + \item When a trace fails often, it becomes worth to attach a new trace to it + \item This is called a bridge + \item The bridge is attached by patching the guard machine code + \item when this guard fails in the future, the new trace is executed instead + \end{itemize} \end{frame} \begin{frame} \frametitle{RPython and PyPy} + \begin{itemize} + \item Context: RPython + \item a generic tracing JIT, applicable to many languages + \item main use: PyPy, an efficient Python interpreter + \end{itemize} \end{frame} \begin{frame} @@ -119,14 +143,38 @@ \begin{frame} \frametitle{Symbolic Frame Capturing} + \begin{itemize} + \item Guard can fail deep inside inlined function + \item when going back to the interpreter, call stack needs to be re-created + \item done with the help of symbolic frame stacks + \item these show how trace trace variables fill the to-be-built stack frames + \end{itemize} \end{frame} \begin{frame} \frametitle{Symbolic Frame Compression} + \begin{itemize} + \item There are \emph{a lot of} guards + \item Naively storing symbolic frames would be costly in terms of memory + \item need to store them compactly + \item observation: from one guard to the next, the non-top stack frames don't change + \item share these between subsequent guards + \pause + \item also need a byte-saving binary representation, but that's just boring work + \end{itemize} \end{frame} \begin{frame} \frametitle{Interaction with Optimization} + \begin{itemize} + \item Some optimizations make it necessary to store extra information in symbolic frames + \item examples: + \begin{itemize} + \item delayed heap stores (need to do stores before resuming interpreter) + \item allocation remvoal (need to allocate objects before resuming) + \end{itemize} + \item can be compressed using similar techniques + \end{itemize} \end{frame} \begin{frame} _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit