%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{The Dataflow Approach}
% ----------------------------------------------------------------------------
\label{sec:dataflow-approach}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% ----------------------------------------------------------------------------
\subsection{Basic Needs of Parallel Computation}
% ----------------------------------------------------------------------------

[** Look at several different common programming models and deduce the
set of features needed for parallel processing. **]

Another model of parallel programming exploits task level parallelism
model, where the parallelism arises from multiple threads of control
at the source level.  Programming languages supporting this paradigm
requires the user to manage explicit forking of parallelism and 
synchronization.  Globally shared memory may or may not be provided.
Communication is often exposed at the language level.  Examples of
this model includes Tasks in Ada, CSP like languages, and the various
types of threaded C.  Communication and synchronization are central in
these models, while globally shared memory makes the programmer's life
a lot easier. 

The implicitly parallel programming model represents another approach.
Id falls into this category. 

Parallelizing compilers. 

Any parallel compuation needs the following:
\begin{itemize}
\item{communication between different processors to initiate action on
remote processor, and respond to requests from other processors.
}
\item{global shared memory to share data.
}
\item{synchronization to coordinate execution.
}
\end{itemize}

\noindent
Physical/hardware implementation constraints:
\begin{itemize}
\item{Memory has to be physically distributed.
}
\item{Significant communication latency between nodes.
}
%\item{
%}
\end{itemize}

% ----------------------------------------------------------------------------
\subsection{The Gist of Dataflow}
% ----------------------------------------------------------------------------

\begin{itemize}
\item{Partial ordering of instruction at all level of the program,
yiedling an inherently parallel program. (A parallel machine language).
}
\item{Fast, cheap Synchronization.
}
\item{Fast context switches.
}
\item{Split-phase accesses.
}
\end{itemize}
Characterized by fine-grain parallelism and ability to tolerate
communication latency.  

How about I-structures?

% ----------------------------------------------------------------------------
\subsection{Yet Unexploited Dataflow Capabilities}
% ----------------------------------------------------------------------------

\begin{itemize}
\item{Dataflow as a means of achieving superscalar execution.
}
\end{itemize}

