Camil Demetrescu edited intro.tex  over 8 years ago

Commit id: d40063fad8563c3c7015364e6ce1dc5695bfe9e9

deletions | additions      

       

  In a 2013 paper Lameed and Hendren propose McOSR~\cite{lameed2013modular}, a technique for OSR that essentially stores the live values in a global buffer, recompiles the current function and then loads in it the saved state when the execution is resumed. Their approach shows a few limitations that we discuss later in this paper, and because of some relevant design choices it can work only with the legacy JIT which has been dropped from recent LLVM releases.  \paragraph{Contributions of this Paper} Paper.}  In this paper we present our novel, platform-independent framework for LLVM to enable switching between different versions of a function at run-time. Specific goals include:  \begin{itemize}  \item The ability for a function reached via OSR to fire an OSR itself: this would allow switching from a base function $f_0$ to an optimized function $f_1$, and later on to a further optimized version $f_2$, etc. 

%\item Providing support for the redirection of future invocations of a function to the latest compiled version without recompiling the callers or performing linking again.  \end{itemize}  \noindent  Our implementation is shipped ships  as a library for IR manipulation, and we present a preliminary experimental study of our technique in TinyVM, a proof-of-concept virtual machine for run-time IR manipulation and compilation based on MCJIT. We then present a case study on the integration of our technique in McVM~\cite{chevalier2010mcvm}: we show the potential of our approach by enabling an aggressive specialization mechanism for the {\tt feval} construct - a source of bottlenecks in many MATLAB programs - that could not have been implemented using extant OSR techniques. \paragraph{Structure of the Paper}  The remainder of this paper is organized as follows. In Section~\ref{se:approach}, we present our OSR technique and outline its implementation and Application Program Interface (API) for VM builders. Section~\ref{case-study} illustrates a case study in McVM. In Section~\ref{se:experiments}, we present the experimental study in TinyVM and discuss implications of inserting OSR points in a LLVM function, while in In Section~\ref{se:related} we discuss the state of the art of OSR in the literature and discuss related work. Section~\ref{se:conclusions} concludes the paper and presents some ideas for future research directions.