this is for holding javascript data
Camil Demetrescu
over 8 years ago
Commit id: bc53c9e74e4644eaec128738cc5d50da73cfd646
deletions | additions
diff --git a/case-study.tex b/case-study.tex
index 375e221..b5039dd 100644
--- a/case-study.tex
+++ b/case-study.tex
...
\section{Case Study}
\label{se:case-study}
MATLAB is a popular dynamic language for scientific and numerical programming. Introduced in the late 1970s mainly as a scripting language for performing computations through efficient libraries, it has evolved over the years into a more complex programming language with support for high-level features such as functions, packages and object orientation. A popular feature of the language is the \feval\ construct, a built-in higher-order function that enables the invocation of the function specified as first argument with the remaining arguments for the \feval\ call, returning eventually the computed result. This feature is heavily used in many classes of numerical
computations, computations.\fullver{, such as iterative methods for approximate solutions of an ordinary differential equation (ODE) and simulated annealing heuristics to locate a good approximation to the global optimum of a function in a large search
space. space.}
A previous study by Lameed and Hendren~\cite{lameed2013feval} shows that the overhead of an \feval\ call is significantly high compared to a direct call, especially in JIT-based execution environments such as McVM and the proprietary MATLAB JIT accelerator by Mathworks. In fact, the presence of an \feval\ instruction can disrupt the results of intra- and inter-procedural level for type and array shape inference analyses, which are key factors for efficient code generation.
diff --git a/header.tex b/header.tex
index e566c42..b953abc 100644
--- a/header.tex
+++ b/header.tex
...
\usepackage{listings}
% short vs long version
\newcommand{\fullver}{} \newcommand{\fullver}[1]{}
% clever references
\ifdefined\noauthorea
diff --git a/osr-llvm.tex b/osr-llvm.tex
index 5a7b7b7..832adaf 100644
--- a/osr-llvm.tex
+++ b/osr-llvm.tex
...
%\subsection{Example}
In this section we discuss one possible embodiment of the OSR approach of \mysection\ref{se:overview} in LLVM. Our discussion is based on a simple running example that illustrates a profile-driven optimization scenario. We start from a simple base function ({\tt isord}) that checks whether an array of numbers is ordered according to some criterion specified by a comparator (see \myfigure\ref{fi:isord-example}). Our goal is to instrument {\tt isord} so that, whenever the number of loop iterations exceeds a certain threshold, control is dynamically diverted to a faster version generated on the fly by inlining the comparator.
The IR code shown in this section\footnote{Virtual register names and labels in the LLVM-produced IR code shown in this paper have been refactored to make the code more readable.} has been generated with \clang\ and instrumented with \osrkit, a library we prototyped to help VM builders deploy OSR in LLVM. \osrkit\ provides a number of useful abstractions that include open and resolved OSR instrumentation of IR base functions without breaking the SSA form, liveness analysis, generation of OSR continuation functions, and mapping of LLVM values between different versions of a program along with compensation code
generation\footnote{The generation\footnote{An accompanying artifact
allows will allow the interested reader to get acquainted with \osrkit\ and repeat the sample scenario described in this section.}.
%To explain how the OSR approach of \mysection\ref{se:overview} can be implemented in LLVM, we consider the simple example of \myfigure\ref{fi:isord-example}. Function {\tt isord} checks whether an array of numbers is ordered according to some criterion specified by a comparator.