


\begin{slide}{Motivations1}

\begin{center}
\bf Motivations, part I
\end{center}

\small

\begin{itemize}
\item
Assume Java is to become a mainstream computing language.
\item
Scientific parallel computing must migrate to a new language platform.
\item
Opportunity to learn from shortcomings of previous scientific languages,
and fix some of the bugs?
\end{itemize}

\end{slide}


\begin{slide}{Motivations2}

\begin{center}
\bf Motivations, part II
\end{center}

\small

\begin{itemize}
\item
HPF is not in a good state.  Time to think about more
practical languages?
\item
Can we save good features of HPF without assuming very complex
compilers?
\item
Java is a (relatively) simple context for experiments with language
ideas.
\end{itemize}

\end{slide}

\begin{slide}{Base}

\begin{center}
\bf Base Model
\end{center}

\small

\begin{itemize}
\item
Base programming model will be SPMD programming.
\item
Interfaces to low-level communication platform (MPI) available, directly.
\item
Standard Java ``source'' programs {\em unchanged} by HPJava translator.
\end{itemize}

\end{slide}

\begin{slide}{Value}

\begin{center}
\bf Adding value
\end{center}

\small

\begin{itemize}
\item
Distributed arrays as language primitives.
\item
Access to local elements of distributed arrays facilitated by
{\em distributed control} constructs---language primitives.  Includes
{\em overall} distributed loop.
\item
PCRC collective communication functions, presented as a library
of HPF-like transformational functions on distributed arrays.
\item
Library of GA's-style functions for access to non-local patches of
distributed arrays.
\end{itemize}

\end{slide}


\begin{slide}{Applications}

\begin{center}
\bf Application domain
\end{center}

\small

\begin{itemize}
\item
Claim proposed model is {\em as} convenient as HPF for simple
algorithms, and more flexible for (realistically) complex
algorithms.  Application domain presumed to include all problems
where HPF and/or GAs is likely to successful.
\item
Applications with very unstructured accesses to regular arrays
(CHAOS-like) OK.  Reusable schedules available.  Room for
efficiency improvements.
\item
Situation for highly adaptive problems (DAGH-like applications) less
clear.  Fall-back position: resort to low-level SPMD programming for
such phases, using HPJava distributed arrays in other phases of
the program\ldots
\end{itemize}

\end{slide}


\begin{slide}{Key}

\begin{center}
\bf Key Technologies
\end{center}

\small

\begin{enumerate}
\item
PCRC Kernel Runtime.  Distributed array descriptors and very
general collective operations.
\item
Interface from Java to PCRC.
\item
Source to source translator from extended Java to standard Java + calls
to PCRC.  Use PCRC compiler infrastructor for rapid implementation.
\end{enumerate}

\end{slide}

\begin{slide}{Kernel}

\begin{center}
\bf Kernel Runtime
\end{center}

\small

Kernel of NPAC library is a C++ class library.
Influences from F90D, CHAOS/PARTI.  Based on MPI.
\begin{itemize}
\item
Object oriented, {\em but efficient}.  Eg, use inline functions extensively.
\item
All collective operations work with general DAD.
\item
Array-array copying supported by {\tt pcrc\_remap} operation.
\item
Shift-style communication supported by {\tt pcrc\_write\_halo}.
\item
General gather/scatter operations.
\item
General reductions and other F90 array arithmetic.
\item
Most collective operations based on reusable {\em schedule objects}.
\end{itemize}

\end{slide}

%\begin{slide}{Runtime}
%
%\begin{center}
%\bf Runtime Architecture
%\end{center}
%\vspace{0.3in}
%
%\centerline{\psfig{figure=architecture.eps,width=6.5in}}
%
%\end{slide}
%
%\begin{slide}{Table}
%
%\begin{center}
%\bf Tabular representation of DAD
%\end{center}
%\vspace{0.5in}
%
%\centerline{\psfig{figure=dad-10.11.eps,width=2.5in}}
%
%\end{slide}

\begin{slide}{Framework}

\begin{center}
\bf Compiler Construction Framework
\end{center}

\small

The \emph{frontEnd} system is an extensible software package for
constructing programming language processing tools.

Package is divided into
\begin{itemize}
\item \textbf{Language parsers.} Used to
  convert program source code to IR.  IR suitable for multiple
  programming languages.

\item \textbf{Package tools.} Used for displaying the IR.

\item \textbf{C++ class library.} Class library extended
  from the Sage++ class library.

\item \textbf{Test suite.} Extensive test suite for
  parsers.  Eg, package includes a ``first order'' exhaustive syntax
  test, in which each BNF syntax rule is used at least once.
\end{itemize}
Package is autoconfigured and tested on different platforms,
including: IBM AIX, SUN OS/Solaris, DEC OSF, HP HP-UX, SGI IRIX and PC
Linux.

\end{slide}


\begin{slide}{Example}

\tiny
\begin{verbatim}
  Range x = new CyclicRange(size, id);

  float a[[*,]] = new float [[size, x]];

  float b[[*]] = new float [[size]]; // used as a buffer

  at (x|0)
    a[[0,x]]=sqrt(a[[0,x]]);

  for (int k=0; k<size-1; k++) {

    for (int s=k+1; s<size; s++)
      at (x|k)
        a[[s,x]]/=a[[x,x]];

    Adlib.remap(b[k+1:],a[k,x|k+1:]);

    over (x|k+1:)
      for (int i=x; i<size; i++)
        a[[i,x]]-=b[[i]]*b[[x]];

    at (x|k+1)
      a[[k+1,x]]=sqrt(a[[k+1,x]]);
  }
\end{verbatim}
\normalsize

\end{slide}


\begin{slide}{Time}

\begin{center}
\bf Time scale
\end{center}

\small

\begin{itemize}
\item
PCRC kernel available in-house now.
\item
Java interface is being specified---implementation is considered
a straightforward task.
\item
Translator---something in time for SC?
\end{itemize}
{\tt http://www.npac.syr.edu/projects/pcrc/HPJava/}

\end{slide}

