changeset 44:e014ef8c9e04

Perf tuning -- first clean version
author Some Random Person <seanhalle@yahoo.com>
date Wed, 16 May 2012 06:32:02 -0700
parents 980d375417a3
children 04f4e1c4972a
files .hgignore 0__Papers/Holistic_Model/Perf_Tune/latex/Holistic_Perf_Tuning.pdf 0__Papers/Holistic_Model/Perf_Tune/latex/Holistic_Perf_Tuning.tex 0__Papers/VMS/Universal/figures/control_flow.svg 0__Papers/VMS/Universal/latex/VMS_universal.tex
diffstat 5 files changed, 639 insertions(+), 439 deletions(-) [+]
line diff
     1.1 --- a/.hgignore	Fri May 04 09:44:14 2012 -0700
     1.2 +++ b/.hgignore	Wed May 16 06:32:02 2012 -0700
     1.3 @@ -1,8 +1,25 @@
     1.4 +nbproject
     1.5 +Makefile
     1.6 +build
     1.7 +dist
     1.8 +src/Default
     1.9 +src/.settings
    1.10 +src/.cproject
    1.11 +src/.project
    1.12 +.dep.inc
    1.13  
    1.14 -glob: *.o
    1.15 -glob: *.aux
    1.16 -glob: *.blg
    1.17 -glob: *.Backup
    1.18 -glob: *.bbl
    1.19 -glob: *.ddf
    1.20 -glob: *.Backup-*
    1.21 \ No newline at end of file
    1.22 +.cproject
    1.23 +.project
    1.24 +Debug
    1.25 +
    1.26 +# mercurial syntax as per: http://mercurial.selenic.com/wiki/.hgignore
    1.27 +.*\.Backup$
    1.28 +.*\.bb$
    1.29 +.*\.aux$
    1.30 +.*\.blg$
    1.31 +.*\.bbl$
    1.32 +.*\.ddf$
    1.33 +
    1.34 +# shell-style syntax, as per: http://www.selenic.com/mercurial/hgignore.5.html
    1.35 +syntax: glob
    1.36 +*.Backup*
     2.1 Binary file 0__Papers/Holistic_Model/Perf_Tune/latex/Holistic_Perf_Tuning.pdf has changed
     3.1 --- a/0__Papers/Holistic_Model/Perf_Tune/latex/Holistic_Perf_Tuning.tex	Fri May 04 09:44:14 2012 -0700
     3.2 +++ b/0__Papers/Holistic_Model/Perf_Tune/latex/Holistic_Perf_Tuning.tex	Wed May 16 06:32:02 2012 -0700
     3.3 @@ -283,9 +283,7 @@
     3.4  
     3.5  
     3.6  
     3.7 -\title{Performance Tuning Requires Integrating Aspects of Application, Runtime, Scheduling, and Hardware..\\
     3.8 -OR Performance Tuning Requires Connecting Application to Runtime, Scheduling, and Hardware\\
     3.9 -  OR Integrated Performance Tuning Using Semantic Information Collected by Instrumenting the Language Runtime}
    3.10 +\title{Integrated Performance Tuning Using Semantic Information Collected by Instrumenting the Language Runtime}
    3.11  
    3.12  \author{
    3.13          Nina Engelhardt\\
    3.14 @@ -322,149 +320,55 @@
    3.15  
    3.16  To fix this, a model is needed that provides the linkage to connect the measurements together.  It  should be in terms of scheduling decisions, having the units the decisions are made on, and the various sources of constraints on the decisions. 
    3.17  
    3.18 -Our contribution is such a model and framework. Using it, we generate views that indicate the schedulable units in the code, and all the constraints on scheduling them. These include constraints imposed by the application, the runtime implementation  and hardware details. 
    3.19 +Our contribution is such a model and framework. Using it, we generate views that indicate the schedulable units in the code, all the constraints on scheduling them, and connect them to application code. It includes constraints imposed by the application, the runtime implementation  and hardware details. 
    3.20  
    3.21 -The views connect the units to specific segments of code that compose the units, and connect each constraint on scheduling choice to the precise source of the constraint, within the code, hardware, or runtime. They separate resource usage into the categories: application work, non-overlapped communication (which results from scheduling decisions), and scheduling/runtime overhead. They also integrate parameter choices, within the code, that affect unit creation and constraints.
    3.22 +The connections made within the views encourage hypotheses for the cause of performance losses.  The views connect units to the specific segments of code that compose the units, and connect each constraint on scheduling choice to the precise source of the constraint, within the code, hardware, or runtime. They separate resource usage into the categories: application work, non-overlapped communication (which results from scheduling decisions), and scheduling/runtime overhead. They also integrate parameter choices, within the code, that affect unit creation and constraints. In visual form, the integration and connections have the effect of making areas of performance loss evident, and the causes of the loss clear. 
    3.23  
    3.24   
    3.25 -
    3.26 -
    3.27  We describe our model of computation, which relates the aspects of performance, and the instrumentation and visualization that are guided by that model and collect performance tuning information and link it together. The model and visualization are illustrated with a story line, which shows how they are used to performance tune a standard parallel application on a challenging multi-core system. 
    3.28  
    3.29  We start with background on performance tuning and previous approaches to tools in Section X. Then...
    3.30  
    3.31  
    3.32  \section{Background and Related Work}
    3.33 -Performance tuning follows the standard iterative approach. In each step of iteration, first measurements of performance are taken and compared to what was desired. Some mental model is  used to generate a hypothesis of why the measurement was less than desired. A mental model is then used to link the hypothesis to things within the programmer's control,  to suggest a change to make to the code. The modified code is then run again and the iteration-step repeats until the person doing the tuning is satisfied.
    3.34 +Performance tuning follows the standard pattern of iterating. In each iteration, first measurements of performance are taken and compared to what was desired. Some mental model is  used to generate a hypothesis of why the measurement was less than desired. A mental model is then used to link the hypothesis to things within the programmer's control,  to suggest a change to make to the code. The modified code is then run again and the iteration-step repeats until the person doing the tuning is satisfied.
    3.35  
    3.36 - 
    3.37  
    3.38 -For performance of parallel computation, more than just runtime measurements are important. Context for those measurements must also be gathered, which includes the characteristics of the units of work that are scheduled onto resources, as well as the  constraints on scheduling those. Then during the run, not only is hardware usage measured but also the scheduling decisions actually made and carried out.
    3.39 +For performance of parallel computation, more than just runtime measurements are important. Context for those measurements must also be gathered, which includes the characteristics of the units of work that are scheduled onto resources, as well as the  constraints on scheduling those. Then during the run, not only is hardware usage measured but also the scheduling decisions of why the hardware was used that way.
    3.40  
    3.41 +Based on this pattern of performance tuning, we divide other approaches to performance tuning into five categories and talk about them separately. First, the four classic approaches, then a newer breed of tool that is starting to emerge.
    3.42 +
    3.43 +\subsection{Thread-model based Approaches}
    3.44  Most of the older more established tools come from the threads world, and conceive of the application as a processor that performs actions, but don't include the concept of application-defined tasks nor constraints on them. This makes them unable to directly connect statistics they gather to application features.  The lack of connection forces the user to guess at what aspect of the code is responsible for observed performance.
    3.45  
    3.46  
    3.47 +
    3.48 +
    3.49  For example, Tau is a highly cited older system for performance tuning parallel applications, which is representative of thread-centric approaches. It integrates many data sources, and has rich displays. However its model was cores and memories and thread contexts, with actions taken on or by each. It had no well defined concept of scheduling, unit scheduled, nor constraints on scheduling those units. Hence, it had no view that integrated the parallelism-specific information at the heart of performance:  tasks, constraints on them, and scheduling choices.
    3.50  
    3.51 -Another highly cited classic performance tuning system is Paradyn[], which is representative of systems that model parallel computation as a collection of events. It is meant for applications that run for several days on multi-thousand node clusters. Its model of computation is based on events, both the timing of events and counts of events. It has a system for user-supplied instrumentation to collect event information and it has a hypotheses mechanism that protects the user from having to write custom code to test their hypotheses. However, the hypotheses are in terms of the timing and counts of events. not the parallel computation relevant information of units of scheduled work and the scheduling decisions made on those. 
    3.52 +\subsection{Application-intensive approach}
    3.53  
    3.54 +Another highly cited classic performance tuning system is Paradyn[], which is representative of systems that model parallel computation as a collection of events. It is meant for applications that run for several days on multi-thousand node clusters. Its model of computation is based on events, both the timing of events and counts of events. It has a system for user-supplied instrumentation to collect event information and it has a hypotheses mechanism that protects the user from having to write custom code to test their hypotheses. However, the hypotheses are in terms of the timing and counts of events, not the parallel computation relevant information of units of scheduled work and the scheduling decisions made on those. 
    3.55  
    3.56 +\subsection{Event driven approach}
    3.57  
    3.58  Paragraph also follows an event-based model, and represents the large collection of simpler tools that instrument the MPI library. It shows whether cores are busy, and indicates communication overhead, but lacks any features that tie the communication pattern realized to application code features, which are what is under programmer control. It also fails to show runtime overhead, and which portions of idle time are caused by runtime internal constraints.
    3.59  
    3.60  Paraver and Vampir are just painting tools that take event measurements and paint them on the screen.
    3.61  
    3.62 -Other approaches concentrate on performance counter data to identify hot-spots and potential false-sharing..  these suffer from the same lack of encompasing computation model, leaving the user to guess at what might be the cause of measured numbers.  The do a good job of saying that something might be wrong, bor a poor job of pointing to what is causing the problem, and hence leave the user baffled as to what to change in their code to get better performance.
    3.63 +\subsection{Performance-counter approaches}
    3.64 +Other approaches, such as VTune, POPI, and so forth concentrate on performance counter data to identify hot-spots and potential false-sharing.  These suffer from the same lack of encompassing computation model, leaving the user to guess at what might be the cause of measured numbers.  They do a good job of saying that something might be wrong, but a poor job of pointing to what is causing the problem, and hence leave the user baffled as to what to change in their code to get better performance.
    3.65  
    3.66 +\subsection{Newer approaches}
    3.67  The commonality among the classic approaches is the lack of a  model of parallel computation. 
    3.68  
    3.69  One difficulty faced by early tools is that  parallel applications written in MPI or threads effectively end up implementing a runtime system in the application code. In such a case, the units of work are implied in the code, and difficult for tools to recognize. Likewise, constraints on scheduling are enforced by the code, but never stated in any explicit form. 
    3.70  
    3.71 - These shortcomings are rectified by recent parallel languages such as CnC and StarSs, which cleanly identify tasks and constraints on them. The people who develop such a language also develop language-specific tools to go with it. 
    3.72 -
    3.73 -StarSs is clearly thinking about tasks, and even some about scheduling. but limited on scheduling -- can just place task into a queue, so can sort of manipulate scheduling but view doesn't really give all the constraints -- missing the runtime overhead, and missing the idle-time consequent from non-overlapped comm. 
    3.74 + These shortcomings are rectified by recent parallel languages such as CnC and StarSs, which cleanly identify tasks and the constraints on them. The people who develop such a language also develop language-specific tools to go with it. 
    3.75  
    3.76  The StarSs tool tries to simplify the view for the user. It doesn't give performance information directly, but instead identifies tasks and tells the user whether it thinks the task size is too small, just right, or   -- instead, it has a recommended task size, which is between too small, which has too much overhead and too big, which has too few tasks to load balance. It makes task a one color if too short, another if just right, and a third if too long.
    3.77  
    3.78  
    3.79 -
    3.80 -
    3.81 -==========
    3.82 -
    3.83 -MPI is also machine-based abstraction, that gives communication information, but doesn't have concept of constraints . Its sort of in-between..
    3.84 -
    3.85 -For communication, want two things: 1) idle-time on cores that is consequence from particular communication pattern, and in some cases 2) the energy due to the volume of communication. Both are consequence of the scheduling choices made.
    3.86 -
    3.87 -
    3.88 -
    3.89 -
    3.90 -=======================?
    3.91 -
    3.92 -Their structure information is either call graph or line of code. This is too limited for parallel performance. Need tasks and scheduling. More recent languages move towards task-based. This makes more of the needed structure information available. But we've not seen a complete or coherent presentation.
    3.93 -
    3.94 -=====
    3.95 - 
    3.96 - The value of a consequence graph is linking the size of boxes in it to the decisions made by the scheduler, which are represented by the shape. This lets a person visually link scheduling decisions to consequences.  The mind can quickly see empty areas, representing lost performance, and connect those to boxes and lines that cause the empty areas.  They then look up the code of each box and construct of each line, which gives them the code structures that caused the loss of performance.  This \emph{visual} linkage of undesirable effect back to \emph{cause in the code} is what sets our approach apart. 
    3.97 -The value of the UCC is visually linking cause of performance loss to options available for fixing it.
    3.98 -
    3.99 -===== 
   3.100 -
   3.101 -
   3.102 -
   3.103 -A survey of the most highly cited classic papers shows the commonality..
   3.104 -
   3.105 -===========
   3.106 -
   3.107 -
   3.108 -Use case: takes longer to create when more units -- that's because it mallocs all the matrix pieces, before it pairs any and starts the pair as work -- can see this from the graphs by linking the units to code they execute -- not the functions, specifically, but to the scheduled code-snippet. -- suggests changing the way divider works.
   3.109 -
   3.110 -Graph tells us the division code is bad -- works better when have 39 cores instead of 40 -- makes more pieces for 39 than for 40, and the end up fitting better onto the cores..
   3.111 -
   3.112 -Systematic way of adding auto-tuning to language -- using TSC for time measurements, and counters for cache miss.  Provides a framework that links the pieces together, and the UCC gives critical information useful in tuning.
   3.113 -
   3.114 -=======================
   3.115 -
   3.116 -Advantage: unlike statistical, it catches all "one off" and momentary serializations, which cause massive idling.
   3.117 -
   3.118 -Advantage: it is quick and easy to instrument a language that uses the same runtime abstraction (VMS) -- VMS was made to make language runtimes quick and easy, with low overhead (cite). VMS has the base instrumentation in it, language adds the types of constraints and the collection points. Each request to the runtime is in a separate (inlined) function, which makes adding the instrumentation simple.
   3.119 -
   3.120 -Advantage: instrument the language, NOT the application -- and yet it gives all the application-specific information from a run. -- others: Tau forces extensive instrumentation of application..  MPI based ones don't give the constraint info, nor what occupies time of core info..
   3.121 -
   3.122 -=======================
   3.123 -   
   3.124 -Expl of what is meant by "structure" info -- example where meas of runtime system showed that overhead of task creation took longer than task execution. Hypothesis was trivial: cause of lost performance is runtime overhead of creation is larger than work in a scheduled unit.  The plan to fix is to change the number of work-units created, by changing the parameter in the divider code.  Implementing this and re-executing showed that this source of performance loss was fixed by the change.
   3.125 -
   3.126 -The example shows that theory is part of hypothesis generation, because it required knowledge of the runtime and understanding that creation of a task is work performed as overhead inside the runtime.  The example also shows that generating the plan to fix required understanding the segment of code that divided work into tasks, and the relationship between parameters to that code and execution time of the resulting tasks.
   3.127 -
   3.128 -Hence, each step of performance debugging involves several aspects, including mental model of computation, application code, runtime implementation, scheduling choices, and hardware. In order to be effective, a tool used during performance tuning must be part of a complete model of computation that ties all aspects of the debugging/tuning steps together. Current tools fall short, both because they lack an encompassing model of computation, and because the tools are isolated from each other. Without integration, the user gets an incomplete picture of the computation and must resort to guesses either of where the problem lies or of what to do to fix it.
   3.129 -
   3.130 -
   3.131 -We introduce in this paper a model of computation that ties all aspects of performance together, along with instrumentation and visualization that is guided by the model and that links all relevant performance tuning information together. The model and visualization tools are illustrated with a story line, which shows how they are used to performance tune the standard matrix-multiply application on two multi-core systems. 
   3.132 -
   3.133 -Although we use standard visualization techniques [cite], our approach differs from previous work in both theoretical and practical aspects. The theory we  use is The Holistic Model of Parallel Computation, which ties together parallelism construct semantics with scheduling choices made during a run, and specific measurements made on the cores.  When put into practice, new kinds of measurements are taken, which complete the picture presented to the user, and each measurement is tied to a specific segment of code. The resulting combination not only identifies each source of performance loss, but ties it back to specific causes and suggests precise fixes, all of which is illustrated in our story line.
   3.134 -
   3.135 -[maybe some stuff about features and benefits of our approach: no app instrumentation, it's all inside language runtime, very low overhead, integrated with VMS-based functional debugging, and so on]
   3.136 -
   3.137 -
   3.138 -Table of features/benefits comparing us to others -- in related work section.
   3.139 --- language invariant.. concepts are lang independent, visualization is language independent
   3.140 --- instr lang once, then works across apps
   3.141 --- Integrate measurements with runtime implementation details
   3.142 --- Integrate measurements of one kind with those of a different kind
   3.143 --- Integrate measurements of core activity with code snippets
   3.144 --- Underlying theory ties measurements to each other, to runtime, and to hardware
   3.145 --- Has concept of unit of work / task
   3.146 --- Includes communication between cores
   3.147 --- Shows what each core spends each bit of time on
   3.148 --- Visual representation directly indicates areas of performance loss
   3.149 -
   3.150 -\begin{table*}[ht!]
   3.151 -\caption
   3.152 -{Comparison of Features and Benefits
   3.153 -}
   3.154 -\label{tabPersonDaysLang}
   3.155 -\begin{center}
   3.156 -\begin{tabular}{llll}
   3.157 -           & Tau & Paradyn & ASH \\
   3.158 - Has Underlying Parallel Computation Model &  &  & Y\\
   3.159 - Has concept of schedulable unit of work &  &  & Y\\
   3.160 - Visualization is Invariant Across Languages      &  &  & Y\\
   3.161 - Instrument Language only (not app code) &  &  & Y\\
   3.162 - Integrates Measurements into whole picture &  &  & Y\\
   3.163 - Visualizes all core activities &  &  & Y\\
   3.164 - Core's activities are integrated with scheduling decisions &  &  & Y\\
   3.165 - Visualizes runtime overhead &  &  & Y\\
   3.166 - Visualizes consequences of communications &  &  & Y\\
   3.167 - Visually suggests \emph{hypothesis} for performance loss &  &  & Y\\
   3.168 -  &  &  & Y\\
   3.169 -  &  &  & Y\\
   3.170 -  &  &  & Y\\
   3.171 -      L.O.C. &     470 & 290 & 310
   3.172 -  \end{tabular}
   3.173 -\end{center}
   3.174 -\end{table*}
   3.175 -
   3.176 -
   3.177  \section{Illustrative Story of Performance Tuning}
   3.178  
   3.179  
   3.180 @@ -524,14 +428,14 @@
   3.181  
   3.182  The application code includes a function that automatically divides the work into a number of tasks, based on the number of cores and a tuning parameter. It distributes the tasks across the cores in a round-robin fashion, and then waits for completion of the calculation before initiating shutdown. The answers produced by the tasks are collected by a ``receiver" and accumulated into the result matrix, whereupon it notifies the setup function of completion.
   3.183  
   3.184 -The language used is SSR, which is based on rendez-vous style send and receive operations made between virtual processors (VPs). It has commands for creating and destroying virtutal processors, and three kinds of send-receive paired operations. The first, \emph{send\_from\_to} specifies a specific sender and specific receiver. We use it to notify the VP dedicated to dividing the work (``creator VP'') that the VP collecting results (``results VP'') has received all sub-results, so it can output the final result. The second, \emph{send\_of\_type\_to}, specifies a specific receiver, but the sender is anonymous, which increases flexibility while maintaining some control over scope. This construct is used by the processors multiplying sub-matrices to send their sub-result to the results processor. The third kind, \emph{send\_of\_type}, only specifies the type, and so acts as a global communication channel; this is not used in our application. The language also includes a \emph{singleton} construct that designates a piece of code as to be executed only once, which we use to  rearrange and copy data to get better cache behavior. A given copy is shared by several virtual processors, but the copy only needs to be performed once. Also available are some miscellaneous performance constructs, such as the ability to force which core a virtual processor is assigned to, which is used in our example program.
   3.185 +The language used is SSR, which is based on rendez-vous style send and receive operations made between virtual processors (VPs). It has commands for creating and destroying virtutal processors, and three kinds of send-receive paired operations. The first, \emph{send\_from\_to} specifies a specific sender and specific receiver. We use it to notify the VP dedicated to dividing the work (``creator VP'') that the VP collecting results (``results VP'') has received all sub-results, so it can output the final result. The second, \emph{send\_of\_type\_to}, specifies a specific receiver, but the sender is anonymous, which increases flexibility while maintaining some control over scope. This construct is used by the processors multiplying sub-matrices to send their sub-result to the results processor. The third kind, \emph{send\_of\_type}, only specifies the type, and so acts as a global communication channel; this is not used in our application. The language also includes a \emph{singleton} construct that designates a piece of code as to be executed only once, which we use to  rearrange and copy data to get better cache behavior. A given copy is shared by several virtual processors on different cores, but the copy only needs to be performed once. Miscellaneous performance constructs are also available, such as one to force which core a virtual processor is assigned to, which is used in our example program.
   3.186  
   3.187  A note on terminology: the word ``task''  has acquired multiple  meanings in the literature, making it a vague term. We often use, instead, the term  ``work-unit'', which is defined precisely as the trace-segment performed on a core, between two successive scheduling events, plus the set of datums consumed by that trace segment. The word task often maps well onto this precise definition, and we use both words, but mean the precise work-unit definition when we say task.
   3.188  
   3.189 -A second visualization, seen in Figure X, depicts the constraints on the scheduling decisions, which limit the choices the runtime is allowed to make. We call this the Unit & Constraint Collection, or UCC. This shows only application-derived information. 
   3.190 +A second visualization, seen in Figure X, depicts the constraints on the scheduling decisions, which limit the choices the runtime is allowed to make. We call this the Unit \& Constraint Collection, or UCC. This shows only application-derived information. 
   3.191  
   3.192  \subsection{Walk through}
   3.193 -After functional debugging, the first run produces the visualization seen in Fig X. This is what we refer to as a scheduling consequence graph. It depicts all the scheduling operations performed by the runtime, along with the consequent usage of the cores. 
   3.194 +After functional debugging, the first run produces the visualization seen in Fig \ref{fig:figure1}. This is what we refer to as a scheduling consequence graph. It depicts all the scheduling operations performed by the runtime, along with the consequent usage of the cores. 
   3.195  
   3.196  Each column is associated with one core. 
   3.197  A blue vertical block represents the time the core spends doing the actual work of one work-unit, the height being proportional to the number of cycles taken for execution. Just above each, in light blue, is the runtime overhead spent on that work-unit, which can be broken into pieces representing acquisition of the lock on the shared semantic state, time spent performing the semantics of the parallelism construct, time spent deciding which ready task to execute next, and time spent switching from virtual processor, to the runtime, and back. 
   3.198 @@ -541,7 +445,7 @@
   3.199  
   3.200  Many different orderings could also have been validly chosen. Which scheduler choices are valid is determined by three kinds of constraints: the application code constraints, hardware constraints, and runtime implementation imposed constraints. 
   3.201  
   3.202 -Returning to Fig \ref{story}, the lines in red, orange, and green represent application-code constraints that each tie two work-units together. The color represents the  kind of constraint imposed by one kind of  parallelism construct. Red is creation of a virtual processor, green is many-to-one send\_of\_type\_to, and orange is the singleton construct. For better visibility, only constraints that cross cores are shown.
   3.203 +Returning to Fig \ref{story}, the lines in red, orange, and green represent application-code constraints that each tie two work-units together. The color represents the  kind of constraint imposed by one kind of  parallelism construct. Red is creation of a virtual processor, green is the many-to-one \texttt{send\_of\_type\_to}, and orange is the singleton construct. For better visibility, only constraints that cross cores are shown.
   3.204  
   3.205  The columns represent each core, and the vertical axis represents the progress of the program execution, starting from the top. This gives at a glance the total runtime (height), level of parallelism during the run (number of filled columns at a specific height), and processor utilization (blue-covered area vs. white). All figures are at the same scale, so they can be compared directly.
   3.206  
   3.207 @@ -809,6 +713,143 @@
   3.208  
   3.209  a lot of the time it's lists of measurements, or bar graphs, things like that -- over the whole application or by function -- forcing guessing of how it connects to -- if it tells you that this line creates a lot of level 2 cache misses, that doesn't tell you what the application is doing to cause this.. but when have whole UCC along with it, have context for the measurements -- puts the line of code into a framework -- it's necessary but not useful by itself -- it needs to be connected -- the unit information is more interesting than the line of code information -- line of code has only sequential meaning, missing scheduling connection -- need the scheduling behavior added -- need to know the unit of work that's causing problem, not the line of code -- unit provides a parallelism context, line of code does not.. unit provides an execution order and execution location, with implied communication -- line of code does not.
   3.210  
   3.211 +
   3.212 +
   3.213 +
   3.214 +======  Related work ========
   3.215 +
   3.216 +StarSs is clearly thinking about tasks, and even some about scheduling. but limited on scheduling -- can just place task into a queue, so can sort of manipulate scheduling but view doesn't really give all the constraints -- missing the runtime overhead, and missing the idle-time consequent from non-overlapped comm. 
   3.217 +
   3.218 +The PPoPP 12 paper and its ilk are fall into same category -- measurements without model to connect measurement to cause.
   3.219 +
   3.220 +-] MPI event based (Paragraph)
   3.221 +
   3.222 +-] Invasive Application Instrumentation approach (Paradyn)
   3.223 +
   3.224 +-] Thread-model based (Tau)
   3.225 +
   3.226 +-] profiling based (VTune, PPoPP 12 paper..)
   3.227 +
   3.228 +-] Task-based
   3.229 +(StarSs)
   3.230 +
   3.231 +?
   3.232 +
   3.233 +-] Instrument language runtime -- all applications inherit free
   3.234 +
   3.235 +-] Computation model backs it, connects effect back to cause
   3.236 +
   3.237 +-] Visual features indicate which hardware is idle
   3.238 +
   3.239 +-] Visual features indicate cause of idleness
   3.240 +
   3.241 +-] Low overhead instrumentation
   3.242 +
   3.243 +-] Task carries extra info that organizes --  connects disparate measurements -- helps connect effect back to cause
   3.244 +
   3.245 +-] Multiple languages easily reuse instrumentation 
   3.246 +
   3.247 +-] Visual features indicate langauge features from app-code
   3.248 +
   3.249 +?
   3.250 +
   3.251 +
   3.252 +==========
   3.253 +
   3.254 +MPI is also machine-based abstraction, that gives communication information, but doesn't have concept of constraints . Its sort of in-between..
   3.255 +
   3.256 +For communication, want two things: 1) idle-time on cores that is consequence from particular communication pattern, and in some cases 2) the energy due to the volume of communication. Both are consequence of the scheduling choices made.
   3.257 +
   3.258 +
   3.259 +
   3.260 +
   3.261 +=======================?
   3.262 +
   3.263 +Their structure information is either call graph or line of code. This is too limited for parallel performance. Need tasks and scheduling. More recent languages move towards task-based. This makes more of the needed structure information available. But we've not seen a complete or coherent presentation.
   3.264 +
   3.265 +=====
   3.266 + 
   3.267 + The value of a consequence graph is linking the size of boxes in it to the decisions made by the scheduler, which are represented by the shape. This lets a person visually link scheduling decisions to consequences.  The mind can quickly see empty areas, representing lost performance, and connect those to boxes and lines that cause the empty areas.  They then look up the code of each box and construct of each line, which gives them the code structures that caused the loss of performance.  This \emph{visual} linkage of undesirable effect back to \emph{cause in the code} is what sets our approach apart. 
   3.268 +The value of the UCC is visually linking cause of performance loss to options available for fixing it.
   3.269 +
   3.270 +===== 
   3.271 +
   3.272 +
   3.273 +
   3.274 +A survey of the most highly cited classic papers shows the commonality..
   3.275 +
   3.276 +===========
   3.277 +
   3.278 +
   3.279 +Use case: takes longer to create when more units -- that's because it mallocs all the matrix pieces, before it pairs any and starts the pair as work -- can see this from the graphs by linking the units to code they execute -- not the functions, specifically, but to the scheduled code-snippet. -- suggests changing the way divider works.
   3.280 +
   3.281 +Graph tells us the division code is bad -- works better when have 39 cores instead of 40 -- makes more pieces for 39 than for 40, and the end up fitting better onto the cores..
   3.282 +
   3.283 +Systematic way of adding auto-tuning to language -- using TSC for time measurements, and counters for cache miss.  Provides a framework that links the pieces together, and the UCC gives critical information useful in tuning.
   3.284 +
   3.285 +=======================
   3.286 +
   3.287 +Advantage: unlike statistical, it catches all "one off" and momentary serializations, which cause massive idling.
   3.288 +
   3.289 +Advantage: it is quick and easy to instrument a language that uses the same runtime abstraction (VMS) -- VMS was made to make language runtimes quick and easy, with low overhead (cite). VMS has the base instrumentation in it, language adds the types of constraints and the collection points. Each request to the runtime is in a separate (inlined) function, which makes adding the instrumentation simple.
   3.290 +
   3.291 +Advantage: instrument the language, NOT the application -- and yet it gives all the application-specific information from a run. -- others: Tau forces extensive instrumentation of application..  MPI based ones don't give the constraint info, nor what occupies time of core info..
   3.292 +
   3.293 +=======================
   3.294 +   
   3.295 +Expl of what is meant by "structure" info -- example where meas of runtime system showed that overhead of task creation took longer than task execution. Hypothesis was trivial: cause of lost performance is runtime overhead of creation is larger than work in a scheduled unit.  The plan to fix is to change the number of work-units created, by changing the parameter in the divider code.  Implementing this and re-executing showed that this source of performance loss was fixed by the change.
   3.296 +
   3.297 +The example shows that theory is part of hypothesis generation, because it required knowledge of the runtime and understanding that creation of a task is work performed as overhead inside the runtime.  The example also shows that generating the plan to fix required understanding the segment of code that divided work into tasks, and the relationship between parameters to that code and execution time of the resulting tasks.
   3.298 +
   3.299 +Hence, each step of performance debugging involves several aspects, including mental model of computation, application code, runtime implementation, scheduling choices, and hardware. In order to be effective, a tool used during performance tuning must be part of a complete model of computation that ties all aspects of the debugging/tuning steps together. Current tools fall short, both because they lack an encompassing model of computation, and because the tools are isolated from each other. Without integration, the user gets an incomplete picture of the computation and must resort to guesses either of where the problem lies or of what to do to fix it.
   3.300 +
   3.301 +
   3.302 +We introduce in this paper a model of computation that ties all aspects of performance together, along with instrumentation and visualization that is guided by the model and that links all relevant performance tuning information together. The model and visualization tools are illustrated with a story line, which shows how they are used to performance tune the standard matrix-multiply application on two multi-core systems. 
   3.303 +
   3.304 +Although we use standard visualization techniques [cite], our approach differs from previous work in both theoretical and practical aspects. The theory we  use is The Holistic Model of Parallel Computation, which ties together parallelism construct semantics with scheduling choices made during a run, and specific measurements made on the cores.  When put into practice, new kinds of measurements are taken, which complete the picture presented to the user, and each measurement is tied to a specific segment of code. The resulting combination not only identifies each source of performance loss, but ties it back to specific causes and suggests precise fixes, all of which is illustrated in our story line.
   3.305 +
   3.306 +[maybe some stuff about features and benefits of our approach: no app instrumentation, it's all inside language runtime, very low overhead, integrated with VMS-based functional debugging, and so on]
   3.307 +
   3.308 +
   3.309 +Table of features/benefits comparing us to others -- in related work section.
   3.310 +-- language invariant.. concepts are lang independent, visualization is language independent
   3.311 +-- instr lang once, then works across apps
   3.312 +-- Integrate measurements with runtime implementation details
   3.313 +-- Integrate measurements of one kind with those of a different kind
   3.314 +-- Integrate measurements of core activity with code snippets
   3.315 +-- Underlying theory ties measurements to each other, to runtime, and to hardware
   3.316 +-- Has concept of unit of work / task
   3.317 +-- Includes communication between cores
   3.318 +-- Shows what each core spends each bit of time on
   3.319 +-- Visual representation directly indicates areas of performance loss
   3.320 +
   3.321 +\begin{table*}[ht!]
   3.322 +\caption
   3.323 +{Comparison of Features and Benefits
   3.324 +}
   3.325 +\label{tabPersonDaysLang}
   3.326 +\begin{center}
   3.327 +\begin{tabular}{llll}
   3.328 +           & Tau & Paradyn & ASH \\
   3.329 + Has Underlying Parallel Computation Model &  &  & Y\\
   3.330 + Has concept of schedulable unit of work &  &  & Y\\
   3.331 + Visualization is Invariant Across Languages      &  &  & Y\\
   3.332 + Instrument Language only (not app code) &  &  & Y\\
   3.333 + Integrates Measurements into whole picture &  &  & Y\\
   3.334 + Visualizes all core activities &  &  & Y\\
   3.335 + Core's activities are integrated with scheduling decisions &  &  & Y\\
   3.336 + Visualizes runtime overhead &  &  & Y\\
   3.337 + Visualizes consequences of communications &  &  & Y\\
   3.338 + Visually suggests \emph{hypothesis} for performance loss &  &  & Y\\
   3.339 +  &  &  & Y\\
   3.340 +  &  &  & Y\\
   3.341 +  &  &  & Y\\
   3.342 +      L.O.C. &     470 & 290 & 310
   3.343 +  \end{tabular}
   3.344 +\end{center}
   3.345 +\end{table*}
   3.346 +
   3.347 +
   3.348  ===================
   3.349  
   3.350  Perf bounded by: the application-imposed constraints on scheduling units, the hardware-imposed constraints on scheduling them, and the runtime-implementation imposed constraints on scheduling them. 
     4.1 --- a/0__Papers/VMS/Universal/figures/control_flow.svg	Fri May 04 09:44:14 2012 -0700
     4.2 +++ b/0__Papers/VMS/Universal/figures/control_flow.svg	Wed May 16 06:32:02 2012 -0700
     4.3 @@ -9,8 +9,8 @@
     4.4     xmlns="http://www.w3.org/2000/svg"
     4.5     xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
     4.6     xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
     4.7 -   width="990"
     4.8 -   height="765"
     4.9 +   width="1488.189"
    4.10 +   height="1052.3622"
    4.11     id="svg2"
    4.12     sodipodi:version="0.32"
    4.13     inkscape:version="0.48.1 "
    4.14 @@ -520,9 +520,9 @@
    4.15       objecttolerance="10"
    4.16       inkscape:pageopacity="0.0"
    4.17       inkscape:pageshadow="2"
    4.18 -     inkscape:zoom="1.05"
    4.19 +     inkscape:zoom="0.97968464"
    4.20       inkscape:cx="457.74508"
    4.21 -     inkscape:cy="272.59162"
    4.22 +     inkscape:cy="264.16662"
    4.23       inkscape:document-units="px"
    4.24       inkscape:current-layer="layer1"
    4.25       showgrid="false"
    4.26 @@ -539,7 +539,7 @@
    4.27          <dc:format>image/svg+xml</dc:format>
    4.28          <dc:type
    4.29             rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
    4.30 -        <dc:title />
    4.31 +        <dc:title></dc:title>
    4.32        </cc:Work>
    4.33      </rdf:RDF>
    4.34    </metadata>
    4.35 @@ -547,7 +547,7 @@
    4.36       inkscape:label="Layer 1"
    4.37       inkscape:groupmode="layer"
    4.38       id="layer1"
    4.39 -     transform="translate(-3.5307846,441.70658)">
    4.40 +     transform="translate(-3.5307846,729.06884)">
    4.41      <text
    4.42         xml:space="preserve"
    4.43         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
    4.44 @@ -571,7 +571,7 @@
    4.45           x="368.25397"
    4.46           y="345.27225" /></text>
    4.47      <g
    4.48 -       transform="translate(-22.94669,-564)"
    4.49 +       transform="translate(-22.94669,-784)"
    4.50         id="g8065">
    4.51        <text
    4.52           xml:space="preserve"
    4.53 @@ -600,7 +600,7 @@
    4.54      </g>
    4.55      <g
    4.56         id="g11700"
    4.57 -       transform="translate(160,180)">
    4.58 +       transform="translate(160,-40)">
    4.59        <text
    4.60           xml:space="preserve"
    4.61           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
    4.62 @@ -634,7 +634,7 @@
    4.63           style="fill:none;stroke:#000000;stroke-width:1.08748555;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
    4.64      </g>
    4.65      <g
    4.66 -       transform="translate(177.05331,-444)"
    4.67 +       transform="translate(177.05331,-664)"
    4.68         id="g8103">
    4.69        <text
    4.70           xml:space="preserve"
    4.71 @@ -663,7 +663,7 @@
    4.72      </g>
    4.73      <g
    4.74         id="g8165"
    4.75 -       transform="translate(177.05331,-384)">
    4.76 +       transform="translate(177.05331,-604)">
    4.77        <text
    4.78           sodipodi:linespacing="100%"
    4.79           id="text8167"
    4.80 @@ -690,7 +690,7 @@
    4.81           y="274.77512" />
    4.82      </g>
    4.83      <g
    4.84 -       transform="translate(437.05331,-444)"
    4.85 +       transform="translate(437.05331,-664)"
    4.86         id="g8173">
    4.87        <text
    4.88           xml:space="preserve"
    4.89 @@ -721,35 +721,35 @@
    4.90         sodipodi:nodetypes="cc"
    4.91         inkscape:connector-curvature="0"
    4.92         id="path8510"
    4.93 -       d="m 30.09217,-156.20795 134.75175,0"
    4.94 +       d="m 30.09217,-376.20795 134.75175,0"
    4.95         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#StopL);marker-end:url(#TriangleOutL)" />
    4.96      <text
    4.97         xml:space="preserve"
    4.98         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
    4.99         x="95.276283"
   4.100 -       y="-157.95343"
   4.101 +       y="-377.95343"
   4.102         id="text8067-3"
   4.103         sodipodi:linespacing="100%"><tspan
   4.104           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.105           sodipodi:role="line"
   4.106           x="95.276283"
   4.107 -         y="-157.95343"
   4.108 +         y="-377.95343"
   4.109           id="tspan8071-6">Non-suspend end of work-unit</tspan></text>
   4.110      <path
   4.111         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#StopL);marker-end:url(#TriangleOutL)"
   4.112 -       d="m 30.09217,-276.20795 134.75175,0"
   4.113 +       d="m 30.09217,-496.20795 134.75175,0"
   4.114         id="path11002"
   4.115         inkscape:connector-curvature="0"
   4.116         sodipodi:nodetypes="cc" />
   4.117      <text
   4.118         sodipodi:linespacing="100%"
   4.119         id="text11004"
   4.120 -       y="-277.95343"
   4.121 +       y="-497.95343"
   4.122         x="95.430077"
   4.123         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.124         xml:space="preserve"><tspan
   4.125           id="tspan11006"
   4.126 -         y="-277.95343"
   4.127 +         y="-497.95343"
   4.128           x="95.430077"
   4.129           sodipodi:role="line"
   4.130           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1">Suspend at end of work-unit</tspan></text>
   4.131 @@ -757,17 +757,17 @@
   4.132         sodipodi:nodetypes="cc"
   4.133         inkscape:connector-curvature="0"
   4.134         id="path11472"
   4.135 -       d="m 399.56974,-144.00562 0,34.68367"
   4.136 +       d="m 399.56974,-364.00562 0,34.68367"
   4.137         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.138      <path
   4.139         sodipodi:nodetypes="cc"
   4.140         inkscape:connector-curvature="0"
   4.141         id="path11484"
   4.142 -       d="m 688.09217,-156.20795 22.13646,0"
   4.143 +       d="m 688.09217,-376.20795 22.13646,0"
   4.144         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.145      <path
   4.146         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
   4.147 -       d="m 768.09217,-156.20795 41.4633,0"
   4.148 +       d="m 768.09217,-376.20795 41.4633,0"
   4.149         id="path11518"
   4.150         inkscape:connector-curvature="0"
   4.151         sodipodi:nodetypes="cc" />
   4.152 @@ -787,58 +787,58 @@
   4.153         xml:space="preserve"
   4.154         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.155         x="729.43005"
   4.156 -       y="-121.95343"
   4.157 +       y="-341.95343"
   4.158         id="text11616"
   4.159         sodipodi:linespacing="100%"><tspan
   4.160           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.161           sodipodi:role="line"
   4.162           x="730.78357"
   4.163 -         y="-121.95343"
   4.164 +         y="-341.95343"
   4.165           id="tspan11618">     new </tspan><tspan
   4.166           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.167           sodipodi:role="line"
   4.168           x="729.43005"
   4.169 -         y="-112.95343"
   4.170 +         y="-332.95343"
   4.171           id="tspan12175">      work-unit</tspan><tspan
   4.172           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.173           sodipodi:role="line"
   4.174           x="729.43005"
   4.175 -         y="-103.95343"
   4.176 +         y="-323.95343"
   4.177           id="tspan11620">          is attached to</tspan><tspan
   4.178           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.179           sodipodi:role="line"
   4.180           x="729.43005"
   4.181 -         y="-94.95343"
   4.182 +         y="-314.95343"
   4.183           id="tspan11622">               a VP's context</tspan></text>
   4.184      <text
   4.185         sodipodi:linespacing="100%"
   4.186         id="text11624"
   4.187 -       y="-185.95343"
   4.188 +       y="-405.95343"
   4.189         x="787.43005"
   4.190         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.191         xml:space="preserve"><tspan
   4.192           id="tspan11626"
   4.193 -         y="-185.95343"
   4.194 +         y="-405.95343"
   4.195           x="787.43005"
   4.196           sodipodi:role="line"
   4.197           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">new work-</tspan><tspan
   4.198           id="tspan11630"
   4.199 -         y="-176.95343"
   4.200 +         y="-396.95343"
   4.201           x="787.43005"
   4.202           sodipodi:role="line"
   4.203           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">unit has</tspan><tspan
   4.204 -         y="-167.95343"
   4.205 +         y="-387.95343"
   4.206           x="787.43005"
   4.207           sodipodi:role="line"
   4.208           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.209           id="tspan12161">own local</tspan><tspan
   4.210 -         y="-158.95343"
   4.211 +         y="-378.95343"
   4.212           x="787.43005"
   4.213           sodipodi:role="line"
   4.214           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.215           id="tspan11634">context</tspan></text>
   4.216      <g
   4.217 -       transform="translate(617.05331,-463.31973)"
   4.218 +       transform="translate(617.05331,-683.31973)"
   4.219         id="g11656">
   4.220        <text
   4.221           xml:space="preserve"
   4.222 @@ -878,30 +878,30 @@
   4.223      <text
   4.224         sodipodi:linespacing="100%"
   4.225         id="text11718"
   4.226 -       y="-147.95343"
   4.227 +       y="-367.95343"
   4.228         x="95.276283"
   4.229         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.230         xml:space="preserve"><tspan
   4.231           id="tspan11720"
   4.232 -         y="-147.95343"
   4.233 +         y="-367.95343"
   4.234           x="95.276283"
   4.235           sodipodi:role="line"
   4.236           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1">which has attached context</tspan></text>
   4.237      <path
   4.238         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#StopL);marker-end:url(#TriangleOutL)"
   4.239 -       d="m 30.09217,-76.20795 134.75175,0"
   4.240 +       d="m 30.09217,-296.20795 134.75175,0"
   4.241         id="path11742"
   4.242         inkscape:connector-curvature="0"
   4.243         sodipodi:nodetypes="cc" />
   4.244      <text
   4.245         sodipodi:linespacing="100%"
   4.246         id="text11744"
   4.247 -       y="-77.95343"
   4.248 +       y="-297.95343"
   4.249         x="95.276283"
   4.250         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.251         xml:space="preserve"><tspan
   4.252           id="tspan11746"
   4.253 -         y="-77.95343"
   4.254 +         y="-297.95343"
   4.255           x="95.276283"
   4.256           sodipodi:role="line"
   4.257           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1">Non-suspend end of work-unit</tspan></text>
   4.258 @@ -909,17 +909,17 @@
   4.259         xml:space="preserve"
   4.260         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.261         x="95.276283"
   4.262 -       y="-67.95343"
   4.263 +       y="-287.95343"
   4.264         id="text11750"
   4.265         sodipodi:linespacing="100%"><tspan
   4.266           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.267           sodipodi:role="line"
   4.268           x="95.276283"
   4.269 -         y="-67.95343"
   4.270 +         y="-287.95343"
   4.271           id="tspan11752">purely local (no ctxt attached)</tspan></text>
   4.272      <g
   4.273         id="g11754"
   4.274 -       transform="translate(-22.94669,-444)">
   4.275 +       transform="translate(-22.94669,-664)">
   4.276        <text
   4.277           sodipodi:linespacing="100%"
   4.278           id="text11756"
   4.279 @@ -949,51 +949,51 @@
   4.280         xml:space="preserve"
   4.281         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.282         x="29.276283"
   4.283 -       y="-129.95343"
   4.284 +       y="-349.95343"
   4.285         id="text11764"
   4.286         sodipodi:linespacing="100%"><tspan
   4.287           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.288           sodipodi:role="line"
   4.289           x="29.276283"
   4.290 -         y="-129.95343"
   4.291 +         y="-349.95343"
   4.292           id="tspan11766">CILK is example of this case,</tspan><tspan
   4.293           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.294           sodipodi:role="line"
   4.295           x="29.276283"
   4.296 -         y="-120.95343"
   4.297 +         y="-340.95343"
   4.298           id="tspan12203">when leaf child finishes</tspan></text>
   4.299      <text
   4.300         sodipodi:linespacing="100%"
   4.301         id="text11768"
   4.302 -       y="-49.95343"
   4.303 +       y="-269.95343"
   4.304         x="29.276283"
   4.305         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.306         xml:space="preserve"><tspan
   4.307           id="tspan11770"
   4.308 -         y="-49.95343"
   4.309 +         y="-269.95343"
   4.310           x="29.276283"
   4.311           sodipodi:role="line"
   4.312           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1">Dataflow is example of this case</tspan></text>
   4.313      <text
   4.314         sodipodi:linespacing="100%"
   4.315         id="text11772"
   4.316 -       y="-253.95343"
   4.317 +       y="-473.95343"
   4.318         x="29.276283"
   4.319         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.320         xml:space="preserve"><tspan
   4.321           id="tspan11774"
   4.322 -         y="-253.95343"
   4.323 +         y="-473.95343"
   4.324           x="29.276283"
   4.325           sodipodi:role="line"
   4.326           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1">pthread is example of this case,</tspan><tspan
   4.327 -         y="-244.95343"
   4.328 +         y="-464.95343"
   4.329           x="29.276283"
   4.330           sodipodi:role="line"
   4.331           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.332           id="tspan3625">as is Cilk when suspends on sync</tspan></text>
   4.333      <path
   4.334         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
   4.335 -       d="m 170.33352,-76.29839 100.31543,-78.14797"
   4.336 +       d="m 170.33352,-296.29839 100.31543,-78.14797"
   4.337         id="path11776"
   4.338         inkscape:connector-curvature="0"
   4.339         sodipodi:nodetypes="cc" />
   4.340 @@ -1001,61 +1001,61 @@
   4.341         sodipodi:nodetypes="cc"
   4.342         inkscape:connector-curvature="0"
   4.343         id="path12020"
   4.344 -       d="m 228.09216,-156.20795 41.06088,0"
   4.345 +       d="m 228.09216,-376.20795 41.06088,0"
   4.346         style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.347      <path
   4.348         sodipodi:nodetypes="cc"
   4.349         inkscape:connector-curvature="0"
   4.350         id="path12086"
   4.351 -       d="m 659.56974,-144.00562 0,24.4507"
   4.352 +       d="m 659.56974,-364.00562 0,24.4507"
   4.353         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.354      <text
   4.355         xml:space="preserve"
   4.356         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.357         x="661.43005"
   4.358 -       y="-135.95343"
   4.359 +       y="-355.95343"
   4.360         id="text12088"
   4.361         sodipodi:linespacing="100%"><tspan
   4.362           style="font-size:9px;text-align:start;text-anchor:start;fill:#008000;fill-opacity:1"
   4.363           sodipodi:role="line"
   4.364           x="661.43005"
   4.365 -         y="-135.95343"
   4.366 +         y="-355.95343"
   4.367           id="tspan12090">no work</tspan><tspan
   4.368           style="font-size:9px;text-align:start;text-anchor:start;fill:#008000;fill-opacity:1"
   4.369           sodipodi:role="line"
   4.370           x="661.43005"
   4.371 -         y="-126.95343"
   4.372 +         y="-346.95343"
   4.373           id="tspan12092">in Q</tspan></text>
   4.374      <path
   4.375         sodipodi:nodetypes="cc"
   4.376         inkscape:connector-curvature="0"
   4.377         id="path12155"
   4.378 -       d="M 737.20425,-133.48137 809.61651,-76.979"
   4.379 +       d="m 737.20425,-353.48137 72.41226,56.50237"
   4.380         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.381      <path
   4.382         sodipodi:nodetypes="cc"
   4.383         inkscape:connector-curvature="0"
   4.384         id="path12197"
   4.385 -       d="m 688.33352,-96.29839 23.17876,-59.17839"
   4.386 +       d="m 688.33352,-316.29839 23.17876,-59.17839"
   4.387         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.388      <text
   4.389         sodipodi:linespacing="100%"
   4.390         id="text12205"
   4.391 -       y="-192.5929"
   4.392 +       y="-412.5929"
   4.393         x="369.27625"
   4.394         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.395         xml:space="preserve"><tspan
   4.396           id="tspan12209"
   4.397 -         y="-192.5929"
   4.398 +         y="-412.5929"
   4.399           x="369.27625"
   4.400           sodipodi:role="line"
   4.401           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1">(in CILK, counts</tspan><tspan
   4.402 -         y="-183.5929"
   4.403 +         y="-403.5929"
   4.404           x="369.27625"
   4.405           sodipodi:role="line"
   4.406           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.407           id="tspan12307"> child ends, and</tspan><tspan
   4.408 -         y="-174.5929"
   4.409 +         y="-394.5929"
   4.410           x="369.27625"
   4.411           sodipodi:role="line"
   4.412           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.413 @@ -1064,33 +1064,33 @@
   4.414         xml:space="preserve"
   4.415         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.416         x="627.27625"
   4.417 -       y="-191.95343"
   4.418 +       y="-411.95343"
   4.419         id="text12213"
   4.420         sodipodi:linespacing="100%"><tspan
   4.421           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.422           sodipodi:role="line"
   4.423           x="627.27625"
   4.424 -         y="-191.95343"
   4.425 +         y="-411.95343"
   4.426           id="tspan12221">(for CILK, Q</tspan><tspan
   4.427           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.428           sodipodi:role="line"
   4.429           x="627.27625"
   4.430 -         y="-182.95343"
   4.431 +         y="-402.95343"
   4.432           id="tspan12305"> filled by async</tspan><tspan
   4.433           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.434           sodipodi:role="line"
   4.435           x="627.27625"
   4.436 -         y="-173.95343"
   4.437 +         y="-393.95343"
   4.438           id="tspan12219"> spawns)</tspan></text>
   4.439      <path
   4.440         sodipodi:nodetypes="cc"
   4.441         inkscape:connector-curvature="0"
   4.442         id="path12275"
   4.443 -       d="m 328.09217,-156.20795 41.44502,0"
   4.444 +       d="m 328.09217,-376.20795 41.44502,0"
   4.445         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.446      <g
   4.447         id="g12277"
   4.448 -       transform="translate(-280,180)">
   4.449 +       transform="translate(-280,-40)">
   4.450        <text
   4.451           sodipodi:linespacing="100%"
   4.452           id="text12279"
   4.453 @@ -1120,13 +1120,13 @@
   4.454      </g>
   4.455      <path
   4.456         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
   4.457 -       d="m 299.56974,-131.98903 0,122.094923"
   4.458 +       d="m 299.56974,-351.98903 0,122.09492"
   4.459         id="path12297"
   4.460         inkscape:connector-curvature="0"
   4.461         sodipodi:nodetypes="cc" />
   4.462      <g
   4.463         id="g12335"
   4.464 -       transform="translate(77.05331,-283.31973)">
   4.465 +       transform="translate(77.05331,-503.31973)">
   4.466        <text
   4.467           sodipodi:linespacing="100%"
   4.468           id="text12337"
   4.469 @@ -1148,22 +1148,22 @@
   4.470             y="303.39841"
   4.471             x="222.37003"
   4.472             sodipodi:role="line"
   4.473 -           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1">give them to</tspan><tspan
   4.474 -           id="tspan12345"
   4.475 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1">give to hdlrs.</tspan><tspan
   4.476             y="312.39841"
   4.477             x="222.37003"
   4.478             sodipodi:role="line"
   4.479 -           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1">constraint</tspan><tspan
   4.480 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.481 +           id="tspan12400">check timers,</tspan><tspan
   4.482             y="321.39841"
   4.483             x="222.37003"
   4.484             sodipodi:role="line"
   4.485             style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.486 -           id="tspan12398">updater and</tspan><tspan
   4.487 +           id="tspan3521">fire hdlr for</tspan><tspan
   4.488             y="330.39841"
   4.489             x="222.37003"
   4.490             sodipodi:role="line"
   4.491             style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.492 -           id="tspan12400">Assigner</tspan></text>
   4.493 +           id="tspan3523">expired ones</tspan></text>
   4.494        <rect
   4.495           style="fill:none;stroke:#000000;stroke-width:1.08018124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
   4.496           id="rect12347"
   4.497 @@ -1174,7 +1174,7 @@
   4.498      </g>
   4.499      <g
   4.500         id="g12349"
   4.501 -       transform="translate(617.05331,-383.31973)">
   4.502 +       transform="translate(617.05331,-603.31973)">
   4.503        <text
   4.504           sodipodi:linespacing="100%"
   4.505           id="text12351"
   4.506 @@ -1217,7 +1217,7 @@
   4.507      </g>
   4.508      <g
   4.509         id="g12404"
   4.510 -       transform="translate(17.05331,-184)">
   4.511 +       transform="translate(17.05331,-404)">
   4.512        <text
   4.513           sodipodi:linespacing="100%"
   4.514           id="text12406"
   4.515 @@ -1244,7 +1244,7 @@
   4.516           y="274.77512" />
   4.517      </g>
   4.518      <g
   4.519 -       transform="translate(97.05331,-124)"
   4.520 +       transform="translate(97.05331,-344)"
   4.521         id="g12418">
   4.522        <text
   4.523           xml:space="preserve"
   4.524 @@ -1275,11 +1275,11 @@
   4.525         sodipodi:nodetypes="cc"
   4.526         inkscape:connector-curvature="0"
   4.527         id="path12432"
   4.528 -       d="m 239.56974,115.99438 0,34.68367"
   4.529 +       d="m 239.56974,-104.00562 0,34.68367"
   4.530         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.531      <g
   4.532         id="g12434"
   4.533 -       transform="translate(-62.94669,-124)">
   4.534 +       transform="translate(-62.94669,-344)">
   4.535        <text
   4.536           sodipodi:linespacing="100%"
   4.537           id="text12436"
   4.538 @@ -1308,64 +1308,64 @@
   4.539      <text
   4.540         xml:space="preserve"
   4.541         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.542 -       x="353.27625"
   4.543 -       y="86.726822"
   4.544 +       x="273.27625"
   4.545 +       y="6.7268219"
   4.546         id="text12442"
   4.547         sodipodi:linespacing="100%"><tspan
   4.548           id="tspan12448"
   4.549           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.550           sodipodi:role="line"
   4.551 -         x="353.27625"
   4.552 -         y="86.726822">(in dataflow &amp; CILK,</tspan><tspan
   4.553 +         x="273.27625"
   4.554 +         y="6.7268219">(in dataflow &amp; CILK,</tspan><tspan
   4.555           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.556           sodipodi:role="line"
   4.557 -         x="353.27625"
   4.558 -         y="95.726822"
   4.559 +         x="273.27625"
   4.560 +         y="15.726822"
   4.561           id="tspan12454"> msgs from other cores</tspan><tspan
   4.562           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.563           sodipodi:role="line"
   4.564 -         x="353.27625"
   4.565 -         y="104.72682"
   4.566 -         id="tspan12456"> go to Assigner to ask</tspan><tspan
   4.567 +         x="273.27625"
   4.568 +         y="24.726822"
   4.569 +         id="tspan12482"> that ask for or push</tspan><tspan
   4.570           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.571           sodipodi:role="line"
   4.572 -         x="353.27625"
   4.573 -         y="113.72682"
   4.574 -         id="tspan12482"> for work and to push)</tspan></text>
   4.575 +         x="273.27625"
   4.576 +         y="33.726822"
   4.577 +         id="tspan3527"> work, go to assigner)</tspan></text>
   4.578      <text
   4.579         sodipodi:linespacing="100%"
   4.580         id="text12460"
   4.581 -       y="190.72681"
   4.582 -       x="359.27625"
   4.583 +       y="6.7268066"
   4.584 +       x="369.27625"
   4.585         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.586         xml:space="preserve"><tspan
   4.587           id="tspan12466"
   4.588 -         y="190.72681"
   4.589 -         x="359.27625"
   4.590 +         y="6.7268066"
   4.591 +         x="369.27625"
   4.592           sodipodi:role="line"
   4.593           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1">(in dataflow &amp; CILK,</tspan><tspan
   4.594 -         y="199.72681"
   4.595 -         x="359.27625"
   4.596 +         y="15.726807"
   4.597 +         x="369.27625"
   4.598           sodipodi:role="line"
   4.599           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.600           id="tspan12472"> push work to other</tspan><tspan
   4.601 -         y="208.72681"
   4.602 -         x="359.27625"
   4.603 +         y="24.726807"
   4.604 +         x="369.27625"
   4.605           sodipodi:role="line"
   4.606           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.607           id="tspan12488"> cores via msgs -- </tspan><tspan
   4.608 -         y="217.72681"
   4.609 -         x="359.27625"
   4.610 +         y="33.726807"
   4.611 +         x="369.27625"
   4.612           sodipodi:role="line"
   4.613           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.614           id="tspan3973"> remember </tspan><tspan
   4.615 -         y="226.72681"
   4.616 -         x="359.27625"
   4.617 +         y="42.726807"
   4.618 +         x="369.27625"
   4.619           sodipodi:role="line"
   4.620           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.621           id="tspan3977"> constraints that</tspan><tspan
   4.622 -         y="235.72681"
   4.623 -         x="359.27625"
   4.624 +         y="51.726807"
   4.625 +         x="369.27625"
   4.626           sodipodi:role="line"
   4.627           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.628           id="tspan12642"> cross cores)</tspan></text>
   4.629 @@ -1373,11 +1373,11 @@
   4.630         sodipodi:nodetypes="cc"
   4.631         inkscape:connector-curvature="0"
   4.632         id="path12490"
   4.633 -       d="M 328.33352,16.826612 369.78149,-154.44636"
   4.634 +       d="m 328.33352,-203.17339 41.44797,-171.27297"
   4.635         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.636      <g
   4.637         id="g12506"
   4.638 -       transform="translate(97.05331,-184)">
   4.639 +       transform="translate(97.05331,-404)">
   4.640        <text
   4.641           sodipodi:linespacing="100%"
   4.642           id="text12508"
   4.643 @@ -1403,43 +1403,15 @@
   4.644           x="193.78287"
   4.645           y="274.77512" />
   4.646      </g>
   4.647 -    <g
   4.648 -       transform="translate(177.05331,-124)"
   4.649 -       id="g12516">
   4.650 -      <text
   4.651 -         xml:space="preserve"
   4.652 -         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.653 -         x="222.25137"
   4.654 -         y="285.36765"
   4.655 -         id="text12518"
   4.656 -         sodipodi:linespacing="100%"><tspan
   4.657 -           id="tspan12520"
   4.658 -           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.659 -           sodipodi:role="line"
   4.660 -           x="222.25137"
   4.661 -           y="285.36765">send work-</tspan><tspan
   4.662 -           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
   4.663 -           sodipodi:role="line"
   4.664 -           x="222.25137"
   4.665 -           y="294.36765"
   4.666 -           id="tspan12780">push msg</tspan></text>
   4.667 -      <rect
   4.668 -         y="274.77512"
   4.669 -         x="193.78287"
   4.670 -         height="25.544432"
   4.671 -         width="57.486332"
   4.672 -         id="rect12522"
   4.673 -         style="fill:none;stroke:#000000;stroke-width:1.08018124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
   4.674 -    </g>
   4.675      <path
   4.676         sodipodi:nodetypes="cc"
   4.677         inkscape:connector-curvature="0"
   4.678         id="path12534"
   4.679 -       d="m 319.56974,115.99438 0,34.68367"
   4.680 +       d="m 319.56974,-104.00562 0,34.68367"
   4.681         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.682      <path
   4.683         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
   4.684 -       d="M 297.91051,54.87914 244.22867,90.53671"
   4.685 +       d="m 297.91051,-165.12086 -53.68184,35.65757"
   4.686         id="path12544"
   4.687         inkscape:connector-curvature="0"
   4.688         sodipodi:nodetypes="cc" />
   4.689 @@ -1447,10 +1419,10 @@
   4.690         sodipodi:nodetypes="cc"
   4.691         inkscape:connector-curvature="0"
   4.692         id="path12550"
   4.693 -       d="m 239.95132,116.23968 -77.23827,34.97636"
   4.694 +       d="m 239.95132,-103.76032 -77.23827,34.97636"
   4.695         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.696      <g
   4.697 -       transform="translate(257.05331,-384)"
   4.698 +       transform="translate(257.05331,-604)"
   4.699         id="g12552">
   4.700        <text
   4.701           xml:space="preserve"
   4.702 @@ -1481,26 +1453,26 @@
   4.703         sodipodi:nodetypes="cc"
   4.704         inkscape:connector-curvature="0"
   4.705         id="path12562"
   4.706 -       d="M 303.63081,54.87914 318.29909,89.8607"
   4.707 +       d="m 303.63081,-165.12086 14.66828,34.98156"
   4.708         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.709      <text
   4.710         sodipodi:linespacing="100%"
   4.711         id="text12564"
   4.712 -       y="-131.95343"
   4.713 +       y="-351.95343"
   4.714         x="371.43005"
   4.715         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.716         xml:space="preserve"><tspan
   4.717           id="tspan12568"
   4.718 -         y="-131.95343"
   4.719 +         y="-351.95343"
   4.720           x="371.43005"
   4.721           sodipodi:role="line"
   4.722           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">   done</tspan><tspan
   4.723 -         y="-122.95343"
   4.724 +         y="-342.95343"
   4.725           x="371.43005"
   4.726           sodipodi:role="line"
   4.727           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.728           id="tspan12598"> with</tspan><tspan
   4.729 -         y="-113.95343"
   4.730 +         y="-333.95343"
   4.731           x="371.43005"
   4.732           sodipodi:role="line"
   4.733           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.734 @@ -1509,27 +1481,27 @@
   4.735         xml:space="preserve"
   4.736         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.737         x="335.43005"
   4.738 -       y="-159.95343"
   4.739 +       y="-379.95343"
   4.740         id="text12572"
   4.741         sodipodi:linespacing="100%"><tspan
   4.742           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.743           sodipodi:role="line"
   4.744           x="335.43005"
   4.745 -         y="-159.95343"
   4.746 +         y="-379.95343"
   4.747           id="tspan12574">no</tspan></text>
   4.748      <text
   4.749         sodipodi:linespacing="100%"
   4.750         id="text12576"
   4.751 -       y="-123.95343"
   4.752 +       y="-343.95343"
   4.753         x="309.43005"
   4.754         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.755         xml:space="preserve"><tspan
   4.756           id="tspan12578"
   4.757 -         y="-123.95343"
   4.758 +         y="-343.95343"
   4.759           x="309.43005"
   4.760           sodipodi:role="line"
   4.761           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">yes,</tspan><tspan
   4.762 -         y="-114.95343"
   4.763 +         y="-334.95343"
   4.764           x="309.43005"
   4.765           sodipodi:role="line"
   4.766           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.767 @@ -1538,82 +1510,82 @@
   4.768         xml:space="preserve"
   4.769         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.770         x="251.43005"
   4.771 -       y="68.04657"
   4.772 +       y="-151.95343"
   4.773         id="text12582"
   4.774         sodipodi:linespacing="100%"><tspan
   4.775           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.776           sodipodi:role="line"
   4.777           x="251.43005"
   4.778 -         y="68.04657"
   4.779 +         y="-151.95343"
   4.780           id="tspan12584">  constraint</tspan><tspan
   4.781           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.782           sodipodi:role="line"
   4.783           x="251.43005"
   4.784 -         y="77.04657"
   4.785 +         y="-142.95343"
   4.786           id="tspan12586">msgs</tspan></text>
   4.787      <text
   4.788         sodipodi:linespacing="100%"
   4.789         id="text12592"
   4.790 -       y="68.04657"
   4.791 +       y="-151.95343"
   4.792         x="323.43005"
   4.793         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.794         xml:space="preserve"><tspan
   4.795           id="tspan12594"
   4.796 -         y="68.04657"
   4.797 +         y="-151.95343"
   4.798           x="323.43005"
   4.799           sodipodi:role="line"
   4.800           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">  Assigner</tspan><tspan
   4.801           id="tspan12596"
   4.802 -         y="77.04657"
   4.803 +         y="-142.95343"
   4.804           x="323.43005"
   4.805           sodipodi:role="line"
   4.806           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">msgs</tspan></text>
   4.807      <text
   4.808         sodipodi:linespacing="100%"
   4.809         id="text12602"
   4.810 -       y="84.726822"
   4.811 -       x="105.27625"
   4.812 +       y="-29.273178"
   4.813 +       x="129.27625"
   4.814         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.815         xml:space="preserve"><tspan
   4.816           id="tspan12606"
   4.817 -         y="84.726822"
   4.818 -         x="105.27625"
   4.819 +         y="-29.273178"
   4.820 +         x="129.27625"
   4.821           sodipodi:role="line"
   4.822           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1">(in CILK, completion of</tspan><tspan
   4.823 -         y="93.726822"
   4.824 -         x="105.27625"
   4.825 +         y="-20.273178"
   4.826 +         x="129.27625"
   4.827           sodipodi:role="line"
   4.828           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.829           id="tspan12614"> child on remote core</tspan><tspan
   4.830           id="tspan12610"
   4.831 -         y="102.72682"
   4.832 -         x="105.27625"
   4.833 +         y="-11.273178"
   4.834 +         x="129.27625"
   4.835           sodipodi:role="line"
   4.836           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"> notifies parent's core.</tspan><tspan
   4.837 -         y="111.72682"
   4.838 -         x="105.27625"
   4.839 +         y="-2.2731781"
   4.840 +         x="129.27625"
   4.841           sodipodi:role="line"
   4.842           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.843           id="tspan12624"> In dataflow, remote pro-</tspan><tspan
   4.844 -         y="120.72682"
   4.845 -         x="105.27625"
   4.846 +         y="6.7268219"
   4.847 +         x="129.27625"
   4.848           sodipodi:role="line"
   4.849           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.850           id="tspan12626"> pendent sends data to</tspan><tspan
   4.851 -         y="129.72682"
   4.852 -         x="105.27625"
   4.853 +         y="15.726822"
   4.854 +         x="129.27625"
   4.855           sodipodi:role="line"
   4.856           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
   4.857           id="tspan12634"> dependents' cores)</tspan></text>
   4.858      <path
   4.859         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
   4.860 -       d="m 401.6308,-143.12086 74.44669,32.98177"
   4.861 +       d="m 401.6308,-363.12086 74.44669,32.98177"
   4.862         id="path12658"
   4.863         inkscape:connector-curvature="0"
   4.864         sodipodi:nodetypes="cc" />
   4.865      <g
   4.866         id="g12764"
   4.867 -       transform="translate(437.05331,-264)">
   4.868 +       transform="translate(437.05331,-484)">
   4.869        <text
   4.870           sodipodi:linespacing="100%"
   4.871           id="text12766"
   4.872 @@ -1643,48 +1615,48 @@
   4.873         xml:space="preserve"
   4.874         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.875         x="299.43005"
   4.876 -       y="126.04657"
   4.877 +       y="-93.95343"
   4.878         id="text12816"
   4.879         sodipodi:linespacing="100%"><tspan
   4.880           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.881           sodipodi:role="line"
   4.882           x="299.43005"
   4.883 -         y="126.04657"
   4.884 +         y="-93.95343"
   4.885           id="tspan12818">  receive</tspan><tspan
   4.886           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.887           sodipodi:role="line"
   4.888           x="300.78357"
   4.889 -         y="135.04657"
   4.890 +         y="-84.95343"
   4.891           id="tspan12820">work-push   </tspan><tspan
   4.892           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.893           sodipodi:role="line"
   4.894           x="299.43005"
   4.895 -         y="144.04657"
   4.896 +         y="-75.95343"
   4.897           id="tspan12822">       msg</tspan></text>
   4.898      <path
   4.899         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
   4.900 -       d="m 321.6308,116.87914 74.44669,32.98177"
   4.901 +       d="m 321.6308,-103.12086 74.44669,32.98177"
   4.902         id="path12824"
   4.903         inkscape:connector-curvature="0"
   4.904         sodipodi:nodetypes="cc" />
   4.905      <text
   4.906         sodipodi:linespacing="100%"
   4.907         id="text12826"
   4.908 -       y="126.04657"
   4.909 +       y="-93.95343"
   4.910         x="379.43005"
   4.911         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.912         xml:space="preserve"><tspan
   4.913           id="tspan12828"
   4.914 -         y="126.04657"
   4.915 +         y="-93.95343"
   4.916           x="379.43005"
   4.917           sodipodi:role="line"
   4.918           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">  receive need-work</tspan><tspan
   4.919           id="tspan12832"
   4.920 -         y="135.04657"
   4.921 +         y="-84.95343"
   4.922           x="379.43005"
   4.923           sodipodi:role="line"
   4.924           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">                msg &amp; have work</tspan><tspan
   4.925 -         y="144.04657"
   4.926 +         y="-75.95343"
   4.927           x="379.43005"
   4.928           sodipodi:role="line"
   4.929           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.930 @@ -1692,18 +1664,18 @@
   4.931      <text
   4.932         sodipodi:linespacing="100%"
   4.933         id="text12914"
   4.934 -       y="-61.95343"
   4.935 +       y="-281.95343"
   4.936         x="678.38245"
   4.937         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
   4.938         xml:space="preserve"><tspan
   4.939 -         y="-61.95343"
   4.940 +         y="-281.95343"
   4.941           x="678.38245"
   4.942           sodipodi:role="line"
   4.943           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
   4.944           id="tspan12946">No work</tspan></text>
   4.945      <g
   4.946         id="g3699"
   4.947 -       transform="translate(717.05331,-444)">
   4.948 +       transform="translate(717.05331,-664)">
   4.949        <text
   4.950           sodipodi:linespacing="100%"
   4.951           id="text3701"
   4.952 @@ -1731,13 +1703,13 @@
   4.953      </g>
   4.954      <path
   4.955         style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
   4.956 -       d="m 868.0922,-156.20795 41.0608,0"
   4.957 +       d="m 868.0922,-376.20795 41.0608,0"
   4.958         id="path3709"
   4.959         inkscape:connector-curvature="0"
   4.960         sodipodi:nodetypes="cc" />
   4.961      <path
   4.962         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
   4.963 -       d="m 868.33356,-76.29838 40.86584,-76.648"
   4.964 +       d="m 868.33356,-296.29838 40.86584,-76.648"
   4.965         id="path3715"
   4.966         inkscape:connector-curvature="0"
   4.967         sodipodi:nodetypes="cc" />
   4.968 @@ -1745,11 +1717,11 @@
   4.969         sodipodi:nodetypes="cc"
   4.970         inkscape:connector-curvature="0"
   4.971         id="path3769"
   4.972 -       d="m 428.86861,-156.20795 200.12395,0"
   4.973 +       d="m 428.86861,-376.20795 200.12395,0"
   4.974         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
   4.975      <g
   4.976         id="g3775"
   4.977 -       transform="translate(297.05331,-564)">
   4.978 +       transform="translate(297.05331,-784)">
   4.979        <text
   4.980           sodipodi:linespacing="100%"
   4.981           id="text3777"
   4.982 @@ -1772,7 +1744,7 @@
   4.983      </g>
   4.984      <g
   4.985         id="g3789"
   4.986 -       transform="translate(177.05331,-564)">
   4.987 +       transform="translate(177.05331,-784)">
   4.988        <text
   4.989           sodipodi:linespacing="100%"
   4.990           id="text3791"
   4.991 @@ -1795,12 +1767,12 @@
   4.992      </g>
   4.993      <path
   4.994         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
   4.995 -       d="m 428.09218,-276.20795 60.12116,0"
   4.996 +       d="m 428.09218,-496.20795 60.12116,0"
   4.997         id="path3799"
   4.998         inkscape:connector-curvature="0"
   4.999         sodipodi:nodetypes="cc" />
  4.1000      <g
  4.1001 -       transform="translate(-300,60)"
  4.1002 +       transform="translate(-300,-160)"
  4.1003         id="g3801">
  4.1004        <text
  4.1005           xml:space="preserve"
  4.1006 @@ -1831,7 +1803,7 @@
  4.1007      </g>
  4.1008      <path
  4.1009         style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1010 -       d="m 228.09216,-276.20795 21.72127,0"
  4.1011 +       d="m 228.09216,-496.20795 21.72127,0"
  4.1012         id="path3811"
  4.1013         inkscape:connector-curvature="0"
  4.1014         sodipodi:nodetypes="cc" />
  4.1015 @@ -1839,40 +1811,40 @@
  4.1016         sodipodi:nodetypes="cc"
  4.1017         inkscape:connector-curvature="0"
  4.1018         id="path3813"
  4.1019 -       d="m 307.68401,-276.20795 61.46905,0"
  4.1020 +       d="m 307.68401,-496.20795 61.46905,0"
  4.1021         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1022      <text
  4.1023         xml:space="preserve"
  4.1024         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1025         x="289.43005"
  4.1026 -       y="-243.95343"
  4.1027 +       y="-463.95343"
  4.1028         id="text3815"
  4.1029         sodipodi:linespacing="100%"><tspan
  4.1030           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1031           sodipodi:role="line"
  4.1032           x="289.43005"
  4.1033 -         y="-243.95343"
  4.1034 +         y="-463.95343"
  4.1035           id="tspan3817">yes,</tspan><tspan
  4.1036           id="tspan3819"
  4.1037           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1038           sodipodi:role="line"
  4.1039           x="289.43005"
  4.1040 -         y="-234.95343">chk</tspan></text>
  4.1041 +         y="-454.95343">chk</tspan></text>
  4.1042      <path
  4.1043         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1044 -       d="m 328.33352,22.4516 41.44797,-295.744"
  4.1045 +       d="m 328.33352,-197.5484 41.44797,-295.744"
  4.1046         id="path3823"
  4.1047         inkscape:connector-curvature="0"
  4.1048         sodipodi:nodetypes="cc" />
  4.1049      <text
  4.1050         sodipodi:linespacing="100%"
  4.1051         id="text3825"
  4.1052 -       y="-279.95343"
  4.1053 +       y="-499.95343"
  4.1054         x="315.43005"
  4.1055         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1056         xml:space="preserve"><tspan
  4.1057           id="tspan3827"
  4.1058 -         y="-279.95343"
  4.1059 +         y="-499.95343"
  4.1060           x="315.43005"
  4.1061           sodipodi:role="line"
  4.1062           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">no</tspan></text>
  4.1063 @@ -1880,26 +1852,26 @@
  4.1064         xml:space="preserve"
  4.1065         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1066         x="353.43005"
  4.1067 -       y="-253.95343"
  4.1068 +       y="-473.95343"
  4.1069         id="text3829"
  4.1070         sodipodi:linespacing="100%"><tspan
  4.1071           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1072           sodipodi:role="line"
  4.1073           x="353.43005"
  4.1074 -         y="-253.95343"
  4.1075 +         y="-473.95343"
  4.1076           id="tspan3831">   done</tspan><tspan
  4.1077           id="tspan3833"
  4.1078           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1079           sodipodi:role="line"
  4.1080           x="353.43005"
  4.1081 -         y="-244.95343">  with</tspan><tspan
  4.1082 +         y="-464.95343">  with</tspan><tspan
  4.1083           id="tspan3835"
  4.1084           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1085           sodipodi:role="line"
  4.1086           x="353.43005"
  4.1087 -         y="-235.95343">msgs</tspan></text>
  4.1088 +         y="-455.95343">msgs</tspan></text>
  4.1089      <g
  4.1090 -       transform="translate(97.05331,-123.31973)"
  4.1091 +       transform="translate(97.05331,-343.31973)"
  4.1092         id="g3837">
  4.1093        <text
  4.1094           xml:space="preserve"
  4.1095 @@ -1938,7 +1910,7 @@
  4.1096      </g>
  4.1097      <g
  4.1098         id="g3851"
  4.1099 -       transform="translate(177.05331,-524)">
  4.1100 +       transform="translate(177.05331,-744)">
  4.1101        <text
  4.1102           sodipodi:linespacing="100%"
  4.1103           id="text3853"
  4.1104 @@ -1966,12 +1938,12 @@
  4.1105      </g>
  4.1106      <path
  4.1107         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1108 -       d="m 399.56974,-264.00562 0,12.75587"
  4.1109 +       d="m 399.56974,-484.00562 0,12.75587"
  4.1110         id="path3863"
  4.1111         inkscape:connector-curvature="0"
  4.1112         sodipodi:nodetypes="cc" />
  4.1113      <g
  4.1114 -       transform="translate(257.05331,-524)"
  4.1115 +       transform="translate(257.05331,-744)"
  4.1116         id="g3865">
  4.1117        <text
  4.1118           xml:space="preserve"
  4.1119 @@ -1999,7 +1971,7 @@
  4.1120           style="fill:none;stroke:#000000;stroke-width:1.08018124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
  4.1121      </g>
  4.1122      <g
  4.1123 -       transform="translate(317.05331,-524)"
  4.1124 +       transform="translate(317.05331,-744)"
  4.1125         id="g3875">
  4.1126        <text
  4.1127           xml:space="preserve"
  4.1128 @@ -2030,29 +2002,29 @@
  4.1129         sodipodi:nodetypes="cc"
  4.1130         inkscape:connector-curvature="0"
  4.1131         id="path3887"
  4.1132 -       d="m 519.99814,-263.12085 17.68767,13.95011"
  4.1133 +       d="m 519.99814,-483.12085 17.68767,13.95011"
  4.1134         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1135      <path
  4.1136         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1137 -       d="m 516.1523,-263.12085 -35.11392,13.95011"
  4.1138 +       d="m 516.1523,-483.12085 -35.11392,13.95011"
  4.1139         id="path3889"
  4.1140         inkscape:connector-curvature="0"
  4.1141         sodipodi:nodetypes="cc" />
  4.1142      <path
  4.1143         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1144 -       d="m 548.6784,-275.12084 80.39811,116.64706"
  4.1145 +       d="m 548.6784,-495.12084 80.39811,116.64706"
  4.1146         id="path3891"
  4.1147         inkscape:connector-curvature="0"
  4.1148         sodipodi:nodetypes="cc" />
  4.1149      <path
  4.1150         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1151 -       d="m 737.20425,-178.67186 72.41226,-56.50237"
  4.1152 +       d="m 737.20425,-398.67186 72.41226,-56.50237"
  4.1153         id="path3893"
  4.1154         inkscape:connector-curvature="0"
  4.1155         sodipodi:nodetypes="cc" />
  4.1156      <g
  4.1157         id="g3895"
  4.1158 -       transform="translate(617.05331,-543.31973)">
  4.1159 +       transform="translate(617.05331,-763.31973)">
  4.1160        <text
  4.1161           sodipodi:linespacing="100%"
  4.1162           id="text3897"
  4.1163 @@ -2102,78 +2074,78 @@
  4.1164         xml:space="preserve"
  4.1165         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1166         x="755.43005"
  4.1167 -       y="-229.95343"
  4.1168 +       y="-449.95343"
  4.1169         id="text3909"
  4.1170         sodipodi:linespacing="100%"><tspan
  4.1171           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1172           sodipodi:role="line"
  4.1173           x="755.43005"
  4.1174 -         y="-229.95343"
  4.1175 +         y="-449.95343"
  4.1176           id="tspan3913">new work-unit has own</tspan><tspan
  4.1177           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1178           sodipodi:role="line"
  4.1179           x="755.43005"
  4.1180 -         y="-220.95343"
  4.1181 +         y="-440.95343"
  4.1182           id="tspan3927">local context, but</tspan><tspan
  4.1183           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1184           sodipodi:role="line"
  4.1185           x="756.78357"
  4.1186 -         y="-211.95343"
  4.1187 +         y="-431.95343"
  4.1188           id="tspan3931">prev VP suspended            </tspan></text>
  4.1189      <path
  4.1190         sodipodi:nodetypes="cc"
  4.1191         inkscape:connector-curvature="0"
  4.1192         id="path3953"
  4.1193 -       d="m 868.33356,-236.25901 40.86584,76.648"
  4.1194 +       d="m 868.33356,-456.25901 40.86584,76.648"
  4.1195         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1196      <text
  4.1197         xml:space="preserve"
  4.1198         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1199         x="357.27625"
  4.1200 -       y="-314.5929"
  4.1201 +       y="-534.5929"
  4.1202         id="text3955"
  4.1203         sodipodi:linespacing="100%"><tspan
  4.1204           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1205           sodipodi:role="line"
  4.1206           x="357.27625"
  4.1207 -         y="-314.5929"
  4.1208 +         y="-534.5929"
  4.1209           id="tspan3957">(in pthreads, checks</tspan><tspan
  4.1210           id="tspan3959"
  4.1211           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1212           sodipodi:role="line"
  4.1213           x="357.27625"
  4.1214 -         y="-305.5929"> mutex structures,</tspan><tspan
  4.1215 +         y="-525.5929"> mutex structures,</tspan><tspan
  4.1216           id="tspan3961"
  4.1217           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1218           sodipodi:role="line"
  4.1219           x="357.27625"
  4.1220 -         y="-296.5929"> cond var structs, etc)</tspan></text>
  4.1221 +         y="-516.5929"> cond var structs, etc)</tspan></text>
  4.1222      <text
  4.1223         xml:space="preserve"
  4.1224         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1225         x="459.43005"
  4.1226 -       y="-287.95343"
  4.1227 +       y="-507.95343"
  4.1228         id="text3963"
  4.1229         sodipodi:linespacing="100%"><tspan
  4.1230           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1231           sodipodi:role="line"
  4.1232           x="459.43005"
  4.1233 -         y="-287.95343"
  4.1234 +         y="-507.95343"
  4.1235           id="tspan3967">work-unit</tspan><tspan
  4.1236           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1237           sodipodi:role="line"
  4.1238           x="459.43005"
  4.1239 -         y="-278.95343"
  4.1240 +         y="-498.95343"
  4.1241           id="tspan3971">state chgs</tspan></text>
  4.1242      <text
  4.1243         sodipodi:linespacing="100%"
  4.1244         id="text3981"
  4.1245 -       y="24.04657"
  4.1246 +       y="-195.95343"
  4.1247         x="415.43005"
  4.1248         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1249         xml:space="preserve"
  4.1250         inkscape:transform-center-x="-8.125"><tspan
  4.1251 -         y="24.04657"
  4.1252 +         y="-195.95343"
  4.1253           x="415.43005"
  4.1254           sodipodi:role="line"
  4.1255           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1256 @@ -2182,39 +2154,39 @@
  4.1257         sodipodi:nodetypes="cc"
  4.1258         inkscape:connector-curvature="0"
  4.1259         id="path3386"
  4.1260 -       d="m 30.09217,-396.20795 134.75175,0"
  4.1261 +       d="m 30.09217,-616.20795 134.75175,0"
  4.1262         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#StopL);marker-end:url(#TriangleOutL)" />
  4.1263      <text
  4.1264         xml:space="preserve"
  4.1265         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1266         x="95.430077"
  4.1267 -       y="-397.95343"
  4.1268 +       y="-617.95343"
  4.1269         id="text3388"
  4.1270         sodipodi:linespacing="100%"><tspan
  4.1271           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1272           sodipodi:role="line"
  4.1273           x="95.430077"
  4.1274 -         y="-397.95343"
  4.1275 +         y="-617.95343"
  4.1276           id="tspan3390">Suspend at end of work-unit</tspan></text>
  4.1277      <text
  4.1278         xml:space="preserve"
  4.1279         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1280         x="29.276283"
  4.1281 -       y="-373.95343"
  4.1282 +       y="-593.95343"
  4.1283         id="text3392"
  4.1284         sodipodi:linespacing="100%"><tspan
  4.1285           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1286           sodipodi:role="line"
  4.1287           x="29.276283"
  4.1288 -         y="-373.95343"
  4.1289 +         y="-593.95343"
  4.1290           id="tspan3394">pthread is example of this case,</tspan><tspan
  4.1291           id="tspan3396"
  4.1292           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1293           sodipodi:role="line"
  4.1294           x="29.276283"
  4.1295 -         y="-364.95343">as is Cilk when suspends on sync</tspan></text>
  4.1296 +         y="-584.95343">as is Cilk when suspends on sync</tspan></text>
  4.1297      <g
  4.1298 -       transform="translate(297.05331,-684)"
  4.1299 +       transform="translate(297.05331,-904)"
  4.1300         id="g3398">
  4.1301        <text
  4.1302           xml:space="preserve"
  4.1303 @@ -2237,7 +2209,7 @@
  4.1304           style="fill:none;stroke:#000000;stroke-width:1.08018124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
  4.1305      </g>
  4.1306      <g
  4.1307 -       transform="translate(177.05331,-684)"
  4.1308 +       transform="translate(177.05331,-904)"
  4.1309         id="g3406">
  4.1310        <text
  4.1311           xml:space="preserve"
  4.1312 @@ -2263,11 +2235,11 @@
  4.1313         sodipodi:nodetypes="cc"
  4.1314         inkscape:connector-curvature="0"
  4.1315         id="path3416"
  4.1316 -       d="m 428.09218,-396.20795 60.12116,0"
  4.1317 +       d="m 428.09218,-616.20795 60.12116,0"
  4.1318         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1319      <g
  4.1320         id="g3418"
  4.1321 -       transform="translate(-300,-60)">
  4.1322 +       transform="translate(-300,-280)">
  4.1323        <text
  4.1324           sodipodi:linespacing="100%"
  4.1325           id="text3420"
  4.1326 @@ -2299,27 +2271,27 @@
  4.1327         sodipodi:nodetypes="cc"
  4.1328         inkscape:connector-curvature="0"
  4.1329         id="path3428"
  4.1330 -       d="m 228.09216,-396.20795 21.72127,0"
  4.1331 +       d="m 228.09216,-616.20795 21.72127,0"
  4.1332         style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1333      <path
  4.1334         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1335 -       d="m 307.68401,-396.20795 61.46905,0"
  4.1336 +       d="m 307.68401,-616.20795 61.46905,0"
  4.1337         id="path3430"
  4.1338         inkscape:connector-curvature="0"
  4.1339         sodipodi:nodetypes="cc" />
  4.1340      <text
  4.1341         sodipodi:linespacing="100%"
  4.1342         id="text3432"
  4.1343 -       y="-363.95343"
  4.1344 +       y="-583.95343"
  4.1345         x="289.43005"
  4.1346         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1347         xml:space="preserve"><tspan
  4.1348           id="tspan3434"
  4.1349 -         y="-363.95343"
  4.1350 +         y="-583.95343"
  4.1351           x="289.43005"
  4.1352           sodipodi:role="line"
  4.1353           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">yes,</tspan><tspan
  4.1354 -         y="-354.95343"
  4.1355 +         y="-574.95343"
  4.1356           x="289.43005"
  4.1357           sodipodi:role="line"
  4.1358           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1359 @@ -2328,38 +2300,38 @@
  4.1360         xml:space="preserve"
  4.1361         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1362         x="315.43005"
  4.1363 -       y="-399.95343"
  4.1364 +       y="-619.95343"
  4.1365         id="text3438"
  4.1366         sodipodi:linespacing="100%"><tspan
  4.1367           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1368           sodipodi:role="line"
  4.1369           x="315.43005"
  4.1370 -         y="-399.95343"
  4.1371 +         y="-619.95343"
  4.1372           id="tspan3440">no</tspan></text>
  4.1373      <text
  4.1374         sodipodi:linespacing="100%"
  4.1375         id="text3442"
  4.1376 -       y="-373.95343"
  4.1377 +       y="-593.95343"
  4.1378         x="353.43005"
  4.1379         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1380         xml:space="preserve"><tspan
  4.1381           id="tspan3444"
  4.1382 -         y="-373.95343"
  4.1383 +         y="-593.95343"
  4.1384           x="353.43005"
  4.1385           sodipodi:role="line"
  4.1386           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">   done</tspan><tspan
  4.1387 -         y="-364.95343"
  4.1388 +         y="-584.95343"
  4.1389           x="353.43005"
  4.1390           sodipodi:role="line"
  4.1391           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1392           id="tspan3446">  with</tspan><tspan
  4.1393 -         y="-355.95343"
  4.1394 +         y="-575.95343"
  4.1395           x="353.43005"
  4.1396           sodipodi:role="line"
  4.1397           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1398           id="tspan3448">msgs</tspan></text>
  4.1399      <g
  4.1400 -       transform="translate(177.05331,-644)"
  4.1401 +       transform="translate(177.05331,-864)"
  4.1402         id="g3450">
  4.1403        <text
  4.1404           xml:space="preserve"
  4.1405 @@ -2395,11 +2367,11 @@
  4.1406         sodipodi:nodetypes="cc"
  4.1407         inkscape:connector-curvature="0"
  4.1408         id="path3460"
  4.1409 -       d="m 399.56974,-384.00562 0,12.75587"
  4.1410 +       d="m 399.56974,-604.00562 0,12.75587"
  4.1411         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1412      <g
  4.1413         id="g3472"
  4.1414 -       transform="translate(297.05331,-644)">
  4.1415 +       transform="translate(297.05331,-864)">
  4.1416        <text
  4.1417           sodipodi:linespacing="100%"
  4.1418           id="text3474"
  4.1419 @@ -2433,21 +2405,21 @@
  4.1420      <text
  4.1421         sodipodi:linespacing="100%"
  4.1422         id="text3486"
  4.1423 -       y="-434.5929"
  4.1424 +       y="-654.5929"
  4.1425         x="357.27625"
  4.1426         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1427         xml:space="preserve"><tspan
  4.1428           id="tspan3488"
  4.1429 -         y="-434.5929"
  4.1430 +         y="-654.5929"
  4.1431           x="357.27625"
  4.1432           sodipodi:role="line"
  4.1433           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1">(in pthreads, checks</tspan><tspan
  4.1434 -         y="-425.5929"
  4.1435 +         y="-645.5929"
  4.1436           x="357.27625"
  4.1437           sodipodi:role="line"
  4.1438           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1439           id="tspan3490"> mutex structures,</tspan><tspan
  4.1440 -         y="-416.5929"
  4.1441 +         y="-636.5929"
  4.1442           x="357.27625"
  4.1443           sodipodi:role="line"
  4.1444           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1445 @@ -2455,17 +2427,17 @@
  4.1446      <text
  4.1447         sodipodi:linespacing="100%"
  4.1448         id="text3494"
  4.1449 -       y="-407.95343"
  4.1450 +       y="-627.95343"
  4.1451         x="459.43005"
  4.1452         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1453         xml:space="preserve"><tspan
  4.1454           id="tspan3496"
  4.1455 -         y="-407.95343"
  4.1456 +         y="-627.95343"
  4.1457           x="459.43005"
  4.1458           sodipodi:role="line"
  4.1459           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">work-unit</tspan><tspan
  4.1460           id="tspan3498"
  4.1461 -         y="-398.95343"
  4.1462 +         y="-618.95343"
  4.1463           x="459.43005"
  4.1464           sodipodi:role="line"
  4.1465           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">state chgs</tspan></text>
  4.1466 @@ -2473,10 +2445,10 @@
  4.1467         sodipodi:nodetypes="cc"
  4.1468         inkscape:connector-curvature="0"
  4.1469         id="path3500"
  4.1470 -       d="m 548.67846,-395.848 261.45961,-0.0912"
  4.1471 +       d="m 548.67846,-615.848 261.45961,-0.0912"
  4.1472         style="fill:none;stroke:#000000;stroke-width:1.00000036px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1473      <g
  4.1474 -       transform="translate(717.05331,-684)"
  4.1475 +       transform="translate(717.05331,-904)"
  4.1476         id="g3518">
  4.1477        <text
  4.1478           xml:space="preserve"
  4.1479 @@ -2507,17 +2479,17 @@
  4.1480         sodipodi:nodetypes="cc"
  4.1481         inkscape:connector-curvature="0"
  4.1482         id="path3528"
  4.1483 -       d="m 868.0922,-396.20795 41.0608,0"
  4.1484 +       d="m 868.0922,-616.20795 41.0608,0"
  4.1485         style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1486      <path
  4.1487         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1488 -       d="m 519.56974,-384.00562 0,12.75587"
  4.1489 +       d="m 519.56974,-604.00562 0,12.75587"
  4.1490         id="path3568"
  4.1491         inkscape:connector-curvature="0"
  4.1492         sodipodi:nodetypes="cc" />
  4.1493      <g
  4.1494         id="g3572"
  4.1495 -       transform="translate(617.05331,-684)">
  4.1496 +       transform="translate(617.05331,-904)">
  4.1497        <text
  4.1498           sodipodi:linespacing="100%"
  4.1499           id="text3574"
  4.1500 @@ -2545,7 +2517,7 @@
  4.1501      </g>
  4.1502      <path
  4.1503         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1504 -       d="m 279.12967,-372.6255 -38.74926,53.74501 -0.37105,270.054168 35.3037,38.5653"
  4.1505 +       d="m 279.12967,-592.6255 -38.74926,53.74501 -0.37105,270.05417 35.3037,38.5653"
  4.1506         id="path3588"
  4.1507         inkscape:connector-curvature="0"
  4.1508         sodipodi:nodetypes="cccc" />
  4.1509 @@ -2553,11 +2525,11 @@
  4.1510         sodipodi:nodetypes="cc"
  4.1511         inkscape:connector-curvature="0"
  4.1512         id="path3590"
  4.1513 -       d="M 328.33352,22.451597 369.78149,-391.37328"
  4.1514 +       d="m 328.33352,-197.5484 41.44797,-413.82488"
  4.1515         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1516      <g
  4.1517         id="g4716"
  4.1518 -       transform="translate(-22.94669,-684)">
  4.1519 +       transform="translate(-22.94669,-904)">
  4.1520        <text
  4.1521           sodipodi:linespacing="100%"
  4.1522           id="text4718"
  4.1523 @@ -2587,65 +2559,65 @@
  4.1524         sodipodi:nodetypes="cc"
  4.1525         inkscape:connector-curvature="0"
  4.1526         id="path4726"
  4.1527 -       d="m 549.69914,-385.3604 79.38092,221.59022"
  4.1528 +       d="m 549.69914,-605.3604 79.38092,221.59022"
  4.1529         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1530      <text
  4.1531         xml:space="preserve"
  4.1532         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1533         x="573.43005"
  4.1534 -       y="-363.95343"
  4.1535 +       y="-583.95343"
  4.1536         id="text4728"
  4.1537         sodipodi:linespacing="100%"><tspan
  4.1538           id="tspan4732"
  4.1539           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1540           sodipodi:role="line"
  4.1541           x="573.43005"
  4.1542 -         y="-363.95343">No VPs</tspan><tspan
  4.1543 +         y="-583.95343">No VPs</tspan><tspan
  4.1544           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1545           sodipodi:role="line"
  4.1546           x="573.43005"
  4.1547 -         y="-354.95343"
  4.1548 +         y="-574.95343"
  4.1549           id="tspan4736">ready</tspan></text>
  4.1550      <text
  4.1551         inkscape:transform-center-x="-8.125"
  4.1552         xml:space="preserve"
  4.1553         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1554         x="451.43005"
  4.1555 -       y="-33.95343"
  4.1556 +       y="-253.95343"
  4.1557         id="text4791"
  4.1558         sodipodi:linespacing="100%"><tspan
  4.1559           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1560           sodipodi:role="line"
  4.1561           x="451.43005"
  4.1562 -         y="-33.95343"
  4.1563 +         y="-253.95343"
  4.1564           id="tspan4845">increase backoff each</tspan><tspan
  4.1565           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1566           sodipodi:role="line"
  4.1567           x="451.43005"
  4.1568 -         y="-24.95343"
  4.1569 +         y="-244.95343"
  4.1570           id="tspan8389">repetition &amp; update</tspan><tspan
  4.1571           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1572           sodipodi:role="line"
  4.1573           x="451.43005"
  4.1574 -         y="-15.95343"
  4.1575 +         y="-235.95343"
  4.1576           id="tspan8385">backoff state</tspan><tspan
  4.1577           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1578           sodipodi:role="line"
  4.1579           x="451.43005"
  4.1580 -         y="-6.9534302"
  4.1581 +         y="-226.95343"
  4.1582           id="tspan8462">Try to make core enter</tspan><tspan
  4.1583           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1584           sodipodi:role="line"
  4.1585           x="451.43005"
  4.1586 -         y="2.0465698"
  4.1587 +         y="-217.95343"
  4.1588           id="tspan8476">power-down idle state</tspan><tspan
  4.1589           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1590           sodipodi:role="line"
  4.1591           x="451.43005"
  4.1592 -         y="11.04657"
  4.1593 +         y="-208.95343"
  4.1594           id="tspan8464">while waiting</tspan></text>
  4.1595      <g
  4.1596 -       transform="translate(257.05331,-344)"
  4.1597 +       transform="translate(257.05331,-564)"
  4.1598         id="g4825">
  4.1599        <text
  4.1600           xml:space="preserve"
  4.1601 @@ -2676,22 +2648,22 @@
  4.1602         sodipodi:nodetypes="cc"
  4.1603         inkscape:connector-curvature="0"
  4.1604         id="path4839"
  4.1605 -       d="M 449.58066,-56.197783 313.82177,-9.623853"
  4.1606 +       d="m 449.58066,-276.19778 -135.75889,46.57393"
  4.1607         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1608      <path
  4.1609         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1610 -       d="m 328.29269,27.102941 c 201.947,-1.190476 188.59077,6.607148 222.99693,-14.360118 65.59054,-39.97116 58.47949,-168.794643 107.66658,-129.806543"
  4.1611 +       d="m 328.29269,-192.89706 c 201.947,-1.19048 188.59077,6.60715 222.99693,-14.36012 65.59054,-39.97116 58.47949,-168.79464 107.66658,-129.80654"
  4.1612         id="path7449"
  4.1613         inkscape:connector-curvature="0"
  4.1614         sodipodi:nodetypes="csc" />
  4.1615      <path
  4.1616         style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1617 -       d="m 659.56974,-13.52943 0,24.20748"
  4.1618 +       d="m 659.56974,-233.52943 0,24.20748"
  4.1619         id="path8339"
  4.1620         inkscape:connector-curvature="0"
  4.1621         sodipodi:nodetypes="cc" />
  4.1622      <g
  4.1623 -       transform="translate(80,300)"
  4.1624 +       transform="translate(80,80)"
  4.1625         id="g8347">
  4.1626        <text
  4.1627           xml:space="preserve"
  4.1628 @@ -2724,23 +2696,23 @@
  4.1629         xml:space="preserve"
  4.1630         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1631         x="681.43005"
  4.1632 -       y="-3.9534302"
  4.1633 +       y="-223.95343"
  4.1634         id="text8363"
  4.1635         sodipodi:linespacing="100%"><tspan
  4.1636           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1637           sodipodi:role="line"
  4.1638           x="681.43005"
  4.1639 -         y="-3.9534302"
  4.1640 +         y="-223.95343"
  4.1641           id="tspan8367">yes, send</tspan></text>
  4.1642      <path
  4.1643         sodipodi:nodetypes="cc"
  4.1644         inkscape:connector-curvature="0"
  4.1645         id="path8371"
  4.1646 -       d="M 630.69705,23.810904 509.08787,-52.944861"
  4.1647 +       d="M 630.69705,-196.1891 509.08787,-272.94486"
  4.1648         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1649      <g
  4.1650         id="g8391"
  4.1651 -       transform="translate(80,240)">
  4.1652 +       transform="translate(80,20)">
  4.1653        <text
  4.1654           sodipodi:linespacing="100%"
  4.1655           id="text8393"
  4.1656 @@ -2770,7 +2742,7 @@
  4.1657      </g>
  4.1658      <path
  4.1659         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1660 -       d="m 659.56974,-72.00562 0,13.287461"
  4.1661 +       d="m 659.56974,-292.00562 0,13.28746"
  4.1662         id="path8401"
  4.1663         inkscape:connector-curvature="0"
  4.1664         sodipodi:nodetypes="cc" />
  4.1665 @@ -2778,43 +2750,43 @@
  4.1666         xml:space="preserve"
  4.1667         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1668         x="625.43005"
  4.1669 -       y="-27.95343"
  4.1670 +       y="-247.95343"
  4.1671         id="text8403"
  4.1672         sodipodi:linespacing="100%"><tspan
  4.1673           id="tspan8405"
  4.1674           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1675           sodipodi:role="line"
  4.1676           x="625.43005"
  4.1677 -         y="-27.95343">Don't</tspan><tspan
  4.1678 +         y="-247.95343">Don't</tspan><tspan
  4.1679           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1680           sodipodi:role="line"
  4.1681           x="625.43005"
  4.1682 -         y="-18.95343"
  4.1683 +         y="-238.95343"
  4.1684           id="tspan8460">send</tspan></text>
  4.1685      <path
  4.1686         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1687 -       d="M 632.60182,-36.189098 509.09908,-56.55267"
  4.1688 +       d="M 632.60182,-256.1891 509.09908,-276.55267"
  4.1689         id="path8408"
  4.1690         inkscape:connector-curvature="0"
  4.1691         sodipodi:nodetypes="cc" />
  4.1692      <text
  4.1693         sodipodi:linespacing="100%"
  4.1694         id="text8420"
  4.1695 -       y="-97.95343"
  4.1696 +       y="-317.95343"
  4.1697         x="697.43005"
  4.1698         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1699         xml:space="preserve"><tspan
  4.1700           id="tspan8422"
  4.1701 -         y="-97.95343"
  4.1702 +         y="-317.95343"
  4.1703           x="697.43005"
  4.1704           sodipodi:role="line"
  4.1705           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">yes,</tspan><tspan
  4.1706 -         y="-88.95343"
  4.1707 +         y="-308.95343"
  4.1708           x="697.43005"
  4.1709           sodipodi:role="line"
  4.1710           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1711           id="tspan8424">got</tspan><tspan
  4.1712 -         y="-79.95343"
  4.1713 +         y="-299.95343"
  4.1714           x="697.43005"
  4.1715           sodipodi:role="line"
  4.1716           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1717 @@ -2822,41 +2794,41 @@
  4.1718      <text
  4.1719         sodipodi:linespacing="100%"
  4.1720         id="text8428"
  4.1721 -       y="-340.5929"
  4.1722 +       y="-560.5929"
  4.1723         x="737.27625"
  4.1724         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1725         xml:space="preserve"><tspan
  4.1726 -         y="-340.5929"
  4.1727 +         y="-560.5929"
  4.1728           x="737.27625"
  4.1729           sodipodi:role="line"
  4.1730           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1731           id="tspan8434">The difference between top two paths</tspan><tspan
  4.1732 -         y="-331.5929"
  4.1733 +         y="-551.5929"
  4.1734           x="737.27625"
  4.1735           sodipodi:role="line"
  4.1736           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1737           id="tspan8440">is the way the request hdlr+assigner has</tspan><tspan
  4.1738 -         y="-322.5929"
  4.1739 +         y="-542.5929"
  4.1740           x="737.27625"
  4.1741           sodipodi:role="line"
  4.1742           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1743           id="tspan8442">been implemented -- use shared state on</tspan><tspan
  4.1744 -         y="-313.5929"
  4.1745 +         y="-533.5929"
  4.1746           x="737.27625"
  4.1747           sodipodi:role="line"
  4.1748           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1749           id="tspan8450">top path, but only local on the second.</tspan><tspan
  4.1750 -         y="-304.5929"
  4.1751 +         y="-524.5929"
  4.1752           x="737.27625"
  4.1753           sodipodi:role="line"
  4.1754           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1755           id="tspan8454">NOTE: the request hdlr and assigner are</tspan><tspan
  4.1756 -         y="-295.5929"
  4.1757 +         y="-515.5929"
  4.1758           x="737.27625"
  4.1759           sodipodi:role="line"
  4.1760           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1761           id="tspan8456">combined into a single straight-line piece</tspan><tspan
  4.1762 -         y="-286.5929"
  4.1763 +         y="-506.5929"
  4.1764           x="737.27625"
  4.1765           sodipodi:role="line"
  4.1766           style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1767 @@ -2865,28 +2837,28 @@
  4.1768         sodipodi:nodetypes="cccc"
  4.1769         inkscape:connector-curvature="0"
  4.1770         id="path8466"
  4.1771 -       d="m 279.12967,-254.53026 -22.71235,36.22941 -0.21748,176.328743 29.26421,32.663466"
  4.1772 +       d="m 279.12967,-474.53026 -22.71235,36.22941 -0.21748,176.32874 29.26421,32.66347"
  4.1773         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1774      <path
  4.1775         sodipodi:nodetypes="cc"
  4.1776         inkscape:connector-curvature="0"
  4.1777         id="path8468"
  4.1778 -       d="M 548.67838,-278.64159 808.48533,-388.65596"
  4.1779 +       d="M 548.67838,-498.64159 808.48533,-608.65596"
  4.1780         style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)" />
  4.1781      <text
  4.1782         sodipodi:linespacing="100%"
  4.1783         id="text8470"
  4.1784 -       y="-263.95343"
  4.1785 +       y="-483.95343"
  4.1786         x="571.43005"
  4.1787         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1788         xml:space="preserve"><tspan
  4.1789 -         y="-263.95343"
  4.1790 +         y="-483.95343"
  4.1791           x="571.43005"
  4.1792           sodipodi:role="line"
  4.1793           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1794           id="tspan8472">No VPs</tspan><tspan
  4.1795           id="tspan8474"
  4.1796 -         y="-254.95343"
  4.1797 +         y="-474.95343"
  4.1798           x="571.43005"
  4.1799           sodipodi:role="line"
  4.1800           style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1">  ready</tspan></text>
  4.1801 @@ -2906,7 +2878,7 @@
  4.1802      <flowRoot
  4.1803         xml:space="preserve"
  4.1804         id="flowRoot8540"
  4.1805 -       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:8px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
  4.1806 +       style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><flowRegion
  4.1807           id="flowRegion8542"><rect
  4.1808             id="rect8544"
  4.1809             width="527.61902"
  4.1810 @@ -2914,11 +2886,11 @@
  4.1811             x="457.14285"
  4.1812             y="491.66666"
  4.1813             style="font-size:8px" /></flowRegion><flowPara
  4.1814 -         id="flowPara8546"></flowPara></flowRoot>    <flowRoot
  4.1815 +         id="flowPara8546" /></flowRoot>    <flowRoot
  4.1816         xml:space="preserve"
  4.1817         id="flowRoot8548"
  4.1818         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
  4.1819 -       transform="translate(3.5307846,-441.70658)"><flowRegion
  4.1820 +       transform="translate(-336.46922,-441.70658)"><flowRegion
  4.1821           id="flowRegion8550"><rect
  4.1822             id="rect8552"
  4.1823             width="539.04761"
  4.1824 @@ -2953,14 +2925,166 @@
  4.1825           id="flowPara8801">Core-controller was a second level beneath the runtime (Language Animator is the runtime)..  The sched slots were virtual physical animators, and the masterVP was the Language Animator, which the AnimationMaster Fn and the plugin Fns supplied the behavior of.  The coreCtlr switched between levels -- The MasterVP was &quot;outside&quot; the framework of the schedling slots -- in a way it was beside them (they took turns getting the actual phys animator, so same level) and in other way was above -- it controlled what went into the slots, so above them.  I another way, the MasterVP was the Language Animator, while the slots were virtual physical, so they had no locial connection -- the slots were related to the same thing that animatored the language animator..  a very strange arrangement.</flowPara></flowRoot>    <text
  4.1826         xml:space="preserve"
  4.1827         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
  4.1828 -       x="890.4762"
  4.1829 -       y="479.28571"
  4.1830 +       x="894.00696"
  4.1831 +       y="-182.42088"
  4.1832         id="text8833"
  4.1833 -       sodipodi:linespacing="125%"
  4.1834 -       transform="translate(3.5307846,-441.70658)"><tspan
  4.1835 +       sodipodi:linespacing="125%"><tspan
  4.1836           sodipodi:role="line"
  4.1837           id="tspan8835"
  4.1838 -         x="890.4762"
  4.1839 -         y="479.28571"> </tspan></text>
  4.1840 +         x="894.00696"
  4.1841 +         y="-182.42088"> </tspan></text>
  4.1842 +    <g
  4.1843 +       id="g3490"
  4.1844 +       transform="translate(177.05331,-343.31973)">
  4.1845 +      <text
  4.1846 +         sodipodi:linespacing="100%"
  4.1847 +         id="text3492"
  4.1848 +         y="285.39841"
  4.1849 +         x="222.37003"
  4.1850 +         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1851 +         xml:space="preserve"><tspan
  4.1852 +           y="285.39841"
  4.1853 +           x="222.37003"
  4.1854 +           sodipodi:role="line"
  4.1855 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1856 +           id="tspan3501">send work-</tspan><tspan
  4.1857 +           y="294.39841"
  4.1858 +           x="222.37003"
  4.1859 +           sodipodi:role="line"
  4.1860 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1861 +           id="tspan3511">push msg</tspan><tspan
  4.1862 +           y="303.39841"
  4.1863 +           x="223.72354"
  4.1864 +           sodipodi:role="line"
  4.1865 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1866 +           id="tspan3513">and start </tspan><tspan
  4.1867 +           y="312.39841"
  4.1868 +           x="222.37003"
  4.1869 +           sodipodi:role="line"
  4.1870 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1871 +           id="tspan3515">timer for it.</tspan></text>
  4.1872 +      <rect
  4.1873 +         style="fill:none;stroke:#000000;stroke-width:1.08018124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
  4.1874 +         id="rect3503"
  4.1875 +         width="57.486332"
  4.1876 +         height="63.639675"
  4.1877 +         x="193.78287"
  4.1878 +         y="274.77512" />
  4.1879 +    </g>
  4.1880 +    <text
  4.1881 +       xml:space="preserve"
  4.1882 +       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
  4.1883 +       x="84.168976"
  4.1884 +       y="-681.48474"
  4.1885 +       id="text3537"
  4.1886 +       sodipodi:linespacing="125%"><tspan
  4.1887 +         sodipodi:role="line"
  4.1888 +         id="tspan3539"
  4.1889 +         x="84.168976"
  4.1890 +         y="-681.48474"
  4.1891 +         style="font-size:40px">Control Flow of Universal Proto-Runtime </tspan></text>
  4.1892 +    <g
  4.1893 +       transform="translate(237.05331,-404)"
  4.1894 +       id="g3541">
  4.1895 +      <text
  4.1896 +         xml:space="preserve"
  4.1897 +         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1898 +         x="222.25137"
  4.1899 +         y="285.36765"
  4.1900 +         id="text3543"
  4.1901 +         sodipodi:linespacing="100%"><tspan
  4.1902 +           id="tspan3547"
  4.1903 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1904 +           sodipodi:role="line"
  4.1905 +           x="222.25137"
  4.1906 +           y="285.36765">Expired timer</tspan><tspan
  4.1907 +           style="font-size:9px;text-align:center;text-anchor:middle;fill:#900600;fill-opacity:1"
  4.1908 +           sodipodi:role="line"
  4.1909 +           x="222.25137"
  4.1910 +           y="294.36765"
  4.1911 +           id="tspan3553">handler</tspan></text>
  4.1912 +      <rect
  4.1913 +         y="274.77512"
  4.1914 +         x="193.78287"
  4.1915 +         height="25.544432"
  4.1916 +         width="57.486332"
  4.1917 +         id="rect3549"
  4.1918 +         style="fill:none;stroke:#000000;stroke-width:1.08018124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
  4.1919 +    </g>
  4.1920 +    <path
  4.1921 +       style="fill:none;stroke:#000000;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-8-7-0)"
  4.1922 +       d="m 323.63077,-165.12086 131.74691,33.98134"
  4.1923 +       id="path3555"
  4.1924 +       inkscape:connector-curvature="0"
  4.1925 +       sodipodi:nodetypes="cc" />
  4.1926 +    <text
  4.1927 +       xml:space="preserve"
  4.1928 +       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1929 +       x="393.43005"
  4.1930 +       y="-151.95343"
  4.1931 +       id="text3557"
  4.1932 +       sodipodi:linespacing="100%"><tspan
  4.1933 +         style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1934 +         sodipodi:role="line"
  4.1935 +         x="393.43005"
  4.1936 +         y="-151.95343"
  4.1937 +         id="tspan3561">  Expired</tspan><tspan
  4.1938 +         style="font-size:9px;text-align:center;text-anchor:middle;fill:#008000;fill-opacity:1"
  4.1939 +         sodipodi:role="line"
  4.1940 +         x="393.43005"
  4.1941 +         y="-142.95343"
  4.1942 +         id="tspan3565">                  timer</tspan></text>
  4.1943 +    <text
  4.1944 +       xml:space="preserve"
  4.1945 +       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#d45500;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
  4.1946 +       x="449.27625"
  4.1947 +       y="-93.273193"
  4.1948 +       id="text3567"
  4.1949 +       sodipodi:linespacing="100%"><tspan
  4.1950 +         id="tspan3579"
  4.1951 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1952 +         sodipodi:role="line"
  4.1953 +         x="449.27625"
  4.1954 +         y="-93.273193">When send work to other core,</tspan><tspan
  4.1955 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1956 +         sodipodi:role="line"
  4.1957 +         x="449.27625"
  4.1958 +         y="-84.273193"
  4.1959 +         id="tspan3591">it may be sleeping. So when timer</tspan><tspan
  4.1960 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1961 +         sodipodi:role="line"
  4.1962 +         x="449.27625"
  4.1963 +         y="-75.273193"
  4.1964 +         id="tspan3593">expires, do escrow, which is atomic</tspan><tspan
  4.1965 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1966 +         sodipodi:role="line"
  4.1967 +         x="449.27625"
  4.1968 +         y="-66.273193"
  4.1969 +         id="tspan3595">check of whether work was received.</tspan><tspan
  4.1970 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1971 +         sodipodi:role="line"
  4.1972 +         x="449.27625"
  4.1973 +         y="-57.273193"
  4.1974 +         id="tspan3597">If not, then check if dest core is </tspan><tspan
  4.1975 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1976 +         sodipodi:role="line"
  4.1977 +         x="449.27625"
  4.1978 +         y="-48.273193"
  4.1979 +         id="tspan3599">sleeping -- if no, then take work</tspan><tspan
  4.1980 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1981 +         sodipodi:role="line"
  4.1982 +         x="449.27625"
  4.1983 +         y="-39.273193"
  4.1984 +         id="tspan3611">back. If yes, do wakeup and set a </tspan><tspan
  4.1985 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1986 +         sodipodi:role="line"
  4.1987 +         x="449.27625"
  4.1988 +         y="-30.273193"
  4.1989 +         id="tspan3609">new timer, which will do  this</tspan><tspan
  4.1990 +         style="font-size:9px;text-align:start;text-anchor:start;fill:#d45500;fill-opacity:1"
  4.1991 +         sodipodi:role="line"
  4.1992 +         x="449.27625"
  4.1993 +         y="-21.273193"
  4.1994 +         id="tspan3617">handling again.</tspan></text>
  4.1995    </g>
  4.1996  </svg>
     5.1 --- a/0__Papers/VMS/Universal/latex/VMS_universal.tex	Fri May 04 09:44:14 2012 -0700
     5.2 +++ b/0__Papers/VMS/Universal/latex/VMS_universal.tex	Wed May 16 06:32:02 2012 -0700
     5.3 @@ -33,7 +33,7 @@
     5.4  
     5.5  %+Abstract
     5.6  \begin{abstract}
     5.7 -Software has not been keeping up with parallel hardware, which slows the economy and retards adoption of new hardware. The gap is due in part to the disruption caused by  moving to parallel languages, and in part to the prohibitive effort of porting application code across platforms.  A leading idea for solving this is domain-specific parallel languages, where custom constructs are made to match features of the problem.  However, such languages have a small number of users, which can't support the currently large effort to create such languages and port them across hardware platforms.
     5.8 +Software has not been keeping up with parallel hardware, which slows the economy and retards adoption of new hardware. The gap is due in part to the disruption caused by  moving to parallel languages, and in part to the prohibitive effort of porting parallel code across platforms.  A leading idea for solving this is domain-specific parallel languages, where custom constructs are made to match features of the problem.  However, such languages have a small number of users, which can't support the currently large effort to create such languages and port them across hardware platforms.
     5.9  
    5.10  To simplify creation of domain-specific languages, we propose a "proto" runtime, which provides the cross-language portion of runtime behavior. This includes handling the concurrency issues within the runtime itself.  A given language only provides sequential implementations of its constructs.
    5.11  
    5.12 @@ -45,30 +45,30 @@
    5.13  
    5.14  
    5.15  \section{Introduction}
    5.16 -Current parallel languages, such as pthreads, TBB, OpenMP, and MPI, require programmers to learn new, complex mental models. Sequential programmers have to be retrained to start using them, and a new set of programming practices must be adopted for them. Such retraining generates a large disruption in application-software companies that attempt to start using these parallel languages.
    5.17 +Current parallel languages, such as pthreads, TBB, OpenMP, and MPI, require programmers to learn new, complex mental models. Sequential programmers have to be retrained to  using the parallel languages, and a new set of programming practices must be adopted for them. Such retraining generates a large disruption in the application-software companies that attempt to start using these parallel languages.
    5.18  
    5.19 -Further, after learning the new language and adopting the new programming practices, the companies still have to hand-tune each application for each target hardware platform. It also means that customers have to get a new binary when they upgrade hardware. Both effects are costly, and tend to retard adoption of new hardware, despite potential performance gains.
    5.20 +Further, after learning the new language and adopting the new programming practices, the companies still have to hand-tune each application for each target hardware platform. Not only that, but customers have to acquire a new binary when they upgrade hardware. Both effects are costly, and tend to retard adoption of new hardware, despite potential performance gains.
    5.21   
    5.22 -The net effect is that software lags behind hardware, and the potential advantages across the economy of new hardware designs are lost. What is needed is a way to ease the transition from sequential programming to parallel programming, and to reduce the need for hand-tuning to get efficient performance on new hardware.
    5.23 +The net result is that software lags behind hardware, and the potential advantages across the economy of new hardware designs are lost. What is needed is a way to ease the transition from sequential programming to parallel programming, and to reduce the amount of hand-tuning done to get efficient performance on new hardware.
    5.24  
    5.25   
    5.26 -Domain-specific languages promise to deliver both easier transition and efficiency across hardware[]. They do this by providing custom constructs that match patterns in the application. Thus, they are natural for the sequential programmer to use. The constructs ``hide'' the parallelism inside themselves, letting the runtime or toolchain handle it, freeing the programmer. 
    5.27 +Domain-specific languages promise to deliver both easier transition and efficiency across hardware[]. They do this by providing custom constructs that match to patterns in the application. Thus, they are natural for the sequential programmer to use. The custom constructs ``hide''  parallelism inside themselves, letting the runtime or toolchain handle it, freeing the programmer, and putting performance inside the tools. This makes coding easier and reduces hand-tuning.
    5.28  
    5.29  To illustrate the concept, we briefly cover one such language, which is used for describing the behavior of hardware, called HWSim. It has a straight-forward means for describing hardware, and then extracts parallelism from the description. The extracted parallelism is then efficiently exploited  on a variety of target platforms.
    5.30  
    5.31 -One blockage to wide-spread adoption of such domain-specific languages is the cost of developing them. Currently, toolchains are typically created, with an optimizer and back end for each target platform, which is expensive to create.
    5.32 +One blockage to wide-spread adoption of such domain-specific languages is the cost of developing them. Currently, a toolchain is created, including an optimizer and back end for each target platform. This is expensive.
    5.33  
    5.34  An alternative approach is so-called embedded languages, in which the new constructs are viewed as library calls made from a base language, such as C. This relies on the runtime system to provide efficient execution on a given target platform. It avoids the expense of creating a toolchain for each target, by instead creating a runtime for each target that is tuned to the hardware.
    5.35  
    5.36  This is a step forward, but such runtimes are still expensive to create. A technology to simplify the runtime creation would be helpful.
    5.37  
    5.38 -In this paper, we present a means to reduce runtime creation, by not only reducing the complexity, but also by making reuse across languages more practical. It essentially breaks a runtime into two pieces: a part that implements the semantic behavior of the custom constructs, and a part that is the same for every language.
    5.39 +In this paper, we present a means to reduce runtime creation, by not only reducing the complexity, but also by making reuse of runtime code in new languages more practical. It essentially breaks a runtime into two pieces: a part that implements the semantic behavior of the custom constructs, and a part that is the same for every language.
    5.40  
    5.41 - A nice happenstance is that the complicated multi-threaded issues that come up inside current runtime implementations can be collected inside the part that stays the same across languages. This means the language only need supply a sequential implementation of its constructs' behavior.
    5.42 + A nice happenstance is that most of the complicated concurrency issues that come up inside current runtime implementations can be collected inside the part that stays the same across languages. This means the language only need supply a sequential implementation of its constructs' behavior. The cross-language part handles low-level synchronization and communication between cores, exporting a simple interface. 
    5.43  
    5.44  Another nice happenstance is that the interface between the two parts of the runtime modularizes the runtime code. This, by itself, speeds development of new runtimes. In addition, it makes sharing between languages practical, especially for the portion that chooses where to perform work, and in which order.
    5.45  
    5.46 - This portion of the runtime handles data affinity and the shape of the dependency graph, which are responsible for the resulting performance. However, it contains few, if any, language-specific portions, so is practical to share between languages, for a given target platform.  This saves a non-trivial amount of development work.
    5.47 + This placement-choosing portion handles data affinity and the shape of the dependency graph, which are largely responsible for the resulting performance. However, it can be written to contain few language-specific portions, making it practical to share between languages, for a given target platform.  This saves a non-trivial amount of development work.
    5.48  
    5.49  While runtimes built without our contribution are still free to share such code, they have no equivalent interface between the runtime pieces. This makes isolating this portion of code more time consuming, and forces more effort to fit code from one runtime into the one of a different language.
    5.50  
    5.51 @@ -79,9 +79,17 @@
    5.52  Organization of paper
    5.53  
    5.54  \section{Background and Related Work}
    5.55 -For performance, the proto-runtime supports multiple levels of runtime hierarchy. In higher levels, work-units are large, leaving time for the decision about where to execute them to use advanced algorithms, which track data affinity and analyze dependency patterns. For lower levels, the work-units are smaller, leaving less time to search for the best location, so they have simpler algorithms.
    5.56  
    5.57 -UPR differs from pthreads, TBB, and other thread packages in that it provides more services to simplify runtime creation, and, more importantly, UPR has a mental model that is specific to runtime creation.  pthreads and TBB are programming languages in their own right -- but UPR has no semantics usable in application code, because it's only a  \emph{part} of a runtime. 
    5.58 +The current method of creating a runtime for a new domain-specific language is either writing one from scratch, normally on top of pthreads, or else modifying an existing runtime. LibGomp, the runtime for OpenMP, is a popular starting point.
    5.59 +
    5.60 +From anecdotal evidence, talking with 5 groups that have created domain specific languages, development of bare functionality of the runtime takes anywhere from one to several months. Perhaps a majority  of the time is spent  on multi-threading design and debugging.  That is just for basic functionality; if they want low overhead, they expect another three to six months of performance tuning.
    5.61 +
    5.62 +One group was interviewed, which used libGomp as the base upon which to build a streaming dataflow language.
    5.63 +
    5.64 +UPR is designed to shorten that development time.
    5.65 +
    5.66 +
    5.67 +UPR differs from pthreads, TBB, and other thread packages in that it provides a mental model that is specific to runtime creation.  Pthreads and TBB are programming languages in their own right, but UPR is not. It has no semantics usable in application code, because it's only a  \emph{part} of a runtime. It is geared exclusively to runtime creation. 
    5.68  
    5.69  ?
    5.70