[pypy-commit] extradoc extradoc: Address some of the open tasks in the introduction and abstract sections
bivab
noreply at buildbot.pypy.org
Mon Aug 13 15:16:51 CEST 2012
Author: David Schneider <david.schneider at picle.org>
Branch: extradoc
Changeset: r4543:c23080e9be9a
Date: 2012-08-13 15:16 +0200
http://bitbucket.org/pypy/extradoc/changeset/c23080e9be9a/
Log: Address some of the open tasks in the introduction and abstract
sections
diff --git a/talk/vmil2012/paper.tex b/talk/vmil2012/paper.tex
--- a/talk/vmil2012/paper.tex
+++ b/talk/vmil2012/paper.tex
@@ -108,9 +108,11 @@
\keywords{tracing JIT, guards, deoptimization}
\begin{abstract}
-Guards operations occur frequently in traces generated by tracing just-in-time
-(JIT) compilers. Therefore it is important to design and implement them
-carefully to find the right trade-off between execution speed, deoptimization,
+Tracing just-in-time (JIT) compilers record linear control flow paths,
+inserting operations called guards at points of possible divergence. These
+operations occur frequently generated traces and therefore it is important to
+design and implement them carefully to find the right trade-off between
+execution speed, deoptimization,
and memory overhead. In this paper we describe the design decisions about
guards taken in the implementation of the RPython tracing JIT. Furthermore we
measure various properties of guards.
@@ -125,32 +127,34 @@
\cfbolz{the first two two paragraphs talk about deoptimization, then it
switches to guards. I would say we should only talk about guards in the
beginning}
-\bivab{Introduce in a sentence what guards are}
-In this paper we describe and analyze how guards, as a concept of tracing just-in-time compilers, work. Explicating what concepts are used in the
-intermediate and low-level representation of the JIT instructions and how these
-are implemented.
+Tracing just-in-time (JIT) compilers record and compile linear control flow paths of operations executed by an interpreter
+inserting operations called guards at points of possible divergence.
+In this paper we describe and analyze how guards work, explaining what concepts
+are used in the intermediate and low-level representation of the JIT
+instructions and how these are implemented.
The goal of this paper is to understand the design constraints when
implementing guards. Guards have a runtime cost, they take time to execute. On
-the other hand, guards are possible deoptimization points. They need to store
+the other hand, guards are possible deoptimization points, meaning the recorded
+and compiled path has to be left returning control to the interpreter. They need to
+store
enough information to rebuild the interpreter state.
Based on the informal observation that guards are among the most common
operations in the traces produced by RPython's tracing JIT, our
goal is to present concrete numbers for the frequency and the overhead related
-to guards, explain how they are implemented in the different levels of RPython's
+to guards, explain how they are implemented in the different levels of this particular
tracing JIT and clarify the rationale behind the design decisions based on the
numbers provided here.
-\cfbolz{this paragraph now suddenly \emph{introduces} guards, despite having talked about them already}
The operations executed by an interpreter are recorded by the tracing JIT in
case they are frequently executed (this process is described in more detail in
-Section \ref{sec:Resume Data}). During the recording phase special operations,
-referred to as \texttt{guards}, are inserted into the recorded trace at all
+Section \ref{sec:Resume Data}). During the recording phase \texttt{guards} are
+inserted into the recorded trace at all
points where the control flow could diverge. As can be seen in
Figure~\ref{fig:guard_percent} guards account for about 14\% to 22\% of the
-operations before and for about 15\% to 20\% of the operations after the
-optimization pass over the traced and later compiled parts of the benchmarks,
-making guards one of the most common types of operations. Many of these guards
+operations before and for about 15\% to 20\% of the operations after
+optimizing the traces generated for the different benchmarks used in this paper.
+This makes guards one of the most common types of operations. As this paper will show, many of these guards
fail rarely or not all during execution.
There are several aspects to consider
@@ -168,16 +172,16 @@
%operations for each benchmark, and the overhead produced by the information
%stored at the different levels for the guards
In this paper we want to substantiate the aforementioned observations and
-describe based on them the reasoning behind and the implementation of guards in
+describe based on them the reasoning behind the implementation of guards in
RPython's tracing just-in-time compiler. the contributions of this paper are:
\begin{itemize}
- \item An analysis and benchmark of guards in the context of RPython's tracing Jit.
+ \item An analysis and benchmark of guards in the context of RPython's tracing JIT.
%An analysis of guards in the context of RPython's tracing JIT to
%substantiate the aforementioned observation, based on a set of benchmarks,
\item detailed measurements about the frequency and the
overhead associated with guards, and
\item a description about how guards are implemented in the high\-
- and low-level parts of the JIT and describe the rationale behind the design.
+ and low-level components of the JIT and describe the rationale behind the design.
\end{itemize}
\begin{figure}
@@ -191,7 +195,7 @@
and its meta-tracing JIT. Based on these concepts in Section~\ref{sec:Resume
Data} we proceed to describe for RPython's tracing JIT the details of guards in
the frontend\bivab{better term for this?} related to recording and storing the
-information required to restore the interpreter state in case of a guard
+information required to rebuild the interpreter state in case of a guard
failure. Once the frontend has traced and optimized a loop it invokes the
backend to compile the operations to machine code, Section \ref{sec:Guards in
the Backend} describes the low-level aspects of how guards are implemented in
More information about the pypy-commit
mailing list