Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: extradoc Changeset: r5348:2947a2a7f631 Date: 2014-06-17 15:24 +0200 http://bitbucket.org/pypy/extradoc/changeset/2947a2a7f631/
Log: second round of feedback diff --git a/talk/icooolps2014/position-paper.pdf b/talk/icooolps2014/position-paper.pdf index 473787d313f0bad0af373cb268d3e6b7cdb17d6d..4c20e424eab52b3d1bdeed6cd22738c5db3b0800 GIT binary patch [cut] diff --git a/talk/icooolps2014/position-paper.tex b/talk/icooolps2014/position-paper.tex --- a/talk/icooolps2014/position-paper.tex +++ b/talk/icooolps2014/position-paper.tex @@ -229,13 +229,13 @@ \begin{center} \begin{tabular}{|l|l|} \hline - Thread 1 & Thread 2 \\ + Thread 1 & Thread 2 \\ \hline - \multicolumn{2}{|l|}{\texttt{A = B = 0}} \\ + \multicolumn{2}{|l|}{\texttt{A = B = 0}} \\ \hline - \texttt{A = 1} & \texttt{B = 1}\\ - \texttt{if B == 0:} & \texttt{if A == 0:}\\ - \texttt{ critical section} & \texttt{ critical section}\\ + \texttt{A = 1} & \texttt{B = 1} \\ + \texttt{if B == 0:} & \texttt{if A == 0:} \\ + \texttt{ critical section} & \texttt{ critical section} \\ \hline \end{tabular} \caption{Critical section with a sequential consistency model.} @@ -275,7 +275,8 @@ complexity of the program logic. For a better parallel programming model for dynamic languages, we propose another, well-known synchronisation mechanism called \emph{atomic - blocks}~\cite{tim03,tim05}. + blocks}~\cite{tim03,tim05}. This is also suggested by +\cite{christopher10,victor11} as an easier mechanism than locks. Atomic blocks are composable, deadlock-free, higher-level and expose useful atomicity and isolation guarantees to the application for a @@ -301,7 +302,7 @@ \hline Existing applications & ++ & ++ & -{-} & ++ & ++ \\ \hline - Better synchronisation & o & o & & o & ++ \\ + Better synchronisation & o & o & + & o & ++ \\ \hline Implementation & ++ & - & ++ & ++ & ++ \\ \hline @@ -315,6 +316,7 @@ \subsection{Potential Solutions} +\label{sec:pot_solutions} For the discussion we define a set of criteria to evaluate the multiple potential solutions for removing or avoiding the GIL and its @@ -379,14 +381,9 @@ closely, otherwise it may expose some latent data races in existing applications which are just not exposed with a GIL. This approach does however not provide a better parallelising synchronisation mechanism -to the application like e.g. atomic blocks. +to the application like e.g.\ atomic blocks. -%% - support of atomic blocks?\\ -%% - hard to get right (deadlocks, performance, lock-granularity)\\ -%% - very hard to get right for a large language\\ -%% - hard to retro-fit, as all existing code assumes GIL semantics\\ -%% - (there are some semantic differences, right? not given perfect lock-placement, but well) -%% ( http://www.jython.org/jythonbook/en/1.0/Concurrency.html ) + \subsubsection{Shared-Nothing} @@ -397,11 +394,16 @@ sensible to have one GIL per independent part. At the extreme, there are applications that parallelise perfectly simply by running independent processes; some web servers and some numeric computations -do. We will consider here a slightly more general approach: the -\emph{multiprocessing}\footnote{https://docs.python.org/2/library/multiprocessing.html} +do. + +We will consider here a slightly more general approach: the +\emph{multiprocessing}~\cite{multiprocessing} module of Python. In essence, it uses process-forking to provide the application with multiple interpreters that can run in parallel. -Communication is then done explicitly through pipes. +Communication is then done explicitly through pipes.\footnote{There +are multiple alternative designs like e.g.\ actors or tuple spaces. +Since they are similar and do not replace the GIL directly, we +focus on the example of \emph{multiprocessing}.} The model of explicit communication is sometimes seen as a superior way to synchronise concurrent applications because of its explicitness. @@ -414,10 +416,6 @@ several of them in parallel. That way, we also inherit the easy integration of external libraries without any changes. -%% - often needs major restructuring of programs (explicit data exchange)\\ -%% - sometimes communication overhead is too large\\ -%% - shared memory is a problem, copies of memory are too expensive - \subsubsection{Transactional Memory} Transactional memory (TM) can be used as a direct replacement for a @@ -511,17 +509,24 @@ Following the above argumentation for each approach, we assembled a -general overview in Table \ref{tab:comparison}. The general picture is -everything else than clear. It looks like HTM may be a good solution -to replace the GIL in the near future. Current implementations are -however far too limiting and do not provide good scaling. +general overview in Table \ref{tab:comparison}. The points were assigned +according to the criteria described in \ref{sec:pot_solutions}. Since +the criteria are defined intuitively, there are no formal justifications +for the assigned points. The reader is thus advised to take them with a +grain of salt. + +The general picture is everything else than clear. It looks like HTM +may be a good solution to replace the GIL in the near future. Current +implementations are however far too limiting, not widely available, +and do not provide good scaling. Allowing for parallel execution just means that dynamic languages catch up to all other languages that already provide real parallelism. This is why we think that only the STM approach is a -viable solution in the long-term. It provides the application with a -simple memory model (sequential consistency) and a composable way to -synchronise memory accesses using atomic blocks. +viable solution in the long-term. It unifies both, the simple memory +model (sequential consistency) and the synchronisation of memory accesses +using composable atomic blocks. It is not \emph{only} a simple GIL +replacement. Unfortunately, STM has a big performance problem. Particularly, for our use case there is not much static information available since we @@ -541,10 +546,10 @@ certain tasks, looks like a very promising direction of research too. -We believe that further work to reduce the overhead of STM is +We think that further work to reduce the overhead of STM is very worthwhile. In fact, considering some analogies that have been drawn between garbage collection and transactional memory~\cite{dan07}, -we believe that it is worthwhile to focus the STM research more +we think that it is worthwhile to focus the STM research more specifically onto the context shown in this paper --- for use in implementations of high-level languages, rather than as a tool directly used by the programmer. @@ -582,6 +587,10 @@ \bibitem{webjython} The Jython Project, \url{www.jython.org} +\bibitem{multiprocessing} + The Multiprocessing Module of Python, + \url{docs.python.org/2/library/multiprocessing.html} + \bibitem{odaira14} Odaira, Rei, Jose G. Castanos, and Hisanobu Tomari. "Eliminating global interpreter locks in Ruby through hardware transactional _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit