VMS/0__Writings/kshalle

changeset 69:0e9165cb2c52

VMS foundation -- partial outline, in VMS__Full_conf_paper_2.tex file
author Sean Halle <seanhalle@yahoo.com>
date Sun, 15 Jul 2012 00:17:30 -0700
parents 7e903acb5f64
children 23e3c832b31a
files 0__Papers/VMS/VMS__Foundation_Paper/VMS__Full_conference_version/latex/VMS__Full_conf_paper_2.tex 0__Papers/VMS/VMS__Foundation_Paper/VMS__Full_conference_version/latex/bib_for_papers_jun_2012.bib 0__Papers/VMS/VMS__Foundation_Paper/VMS__Full_conference_version/latex/sigplanconf.cls
diffstat 3 files changed, 2482 insertions(+), 0 deletions(-) [+]
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/0__Papers/VMS/VMS__Foundation_Paper/VMS__Full_conference_version/latex/VMS__Full_conf_paper_2.tex	Sun Jul 15 00:17:30 2012 -0700
     1.3 @@ -0,0 +1,267 @@
     1.4 +%-----------------------------------------------------------------------------
     1.5 +%
     1.6 +%               Template for sigplanconf LaTeX Class
     1.7 +%
     1.8 +% Name:         sigplanconf-template.tex
     1.9 +%
    1.10 +% Purpose:      A template for sigplanconf.cls, which is a LaTeX 2e class
    1.11 +%               file for SIGPLAN conference proceedings.
    1.12 +%
    1.13 +% Guide:        Refer to "Author's Guide to the ACM SIGPLAN Class,"
    1.14 +%               sigplanconf-guide.pdf
    1.15 +%
    1.16 +% Author:       Paul C. Anagnostopoulos
    1.17 +%               Windfall Software
    1.18 +%               978 371-2316
    1.19 +%               paul@windfall.com
    1.20 +%
    1.21 +% Created:      15 February 2005
    1.22 +%
    1.23 +%-----------------------------------------------------------------------------
    1.24 +
    1.25 +
    1.26 +\documentclass[preprint]{sigplanconf}
    1.27 +
    1.28 +% The following \documentclass options may be useful:
    1.29 +%
    1.30 +% 10pt          To set in 10-point type instead of 9-point.
    1.31 +% 11pt          To set in 11-point type instead of 9-point.
    1.32 +% authoryear    To obtain author/year citation style instead of numeric.
    1.33 +\usepackage{amssymb,graphicx,calc,ifthen,subfig,dblfloatfix,fixltx2e}
    1.34 +
    1.35 +
    1.36 +% correct bad hyphenation here
    1.37 +\hyphenation{op-tical net-works semi-conduc-tor}
    1.38 +
    1.39 +\usepackage{wasysym}
    1.40 +
    1.41 +\begin{document}
    1.42 +
    1.43 +\bibliographystyle{plain}
    1.44 +%
    1.45 +
    1.46 +\conferenceinfo{WXYZ '05}{date, City.} 
    1.47 +\copyrightyear{2005} 
    1.48 +\copyrightdata{[to be supplied]} 
    1.49 +
    1.50 +\titlebanner{banner above paper title}        % These are ignored unless
    1.51 +\preprintfooter{short description of paper}   % 'preprint' option specified.
    1.52 +
    1.53 +
    1.54 +\title{The Proto-Runtime Approach to Domain Specific Languages}
    1.55 +
    1.56 +
    1.57 +\authorinfo{Sean Halle}
    1.58 +           {Open Source Research Institute}
    1.59 +           {Email1}
    1.60 +\authorinfo{Merten Sach}
    1.61 +           {TU Berlin}
    1.62 +           {msach@mailbox.tu-berlin.de}
    1.63 +\authorinfo{Ben Juurlink}
    1.64 +           {TU Berlin}
    1.65 +           {b.juurlink@tu-berlin.de}
    1.66 +\authorinfo{Albert Cohen}
    1.67 +           {Ecole Normal Supereur, and INRIA}
    1.68 +           {albert.cohen@inria.fr}
    1.69 +
    1.70 +\maketitle
    1.71 +
    1.72 +
    1.73 +\begin{abstract}
    1.74 +Parallel programming is low productivity, disrupts current development practices, has a difficult mental model for programmers, and causes large effort to be expended in porting the code for high performance across hardware platforms.  Domain Specific Languages that are embedded into a base language can solve the productivity, disruption, mental model, and porting problems, but such languages only have a small number of users, which isn't enough to support the large effort required to create them.
    1.75 +
    1.76 +We introduce the proto-runtime approach, which modularizes the creation of runtime systems, which comprise the bulk of the code development effort for embedded-style domain-specific languages.  The modularity separates the language-construct logic, as well as the scheduling logic that decides what core runs a particular unit of work, away from the low-level runtime details of concurrency, memory consistency, and runtime-performance related code.  As a result, new parallel constructs are written using sequential reasoning, and are easily reused across languages, and scheduling of work onto hardware is under language and application control, without interference from an underlying thread package scheduler, which enables high application performance.
    1.77 +
    1.78 +We present measurements of the time to develop new languages, as well as time to re-implement existing ones,  which reduces to a matter of hours.  In addition, we measure performance of proto-runtime based implementations going head-to-head with the standard distributions of Cilk, OpenMP, StarSs (OMPSs), and posix threads, showing that the proto-runtime outperforms on large servers in all cases.
    1.79 +\end{abstract}
    1.80 +
    1.81 +
    1.82 +
    1.83 +
    1.84 +
    1.85 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1.86 +\section{Introduction}
    1.87 +\label{sec:intro}
    1.88 +
    1.89 +Programming in the past has been overwhelmingly sequential, with the applications being run on sequential hardware.  But the laws of physics have forced the hardware to become parallel, even down to embedded devices like phones. The trend is unstoppable, eventually forcing essentially all future programming to  become parallel programming.  The only reason it is not already is due to the difficulty of the traditional parallel programming approaches. 
    1.90 +
    1.91 +The problems with parallel programming fall into three main categories: 1) a difficult mental model, 2) having to rewrite the code for each hardware target to get acceptable performance 3) disruption to existing practices (including steep learning curve, change in tools, and change in design practices). Many believe that these can all be overcome with the use of Domain-Specific Languages. But such languages have been costly to create and port across hardware targets, which makes them impractical given the small number of users of each language, and so have not caught on.
    1.92 +
    1.93 +We propose that a method that makes Domain Specific Languages (DSLs) low cost to produce as well as to port across hardware targets will allow them to fulfill their promise, and we introduce what we call a proto-runtime to do this.  
    1.94 +
    1.95 +We claim the following features and benefits of the proto-runtime approach, which we shall  support throughout the rest of this paper:
    1.96 +\begin{itemize}
    1.97 +\item The proto-runtime approach modularizes the runtime, which results in reduced time to implement a new language's behavior.
    1.98 +\item The modularization is based on fundamental patterns of parallel computation, runtimes, and synchronization constructs and so is effective across languages.
    1.99 +\item The modularization separates language behavior logic from runtime internals, which communicate between cores and  protect shared runtime data (we call this internal portion the proto-runtime).
   1.100 +
   1.101 +\item The modularization causes  time reduction by making the internal portion reusable across languages.
   1.102 +\item  The modularization also provides the time reduction by allowing the language logic to be designed and implemented with sequential thinking, due to separating that logic from the internals that protect shared runtime data, which is where the concurrency issues are handled. This separation is not possible when implementing language logic in terms of a package such as Posix threads or TBB (unless one uses the package according to the proto-runtime pattern).
   1.103 +\item The modularization also causes time reduction by making it practical to reuse the language logic by pulling it from one language into another, due to the well-defined interfaces, and the modular patterns the approach  uses to implement that logic.
   1.104 +\item The modularization causes all languages to inherit the effort spent performance tuning the internal portion (the proto-runtime), because the dominant factors affecting runtime performance are concentrated in the internal portion, which is reused by all languages. 
   1.105 +\item The modularization integrates the language-implemented scheduler into the low level control of hardware (in  contrast to building a language on top of a layer that has its own hardware assignment that is isolated from the language implementation, such as when using a package like Posix threads or TBB).
   1.106 +
   1.107 +\end{itemize}
   1.108 +
   1.109 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1.110 +\section{The Problem}
   1.111 +\label{sec:problem}
   1.112 +In this section, we'll focus on implications for the runtime system.
   1.113 +
   1.114 +To give the needed depth on the nature of the problem, we'll first talk about parallel languages and a way to classify them according to the structure of their runtime.  Then we'll talk about the sub-class that is domain specific languages, what sets them apart from other parallel languages and the implications for their runtime implementations. That segues into the embedded style of language, and how the work of implementing them is mainly the work implementing their runtime.
   1.115 + 
   1.116 +Once that reduction from parallel languages in general to embedded style domain specific ones in particular is done, we'll give more on what domain-specific languages look like from an application programmer's view. We will include depth on a particular embedded-style language, showing sample code with the constructs used, then delving into details of the implementation of that language, and behavior of the constructs during a run.
   1.117 +
   1.118 +\subsection{Classifying parallel languages by virtual processor based vs task based}
   1.119 +One major axis for classifying parallel languages is whether they are virtual processor based or task based, which has implications for the structure of its runtime.
   1.120 +
   1.121 +A virtual processor is long-lived, and has a context that persists, while a task has no preceding context to fit into and leaves no implied context when done.  Posix threads is the standard example of a virtual processor based parallel language, as is UPC, Charm, TBB, and so forth, all of these create something that can make synchronization calls and invoke other parallel-language constructs, then resume after the call completes.  A stack is used to keep the information needed upon resume.  
   1.122 +
   1.123 +In contrast, dataflow is the standard example of a task based language, as is CnC, in which a task is passed all the information it needs when created, and is expected to run to completion.  If a task needs to invoke a parallelism construct, that invocation normally ends the task, while information needed by following tasks is saved explicitly in shared variables, or passed to the runtime as a continuation that is than handed to the task created when the construct completes.  
   1.124 +
   1.125 +Hybrids of the two also exist, such as OpenMP which implies thread creation, via the parallel-section pragma, but also creates tasks via the for-pragma. As well, OMPSs mixes a main thread that creates meta-tasks that have to resolve their dependencies before being turned into executable tasks, but those tasks are also able to invoke barriers and other synchronization constructs, then resume.
   1.126 +
   1.127 +The runtime implementations of the two different types of execution model differ markedly.  Virtual processor (VP) based runtimes have to create a stack for each VP created, and manage the interleaving of the CPU's hardware stack.  They also require a mechanism to suspend and resume the VPs, and save them in internal structures while suspended.  In contrast, task based runtimes need ultra-fast creation of tasks, and fast linkage from the end of one to the start of the next.  They keep the tasks in a queue and discard when complete.  Hence, VP based runtimes revolve around storing suspended VPs inside structures that embody the constraints on when the VP can be resumed.  But task based runtimes revolve around the conditions upon which to create new tasks, and organizing the inputs to them.  The runtimes for hybrid languages have characteristics of both.
   1.128 +
   1.129 +
   1.130 +\subsection{Domain specific parallel languages}
   1.131 +Then we'll talk about the sub-class that is domain specific languages, what sets them apart from other parallel languages and the implications for their runtime implementations.
   1.132 +
   1.133 +\subsection{The embedded style of DSL}
   1.134 +That segues into the embedded style of language, and how the work of implementing them is mainly the work of implementing their runtime.
   1.135 +
   1.136 +The problem relates to embedded style domain specific languages.  Need to make implementing an embedded style DSL fast, and make porting it to a different hardware target fast.
   1.137 +
   1.138 +What an embedded-style language is
   1.139 +-- constructs look like library calls
   1.140 +-- inside the library call, it invokes a runtime that implements the construct behavior for the language.
   1.141 +
   1.142 +How an embedded-style DSL differs from a library
   1.143 +-- runtime is defining difference that sets a DSL apart from a library. A DSL has one, a library does not.
   1.144 +-- DSL construct switches to runtime, library calls do not.  Library doesn't have a runtime shared by all the calls, and behavior can be understood just in terms of the base language.  But, DSL construct call is normally a thin wrapper that invokes behavior is inside the runtime, and has some mechanism for escaping the execution model of the base language, and instead enter the runtime that implements an alternative execution model.
   1.145 +
   1.146 +we'll give more on what domain-specific languages look like from an application programmer's view. We will include depth on a particular embedded-style language, showing sample code with the constructs used.
   1.147 +
   1.148 +What an embedded DSL looks like in usage
   1.149 +-- app code examples of HWSim calls
   1.150 +-- the effect those calls have during a run
   1.151 +
   1.152 +then delving into details of the implementation of that language, and behavior of the constructs during a run.
   1.153 +
   1.154 +details of language implementation:
   1.155 +-- Library plus runtime
   1.156 +-- What's in the library portion
   1.157 +-- what's inside a runtime
   1.158 +-- how constructs in app connect to the runtime (via escape mechanism, in case of our proto-runtime, it is a collection of assembly routines that manipulate the stack and program counter).
   1.159 +
   1.160 +what the calls from the app do inside the runtime
   1.161 +
   1.162 +how the core gets used while executing the code (switches to other VP, then switches back, or VP does one task, then the next then the next).
   1.163 +
   1.164 +
   1.165 +
   1.166 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1.167 +\section{The Idea}
   1.168 +\label{sec:idea}
   1.169 +
   1.170 +In this section, we talk about the proto-runtime approach to domain-specific languages that are done in the embedded style.
   1.171 +
   1.172 +We will introduce patterns that we believe are fundamental to parallel computation, and also patterns that appear fundamental to language structure, as well as patterns we believe are fundamental to synchronization constructs.  We then show how these patterns motivate and help to understand the proto-runtime approach.
   1.173 +
   1.174 +To simplify the details, we'll use a toy language called SSR, that is VP based yet also clearly identifies the units of work bounded by runtime invocations.
   1.175 +
   1.176 +
   1.177 +
   1.178 +\begin{figure}[ht]
   1.179 +  \centering
   1.180 +  \includegraphics[width = 2in, height = 1.8in]{../figures/SCG_stylized_for_expl.pdf}
   1.181 +  \caption{Stylized Scheduling Consequence Graph (SCG).}
   1.182 +  \label{fig:SCG_expl}
   1.183 +\end{figure}
   1.184 +
   1.185 +
   1.186 +%%%%%%%%%%%%%%%%%%%%%
   1.187 +\section{The Details}
   1.188 +
   1.189 +The interfaces between lang logic and proto-runtime.  
   1.190 +
   1.191 +
   1.192 +%%%%%%%%%%%%%%%%%%%%%
   1.193 +\section{Getting my head around this}
   1.194 +Problem: parallel programming hard and costly
   1.195 +Soln: domain specific
   1.196 +DS problem: practical -- small user base, so needs to be low dev effort and low porting effort
   1.197 +Soln: modularize runtime, to reduce part have to mess with, hide part that has low-level details, reuse low-level tuning effort, and reuse lang-spec parts.
   1.198 +Benefits: lang impl doesn't have to touch low-level details, inherit centralized services, can reuse code from other languages to add features.
   1.199 +
   1.200 +Demonstrate this:
   1.201 +All the languages have copied singleton, atomic, critical section and transaction. In VOMP, took the task code from VSS, in VSS, took the send and receive code from SSR..  for DKU, took the code almost verbatim from earlier incarnation of these ideas, and welded it into SSR, and took VSs tasks and put into SSR. Thus, circle completes.. VSs took from SSR, now SSR takes from VSs..  pieces and parts are being borrowed all over the place and welded in where they're needed.
   1.202 + 
   1.203 +Part of what makes this so easy is the dispatch pattern.. adding a construct reduces to adding into switch and writing handler..  borrow constructs by taking the handler from the other lang. 
   1.204 +
   1.205 +Another part is that code for the constructs is isolated from concurrency details, which are inside the proto-runtime. All the dynamic system issues, and best way to impl locks, and need for fences, and so on is isolated from the construct logic.  This isolation is also how porting effort is lowered (or in many cases eliminated), and is how runtime performance is kept high.
   1.206 +
   1.207 +Performance must be high, or the labor savings don't matter.  By isolating the low-level details inside the proto-runtime, they can be intensively tuned, then all the languages inherit the effort.  Compare that to current practices, where the runtime code is monolithic.. each language has to separately modify the runtime, understanding and dealing with the concurrency, and then on a new machine, each language has to re-tune the low-level details, worrying about the consistency model on that machine, how its particular fence and atomic instructions work, and so on.
   1.208 +We spent 2 months performance tuning the current version, but only 18 hours implementing VSs on top of it, and VSs inherited the benefit from all that effort.  So did VOMP, and SSR, and VCilk, and so on..  each time we improved the proto-runtime, all the languages improved, with no effort on the part of the language creator. 
   1.209 +
   1.210 +In addition to runtime performance, application level performance must be high.  The runtime's performance only affects overhead, and so is only a factor for small work-unit (task) sizes.  But data affinity affects performance for all work.  The proto-runtime approach partially addresses this by giving the language the opportunity to directly control placement of work.  This isn't possible when building on top of threads, because the scheduling is in a separate, lower-level, layer where assignment of work to core is made in isolation, blind to language constructs and other application features.
   1.211 +
   1.212 +\section{Understanding the Proto-Runtime Approach}
   1.213 +In this section we give many alternative ways of view what a proto-runtime is, in order to provide perspective that may help understanding the approach at a deeper level.
   1.214 +
   1.215 +\subsubsection{Views of synchronization constructs}
   1.216 +One view of sync constructs is that they are variable-length calls. The basic hardware does this by stalling the pipeline.
   1.217 +
   1.218 +Another view is that they mark the boundary of a communication made via shared read/write.  A load or store of a single location has a precise boundary enforced by the hardware, but if a pipeline desires to load, modify, then write a single location it has to have additional hardware. It has to make the multiple primitive load/store operations appear as a single operation.
   1.219 +
   1.220 +Moving up to the application level, the same pattern exists: an operation the application wants to do may involve many loads and stores, but it wants the collection to appear as a single indivisible operation.  So the application-level equivalent of a load or store involves multiple memory locations but is to be treated as a single indivisible operation.  This requires the application-level equivalent of the hardware that made the read-modify-write into a single indivisible operation.  That equivalent is what a synchronization construct is.  The reason a sync construct takes a variable amount of time is that it  waits until all other indivisible operations that might conflict have completed.
   1.221 +
   1.222 +Another way to think of the sync construct is that it enforces sharp communication boundaries.  The multiple read and write operations are treated as a single communication with the shared-state.  If any other part of the application sees only part of the communication, it sees something inconsistent and thus wrong.  So the sync constructs ensure that communications are complete, so the parts of the application only see complete communications from other parts.  
   1.223 +
   1.224 +\subsubsection{Universal Runtime Patterns}
   1.225 +Unified pattern within parallel languages: create multiple timelines, then control relative progress of them, and control location each chunk of progress takes place.
   1.226 +
   1.227 +Another universal pattern: code runs, switches to runtime, some point later switches back to code, making application run be a collection of trace segments bounded by runtime calls.
   1.228 +The runtime tracks constraints (dependencies) among units, creates and destroys units, and assigns ready units to hardware.
   1.229 +
   1.230 +Units have a life-line, which is fundamental to parallel computation, as demonstrated in a paper by some of the authors [].
   1.231 +
   1.232 +Every unit has a meta-unit that represents it in the runtime. A  unit is defined as the trace of application code that exists between two scheduling decisions. Looking at this in more detail, every runtime has some form of internal bookkeeping state for a unit, used to track constraints on it and make decisions about when and where to execute. This exists even if that state is just a pointer to a function that sits in a queue. We call this bookkeeping state for a unit the meta-unit.
   1.233 +
   1.234 +Each  unit also has a life-line, which progresses so:  creation of the meta-unit \pointer , state updates that affect constraints on the unit \pointer,   the decision is made to animate the unit  \pointer, movement of the meta-unit plus data to physical resources that do the animation \pointer  , animation of the unit, which does the work \pointer,  communication of state-update, that unit has completed, and hardware is free \pointer ,  constraint updates within runtime, possibly causing new meta-unit creations or freeing other meta-units to be chosen for animation.  This repeats for each unit. Each step is part of the model.
   1.235 +
   1.236 + Note a few implications: first, many activities internal to the runtime are part of a unit's life-line, and take place when only the meta-unit exists, before or after the work of the actual unit; second, communication that is internal to the runtime is part of the unit life-line, such as state updates; third, creation may be implied, such as in pthreads, or triggered such as in dataflow, or be by explicit command such as in StarSs, and once created, a meta-unit may languish before the unit it represents is free to be animated.
   1.237 +
   1.238 +\subsubsection{Putting synchronization constructs together with universal runtime patterns}
   1.239 +
   1.240 +Putting these  together, gives us that any parallelism construct that has a synchronization behavior causes the end of a work-unit, and a switch to the runtime.  The code following the construct is a different work-unit that will begin after the constraint implied by the construct is satisfied. 
   1.241 +
   1.242 +The runtime is made up of the infrastructure for the constraints and assignment, such as communicating bookkeeping state between cores, and protecting internal runtime updates of shared information. Plus, the logic of the constructs and logic of choosing an assignment of work to cores.
   1.243 +
   1.244 +For large machines, the infrastructure dominates the time to execute a parallelism construct, while for smaller machines, like single-socket, the logic of constructs and assignments has a chance to be significant.   
   1.245 +
   1.246 +
   1.247 +
   1.248 +%%%%%%%%%%%%%%%%%%%%%
   1.249 +\section{Conclusion and Future Work}
   1.250 +\label{sec:conclusion}
   1.251 +
   1.252 +We have shown how the proto-runtime approach modularizes runtime code, allowing the low-level hardware-intensive portion to be inherited by all languages built on top of it.  This modularization reduces the effort of implementing a new language, especially an embedded-style one, by simplifying the language-specific portion, reducing it, and  reusing it, as seen in practice. While reducing the effort, the proto-runtime approach also maintains high runtime performance, by separating out the tuning-intensive part, so the tuning effort is amortized over all the languages, which inherit the improved runtime performance without any effort by the language creators.
   1.253 +
   1.254 +We have demonstrated the benefits of centralized services inherited by the languages, such as debugging facilities, automated verification, concurrency handling, hardware performance information gathering, and so on.  By genericizing these
   1.255 +
   1.256 +We have also demonstrated how application features and language features gain access to the decision-maker for which core work is assigned to.  This provides the language with the opportunity to directly control placement of work, which isn't possible when building on top of a thread package.
   1.257 +
   1.258 +Work on the proto-runtime approach is in its infancy, and much remains to be done, including:
   1.259 +\begin{itemize} 
   1.260 +\item Exploring scheduling assignment implementations that take advantage of language and application knowledge to improve placement of work to gain higher application performance.
   1.261 +\item In addition, extending the proto-runtime interface to present hardware information that an assigner will need, but in a generic way that remains constant across many hardware configurations yet exposes all relevant information.
   1.262 +\item  Finally, creating related interfaces for use with distributed memory hardware, and interfaces for hierarchical runtimes, to improve performance on many-level hardware such as high-performance computing, and to tie together runtimes for different types of architecture, to cover heterogeneous architectures and machines.
   1.263 +\item Applying the proto-runtime approach to support a portability software stack, and supplying OS services to applications via the proto-runtime, to further increase application-code portability.
   1.264 +\end{itemize}
   1.265 +
   1.266 +
   1.267 +\end{document} 
   1.268 +
   1.269 +
   1.270 +
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/0__Papers/VMS/VMS__Foundation_Paper/VMS__Full_conference_version/latex/bib_for_papers_jun_2012.bib	Sun Jul 15 00:17:30 2012 -0700
     2.3 @@ -0,0 +1,942 @@
     2.4 +
     2.5 +@inbook{PerfToolPoem,
     2.6 +title = {The Poems of John Godfrey Saxe, Complete edition},
     2.7 +chapter = {The Blind Men and the Elephant},
     2.8 +author = {John Godfrey Saxe},
     2.9 +publisher = {Boston: James R. Osgood and Company},
    2.10 +year = {1873},
    2.11 +pages = {77-78}
    2.12 +}
    2.13 +@article{PerfToolTau,
    2.14 +author = {Shende, Sameer S. and Malony, Allen D.},
    2.15 +title = {The Tau Parallel Performance System},
    2.16 +volume = {20},
    2.17 +number = {2},
    2.18 +pages = {287-311},
    2.19 +year = {Summer 2006},
    2.20 +journal = {International Journal of High Performance Computing Applications}
    2.21 +}
    2.22 +@ARTICLE{PerfToolParadyn,
    2.23 +author={Miller, B.P. and Callaghan, M.D. and Cargille, J.M. and Hollingsworth, J.K. and Irvin, R.B. and Karavanic, K.L. and Kunchithapadam, K. and Newhall, T.},
    2.24 +journal={Computer},
    2.25 +title={The Paradyn parallel performance measurement tool},
    2.26 +year={1995},
    2.27 +month={nov},
    2.28 +volume={28},
    2.29 +number={11},
    2.30 +pages={37 -46},
    2.31 +}
    2.32 +@ARTICLE{PerfToolParagraph,
    2.33 +author={Heath, M.T. and Etheridge, J.A.},
    2.34 +journal={Software, IEEE},
    2.35 +title={Visualizing the performance of parallel programs},
    2.36 +year={1991},
    2.37 +month={sept. },
    2.38 +volume={8},
    2.39 +number={5},
    2.40 +pages={29 -39},
    2.41 +}
    2.42 +@article{PerfToolStarSs,
    2.43 +  author    = {Steffen Brinkmann and
    2.44 +               Jos{\'e} Gracia and
    2.45 +               Christoph Niethammer and
    2.46 +               Rainer Keller},
    2.47 +  title     = {TEMANEJO - a debugger for task based parallel programming
    2.48 +               models},
    2.49 +  journal   = {CoRR},
    2.50 +  volume    = {abs/1112.4604},
    2.51 +  year      = {2011},
    2.52 +}
    2.53 +@techrep{SyncConstr_impl_w_distr_coherence_HW_Utah_96,
    2.54 +	author = {Carter, J. B. and Kuo, C.-C. and Kuramkote, R.},
    2.55 +	title = { A comparison of software and hardware synchronization mechanisms for distributed shared memory multiprocessors},
    2.56 +	institution = {University of Utah, Salt Lake City, UT},
    2.57 +	year = 1996,
    2.58 +	url = {http://www.cs.utah.edu/research/techreports/1996/pdf/UUCS-96-011.pdf},
    2.59 +	number = {UUCS-96-011}
    2.60 +}
    2.61 +@Article{SWCoherence_Hill_SW_for_shared_coherence_w_HW_support_93,
    2.62 +	author = {Hill, Mark D. and Larus, James R. and Reinhardt, Steven K. and Wood, David A.},
    2.63 +	title = {Cooperative shared memory: software and hardware for scalable multiprocessors},
    2.64 +	journal = {ACM Trans. Comput. Syst.},
    2.65 +	volume = 11,
    2.66 +	number = 4,
    2.67 +	year = 1993,
    2.68 +	pages = {300--318}
    2.69 +}
    2.70 +@InProceedings{SWCache_MIT_embedSW_manages_cache_w_HW_supp,
    2.71 +	author = {Chiou, Derek and Jain, Prabhat and Rudolph, Larry and Devadas, Srinivas},
    2.72 +	title = {Application-specific memory management for embedded systems using software-controlled caches},
    2.73 +	booktitle = {DAC},
    2.74 +	year = 2000,
    2.75 +	pages = {416--419}
    2.76 +}
    2.77 +@InProceedings{SWCache_instr_trig_HW_supp_04,
    2.78 +	author = {Janapsatya, Andhi and Parameswaran, Sri and Ignjatovic, A.},
    2.79 +	title = {Hardware/software managed scratchpad memory for embedded system},
    2.80 +	booktitle = {Proceedings of the 2004 IEEE/ACM International conference on Computer-aided design},
    2.81 +	series = {ICCAD '04},
    2.82 +	year = 2004,
    2.83 +	pages = {370--377}
    2.84 +}
    2.85 +@InProceedings{SWCache_arch_supp_OS_policy_06,
    2.86 +	author = {Rafique, Nauman and Lim, Won-Taek and Thottethodi, Mithuna},
    2.87 +	title = {Architectural support for operating system-driven CMP cache management},
    2.88 +	booktitle = {Proceedings of the 15th international conference on Parallel architectures and compilation techniques},
    2.89 +	series = {PACT '06},
    2.90 +	year = 2006,
    2.91 +	pages = {2--12}
    2.92 +}
    2.93 +@InProceedings{SWCoherence_on_Distr_Mem_90,
    2.94 +	author = {Bennett, J.K. and Carter, J.B. and Zwaenepoel, W.},
    2.95 +	booktitle = {Computer Architecture, 1990. Proceedings., 17th Annual International Symposium on},
    2.96 +	title = {Adaptive software cache management for distributed shared memory architectures},
    2.97 +	year = 1990,
    2.98 +	pages = {125 -134}
    2.99 +}
   2.100 +@InProceedings{Charm_runtime_opt_10,
   2.101 +	author = {Mei, Chao and Zheng, Gengbin and Gioachin, Filippo and Kal{\'e}, Laxmikant V.},
   2.102 +	title = {Optimizing a parallel runtime system for multicore clusters: a case study},
   2.103 +	booktitle = {The 2010 TeraGrid Conference},
   2.104 +	year = 2010,
   2.105 +	pages = {12:1--12:8}
   2.106 +}
   2.107 +@InProceedings{TCC_Hammond_ISCA_04,
   2.108 +	author = {Hammond, Lance and al, et},
   2.109 +	title = {Transactional Memory Coherence and Consistency},
   2.110 +	series = {ISCA '04},
   2.111 +	pages = {102--},
   2.112 +	booktitle = {},
   2.113 +	year = {}
   2.114 +}
   2.115 +@Misc{WorkTableHome,
   2.116 +	author = {Halle, Sean},
   2.117 +	note = {http://musictwodotoh.com/worktable/content/refman.pdf},
   2.118 +	title = {The WorkTable Language Reference Manual},
   2.119 +	year = 2012
   2.120 +}
   2.121 +@Misc{HWSimHome,
   2.122 +	author = {Halle, Sean and Hausers, Stefan},
   2.123 +	note = {http://musictwodotoh.com/hwsim/content/refman.pdf},
   2.124 +	title = {The HWSim Language Reference Manual},
   2.125 +	year = 2012
   2.126 +}
   2.127 +@Article{Lamport78,
   2.128 +	author = {Lamport, Leslie},
   2.129 +	title = {Time, clocks, and the ordering of events in a distributed system},
   2.130 +	journal = {Commun. ACM},
   2.131 +	volume = 21,
   2.132 +	issue = 7,
   2.133 +	year = 1978,
   2.134 +	pages = {558--565}
   2.135 +}
   2.136 +@Article{Lamport87,
   2.137 +	author = {Lamport, Leslie},
   2.138 +	title = {A fast mutual exclusion algorithm},
   2.139 +	journal = {ACM Trans. Comput. Syst.},
   2.140 +	volume = 5,
   2.141 +	issue = 1,
   2.142 +	year = 1987,
   2.143 +	pages = {1--11}
   2.144 +}
   2.145 +@InProceedings{Dijkstra67,
   2.146 +	author = {Dijkstra, Edsger W.},
   2.147 +	title = {The structure of the "{THE}"-multiprogramming system},
   2.148 +	booktitle = {Proceedings of the first ACM symposium on Operating System Principles},
   2.149 +	series = {SOSP '67},
   2.150 +	year = 1967,
   2.151 +	pages = {10.1--10.6}
   2.152 +}
   2.153 +@Article{Conway63,
   2.154 +	author = {Conway, Melvin E.},
   2.155 +	title = {Design of a separable transition-diagram compiler},
   2.156 +	journal = {Commun. ACM},
   2.157 +	volume = 6,
   2.158 +	issue = 7,
   2.159 +	year = 1963,
   2.160 +	pages = {396--408}
   2.161 +}
   2.162 +@Book{ComponentModel00,
   2.163 +	author = {G Leavens and M Sitaraman (eds)},
   2.164 +	title = {Foundations of Component-Based Systems},
   2.165 +	publisher = {Cambridge University Press},
   2.166 +	year = 2000
   2.167 +}
   2.168 +@Misc{Hewitt10,
   2.169 +	author = {Carl Hewitt},
   2.170 +	title = {Actor Model of Computation},
   2.171 +	year = 2010,
   2.172 +	note = {http://arxiv.org/abs/1008.1459}
   2.173 +}
   2.174 +@Article{Actors97,
   2.175 +	author = {Agha,G. and Mason,I. and Smith,S. and Talcott,C.},
   2.176 +	title = {A foundation for actor computation},
   2.177 +	journal = {Journal of Functional Programming},
   2.178 +	volume = 7,
   2.179 +	number = 01,
   2.180 +	pages = {1-72},
   2.181 +	year = 1997
   2.182 +}
   2.183 +@Article{SchedActivations,
   2.184 +	author = {Anderson, Thomas E. and Bershad, Brian N. and Lazowska, Edward D. and Levy, Henry M.},
   2.185 +	title = {Scheduler activations: effective kernel support for the user-level management of parallelism},
   2.186 +	journal = {ACM Trans. Comput. Syst.},
   2.187 +	volume = 10,
   2.188 +	issue = 1,
   2.189 +	month = {February},
   2.190 +	year = 1992,
   2.191 +	pages = {53--79}
   2.192 +}
   2.193 +@InProceedings{BOMinManticore,
   2.194 +	author = {Fluet, Matthew and Rainey, Mike and Reppy, John and Shaw, Adam and Xiao, Yingqi},
   2.195 +	title = {Manticore: a heterogeneous parallel language},
   2.196 +	booktitle = {Proceedings of the 2007 workshop on Declarative aspects of multicore programming},
   2.197 +	series = {DAMP '07},
   2.198 +	year = 2007,
   2.199 +	pages = {37--44},
   2.200 +	numpages = 8
   2.201 +}
   2.202 +@TechReport{GainFromChaos_Halle_92,
   2.203 +	author = {Halle, K.S. and Chua, Leon O. and Anishchenko, V.S. and Safonova, M.A.},
   2.204 +	title = {Signal Amplification via Chaos: Experimental Evidence},
   2.205 +	institution = {EECS Department, University of California, Berkeley},
   2.206 +	year = 1992,
   2.207 +	url = {http://www.eecs.berkeley.edu/Pubs/TechRpts/1992/2223.html},
   2.208 +	number = {UCB/ERL M92/130}
   2.209 +}
   2.210 +@InProceedings{HotPar10_w_BLIS,
   2.211 +	author = {Sean Halle and Albert Cohen},
   2.212 +	booktitle = {HOTPAR '10: USENIX Workshop on Hot Topics in Parallelism},
   2.213 +	month = {June},
   2.214 +	title = {Leveraging Semantics Attached to Function Calls to Isolate Applications from Hardware},
   2.215 +	year = 2010
   2.216 +}
   2.217 +@InProceedings{HotPar11_w_Stack,
   2.218 +	author = {Sean Halle and Albert Cohen},
   2.219 +	booktitle = {HOTPAR '11: USENIX Workshop on Hot Topics in Parallelism},
   2.220 +	month = {May},
   2.221 +	title = {},
   2.222 +	year = 2011
   2.223 +}
   2.224 +@Article{VMS_LCPC_11,
   2.225 +	author = {Sean Halle and Albert Cohen},
   2.226 +	title = {A Mutable Hardware Abstraction to Replace Threads},
   2.227 +	journal = {24th International Workshop on Languages and Compilers for Parallel Languages (LCPC11)},
   2.228 +	year = 2011
   2.229 +}
   2.230 +@Misc{StackTechRep_10,
   2.231 +	author = {Halle, Sean and Nadezhkin, Dmitry and Cohen, Albert},
   2.232 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2010/ucsc-soe-10-02.pdf},
   2.233 +	title = {A Framework to Support Research on Portable High Performance Parallelism},
   2.234 +	year = 2010
   2.235 +}
   2.236 +@Misc{CTBigStepSemTechRep_06,
   2.237 +	author = {Halle, Sean},
   2.238 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2006/ucsc-crl-06-11.pdf},
   2.239 +	title = {The Big-Step Operational Semantics of CodeTime Circuits},
   2.240 +	year = 2006
   2.241 +}
   2.242 +@Misc{MentalFrameworkTechRep_06,
   2.243 +	author = {Halle, Sean},
   2.244 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2006/ucsc-crl-06-12.pdf},
   2.245 +	title = {A Mental Framework for use in Creating Hardware Independent Parallel Languages},
   2.246 +	year = 2006
   2.247 +}
   2.248 +@Misc{DKUTechRep_09,
   2.249 +	author = {Halle, Sean and Cohen, Albert},
   2.250 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2009/ucsc-soe-09-06.pdf},
   2.251 +	title = {DKU Pattern for Performance Portable Parallel Software},
   2.252 +	year = 2009
   2.253 +}
   2.254 +@Misc{EQNLangTechRep,
   2.255 +	author = {Halle, Sean},
   2.256 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2009/ucsc-soe-09-16.pdf},
   2.257 +	title = {An Extensible Parallel Language},
   2.258 +	year = 2009
   2.259 +}
   2.260 +@Misc{CTOSTechRep,
   2.261 +	author = {Halle, Sean},
   2.262 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2009/ucsc-soe-09-15.pdf},
   2.263 +	title = {A Hardware-Independent Parallel Operating System Abstraction LayerParallelism},
   2.264 +	year = 2009
   2.265 +}
   2.266 +@Misc{SideEffectsTechRep,
   2.267 +	author = {Halle, Sean and Cohen, Albert},
   2.268 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2009/ucsc-soe-09-14.pdf},
   2.269 +	title = {Parallel Language Extensions for Side Effects},
   2.270 +	year = 2009
   2.271 +}
   2.272 +@Misc{BaCTiLTechRep,
   2.273 +	author = {Halle, Sean},
   2.274 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2006/ucsc-crl-06-08.pdf},
   2.275 +	title = {BaCTiL: Base CodeTime Language},
   2.276 +	year = 2006
   2.277 +}
   2.278 +@Misc{CTPlatformTechRep,
   2.279 +	author = {Halle, Sean},
   2.280 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2006/ucsc-crl-06-09.pdf},
   2.281 +	title = {The Elements of the CodeTime Software Platform},
   2.282 +	year = 2006
   2.283 +}
   2.284 +@Misc{CTRTTechRep,
   2.285 +	author = {Halle, Sean},
   2.286 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2006/ucsc-crl-06-10.pdf},
   2.287 +	title = {A Scalable and Efficient Peer-to-Peer Run-Time System for a Hardware Independent Software Platform},
   2.288 +	year = 2006
   2.289 +}
   2.290 +@Misc{CIPTechRep,
   2.291 +	author = {Halle, Sean},
   2.292 +	note = {http://www.soe.ucsc.edu/share/technical-reports/2005/ucsc-crl-05-05.pdf},
   2.293 +	title = {The Case for an Integrated Software Platform for HEC Illustrated Using the CodeTime Platform},
   2.294 +	year = 2005
   2.295 +}
   2.296 +@Misc{Halle2008,
   2.297 +	author = {Sean Halle and Albert Cohen},
   2.298 +	note = {http://omp.musictwodotoh.com},
   2.299 +	title = {{DKU} infrastructure server}
   2.300 +}
   2.301 +@Misc{DKUSourceForge,
   2.302 +	author = {Sean Halle and Albert Cohen},
   2.303 +	month = {November},
   2.304 +	note = {http://dku.sourceforge.net},
   2.305 +	title = {{DKU} website},
   2.306 +	year = 2008
   2.307 +}
   2.308 +@Misc{BLISHome,
   2.309 +	author = {Sean Halle and Albert Cohen},
   2.310 +	month = {November},
   2.311 +	note = {http://blisplatform.sourceforge.net},
   2.312 +	title = {{BLIS} website},
   2.313 +	year = 2008
   2.314 +}
   2.315 +@Misc{VMSHome,
   2.316 +	author = {Sean Halle and Merten Sach and Ben Juurlink and Albert Cohen},
   2.317 +	note = {http://virtualizedmasterslave.org},
   2.318 +	title = {{VMS} Home Page},
   2.319 +	year = 2010
   2.320 +}
   2.321 +@Misc{PStackHome,
   2.322 +	author = {Sean Halle},
   2.323 +	note = {http://pstack.sourceforge.net},
   2.324 +	title = {{PStack} Home Page},
   2.325 +	year = 2012
   2.326 +}
   2.327 +@Misc{DeblockingCode,
   2.328 +	note = {http://dku.svn.sourceforge.net/viewvc/dku/branches/DKU\_C\_\_Deblocking\_\_orig/},
   2.329 +	title = {{DKU-ized Deblocking Filter} code}
   2.330 +}
   2.331 +@Misc{SampleBLISCode,
   2.332 +	note = {http://dku.sourceforge.net/SampleCode.htm},
   2.333 +	title = {{Sample BLIS Code}}
   2.334 +}
   2.335 +@Misc{OMPHome,
   2.336 +	note = {http://www.openmediaplatform.eu/},
   2.337 +	title = {{Open Media Platform} homepage}
   2.338 +}
   2.339 +@Misc{MapReduceHome,
   2.340 +	author = {Google Corp.},
   2.341 +	note = {http://labs.google.com/papers/mapreduce.html},
   2.342 +	title = {{MapReduce} Home page}
   2.343 +}
   2.344 +@Misc{TBBHome,
   2.345 +	author = {Intel Corp.},
   2.346 +	note = {http://www.threadingbuildingblocks.org},
   2.347 +	title = {{TBB} Home page}
   2.348 +}
   2.349 +@Misc{HPFWikipedia,
   2.350 +	author = {Wikipedia},
   2.351 +	note = {http://en.wikipedia.org/wiki/High_Performance_Fortran},
   2.352 +	title = {{HPF} wikipedia page}
   2.353 +}
   2.354 +@Misc{OpenMPHome,
   2.355 +	author = {{OpenMP} organization},
   2.356 +	note = {http://www.openmp.org},
   2.357 +	title = {{OpenMP} Home page}
   2.358 +}
   2.359 +@Misc{MPIHome,
   2.360 +	author = {open-mpi organization},
   2.361 +	note = {http://www.open-mpi.org},
   2.362 +	title = {{Open MPI} Home page}
   2.363 +}
   2.364 +@Misc{OpenCLHome,
   2.365 +	author = {Kronos Group},
   2.366 +	note = {http://www.khronos.org/opencl},
   2.367 +	title = {{OpenCL} Home page}
   2.368 +}
   2.369 +@Misc{CILKHome,
   2.370 +	author = {Cilk group at MIT},
   2.371 +	note = {http://supertech.csail.mit.edu/cilk/},
   2.372 +	title = {{CILK} homepage}
   2.373 +}
   2.374 +@InProceedings{Fri98,
   2.375 +	author = {M. Frigo and C. E. Leiserson and K. H. Randall},
   2.376 +	title = {The Implementation of the Cilk-5 Multithreaded Language},
   2.377 +	booktitle = {PLDI '98: Proceedings of the 1998 ACM SIGPLAN conference on Programming language design and implementation},
   2.378 +	pages = {212--223},
   2.379 +	year = 1998,
   2.380 +	address = {Montreal, Quebec},
   2.381 +	month = jun
   2.382 +}
   2.383 +@Misc{TitaniumHome,
   2.384 +	note = {http://titanium.cs.berkeley.edu},
   2.385 +	title = {{Titanium} homepage}
   2.386 +}
   2.387 +@InProceedings{CnCInHotPar,
   2.388 +	author = {Knobe, Kathleen},
   2.389 +	booktitle = {HOTPAR '09: USENIX Workshop on Hot Topics in Parallelism},
   2.390 +	title = {Ease of Use with Concurrent Collections {(CnC)}},
   2.391 +	year = 2009
   2.392 +}
   2.393 +@Misc{CnCHome,
   2.394 +	author = {Intel Corp.},
   2.395 +	note = {http://software.intel.com/en-us/articles/intel-concurrent-collections-for-cc/},
   2.396 +	title = {{CnC} homepage}
   2.397 +}
   2.398 +@Misc{SpiralHome,
   2.399 +	author = {Spiral Group at CMU},
   2.400 +	note = {http://www.spiral.net},
   2.401 +	title = {{Spiral} homepage}
   2.402 +}
   2.403 +@Misc{ScalaHome,
   2.404 +	author = {Scala organization},
   2.405 +	note = {http://www.scala-lang.org/},
   2.406 +	title = {{Scala} homepage}
   2.407 +}
   2.408 +@Misc{UPCHome,
   2.409 +	author = {UPC group at UC Berkeley},
   2.410 +	note = {http://upc.lbl.gov/},
   2.411 +	title = {{Unified Parallel C} homepage}
   2.412 +}
   2.413 +@Misc{SuifHome,
   2.414 +	note = {http://suif.stanford.edu},
   2.415 +	title = {{Suif} Parallelizing compiler homepage}
   2.416 +}
   2.417 +@Article{SEJITS,
   2.418 +	author = {B. Catanzaro and S. Kamil and Y. Lee and K. Asanovic and J. Demmel and K. Keutzer and J. Shalf and K. Yelick and A. Fox},
   2.419 +	title = {SEJITS: Getting Productivity AND Performance With Selective Embedded JIT Specialization},
   2.420 +	journal = {First Workshop on Programmable Models for Emerging Architecture at the 18th International Conference on Parallel Architectures and Compilation Techniques },
   2.421 +	year = 2009
   2.422 +}
   2.423 +@InProceedings{Arnaldo3D,
   2.424 +	author = {Azevedo, Arnaldo and Meenderinck, Cor and Juurlink, Ben and Terechko, Andrei and Hoogerbrugge, Jan and Alvarez, Mauricio and Ramirez, Alex},
   2.425 +	title = {Parallel H.264 Decoding on an Embedded Multicore Processor},
   2.426 +	booktitle = {HiPEAC '09: Proceedings of the 4th International Conference on High Performance Embedded Architectures and Compilers},
   2.427 +	year = 2009,
   2.428 +	pages = {404--418}
   2.429 +}
   2.430 +@Article{NarayananGPUSched,
   2.431 +	author = {Narayanan Sundaram and Anand Raghunathan and Srimat T. Chakradhar},
   2.432 +	title = {A framework for efficient and scalable execution of domain-specific templates on GPUs},
   2.433 +	journal = {International Parallel and Distributed Processing Symposium {(IPDPS)}},
   2.434 +	year = 2009,
   2.435 +	pages = {1-12}
   2.436 +}
   2.437 +@InProceedings{PolyForGPU,
   2.438 +	author = {Baskaran, Muthu Manikandan and Bondhugula, Uday and Krishnamoorthy, Sriram and Ramanujam, J. and Rountev, Atanas and Sadayappan, P.},
   2.439 +	title = {A compiler framework for optimization of affine loop nests for gpgpus},
   2.440 +	booktitle = {ICS '08: Proceedings of the 22nd annual international conference on Supercomputing},
   2.441 +	year = 2008,
   2.442 +	pages = {225--234}
   2.443 +}
   2.444 +@InProceedings{Loulou08,
   2.445 +	author = {Pouchet, Louis-No\"{e}l and Bastoul, C\'{e}dric and Cohen, Albert and Cavazos, John},
   2.446 +	title = {Iterative optimization in the polyhedral model: part ii, multidimensional time},
   2.447 +	booktitle = {ACM SIGPLAN conference on Programming language design and implementation {(PLDI)} },
   2.448 +	year = 2008,
   2.449 +	pages = {90--100}
   2.450 +}
   2.451 +@InProceedings{MergeInHotPar,
   2.452 +	author = {Michael D. Linderman and James Balfour and Teresa H. Meng and William J. Dally},
   2.453 +	booktitle = {HOTPAR '09: USENIX Workshop on Hot Topics in Parallelism},
   2.454 +	month = {March},
   2.455 +	title = {Embracing Heterogeneity \- Parallel Programming for Changing Hardware},
   2.456 +	year = 2009
   2.457 +}
   2.458 +@InProceedings{GaloisRef,
   2.459 +	author = {Kulkarni, Milind and Pingali, Keshav and Walter, Bruce and Ramanarayanan, Ganesh and Bala, Kavita and Chew, L. Paul},
   2.460 +	title = {Optimistic parallelism requires abstractions},
   2.461 +	booktitle = {PLDI '07: Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation},
   2.462 +	year = 2007,
   2.463 +	pages = {211--222}
   2.464 +}
   2.465 +@Book{Allen2002,
   2.466 +	author = {Kennedy, Ken and Allen, John R.},
   2.467 +	title = {Optimizing compilers for modern architectures: a dependence-based approach},
   2.468 +	year = 2002,
   2.469 +	publisher = {Morgan Kaufmann Publishers Inc.}
   2.470 +}
   2.471 +@Misc{Stephens95,
   2.472 +	author = {R. Stephens},
   2.473 +	title = {A Survey Of Stream Processing},
   2.474 +	year = 1995
   2.475 +}
   2.476 +@InProceedings{Palatin06,
   2.477 +	author = {P Palatin and Y Lhuillier and O Temam},
   2.478 +	title = {CAPSULE: Hardware-assisted parallel execution of componentbased programs},
   2.479 +	booktitle = {In Proceedings of the 39th Annual International Symposium on Microarchitecture},
   2.480 +	year = 2006,
   2.481 +	pages = {247--258}
   2.482 +}
   2.483 +@InProceedings{Sequioa06,
   2.484 +	author = {Fatahalian,, Kayvon and Horn,, Daniel Reiter and Knight,, Timothy J. and Leem,, Larkhoon and Houston,, Mike and Park,, Ji Young and Erez,, Mattan and Ren,, Manman and Aiken,, Alex and Dally,, William J. and Hanrahan,, Pat},
   2.485 +	title = {Sequoia: programming the memory hierarchy},
   2.486 +	booktitle = {SC '06: Proceedings of the 2006 ACM/IEEE conference on Supercomputing},
   2.487 +	year = 2006,
   2.488 +	pages = 83
   2.489 +}
   2.490 +@Book{Cole89,
   2.491 +	author = {M Cole},
   2.492 +	title = {Algorithmic skeletons: Structured management of parallel computation},
   2.493 +	publisher = {Pitman},
   2.494 +	year = 1989
   2.495 +}
   2.496 +@InProceedings{Ginhac98,
   2.497 +	author = {Dominique Ginhac and Jocelyn Serot and Jean Pierre Derutin},
   2.498 +	title = {Fast prototyping of image processing applications using functional skeletons on a MIMD-DM architecture},
   2.499 +	booktitle = {In IAPR Workshop on Machine Vision and Applications},
   2.500 +	year = 1998,
   2.501 +	pages = {468--471}
   2.502 +}
   2.503 +@InProceedings{Serot08MetaParallel,
   2.504 +	author = {Serot, Jocelyn and Falcou, Joel},
   2.505 +	title = {Functional Meta-programming for Parallel Skeletons},
   2.506 +	booktitle = {ICCS '08: Proceedings of the 8th international conference on Computational Science, Part I},
   2.507 +	year = 2008,
   2.508 +	pages = {154--163}
   2.509 +}
   2.510 +@InProceedings{Darlington93,
   2.511 +	author = {J. Darlington and A. J. Field and P. G. Harrison and P. H. J. Kelly and D. W. N. Sharp and Q. Wu},
   2.512 +	title = {Parallel programming using skeleton functions},
   2.513 +	booktitle = {},
   2.514 +	year = 1993,
   2.515 +	pages = {146--160},
   2.516 +	publisher = {Springer-Verlag}
   2.517 +}
   2.518 +@Article{Asanovic06BerkeleyView,
   2.519 +	title = {{The landscape of parallel computing research: A view from berkeley}},
   2.520 +	author = {Asanovic, K. and Bodik, R. and Catanzaro, B.C. and Gebis, J.J. and Husbands, P. and Keutzer, K. and Patterson, D.A. and Plishker, W.L. and Shalf, J. and Williams, S.W. and others},
   2.521 +	journal = {Electrical Engineering and Computer Sciences, University of California at Berkeley, Technical Report No. UCB/EECS-2006-183, December},
   2.522 +	volume = 18,
   2.523 +	number = {2006-183},
   2.524 +	pages = 19,
   2.525 +	year = 2006
   2.526 +}
   2.527 +@Misc{BerkeleyPattLang,
   2.528 +	note = {http://parlab.eecs.berkeley.edu/wiki/patterns},
   2.529 +	title = {{Berkeley Pattern Language}}
   2.530 +}
   2.531 +@Book{Mattson04Patterns,
   2.532 +	title = {{Patterns for parallel programming}},
   2.533 +	author = {Mattson, T. and Sanders, B. and Massingill, B.},
   2.534 +	year = 2004,
   2.535 +	publisher = {Addison-Wesley Professional}
   2.536 +}
   2.537 +@Article{Skillicorn98,
   2.538 +	title = {{Models and languages for parallel computation}},
   2.539 +	author = {Skillicorn, D.B. and Talia, D.},
   2.540 +	journal = {ACM Computing Surveys (CSUR)},
   2.541 +	volume = 30,
   2.542 +	number = 2,
   2.543 +	pages = {123--169},
   2.544 +	year = 1998
   2.545 +}
   2.546 +@Conference{Blelloch93NESL,
   2.547 +	title = {{Implementation of a portable nested data-parallel language}},
   2.548 +	author = {Blelloch, G.E. and Hardwick, J.C. and Chatterjee, S. and Sipelstein, J. and Zagha, M.},
   2.549 +	booktitle = {Proceedings of the fourth ACM SIGPLAN symposium on Principles and practice of parallel programming},
   2.550 +	pages = {102--111},
   2.551 +	year = 1993,
   2.552 +	organization = {ACM New York, NY, USA}
   2.553 +}
   2.554 +@Article{McgrawSisal,
   2.555 +	title = {{SISAL: Streams and iteration in a single assignment language: Reference manual version 1.2}},
   2.556 +	author = {McGraw, J. and Skedzielewski, SK and Allan, SJ and Oldehoeft, RR and Glauert, J. and Kirkham, C. and Noyce, B. and Thomas, R.},
   2.557 +	journal = {Manual M-146, Rev},
   2.558 +	volume = 1
   2.559 +}
   2.560 +@Article{Gelernter85Linda,
   2.561 +	title = {{Generative communication in Linda}},
   2.562 +	author = {Gelernter, D.},
   2.563 +	journal = {ACM Transactions on Programming Languages and Systems (TOPLAS)},
   2.564 +	volume = 7,
   2.565 +	number = 1,
   2.566 +	pages = {80--112},
   2.567 +	year = 1985
   2.568 +}
   2.569 +@Article{Lin94ZPL,
   2.570 +	title = {{ZPL: An array sublanguage}},
   2.571 +	author = {Lin, C. and Snyder, L.},
   2.572 +	journal = {Lecture Notes in Computer Science},
   2.573 +	volume = 768,
   2.574 +	pages = {96--114},
   2.575 +	year = 1994
   2.576 +}
   2.577 +@Article{baecker97,
   2.578 +	author = {Ron Baecker and Chris DiGiano and Aaron Marcus},
   2.579 +	title = {Software visualization for debugging},
   2.580 +	journal = {Communications of the ACM},
   2.581 +	volume = 40,
   2.582 +	number = 4,
   2.583 +	year = 1997,
   2.584 +	issn = {0001-0782},
   2.585 +	pages = {44--54},
   2.586 +	publisher = {ACM Press}
   2.587 +}
   2.588 +@Article{ball96,
   2.589 +	author = {T. A. Ball and S. G. Eick},
   2.590 +	title = {Software Visualization in the Large},
   2.591 +	journal = {IEEE Computer},
   2.592 +	volume = 29,
   2.593 +	number = 4,
   2.594 +	year = 1996,
   2.595 +	month = {apr},
   2.596 +	pages = {33--43}
   2.597 +}
   2.598 +@Book{berry89,
   2.599 +	title = {{The chemical abstract machine}},
   2.600 +	author = {Berry, G. and Boudol, G.},
   2.601 +	year = 1989,
   2.602 +	publisher = {ACM Press}
   2.603 +}
   2.604 +@Article{blumofe95,
   2.605 +	author = {Robert D. Blumofe and Christopher F. Joerg and Bradley C. Kuszmaul and Charles E. Leiserson and Keith H. Randall and Yuli Zhou},
   2.606 +	title = {Cilk: an efficient multithreaded runtime system},
   2.607 +	journal = {SIGPLAN Not.},
   2.608 +	volume = 30,
   2.609 +	number = 8,
   2.610 +	year = 1995,
   2.611 +	pages = {207--216}
   2.612 +}
   2.613 +@Article{burch90,
   2.614 +	title = {{Symbolic model checking: 10^{20} states and beyond}},
   2.615 +	author = {Burch, JR and Clarke, EM and McMillan, KL and Dill, DL and Hwang, LJ},
   2.616 +	journal = {Logic in Computer Science, 1990. LICS'90, Proceedings},
   2.617 +	pages = {428--439},
   2.618 +	year = 1990
   2.619 +}
   2.620 +@Article{chamberlain98,
   2.621 +	author = {B. Chamberlain and S. Choi and E. Lewis and C. Lin and L. Snyder and W. Weathersby},
   2.622 +	title = {ZPL's WYSIWYG Performance Model},
   2.623 +	journal = {hips},
   2.624 +	volume = 00,
   2.625 +	year = 1998,
   2.626 +	isbn = {0-8186-8412-7},
   2.627 +	pages = 50
   2.628 +}
   2.629 +@Article{church41,
   2.630 +	author = {A. Church},
   2.631 +	title = {The Calculi of Lambda-Conversion},
   2.632 +	journal = {Annals of Mathematics Studies},
   2.633 +	number = 6,
   2.634 +	year = 1941,
   2.635 +	publisher = {Princeton University}
   2.636 +}
   2.637 +@Misc{CodeTimeSite,
   2.638 +	author = {Sean Halle},
   2.639 +	key = {CodeTime},
   2.640 +	title = {Homepage for The CodeTime Parallel Software Platform},
   2.641 +	note = {{\ttfamily http://codetime.sourceforge.net}}
   2.642 +}
   2.643 +@Misc{CodeTimePlatform,
   2.644 +	author = {Sean Halle},
   2.645 +	key = {CodeTime},
   2.646 +	title = {The CodeTime Parallel Software Platform},
   2.647 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTime\_Platform.pdf}}
   2.648 +}
   2.649 +@Misc{CodeTimeVS,
   2.650 +	author = {Sean Halle},
   2.651 +	key = {CodeTime},
   2.652 +	title = {The Specification of the CodeTime Platform's Virtual Server},
   2.653 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTime\_Virtual\_Server.pdf}}
   2.654 +}
   2.655 +@Misc{CodeTimeOS,
   2.656 +	author = {Sean Halle},
   2.657 +	key = {CodeTime},
   2.658 +	title = {A Hardware Independent OS},
   2.659 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTime\_OS.pdf}}
   2.660 +}
   2.661 +@Misc{CodeTimeSem,
   2.662 +	author = {Sean Halle},
   2.663 +	key = {CodeTime},
   2.664 +	title = {The Big-Step Operational Semantics of the CodeTime Computational Model},
   2.665 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTime\_Semantics.pdf}}
   2.666 +}
   2.667 +@Misc{CodeTimeTh,
   2.668 +	author = {Sean Halle},
   2.669 +	key = {CodeTime},
   2.670 +	title = {A Mental Framework for Use in Creating Hardware-Independent Parallel Languages},
   2.671 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTiime\_Theoretical\_Framework.pdf}}
   2.672 +}
   2.673 +@Misc{CodeTimeTh1,
   2.674 +	author = {Sean Halle},
   2.675 +	key = {CodeTime},
   2.676 +	title = {The CodeTime Parallel Software Platform},
   2.677 +	note = {{\ttfamily http://codetime.sourceforge.net}}
   2.678 +}
   2.679 +@Misc{CodeTimeTh2,
   2.680 +	author = {Sean Halle},
   2.681 +	key = {CodeTime},
   2.682 +	title = {The CodeTime Parallel Software Platform},
   2.683 +	note = {{\ttfamily http://codetime.sourceforge.net}}
   2.684 +}
   2.685 +@Misc{CodeTimeRT,
   2.686 +	author = {Sean Halle},
   2.687 +	key = {CodeTime},
   2.688 +	title = {The CodeTime Parallel Software Platform},
   2.689 +	note = {{\ttfamily http://codetime.sourceforge.net}}
   2.690 +}
   2.691 +@Misc{CodeTimeWebSite,
   2.692 +	author = {Sean Halle},
   2.693 +	key = {CodeTime},
   2.694 +	title = {The CodeTime Parallel Software Platform},
   2.695 +	note = {{\ttfamily http://codetime.sourceforge.net}}
   2.696 +}
   2.697 +@Misc{CodeTimeBaCTiL,
   2.698 +	author = {Sean Halle},
   2.699 +	key = {CodeTime},
   2.700 +	title = {The Base CodeTime Language},
   2.701 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTime\_BaCTiL.pdf}}
   2.702 +}
   2.703 +@Misc{CodeTimeCert,
   2.704 +	author = {Sean Halle},
   2.705 +	key = {CodeTime},
   2.706 +	title = {The CodeTime Certification Strategy},
   2.707 +	note = {{\ttfamily http://codetime.sourceforge.net/content/CodeTime\_Certification.pdf}}
   2.708 +}
   2.709 +@InProceedings{ducournau94,
   2.710 +	author = {R. Ducournau and M. Habib and M. Huchard and M. L. Mugnier},
   2.711 +	title = {Proposal for a monotonic multiple inheritance linearization},
   2.712 +	booktitle = {OOPSLA '94: Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications},
   2.713 +	year = 1994,
   2.714 +	pages = {164--175},
   2.715 +	publisher = {ACM Press}
   2.716 +}
   2.717 +@Article{emerson91,
   2.718 +	title = {{Tree automata, mu-calculus and determinacy}},
   2.719 +	author = {Emerson, EA and Jutla, CS},
   2.720 +	journal = {Proceedings of the 32nd Symposium on Foundations of Computer Science},
   2.721 +	pages = {368--377},
   2.722 +	year = 1991
   2.723 +}
   2.724 +@Article{fortune78,
   2.725 +	title = {{Parallelism in random access machines}},
   2.726 +	author = {Fortune, S. and Wyllie, J.},
   2.727 +	journal = {STOC '78: Proceedings of the tenth annual ACM symposium on Theory of computing},
   2.728 +	pages = {114--118},
   2.729 +	year = 1978,
   2.730 +	publisher = {ACM Press New York, NY, USA}
   2.731 +}
   2.732 +@Book{goldberg83,
   2.733 +	title = {{Smalltalk-80: the language and its implementation}},
   2.734 +	author = {Goldberg, A. and Robson, D.},
   2.735 +	year = 1983,
   2.736 +	publisher = {Addison-Wesley}
   2.737 +}
   2.738 +@InProceedings{goldschlager78,
   2.739 +	author = {Leslie M. Goldschlager},
   2.740 +	title = {A unified approach to models of synchronous parallel machines},
   2.741 +	booktitle = {STOC '78: Proceedings of the tenth annual ACM symposium on Theory of computing},
   2.742 +	year = 1978,
   2.743 +	pages = {89--94},
   2.744 +	location = {San Diego, California, United States},
   2.745 +	doi = {http://doi.acm.org/10.1145/800133.804336},
   2.746 +	publisher = {ACM Press}
   2.747 +}
   2.748 +@Book{gosling96,
   2.749 +	author = {J. Gosling and B. Joy and G. Steele and G. Bracha},
   2.750 +	title = {The Java Language Specification},
   2.751 +	publisher = {Addison-Wesley},
   2.752 +	year = 1996
   2.753 +}
   2.754 +@Article{hasselbring00,
   2.755 +	author = {Wilhelm Hasselbring},
   2.756 +	title = {Programming languages and systems for prototyping concurrent applications},
   2.757 +	journal = {ACM Comput. Surv.},
   2.758 +	volume = 32,
   2.759 +	number = 1,
   2.760 +	year = 2000,
   2.761 +	issn = {0360-0300},
   2.762 +	pages = {43--79},
   2.763 +	doi = {http://doi.acm.org/10.1145/349194.349199},
   2.764 +	publisher = {ACM Press},
   2.765 +	address = {New York, NY, USA}
   2.766 +}
   2.767 +@Article{hoare78,
   2.768 +	author = {C. A. R. Hoare},
   2.769 +	title = {Communicating Sequential Processes},
   2.770 +	journal = {Communications of the ACM},
   2.771 +	year = 1978,
   2.772 +	volume = 21,
   2.773 +	number = 8,
   2.774 +	pages = {666-677}
   2.775 +}
   2.776 +@Article{huth,
   2.777 +	title = {{A Unifying Framework for Model Checking Labeled Kripke Structures, Modal Transition Systems, and Interval Transition Systems}},
   2.778 +	author = {Huth, M.},
   2.779 +	journal = {Proceedings of the 19th International Conference on the Foundations of Software Technology \& Theoretical Computer Science, Lecture Notes in Computer Science},
   2.780 +	pages = {369--380},
   2.781 +	publisher = {Springer-Verlag}
   2.782 +}
   2.783 +@Article{johnston04,
   2.784 +	author = {Wesley M. Johnston and J. R. Paul Hanna and Richard J. Millar},
   2.785 +	title = {Advances in dataflow programming languages},
   2.786 +	journal = {ACM Comput. Surv.},
   2.787 +	volume = 36,
   2.788 +	number = 1,
   2.789 +	year = 2004,
   2.790 +	issn = {0360-0300},
   2.791 +	pages = {1--34},
   2.792 +	doi = {http://doi.acm.org/10.1145/1013208.1013209},
   2.793 +	publisher = {ACM Press},
   2.794 +	address = {New York, NY, USA}
   2.795 +}
   2.796 +@Book{koelbel93,
   2.797 +	author = {C. H. Koelbel and D. Loveman and R. Schreiber and G. Steele Jr},
   2.798 +	title = {High Performance Fortran Handbook},
   2.799 +	year = 1993,
   2.800 +	publisher = {MIT Press}
   2.801 +}
   2.802 +@Article{kozen83,
   2.803 +	title = {{Results on the Propositional mu-Calculus}},
   2.804 +	author = {Kozen, D.},
   2.805 +	journal = {TCS},
   2.806 +	volume = 27,
   2.807 +	pages = {333--354},
   2.808 +	year = 1983
   2.809 +}
   2.810 +@Article{kripke63,
   2.811 +	title = {{Semantical analysis of modal logic}},
   2.812 +	author = {Kripke, S.},
   2.813 +	journal = {Zeitschrift fur Mathematische Logik und Grundlagen der Mathematik},
   2.814 +	volume = 9,
   2.815 +	pages = {67--96},
   2.816 +	year = 1963
   2.817 +}
   2.818 +@Book{mcGraw85,
   2.819 +	author = {J McGraw and S. Skedzielewski and S. Allan and R Odefoeft},
   2.820 +	title = {SISAL: Streams and Iteration in a Single-Assignment Language: Reference Manual Version 1.2},
   2.821 +	note = {Manual M-146 Rev. 1},
   2.822 +	publisher = {Lawrence Livermore National Laboratory},
   2.823 +	year = 1985
   2.824 +}
   2.825 +@Book{milner80,
   2.826 +	title = {{A Calculus of Communicating Systems, volume 92 of Lecture Notes in Computer Science}},
   2.827 +	author = {Milner, R.},
   2.828 +	year = 1980,
   2.829 +	publisher = {Springer-Verlag}
   2.830 +}
   2.831 +@Article{milner92,
   2.832 +	title = {{A calculus of mobile processes, parts I and II}},
   2.833 +	author = {Milner, R. and Parrow, J. and Walker, D.},
   2.834 +	journal = {Information and Computation},
   2.835 +	volume = 100,
   2.836 +	number = 1,
   2.837 +	pages = {1--40 and 41--77},
   2.838 +	year = 1992,
   2.839 +	publisher = {Academic Press}
   2.840 +}
   2.841 +@Book{milner99,
   2.842 +	author = {Robin Milner},
   2.843 +	title = {Communicating and Mobile Systems: The pi-Calculus},
   2.844 +	publisher = {Cambridge University Press},
   2.845 +	year = 1999
   2.846 +}
   2.847 +@Book{MPIForum94,
   2.848 +	author = {M. P. I. Forum},
   2.849 +	title = {MPI: A Message-Passing Interface Standard},
   2.850 +	year = 1994
   2.851 +}
   2.852 +@Article{petri62,
   2.853 +	title = {{Fundamentals of a theory of asynchronous information flow}},
   2.854 +	author = {Petri, C.A.},
   2.855 +	journal = {Proc. IFIP Congress},
   2.856 +	volume = 62,
   2.857 +	pages = {386--390},
   2.858 +	year = 1962
   2.859 +}
   2.860 +@Book{pierce02,
   2.861 +	title = {Types and Programming Languages},
   2.862 +	author = {Pierce, B. C.},
   2.863 +	year = 2002,
   2.864 +	publisher = {MIT Press}
   2.865 +}
   2.866 +@Article{price,
   2.867 +	author = {B. A. Price and R. M. Baecker and L. S. Small},
   2.868 +	title = {A Principled Taxonomy of Software Visualization},
   2.869 +	journal = {Journal of Visual Languages and Computing},
   2.870 +	volume = 4,
   2.871 +	number = 3,
   2.872 +	pages = {211--266}
   2.873 +}
   2.874 +@Misc{pythonWebSite,
   2.875 +	key = {Python},
   2.876 +	title = {The Python Software Foundation Mission Statement},
   2.877 +	note = {{\ttfamily http://www.python.org/psf/mission.html}}
   2.878 +}
   2.879 +@Unpublished{reed03,
   2.880 +	editor = {Daniel A. Reed},
   2.881 +	title = {Workshop on The Roadmap for the Revitalization of High-End Computing},
   2.882 +	day = {16--18},
   2.883 +	month = {jun},
   2.884 +	year = 2003,
   2.885 +	note = {Available at {\ttfamily http://www.cra.org/reports/supercomputing.web.pdf}}
   2.886 +}
   2.887 +@Article{reeves84,
   2.888 +	author = {A. P. Reeves},
   2.889 +	title = {Parallel Pascal -- An Extended Pascal for Parallel Computers},
   2.890 +	journal = {Journal of Parallel and Distributed Computing},
   2.891 +	volume = 1,
   2.892 +	number = {},
   2.893 +	year = 1984,
   2.894 +	month = {aug},
   2.895 +	pages = {64--80}
   2.896 +}
   2.897 +@Article{skillicorn98,
   2.898 +	author = {David B. Skillicorn and Domenico Talia},
   2.899 +	title = {Models and languages for parallel computation},
   2.900 +	journal = {ACM Comput. Surv.},
   2.901 +	volume = 30,
   2.902 +	number = 2,
   2.903 +	year = 1998,
   2.904 +	issn = {0360-0300},
   2.905 +	pages = {123--169},
   2.906 +	doi = {http://doi.acm.org/10.1145/280277.280278},
   2.907 +	publisher = {ACM Press},
   2.908 +	address = {New York, NY, USA}
   2.909 +}
   2.910 +@Article{stefik86,
   2.911 +	title = {Object Oriented Programming: Themes and Variations},
   2.912 +	author = {Stefik, M. and Bobrow, D. G.},
   2.913 +	journal = {The AI Magazine},
   2.914 +	volume = 6,
   2.915 +	number = 4,
   2.916 +	year = 1986
   2.917 +}
   2.918 +@Book{stirling92,
   2.919 +	title = {{Modal and Temporal Logics}},
   2.920 +	author = {Stirling, C.},
   2.921 +	year = 1992,
   2.922 +	publisher = {University of Edinburgh, Department of Computer Science}
   2.923 +}
   2.924 +@Misc{TitaniumWebSite,
   2.925 +	author = {Paul Hilfinger and et. al.},
   2.926 +	title = {The Titanium Project Home Page},
   2.927 +	note = {{\ttfamily http://www.cs.berkeley.edu/projects/titanium}}
   2.928 +}
   2.929 +@Misc{turing38,
   2.930 +	author = {A. Turing},
   2.931 +	note = {http://www.turingarchive.org/intro/, and http://www.turing.org.uk/sources/biblio4.html, and http://web.comlab.ox.ac.uk/oucl/research/areas/ieg/e-library/sources/tp2-ie.pdf},
   2.932 +	year = 1938
   2.933 +}
   2.934 +@Book{vonNeumann45,
   2.935 +	title = {First Draft of a Report on the EDVAC},
   2.936 +	author = {J. von Neumann},
   2.937 +	year = 1945,
   2.938 +	publisher = {United States Army Ordnance Department}
   2.939 +}
   2.940 +@Book{winskel93,
   2.941 +	title = {{The Formal Semantics of Programming Languages}},
   2.942 +	author = {Winskel, G.},
   2.943 +	year = 1993,
   2.944 +	publisher = {MIT Press}
   2.945 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/0__Papers/VMS/VMS__Foundation_Paper/VMS__Full_conference_version/latex/sigplanconf.cls	Sun Jul 15 00:17:30 2012 -0700
     3.3 @@ -0,0 +1,1273 @@
     3.4 +%-----------------------------------------------------------------------------
     3.5 +%
     3.6 +%               LaTeX Class/Style File
     3.7 +%
     3.8 +% Name:         sigplanconf.cls
     3.9 +%
    3.10 +% Purpose:      A LaTeX 2e class file for SIGPLAN conference proceedings.
    3.11 +%               This class file supercedes acm_proc_article-sp,
    3.12 +%               sig-alternate, and sigplan-proc.
    3.13 +%
    3.14 +% Author:       Paul C. Anagnostopoulos
    3.15 +%               Windfall Software
    3.16 +%               978 371-2316
    3.17 +%               paul [atsign] windfall.com
    3.18 +%
    3.19 +% Created:      12 September 2004
    3.20 +%
    3.21 +% Revisions:    See end of file.
    3.22 +%
    3.23 +% This work is licensed under the Creative Commons Attribution License.
    3.24 +% To view a copy of this license, visit
    3.25 +%   http://creativecommons.org/licenses/by/3.0/
    3.26 +% or send a letter to Creative Commons, 171 2nd Street, Suite 300,
    3.27 +% San Francisco, California, 94105, U.S.A.
    3.28 +%
    3.29 +%-----------------------------------------------------------------------------
    3.30 +
    3.31 +
    3.32 +\NeedsTeXFormat{LaTeX2e}[1995/12/01]
    3.33 +\ProvidesClass{sigplanconf}[2011/11/08 v2.5 ACM SIGPLAN Proceedings]
    3.34 +
    3.35 +% The following few pages contain LaTeX programming extensions adapted
    3.36 +% from the ZzTeX macro package.
    3.37 +
    3.38 +%                       Token Hackery
    3.39 +%                       ----- -------
    3.40 +
    3.41 +
    3.42 +\def \@expandaftertwice {\expandafter\expandafter\expandafter}
    3.43 +\def \@expandafterthrice {\expandafter\expandafter\expandafter\expandafter
    3.44 +                          \expandafter\expandafter\expandafter}
    3.45 +
    3.46 +% This macro discards the next token.
    3.47 +
    3.48 +\def \@discardtok #1{}%                                  token
    3.49 +
    3.50 +% This macro removes the `pt' following a dimension.
    3.51 +
    3.52 +{\catcode `\p = 12 \catcode `\t = 12
    3.53 +
    3.54 +\gdef \@remover #1pt{#1}
    3.55 +
    3.56 +} % \catcode
    3.57 +
    3.58 +% This macro extracts the contents of a macro and returns it as plain text.
    3.59 +% Usage: \expandafter\@defof \meaning\macro\@mark
    3.60 +
    3.61 +\def \@defof #1:->#2\@mark{#2}
    3.62 +
    3.63 +%                       Control Sequence Names
    3.64 +%                       ------- -------- -----
    3.65 +
    3.66 +
    3.67 +\def \@name #1{%                                        {\tokens}
    3.68 +  \csname \expandafter\@discardtok \string#1\endcsname}
    3.69 +
    3.70 +\def \@withname #1#2{%                                  {\command}{\tokens}
    3.71 +  \expandafter#1\csname \expandafter\@discardtok \string#2\endcsname}
    3.72 +
    3.73 +%                       Flags (Booleans)
    3.74 +%                       ----- ----------
    3.75 +
    3.76 +% The boolean literals \@true and \@false are appropriate for use with
    3.77 +% the \if command, which tests the codes of the next two characters.
    3.78 +
    3.79 +\def \@true {TT}
    3.80 +\def \@false {FL}
    3.81 +
    3.82 +\def \@setflag #1=#2{\edef #1{#2}}%              \flag = boolean
    3.83 +
    3.84 +%                       IF and Predicates
    3.85 +%                       -- --- ----------
    3.86 +
    3.87 +% A "predicate" is a macro that returns \@true or \@false as its value.
    3.88 +% Such values are suitable for use with the \if conditional.  For example:
    3.89 +%
    3.90 +%   \if \@oddp{\x} <then-clause> \else <else-clause> \fi
    3.91 +
    3.92 +% A predicate can be used with \@setflag as follows:
    3.93 +%
    3.94 +%   \@setflag \flag = {<predicate>}
    3.95 +
    3.96 +% Here are the predicates for TeX's repertoire of conditional
    3.97 +% commands.  These might be more appropriately interspersed with
    3.98 +% other definitions in this module, but what the heck.
    3.99 +% Some additional "obvious" predicates are defined.
   3.100 +
   3.101 +\def \@eqlp   #1#2{\ifnum #1 = #2\@true \else \@false \fi}
   3.102 +\def \@neqlp  #1#2{\ifnum #1 = #2\@false \else \@true \fi}
   3.103 +\def \@lssp   #1#2{\ifnum #1 < #2\@true \else \@false \fi}
   3.104 +\def \@gtrp   #1#2{\ifnum #1 > #2\@true \else \@false \fi}
   3.105 +\def \@zerop  #1{\ifnum #1 = 0\@true \else \@false \fi}
   3.106 +\def \@onep   #1{\ifnum #1 = 1\@true \else \@false \fi}
   3.107 +\def \@posp   #1{\ifnum #1 > 0\@true \else \@false \fi}
   3.108 +\def \@negp   #1{\ifnum #1 < 0\@true \else \@false \fi}
   3.109 +\def \@oddp   #1{\ifodd #1\@true \else \@false \fi}
   3.110 +\def \@evenp  #1{\ifodd #1\@false \else \@true \fi}
   3.111 +\def \@rangep #1#2#3{\if \@orp{\@lssp{#1}{#2}}{\@gtrp{#1}{#3}}\@false \else
   3.112 +                                                          \@true \fi}
   3.113 +\def \@tensp  #1{\@rangep{#1}{10}{19}}
   3.114 +
   3.115 +\def \@dimeqlp   #1#2{\ifdim #1 = #2\@true \else \@false \fi}
   3.116 +\def \@dimneqlp  #1#2{\ifdim #1 = #2\@false \else \@true \fi}
   3.117 +\def \@dimlssp   #1#2{\ifdim #1 < #2\@true \else \@false \fi}
   3.118 +\def \@dimgtrp   #1#2{\ifdim #1 > #2\@true \else \@false \fi}
   3.119 +\def \@dimzerop  #1{\ifdim #1 = 0pt\@true \else \@false \fi}
   3.120 +\def \@dimposp   #1{\ifdim #1 > 0pt\@true \else \@false \fi}
   3.121 +\def \@dimnegp   #1{\ifdim #1 < 0pt\@true \else \@false \fi}
   3.122 +
   3.123 +\def \@vmodep     {\ifvmode \@true \else \@false \fi}
   3.124 +\def \@hmodep     {\ifhmode \@true \else \@false \fi}
   3.125 +\def \@mathmodep  {\ifmmode \@true \else \@false \fi}
   3.126 +\def \@textmodep  {\ifmmode \@false \else \@true \fi}
   3.127 +\def \@innermodep {\ifinner \@true \else \@false \fi}
   3.128 +
   3.129 +\long\def \@codeeqlp #1#2{\if #1#2\@true \else \@false \fi}
   3.130 +
   3.131 +\long\def \@cateqlp #1#2{\ifcat #1#2\@true \else \@false \fi}
   3.132 +
   3.133 +\long\def \@tokeqlp  #1#2{\ifx #1#2\@true \else \@false \fi}
   3.134 +\long\def \@xtokeqlp #1#2{\expandafter\ifx #1#2\@true \else \@false \fi}
   3.135 +
   3.136 +\long\def \@definedp #1{%
   3.137 +  \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
   3.138 +                   \relax \@false \else \@true \fi}
   3.139 +
   3.140 +\long\def \@undefinedp #1{%
   3.141 +  \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
   3.142 +                   \relax \@true \else \@false \fi}
   3.143 +
   3.144 +\def \@emptydefp #1{\ifx #1\@empty \@true \else \@false \fi}%       {\name}
   3.145 +
   3.146 +\let \@emptylistp = \@emptydefp
   3.147 +
   3.148 +\long\def \@emptyargp #1{%                               {#n}
   3.149 +  \@empargp #1\@empargq\@mark}
   3.150 +\long\def \@empargp #1#2\@mark{%
   3.151 +  \ifx #1\@empargq \@true \else \@false \fi}
   3.152 +\def \@empargq {\@empargq}
   3.153 +
   3.154 +\def \@emptytoksp #1{%                                   {\tokenreg}
   3.155 +  \expandafter\@emptoksp \the#1\@mark}
   3.156 +
   3.157 +\long\def \@emptoksp #1\@mark{\@emptyargp{#1}}
   3.158 +
   3.159 +\def \@voidboxp #1{\ifvoid #1\@true \else \@false \fi}
   3.160 +\def \@hboxp #1{\ifhbox #1\@true \else \@false \fi}
   3.161 +\def \@vboxp #1{\ifvbox #1\@true \else \@false \fi}
   3.162 +
   3.163 +\def \@eofp #1{\ifeof #1\@true \else \@false \fi}
   3.164 +
   3.165 +
   3.166 +% Flags can also be used as predicates, as in:
   3.167 +%
   3.168 +%   \if \flaga <then-clause> \else <else-clause> \fi
   3.169 +
   3.170 +
   3.171 +% Now here we have predicates for the common logical operators.
   3.172 +
   3.173 +\def \@notp #1{\if #1\@false \else \@true \fi}
   3.174 +
   3.175 +\def \@andp #1#2{\if #1%
   3.176 +                  \if #2\@true \else \@false \fi
   3.177 +                \else
   3.178 +                  \@false
   3.179 +                \fi}
   3.180 +
   3.181 +\def \@orp #1#2{\if #1%
   3.182 +                 \@true
   3.183 +               \else
   3.184 +                 \if #2\@true \else \@false \fi
   3.185 +               \fi}
   3.186 +
   3.187 +\def \@xorp #1#2{\if #1%
   3.188 +                  \if #2\@false \else \@true \fi
   3.189 +                \else
   3.190 +                  \if #2\@true \else \@false \fi
   3.191 +                \fi}
   3.192 +
   3.193 +%                       Arithmetic
   3.194 +%                       ----------
   3.195 +
   3.196 +\def \@increment #1{\advance #1 by 1\relax}%             {\count}
   3.197 +
   3.198 +\def \@decrement #1{\advance #1 by -1\relax}%            {\count}
   3.199 +
   3.200 +%                       Options
   3.201 +%                       -------
   3.202 +
   3.203 +
   3.204 +\@setflag \@authoryear = \@false
   3.205 +\@setflag \@blockstyle = \@false
   3.206 +\@setflag \@copyrightwanted = \@true
   3.207 +\@setflag \@explicitsize = \@false
   3.208 +\@setflag \@mathtime = \@false
   3.209 +\@setflag \@natbib = \@true
   3.210 +\@setflag \@ninepoint = \@true
   3.211 +\newcount{\@numheaddepth} \@numheaddepth = 3
   3.212 +\@setflag \@onecolumn = \@false
   3.213 +\@setflag \@preprint = \@false
   3.214 +\@setflag \@reprint = \@false
   3.215 +\@setflag \@tenpoint = \@false
   3.216 +\@setflag \@times = \@false
   3.217 +
   3.218 +% Note that all the dangerous article class options are trapped.
   3.219 +
   3.220 +\DeclareOption{9pt}{\@setflag \@ninepoint = \@true
   3.221 +                    \@setflag \@explicitsize = \@true}
   3.222 +
   3.223 +\DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}%
   3.224 +                     \@setflag \@ninepoint = \@false
   3.225 +                     \@setflag \@tenpoint = \@true
   3.226 +                     \@setflag \@explicitsize = \@true}
   3.227 +
   3.228 +\DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}%
   3.229 +                     \@setflag \@ninepoint = \@false
   3.230 +                     \@setflag \@explicitsize = \@true}
   3.231 +
   3.232 +\DeclareOption{12pt}{\@unsupportedoption{12pt}}
   3.233 +
   3.234 +\DeclareOption{a4paper}{\@unsupportedoption{a4paper}}
   3.235 +
   3.236 +\DeclareOption{a5paper}{\@unsupportedoption{a5paper}}
   3.237 +
   3.238 +\DeclareOption{authoryear}{\@setflag \@authoryear = \@true}
   3.239 +
   3.240 +\DeclareOption{b5paper}{\@unsupportedoption{b5paper}}
   3.241 +
   3.242 +\DeclareOption{blockstyle}{\@setflag \@blockstyle = \@true}
   3.243 +
   3.244 +\DeclareOption{cm}{\@setflag \@times = \@false}
   3.245 +
   3.246 +\DeclareOption{computermodern}{\@setflag \@times = \@false}
   3.247 +
   3.248 +\DeclareOption{executivepaper}{\@unsupportedoption{executivepaper}}
   3.249 +
   3.250 +\DeclareOption{indentedstyle}{\@setflag \@blockstyle = \@false}
   3.251 +
   3.252 +\DeclareOption{landscape}{\@unsupportedoption{landscape}}
   3.253 +
   3.254 +\DeclareOption{legalpaper}{\@unsupportedoption{legalpaper}}
   3.255 +
   3.256 +\DeclareOption{letterpaper}{\@unsupportedoption{letterpaper}}
   3.257 +
   3.258 +\DeclareOption{mathtime}{\@setflag \@mathtime = \@true}
   3.259 +
   3.260 +\DeclareOption{natbib}{\@setflag \@natbib = \@true}
   3.261 +
   3.262 +\DeclareOption{nonatbib}{\@setflag \@natbib = \@false}
   3.263 +
   3.264 +\DeclareOption{nocopyrightspace}{\@setflag \@copyrightwanted = \@false}
   3.265 +
   3.266 +\DeclareOption{notitlepage}{\@unsupportedoption{notitlepage}}
   3.267 +
   3.268 +\DeclareOption{numberedpars}{\@numheaddepth = 4}
   3.269 +
   3.270 +\DeclareOption{numbers}{\@setflag \@authoryear = \@false}
   3.271 +
   3.272 +%%%\DeclareOption{onecolumn}{\@setflag \@onecolumn = \@true}
   3.273 +
   3.274 +\DeclareOption{preprint}{\@setflag \@preprint = \@true}
   3.275 +
   3.276 +\DeclareOption{reprint}{\@setflag \@reprint = \@true}
   3.277 +
   3.278 +\DeclareOption{times}{\@setflag \@times = \@true}
   3.279 +
   3.280 +\DeclareOption{titlepage}{\@unsupportedoption{titlepage}}
   3.281 +
   3.282 +\DeclareOption{twocolumn}{\@setflag \@onecolumn = \@false}
   3.283 +
   3.284 +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
   3.285 +
   3.286 +\ExecuteOptions{9pt,indentedstyle,times}
   3.287 +\@setflag \@explicitsize = \@false
   3.288 +\ProcessOptions
   3.289 +
   3.290 +\if \@onecolumn
   3.291 +  \if \@notp{\@explicitsize}%
   3.292 +    \@setflag \@ninepoint = \@false
   3.293 +    \PassOptionsToClass{11pt}{article}%
   3.294 +  \fi
   3.295 +  \PassOptionsToClass{twoside,onecolumn}{article}
   3.296 +\else
   3.297 +  \PassOptionsToClass{twoside,twocolumn}{article}
   3.298 +\fi
   3.299 +\LoadClass{article}
   3.300 +
   3.301 +\def \@unsupportedoption #1{%
   3.302 +  \ClassError{proc}{The standard '#1' option is not supported.}}
   3.303 +
   3.304 +% This can be used with the 'reprint' option to get the final folios.
   3.305 +
   3.306 +\def \setpagenumber #1{%
   3.307 +  \setcounter{page}{#1}}
   3.308 +
   3.309 +\AtEndDocument{\label{sigplanconf@finalpage}}
   3.310 +
   3.311 +%                       Utilities
   3.312 +%                       ---------
   3.313 +
   3.314 +
   3.315 +\newcommand{\setvspace}[2]{%
   3.316 +  #1 = #2
   3.317 +  \advance #1 by -1\parskip}
   3.318 +
   3.319 +%                       Document Parameters
   3.320 +%                       -------- ----------
   3.321 +
   3.322 +
   3.323 +% Page:
   3.324 +
   3.325 +\setlength{\hoffset}{-1in}
   3.326 +\setlength{\voffset}{-1in}
   3.327 +
   3.328 +\setlength{\topmargin}{1in}
   3.329 +\setlength{\headheight}{0pt}
   3.330 +\setlength{\headsep}{0pt}
   3.331 +
   3.332 +\if \@onecolumn
   3.333 +  \setlength{\evensidemargin}{.75in}
   3.334 +  \setlength{\oddsidemargin}{.75in}
   3.335 +\else
   3.336 +  \setlength{\evensidemargin}{.75in}
   3.337 +  \setlength{\oddsidemargin}{.75in}
   3.338 +\fi
   3.339 +
   3.340 +% Text area:
   3.341 +
   3.342 +\newdimen{\standardtextwidth}
   3.343 +\setlength{\standardtextwidth}{42pc}
   3.344 +
   3.345 +\if \@onecolumn
   3.346 +  \setlength{\textwidth}{40.5pc}
   3.347 +\else
   3.348 +  \setlength{\textwidth}{\standardtextwidth}
   3.349 +\fi
   3.350 +
   3.351 +\setlength{\topskip}{8pt}
   3.352 +\setlength{\columnsep}{2pc}
   3.353 +\setlength{\textheight}{54.5pc}
   3.354 +
   3.355 +% Running foot:
   3.356 +
   3.357 +\setlength{\footskip}{30pt}
   3.358 +
   3.359 +% Paragraphs:
   3.360 +
   3.361 +\if \@blockstyle
   3.362 +  \setlength{\parskip}{5pt plus .1pt minus .5pt}
   3.363 +  \setlength{\parindent}{0pt}
   3.364 +\else
   3.365 +  \setlength{\parskip}{0pt}
   3.366 +  \setlength{\parindent}{12pt}
   3.367 +\fi
   3.368 +
   3.369 +\setlength{\lineskip}{.5pt}
   3.370 +\setlength{\lineskiplimit}{\lineskip}
   3.371 +
   3.372 +\frenchspacing
   3.373 +\pretolerance = 400
   3.374 +\tolerance = \pretolerance
   3.375 +\setlength{\emergencystretch}{5pt}
   3.376 +\clubpenalty = 10000
   3.377 +\widowpenalty = 10000
   3.378 +\setlength{\hfuzz}{.5pt}
   3.379 +
   3.380 +% Standard vertical spaces:
   3.381 +
   3.382 +\newskip{\standardvspace}
   3.383 +\setvspace{\standardvspace}{5pt plus 1pt minus .5pt}
   3.384 +
   3.385 +% Margin paragraphs:
   3.386 +
   3.387 +\setlength{\marginparwidth}{36pt}
   3.388 +\setlength{\marginparsep}{2pt}
   3.389 +\setlength{\marginparpush}{8pt}
   3.390 +
   3.391 +
   3.392 +\setlength{\skip\footins}{8pt plus 3pt minus 1pt}
   3.393 +\setlength{\footnotesep}{9pt}
   3.394 +
   3.395 +\renewcommand{\footnoterule}{%
   3.396 +  \hrule width .5\columnwidth height .33pt depth 0pt}
   3.397 +
   3.398 +\renewcommand{\@makefntext}[1]{%
   3.399 +  \noindent \@makefnmark \hspace{1pt}#1}
   3.400 +
   3.401 +% Floats:
   3.402 +
   3.403 +\setcounter{topnumber}{4}
   3.404 +\setcounter{bottomnumber}{1}
   3.405 +\setcounter{totalnumber}{4}
   3.406 +
   3.407 +\renewcommand{\fps@figure}{tp}
   3.408 +\renewcommand{\fps@table}{tp}
   3.409 +\renewcommand{\topfraction}{0.90}
   3.410 +\renewcommand{\bottomfraction}{0.30}
   3.411 +\renewcommand{\textfraction}{0.10}
   3.412 +\renewcommand{\floatpagefraction}{0.75}
   3.413 +
   3.414 +\setcounter{dbltopnumber}{4}
   3.415 +
   3.416 +\renewcommand{\dbltopfraction}{\topfraction}
   3.417 +\renewcommand{\dblfloatpagefraction}{\floatpagefraction}
   3.418 +
   3.419 +\setlength{\floatsep}{18pt plus 4pt minus 2pt}
   3.420 +\setlength{\textfloatsep}{18pt plus 4pt minus 3pt}
   3.421 +\setlength{\intextsep}{10pt plus 4pt minus 3pt}
   3.422 +
   3.423 +\setlength{\dblfloatsep}{18pt plus 4pt minus 2pt}
   3.424 +\setlength{\dbltextfloatsep}{20pt plus 4pt minus 3pt}
   3.425 +
   3.426 +% Miscellaneous:
   3.427 +
   3.428 +\errorcontextlines = 5
   3.429 +
   3.430 +%                       Fonts
   3.431 +%                       -----
   3.432 +
   3.433 +
   3.434 +\if \@times
   3.435 +  \renewcommand{\rmdefault}{ptm}%
   3.436 +  \if \@mathtime
   3.437 +    \usepackage[mtbold,noTS1]{mathtime}%
   3.438 +  \else
   3.439 +%%%    \usepackage{mathptm}%
   3.440 +  \fi
   3.441 +\else
   3.442 +  \relax
   3.443 +\fi
   3.444 +
   3.445 +\if \@ninepoint
   3.446 +
   3.447 +\renewcommand{\normalsize}{%
   3.448 +  \@setfontsize{\normalsize}{9pt}{10pt}%
   3.449 +  \setlength{\abovedisplayskip}{5pt plus 1pt minus .5pt}%
   3.450 +  \setlength{\belowdisplayskip}{\abovedisplayskip}%
   3.451 +  \setlength{\abovedisplayshortskip}{3pt plus 1pt minus 2pt}%
   3.452 +  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
   3.453 +
   3.454 +\renewcommand{\tiny}{\@setfontsize{\tiny}{5pt}{6pt}}
   3.455 +
   3.456 +\renewcommand{\scriptsize}{\@setfontsize{\scriptsize}{7pt}{8pt}}
   3.457 +
   3.458 +\renewcommand{\small}{%
   3.459 +  \@setfontsize{\small}{8pt}{9pt}%
   3.460 +  \setlength{\abovedisplayskip}{4pt plus 1pt minus 1pt}%
   3.461 +  \setlength{\belowdisplayskip}{\abovedisplayskip}%
   3.462 +  \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
   3.463 +  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
   3.464 +
   3.465 +\renewcommand{\footnotesize}{%
   3.466 +  \@setfontsize{\footnotesize}{8pt}{9pt}%
   3.467 +  \setlength{\abovedisplayskip}{4pt plus 1pt minus .5pt}%
   3.468 +  \setlength{\belowdisplayskip}{\abovedisplayskip}%
   3.469 +  \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
   3.470 +  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
   3.471 +
   3.472 +\renewcommand{\large}{\@setfontsize{\large}{11pt}{13pt}}
   3.473 +
   3.474 +\renewcommand{\Large}{\@setfontsize{\Large}{14pt}{18pt}}
   3.475 +
   3.476 +\renewcommand{\LARGE}{\@setfontsize{\LARGE}{18pt}{20pt}}
   3.477 +
   3.478 +\renewcommand{\huge}{\@setfontsize{\huge}{20pt}{25pt}}
   3.479 +
   3.480 +\renewcommand{\Huge}{\@setfontsize{\Huge}{25pt}{30pt}}
   3.481 +
   3.482 +\else\if \@tenpoint
   3.483 +
   3.484 +\relax
   3.485 +
   3.486 +\else
   3.487 +
   3.488 +\relax
   3.489 +
   3.490 +\fi\fi
   3.491 +
   3.492 +%                       Abstract
   3.493 +%                       --------
   3.494 +
   3.495 +
   3.496 +\renewenvironment{abstract}{%
   3.497 +  \section*{Abstract}%
   3.498 +  \normalsize}{%
   3.499 +  }
   3.500 +
   3.501 +%                       Bibliography
   3.502 +%                       ------------
   3.503 +
   3.504 +
   3.505 +\renewenvironment{thebibliography}[1]
   3.506 +     {\section*{\refname
   3.507 +        \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
   3.508 +      \list{\@biblabel{\@arabic\c@enumiv}}%
   3.509 +           {\settowidth\labelwidth{\@biblabel{#1}}%
   3.510 +            \leftmargin\labelwidth
   3.511 +            \advance\leftmargin\labelsep
   3.512 +            \@openbib@code
   3.513 +            \usecounter{enumiv}%
   3.514 +            \let\p@enumiv\@empty
   3.515 +            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
   3.516 +      \bibfont
   3.517 +      \clubpenalty4000
   3.518 +      \@clubpenalty \clubpenalty
   3.519 +      \widowpenalty4000%
   3.520 +      \sfcode`\.\@m}
   3.521 +     {\def\@noitemerr
   3.522 +       {\@latex@warning{Empty `thebibliography' environment}}%
   3.523 +      \endlist}
   3.524 +
   3.525 +\if \@natbib
   3.526 +
   3.527 +\if \@authoryear
   3.528 +  \typeout{Using natbib package with 'authoryear' citation style.}
   3.529 +  \usepackage[authoryear,square]{natbib}
   3.530 +  \bibpunct{[}{]}{;}{a}{}{,}    % Change citation separator to semicolon,
   3.531 +                                % eliminate comma between author and year.
   3.532 +  \let \cite = \citep
   3.533 +\else
   3.534 +  \typeout{Using natbib package with 'numbers' citation style.}
   3.535 +  \usepackage[numbers,sort&compress,square]{natbib}
   3.536 +\fi
   3.537 +\setlength{\bibsep}{3pt plus .5pt minus .25pt}
   3.538 +
   3.539 +\fi
   3.540 +
   3.541 +\def \bibfont {\small}
   3.542 +
   3.543 +%                       Categories
   3.544 +%                       ----------
   3.545 +
   3.546 +
   3.547 +\@setflag \@firstcategory = \@true
   3.548 +
   3.549 +\newcommand{\category}[3]{%
   3.550 +  \if \@firstcategory
   3.551 +    \paragraph*{Categories and Subject Descriptors}%
   3.552 +    \@setflag \@firstcategory = \@false
   3.553 +  \else
   3.554 +    \unskip ;\hspace{.75em}%
   3.555 +  \fi
   3.556 +  \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}}
   3.557 +
   3.558 +\def \@category #1#2#3[#4]{%
   3.559 +  {\let \and = \relax
   3.560 +   #1 [\textit{#2}]%
   3.561 +   \if \@emptyargp{#4}%
   3.562 +     \if \@notp{\@emptyargp{#3}}: #3\fi
   3.563 +   \else
   3.564 +     :\space
   3.565 +     \if \@notp{\@emptyargp{#3}}#3---\fi
   3.566 +     \textrm{#4}%
   3.567 +   \fi}}
   3.568 +
   3.569 +%                       Copyright Notice
   3.570 +%                       --------- ------
   3.571 +
   3.572 +
   3.573 +\def \ftype@copyrightbox {8}
   3.574 +\def \@toappear {}
   3.575 +\def \@permission {}
   3.576 +\def \@reprintprice {}
   3.577 +
   3.578 +\def \@copyrightspace {%
   3.579 +  \@float{copyrightbox}[b]%
   3.580 +  \vbox to 1in{%
   3.581 +    \vfill
   3.582 +    \parbox[b]{20pc}{%
   3.583 +      \scriptsize
   3.584 +      \if \@preprint
   3.585 +        [Copyright notice will appear here
   3.586 +         once 'preprint' option is removed.]\par
   3.587 +      \else
   3.588 +        \@toappear
   3.589 +      \fi
   3.590 +      \if \@reprint
   3.591 +        \noindent Reprinted from \@conferencename,
   3.592 +        \@proceedings,
   3.593 +        \@conferenceinfo,
   3.594 +        pp.~\number\thepage--\pageref{sigplanconf@finalpage}.\par
   3.595 +      \fi}}%
   3.596 +  \end@float}
   3.597 +
   3.598 +\long\def \toappear #1{%
   3.599 +  \def \@toappear {#1}}
   3.600 +
   3.601 +\toappear{%
   3.602 +  \noindent \@permission \par
   3.603 +  \vspace{2pt}
   3.604 +  \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
   3.605 +  \noindent Copyright \copyright\ \@copyrightyear\ ACM \@copyrightdata
   3.606 +    \dots \@reprintprice\par}
   3.607 +
   3.608 +\newcommand{\permission}[1]{%
   3.609 +  \gdef \@permission {#1}}
   3.610 +
   3.611 +\permission{%
   3.612 +  Permission to make digital or hard copies of all or
   3.613 +  part of this work for personal or classroom use is granted without
   3.614 +  fee provided that copies are not made or distributed for profit or
   3.615 +  commercial advantage and that copies bear this notice and the full
   3.616 +  citation on the first page.  To copy otherwise, to republish, to
   3.617 +  post on servers or to redistribute to lists, requires prior specific
   3.618 +  permission and/or a fee.}
   3.619 +
   3.620 +% Here we have some alternate permission statements and copyright lines:
   3.621 +
   3.622 +\newcommand{\ACMCanadapermission}{%
   3.623 +  \permission{%
   3.624 +    Copyright \@copyrightyear\ Association for Computing Machinery.
   3.625 +    ACM acknowledges that
   3.626 +    this contribution was authored or co-authored by an affiliate of the
   3.627 +    National Research Council of Canada (NRC).
   3.628 +    As such, the Crown in Right of
   3.629 +    Canada retains an equal interest in the copyright, however granting
   3.630 +    nonexclusive, royalty-free right to publish or reproduce this article,
   3.631 +    or to allow others to do so, provided that clear attribution
   3.632 +    is also given to the authors and the NRC.}}
   3.633 +
   3.634 +\newcommand{\ACMUSpermission}{%
   3.635 +  \permission{%
   3.636 +    Copyright \@copyrightyear\ Association for
   3.637 +    Computing Machinery. ACM acknowledges that
   3.638 +    this contribution was authored or co-authored
   3.639 +    by a contractor or affiliate
   3.640 +    of the U.S. Government. As such, the Government retains a nonexclusive,
   3.641 +    royalty-free right to publish or reproduce this article,
   3.642 +    or to allow others to do so, for Government purposes only.}}
   3.643 +
   3.644 +\newcommand{\authorpermission}{%
   3.645 +  \permission{%
   3.646 +    Copyright is held by the author/owner(s).}
   3.647 +  \toappear{%
   3.648 +    \noindent \@permission \par
   3.649 +    \vspace{2pt}
   3.650 +    \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
   3.651 +    ACM \@copyrightdata.}}
   3.652 +
   3.653 +\newcommand{\Sunpermission}{%
   3.654 +  \permission{%
   3.655 +    Copyright is held by Sun Microsystems, Inc.}%
   3.656 +  \toappear{%
   3.657 +    \noindent \@permission \par
   3.658 +    \vspace{2pt}
   3.659 +    \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
   3.660 +    ACM \@copyrightdata.}}
   3.661 +
   3.662 +\newcommand{\USpublicpermission}{%
   3.663 +  \permission{%
   3.664 +    This paper is authored by an employee(s) of the United States
   3.665 +    Government and is in the public domain.}%
   3.666 +  \toappear{%
   3.667 +    \noindent \@permission \par
   3.668 +    \vspace{2pt}
   3.669 +    \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
   3.670 +    ACM \@copyrightdata.}}
   3.671 +
   3.672 +\newcommand{\reprintprice}[1]{%
   3.673 +  \gdef \@reprintprice {#1}}
   3.674 +
   3.675 +\reprintprice{\$10.00}
   3.676 +
   3.677 +\newcommand{\authorversion}[4]{%
   3.678 +  \permission{%
   3.679 +  Copyright \copyright\ ACM, #1. This is the author's version of the work.
   3.680 +  It is posted here by permission of ACM for your personal use.
   3.681 +  Not for redistribution. The definitive version was published in
   3.682 +  #2, #3, http://doi.acm.org/10.1145/#4.}}
   3.683 +
   3.684 +%                       Enunciations
   3.685 +%                       ------------
   3.686 +
   3.687 +
   3.688 +\def \@begintheorem #1#2{%                      {name}{number}
   3.689 +  \trivlist
   3.690 +  \item[\hskip \labelsep \textsc{#1 #2.}]%
   3.691 +  \itshape\selectfont
   3.692 +  \ignorespaces}
   3.693 +
   3.694 +\def \@opargbegintheorem #1#2#3{%               {name}{number}{title}
   3.695 +  \trivlist
   3.696 +  \item[%
   3.697 +    \hskip\labelsep \textsc{#1\ #2}%
   3.698 +    \if \@notp{\@emptyargp{#3}}\nut (#3).\fi]%
   3.699 +  \itshape\selectfont
   3.700 +  \ignorespaces}
   3.701 +
   3.702 +%                       Figures
   3.703 +%                       -------
   3.704 +
   3.705 +
   3.706 +\@setflag \@caprule = \@true
   3.707 +
   3.708 +\long\def \@makecaption #1#2{%
   3.709 +  \addvspace{4pt}
   3.710 +  \if \@caprule
   3.711 +    \hrule width \hsize height .33pt
   3.712 +    \vspace{4pt}
   3.713 +  \fi
   3.714 +  \setbox \@tempboxa = \hbox{\@setfigurenumber{#1.}\nut #2}%
   3.715 +  \if \@dimgtrp{\wd\@tempboxa}{\hsize}%
   3.716 +    \noindent \@setfigurenumber{#1.}\nut #2\par
   3.717 +  \else
   3.718 +    \centerline{\box\@tempboxa}%
   3.719 +  \fi}
   3.720 +
   3.721 +\newcommand{\nocaptionrule}{%
   3.722 +  \@setflag \@caprule = \@false}
   3.723 +
   3.724 +\def \@setfigurenumber #1{%
   3.725 +  {\rmfamily \bfseries \selectfont #1}}
   3.726 +
   3.727 +%                       Hierarchy
   3.728 +%                       ---------
   3.729 +
   3.730 +
   3.731 +\setcounter{secnumdepth}{\@numheaddepth}
   3.732 +
   3.733 +\newskip{\@sectionaboveskip}
   3.734 +\setvspace{\@sectionaboveskip}{10pt plus 3pt minus 2pt}
   3.735 +
   3.736 +\newskip{\@sectionbelowskip}
   3.737 +\if \@blockstyle
   3.738 +  \setlength{\@sectionbelowskip}{0.1pt}%
   3.739 +\else
   3.740 +  \setlength{\@sectionbelowskip}{4pt}%
   3.741 +\fi
   3.742 +
   3.743 +\renewcommand{\section}{%
   3.744 +  \@startsection
   3.745 +    {section}%
   3.746 +    {1}%
   3.747 +    {0pt}%
   3.748 +    {-\@sectionaboveskip}%
   3.749 +    {\@sectionbelowskip}%
   3.750 +    {\large \bfseries \raggedright}}
   3.751 +
   3.752 +\newskip{\@subsectionaboveskip}
   3.753 +\setvspace{\@subsectionaboveskip}{8pt plus 2pt minus 2pt}
   3.754 +
   3.755 +\newskip{\@subsectionbelowskip}
   3.756 +\if \@blockstyle
   3.757 +  \setlength{\@subsectionbelowskip}{0.1pt}%
   3.758 +\else
   3.759 +  \setlength{\@subsectionbelowskip}{4pt}%
   3.760 +\fi
   3.761 +
   3.762 +\renewcommand{\subsection}{%
   3.763 +  \@startsection%
   3.764 +    {subsection}%
   3.765 +    {2}%
   3.766 +    {0pt}%
   3.767 +    {-\@subsectionaboveskip}%
   3.768 +    {\@subsectionbelowskip}%
   3.769 +    {\normalsize \bfseries \raggedright}}
   3.770 +
   3.771 +\renewcommand{\subsubsection}{%
   3.772 +  \@startsection%
   3.773 +    {subsubsection}%
   3.774 +    {3}%
   3.775 +    {0pt}%
   3.776 +    {-\@subsectionaboveskip}
   3.777 +    {\@subsectionbelowskip}%
   3.778 +    {\normalsize \bfseries \raggedright}}
   3.779 +
   3.780 +\newskip{\@paragraphaboveskip}
   3.781 +\setvspace{\@paragraphaboveskip}{6pt plus 2pt minus 2pt}
   3.782 +
   3.783 +\renewcommand{\paragraph}{%
   3.784 +  \@startsection%
   3.785 +    {paragraph}%
   3.786 +    {4}%
   3.787 +    {0pt}%
   3.788 +    {\@paragraphaboveskip}
   3.789 +    {-1em}%
   3.790 +    {\normalsize \bfseries \if \@times \itshape \fi}}
   3.791 +
   3.792 +\renewcommand{\subparagraph}{%
   3.793 +  \@startsection%
   3.794 +    {subparagraph}%
   3.795 +    {4}%
   3.796 +    {0pt}%
   3.797 +    {\@paragraphaboveskip}
   3.798 +    {-1em}%
   3.799 +    {\normalsize \itshape}}
   3.800 +
   3.801 +% Standard headings:
   3.802 +
   3.803 +\newcommand{\acks}{\section*{Acknowledgments}}
   3.804 +
   3.805 +\newcommand{\keywords}{\paragraph*{Keywords}}
   3.806 +
   3.807 +\newcommand{\terms}{\paragraph*{General Terms}}
   3.808 +
   3.809 +%                       Identification
   3.810 +%                       --------------
   3.811 +
   3.812 +
   3.813 +\def \@conferencename {}
   3.814 +\def \@conferenceinfo {}
   3.815 +\def \@copyrightyear {}
   3.816 +\def \@copyrightdata {[to be supplied]}
   3.817 +\def \@proceedings {[Unknown Proceedings]}
   3.818 +
   3.819 +
   3.820 +\newcommand{\conferenceinfo}[2]{%
   3.821 +  \gdef \@conferencename {#1}%
   3.822 +  \gdef \@conferenceinfo {#2}}
   3.823 +
   3.824 +\newcommand{\copyrightyear}[1]{%
   3.825 +  \gdef \@copyrightyear {#1}}
   3.826 +
   3.827 +\let \CopyrightYear = \copyrightyear
   3.828 +
   3.829 +\newcommand{\copyrightdata}[1]{%
   3.830 +  \gdef \@copyrightdata {#1}}
   3.831 +
   3.832 +\let \crdata = \copyrightdata
   3.833 +
   3.834 +\newcommand{\proceedings}[1]{%
   3.835 +  \gdef \@proceedings {#1}}
   3.836 +
   3.837 +%                       Lists
   3.838 +%                       -----
   3.839 +
   3.840 +
   3.841 +\setlength{\leftmargini}{13pt}
   3.842 +\setlength\leftmarginii{13pt}
   3.843 +\setlength\leftmarginiii{13pt}
   3.844 +\setlength\leftmarginiv{13pt}
   3.845 +\setlength{\labelsep}{3.5pt}
   3.846 +
   3.847 +\setlength{\topsep}{\standardvspace}
   3.848 +\if \@blockstyle
   3.849 +  \setlength{\itemsep}{1pt}
   3.850 +  \setlength{\parsep}{3pt}
   3.851 +\else
   3.852 +  \setlength{\itemsep}{1pt}
   3.853 +  \setlength{\parsep}{3pt}
   3.854 +\fi
   3.855 +
   3.856 +\renewcommand{\labelitemi}{{\small \centeroncapheight{\textbullet}}}
   3.857 +\renewcommand{\labelitemii}{\centeroncapheight{\rule{2.5pt}{2.5pt}}}
   3.858 +\renewcommand{\labelitemiii}{$-$}
   3.859 +\renewcommand{\labelitemiv}{{\Large \textperiodcentered}}
   3.860 +
   3.861 +\renewcommand{\@listi}{%
   3.862 +  \leftmargin = \leftmargini
   3.863 +  \listparindent = 0pt}
   3.864 +%%%  \itemsep = 1pt
   3.865 +%%%  \parsep = 3pt}
   3.866 +%%%  \listparindent = \parindent}
   3.867 +
   3.868 +\let \@listI = \@listi
   3.869 +
   3.870 +\renewcommand{\@listii}{%
   3.871 +  \leftmargin = \leftmarginii
   3.872 +  \topsep = 1pt
   3.873 +  \labelwidth = \leftmarginii
   3.874 +  \advance \labelwidth by -\labelsep
   3.875 +  \listparindent = \parindent}
   3.876 +
   3.877 +\renewcommand{\@listiii}{%
   3.878 +  \leftmargin = \leftmarginiii
   3.879 +  \labelwidth = \leftmarginiii
   3.880 +  \advance \labelwidth by -\labelsep
   3.881 +  \listparindent = \parindent}
   3.882 +
   3.883 +\renewcommand{\@listiv}{%
   3.884 +  \leftmargin = \leftmarginiv
   3.885 +  \labelwidth = \leftmarginiv
   3.886 +  \advance \labelwidth by -\labelsep
   3.887 +  \listparindent = \parindent}
   3.888 +
   3.889 +%                       Mathematics
   3.890 +%                       -----------
   3.891 +
   3.892 +
   3.893 +\def \theequation {\arabic{equation}}
   3.894 +
   3.895 +%                       Miscellaneous
   3.896 +%                       -------------
   3.897 +
   3.898 +
   3.899 +\newcommand{\balancecolumns}{%
   3.900 +  \vfill\eject
   3.901 +  \global\@colht = \textheight
   3.902 +  \global\ht\@cclv = \textheight}
   3.903 +
   3.904 +\newcommand{\nut}{\hspace{.5em}}
   3.905 +
   3.906 +\newcommand{\softraggedright}{%
   3.907 +  \let \\ = \@centercr
   3.908 +  \leftskip = 0pt
   3.909 +  \rightskip = 0pt plus 10pt}
   3.910 +
   3.911 +%                       Program Code
   3.912 +%                       ------- ----
   3.913 +
   3.914 +
   3.915 +\newcommand{\mono}[1]{%
   3.916 +  {\@tempdima = \fontdimen2\font
   3.917 +   \texttt{\spaceskip = 1.1\@tempdima #1}}}
   3.918 +
   3.919 +%                       Running Heads and Feet
   3.920 +%                       ------- ----- --- ----
   3.921 +
   3.922 +
   3.923 +\def \@preprintfooter {}
   3.924 +
   3.925 +\newcommand{\preprintfooter}[1]{%
   3.926 +  \gdef \@preprintfooter {#1}}
   3.927 +
   3.928 +\if \@preprint
   3.929 +
   3.930 +\def \ps@plain {%
   3.931 +  \let \@mkboth = \@gobbletwo
   3.932 +  \let \@evenhead = \@empty
   3.933 +  \def \@evenfoot {\scriptsize
   3.934 +                   \rlap{\textit{\@preprintfooter}}\hfil
   3.935 +                   \thepage \hfil
   3.936 +                   \llap{\textit{\@formatyear}}}%
   3.937 +  \let \@oddhead = \@empty
   3.938 +  \let \@oddfoot = \@evenfoot}
   3.939 +
   3.940 +\else\if \@reprint
   3.941 +
   3.942 +\def \ps@plain {%
   3.943 +  \let \@mkboth = \@gobbletwo
   3.944 +  \let \@evenhead = \@empty
   3.945 +  \def \@evenfoot {\scriptsize \hfil \thepage \hfil}%
   3.946 +  \let \@oddhead = \@empty
   3.947 +  \let \@oddfoot = \@evenfoot}
   3.948 +
   3.949 +\else
   3.950 +
   3.951 +\let \ps@plain = \ps@empty
   3.952 +\let \ps@headings = \ps@empty
   3.953 +\let \ps@myheadings = \ps@empty
   3.954 +
   3.955 +\fi\fi
   3.956 +
   3.957 +\def \@formatyear {%
   3.958 +  \number\year/\number\month/\number\day}
   3.959 +
   3.960 +%                       Special Characters
   3.961 +%                       ------- ----------
   3.962 +
   3.963 +
   3.964 +\DeclareRobustCommand{\euro}{%
   3.965 +  \protect{\rlap{=}}{\sf \kern .1em C}}
   3.966 +
   3.967 +%                       Title Page
   3.968 +%                       ----- ----
   3.969 +
   3.970 +
   3.971 +\@setflag \@addauthorsdone = \@false
   3.972 +
   3.973 +\def \@titletext {\@latex@error{No title was provided}{}}
   3.974 +\def \@subtitletext {}
   3.975 +
   3.976 +\newcount{\@authorcount}
   3.977 +
   3.978 +\newcount{\@titlenotecount}
   3.979 +\newtoks{\@titlenotetext}
   3.980 +
   3.981 +\def \@titlebanner {}
   3.982 +
   3.983 +\renewcommand{\title}[1]{%
   3.984 +  \gdef \@titletext {#1}}
   3.985 +
   3.986 +\newcommand{\subtitle}[1]{%
   3.987 +  \gdef \@subtitletext {#1}}
   3.988 +
   3.989 +\newcommand{\authorinfo}[3]{%           {names}{affiliation}{email/URL}
   3.990 +  \global\@increment \@authorcount
   3.991 +  \@withname\gdef {\@authorname\romannumeral\@authorcount}{#1}%
   3.992 +  \@withname\gdef {\@authoraffil\romannumeral\@authorcount}{#2}%
   3.993 +  \@withname\gdef {\@authoremail\romannumeral\@authorcount}{#3}}
   3.994 +
   3.995 +\renewcommand{\author}[1]{%
   3.996 +  \@latex@error{The \string\author\space command is obsolete;
   3.997 +                use \string\authorinfo}{}}
   3.998 +
   3.999 +\newcommand{\titlebanner}[1]{%
  3.1000 +  \gdef \@titlebanner {#1}}
  3.1001 +
  3.1002 +\renewcommand{\maketitle}{%
  3.1003 +  \pagestyle{plain}%
  3.1004 +  \if \@onecolumn
  3.1005 +    {\hsize = \standardtextwidth
  3.1006 +     \@maketitle}%
  3.1007 +  \else
  3.1008 +    \twocolumn[\@maketitle]%
  3.1009 +  \fi
  3.1010 +  \@placetitlenotes
  3.1011 +  \if \@copyrightwanted \@copyrightspace \fi}
  3.1012 +
  3.1013 +\def \@maketitle {%
  3.1014 +  \begin{center}
  3.1015 +  \@settitlebanner
  3.1016 +  \let \thanks = \titlenote
  3.1017 +  {\leftskip = 0pt plus 0.25\linewidth
  3.1018 +   \rightskip = 0pt plus 0.25 \linewidth
  3.1019 +   \parfillskip = 0pt
  3.1020 +   \spaceskip = .7em
  3.1021 +   \noindent \LARGE \bfseries \@titletext \par}
  3.1022 +  \vskip 6pt
  3.1023 +  \noindent \Large \@subtitletext \par
  3.1024 +  \vskip 12pt
  3.1025 +  \ifcase \@authorcount
  3.1026 +    \@latex@error{No authors were specified for this paper}{}\or
  3.1027 +    \@titleauthors{i}{}{}\or
  3.1028 +    \@titleauthors{i}{ii}{}\or
  3.1029 +    \@titleauthors{i}{ii}{iii}\or
  3.1030 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{}{}\or
  3.1031 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{}\or
  3.1032 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}\or
  3.1033 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
  3.1034 +                  \@titleauthors{vii}{}{}\or
  3.1035 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
  3.1036 +                  \@titleauthors{vii}{viii}{}\or
  3.1037 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
  3.1038 +                  \@titleauthors{vii}{viii}{ix}\or
  3.1039 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
  3.1040 +                  \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{}{}\or
  3.1041 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
  3.1042 +                  \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{}\or
  3.1043 +    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
  3.1044 +                  \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{xii}%
  3.1045 +  \else
  3.1046 +    \@latex@error{Cannot handle more than 12 authors}{}%
  3.1047 +  \fi
  3.1048 +  \vspace{1.75pc}
  3.1049 +  \end{center}}
  3.1050 +
  3.1051 +\def \@settitlebanner {%
  3.1052 +  \if \@andp{\@preprint}{\@notp{\@emptydefp{\@titlebanner}}}%
  3.1053 +    \vbox to 0pt{%
  3.1054 +      \vskip -32pt
  3.1055 +      \noindent \textbf{\@titlebanner}\par
  3.1056 +      \vss}%
  3.1057 +    \nointerlineskip
  3.1058 +  \fi}
  3.1059 +
  3.1060 +\def \@titleauthors #1#2#3{%
  3.1061 +  \if \@andp{\@emptyargp{#2}}{\@emptyargp{#3}}%
  3.1062 +    \noindent \@setauthor{40pc}{#1}{\@false}\par
  3.1063 +  \else\if \@emptyargp{#3}%
  3.1064 +    \noindent \@setauthor{17pc}{#1}{\@false}\hspace{3pc}%
  3.1065 +              \@setauthor{17pc}{#2}{\@false}\par
  3.1066 +  \else
  3.1067 +    \noindent \@setauthor{12.5pc}{#1}{\@false}\hspace{2pc}%
  3.1068 +              \@setauthor{12.5pc}{#2}{\@false}\hspace{2pc}%
  3.1069 +              \@setauthor{12.5pc}{#3}{\@true}\par
  3.1070 +    \relax
  3.1071 +  \fi\fi
  3.1072 +  \vspace{20pt}}
  3.1073 +
  3.1074 +\def \@setauthor #1#2#3{%                       {width}{text}{unused}
  3.1075 +  \vtop{%
  3.1076 +    \def \and {%
  3.1077 +      \hspace{16pt}}
  3.1078 +    \hsize = #1
  3.1079 +    \normalfont
  3.1080 +    \centering
  3.1081 +    \large \@name{\@authorname#2}\par
  3.1082 +    \vspace{5pt}
  3.1083 +    \normalsize \@name{\@authoraffil#2}\par
  3.1084 +    \vspace{2pt}
  3.1085 +    \textsf{\@name{\@authoremail#2}}\par}}
  3.1086 +
  3.1087 +\def \@maybetitlenote #1{%
  3.1088 +  \if \@andp{#1}{\@gtrp{\@authorcount}{3}}%
  3.1089 +    \titlenote{See page~\pageref{@addauthors} for additional authors.}%
  3.1090 +  \fi}
  3.1091 +
  3.1092 +\newtoks{\@fnmark}
  3.1093 +
  3.1094 +\newcommand{\titlenote}[1]{%
  3.1095 +  \global\@increment \@titlenotecount
  3.1096 +  \ifcase \@titlenotecount \relax \or
  3.1097 +    \@fnmark = {\ast}\or
  3.1098 +    \@fnmark = {\dagger}\or
  3.1099 +    \@fnmark = {\ddagger}\or
  3.1100 +    \@fnmark = {\S}\or
  3.1101 +    \@fnmark = {\P}\or
  3.1102 +    \@fnmark = {\ast\ast}%
  3.1103 +  \fi
  3.1104 +  \,$^{\the\@fnmark}$%
  3.1105 +  \edef \reserved@a {\noexpand\@appendtotext{%
  3.1106 +                       \noexpand\@titlefootnote{\the\@fnmark}}}%
  3.1107 +  \reserved@a{#1}}
  3.1108 +
  3.1109 +\def \@appendtotext #1#2{%
  3.1110 +  \global\@titlenotetext = \expandafter{\the\@titlenotetext #1{#2}}}
  3.1111 +
  3.1112 +\newcount{\@authori}
  3.1113 +
  3.1114 +\iffalse
  3.1115 +\def \additionalauthors {%
  3.1116 +  \if \@gtrp{\@authorcount}{3}%
  3.1117 +    \section{Additional Authors}%
  3.1118 +    \label{@addauthors}%
  3.1119 +    \noindent
  3.1120 +    \@authori = 4
  3.1121 +    {\let \\ = ,%
  3.1122 +     \loop 
  3.1123 +       \textbf{\@name{\@authorname\romannumeral\@authori}},
  3.1124 +       \@name{\@authoraffil\romannumeral\@authori},
  3.1125 +       email: \@name{\@authoremail\romannumeral\@authori}.%
  3.1126 +       \@increment \@authori
  3.1127 +     \if \@notp{\@gtrp{\@authori}{\@authorcount}} \repeat}%
  3.1128 +    \par
  3.1129 +  \fi
  3.1130 +  \global\@setflag \@addauthorsdone = \@true}
  3.1131 +\fi
  3.1132 +
  3.1133 +\let \addauthorsection = \additionalauthors
  3.1134 +
  3.1135 +\def \@placetitlenotes {
  3.1136 +  \the\@titlenotetext}
  3.1137 +
  3.1138 +%                       Utilities
  3.1139 +%                       ---------
  3.1140 +
  3.1141 +
  3.1142 +\newcommand{\centeroncapheight}[1]{%
  3.1143 +  {\setbox\@tempboxa = \hbox{#1}%
  3.1144 +   \@measurecapheight{\@tempdima}%         % Calculate ht(CAP) - ht(text)
  3.1145 +   \advance \@tempdima by -\ht\@tempboxa   %           ------------------
  3.1146 +   \divide \@tempdima by 2                 %                   2
  3.1147 +   \raise \@tempdima \box\@tempboxa}}
  3.1148 +
  3.1149 +\newbox{\@measbox}
  3.1150 +
  3.1151 +\def \@measurecapheight #1{%                            {\dimen}
  3.1152 +  \setbox\@measbox = \hbox{ABCDEFGHIJKLMNOPQRSTUVWXYZ}%
  3.1153 +  #1 = \ht\@measbox}
  3.1154 +
  3.1155 +\long\def \@titlefootnote #1#2{%
  3.1156 +  \insert\footins{%
  3.1157 +    \reset@font\footnotesize
  3.1158 +    \interlinepenalty\interfootnotelinepenalty
  3.1159 +    \splittopskip\footnotesep
  3.1160 +    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
  3.1161 +    \hsize\columnwidth \@parboxrestore
  3.1162 +%%%    \protected@edef\@currentlabel{%
  3.1163 +%%%       \csname p@footnote\endcsname\@thefnmark}%
  3.1164 +    \color@begingroup
  3.1165 +      \def \@makefnmark {$^{#1}$}%
  3.1166 +      \@makefntext{%
  3.1167 +        \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}%
  3.1168 +    \color@endgroup}}
  3.1169 +
  3.1170 +%                       LaTeX Modifications
  3.1171 +%                       ----- -------------
  3.1172 +
  3.1173 +\def \@seccntformat #1{%
  3.1174 +  \@name{\the#1}%
  3.1175 +  \@expandaftertwice\@seccntformata \csname the#1\endcsname.\@mark
  3.1176 +  \quad}
  3.1177 +
  3.1178 +\def \@seccntformata #1.#2\@mark{%
  3.1179 +  \if \@emptyargp{#2}.\fi}
  3.1180 +
  3.1181 +%                       Revision History
  3.1182 +%                       -------- -------
  3.1183 +
  3.1184 +
  3.1185 +%  Date         Person  Ver.    Change
  3.1186 +%  ----         ------  ----    ------
  3.1187 +
  3.1188 +%  2004.09.12   PCA     0.1--5  Preliminary development.
  3.1189 +
  3.1190 +%  2004.11.18   PCA     0.5     Start beta testing.
  3.1191 +
  3.1192 +%  2004.11.19   PCA     0.6     Obsolete \author and replace with
  3.1193 +%                               \authorinfo.
  3.1194 +%                               Add 'nocopyrightspace' option.
  3.1195 +%                               Compress article opener spacing.
  3.1196 +%                               Add 'mathtime' option.
  3.1197 +%                               Increase text height by 6 points.
  3.1198 +
  3.1199 +%  2004.11.28   PCA     0.7     Add 'cm/computermodern' options.
  3.1200 +%                               Change default to Times text.
  3.1201 +
  3.1202 +%  2004.12.14   PCA     0.8     Remove use of mathptm.sty; it cannot
  3.1203 +%                               coexist with latexsym or amssymb.
  3.1204 +
  3.1205 +%  2005.01.20   PCA     0.9     Rename class file to sigplanconf.cls.
  3.1206 +
  3.1207 +%  2005.03.05   PCA     0.91    Change default copyright data.
  3.1208 +
  3.1209 +%  2005.03.06   PCA     0.92    Add at-signs to some macro names.
  3.1210 +
  3.1211 +%  2005.03.07   PCA     0.93    The 'onecolumn' option defaults to '11pt',
  3.1212 +%                               and it uses the full type width.
  3.1213 +
  3.1214 +%  2005.03.15   PCA     0.94    Add at-signs to more macro names.
  3.1215 +%                               Allow margin paragraphs during review.
  3.1216 +
  3.1217 +%  2005.03.22   PCA     0.95    Implement \euro.
  3.1218 +%                               Remove proof and newdef environments.
  3.1219 +
  3.1220 +%  2005.05.06   PCA     1.0     Eliminate 'onecolumn' option.
  3.1221 +%                               Change footer to small italic and eliminate
  3.1222 +%                               left portion if no \preprintfooter.
  3.1223 +%                               Eliminate copyright notice if preprint.
  3.1224 +%                               Clean up and shrink copyright box.
  3.1225 +
  3.1226 +%  2005.05.30   PCA     1.1     Add alternate permission statements.
  3.1227 +
  3.1228 +%  2005.06.29   PCA     1.1     Publish final first edition of guide.
  3.1229 +
  3.1230 +%  2005.07.14   PCA     1.2     Add \subparagraph.
  3.1231 +%                               Use block paragraphs in lists, and adjust
  3.1232 +%                               spacing between items and paragraphs.
  3.1233 +
  3.1234 +%  2006.06.22   PCA     1.3     Add 'reprint' option and associated
  3.1235 +%                               commands.
  3.1236 +
  3.1237 +%  2006.08.24   PCA     1.4     Fix bug in \maketitle case command.
  3.1238 +
  3.1239 +%  2007.03.13   PCA     1.5     The title banner only displays with the
  3.1240 +%                               'preprint' option.
  3.1241 +
  3.1242 +%  2007.06.06   PCA     1.6     Use \bibfont in \thebibliography.
  3.1243 +%                               Add 'natbib' option to load and configure
  3.1244 +%                                 the natbib package.
  3.1245 +
  3.1246 +%  2007.11.20   PCA     1.7     Balance line lengths in centered article
  3.1247 +%                                 title (thanks to Norman Ramsey).
  3.1248 +
  3.1249 +%  2009.01.26   PCA     1.8     Change natbib \bibpunct values.
  3.1250 +
  3.1251 +%  2009.03.24   PCA     1.9     Change natbib to use the 'numbers' option.
  3.1252 +%                               Change templates to use 'natbib' option.
  3.1253 +
  3.1254 +%  2009.09.01   PCA     2.0     Add \reprintprice command (suggested by
  3.1255 +%                                 Stephen Chong).
  3.1256 +
  3.1257 +%  2009.09.08   PCA     2.1     Make 'natbib' the default; add 'nonatbib'.
  3.1258 +%               SB              Add 'authoryear' and 'numbers' (default) to
  3.1259 +%                               control citation style when using natbib.
  3.1260 +%                               Add \bibpunct to change punctuation for
  3.1261 +%                               'authoryear' style.
  3.1262 +
  3.1263 +%  2009.09.21   PCA     2.2     Add \softraggedright to the thebibliography
  3.1264 +%                               environment. Also add to template so it will
  3.1265 +%                               happen with natbib.
  3.1266 +
  3.1267 +%  2009.09.30   PCA     2.3     Remove \softraggedright from thebibliography.  
  3.1268 +%                               Just include in the template.
  3.1269 +
  3.1270 +%  2010.05.24   PCA     2.4     Obfuscate author's email address.
  3.1271 +
  3.1272 +%  2011.11.08   PCA     2.5     Add copyright notice to this file.
  3.1273 +%                               Remove 'sort' option from natbib when using
  3.1274 +%                                 'authoryear' style.
  3.1275 +%                               Add the \authorversion command.
  3.1276 +