High Performance Commodity Computing (HPcc)
Geoffrey C. Fox, Wojtek Furmanski, Tomasz Haupt
Northeast Parallel Architectures Center at Syracuse University
PCRC Backend for HPF and HPJava
Bryan Carpenter, Xiaoming Li, Xinying Li, Yuhong Wen, Guangsong Zhang
Sponsored by ARPA, PCRC(Parallel Compiler Runtime consortium) is an effort to establish a common base for parallel compiler development. This common base is a runtime library, which is supposed to be available to the compilers. It is linked to the generated "node program". Our philosophy in PCRC is to build a relatively high level runtime library. We believe this approach will greatly facilitate compiler construction and deliver comparable or better performance for typical applications. An important aspect of PCRC runtime is that it is supposed to be a common base for different compilers. this demands a flexible design and an implementation that adopts sound engineering practices.
NPAC Run-time Library
The NPAC kernel runtime is a runtime library with special support for the HPF distributed array model. It provides array descriptors for a generalized class of HPF-like distributed arrays, support for parallel access to their elements, and a rich library of collective communication and arithmetic operations for manipulating these arrays. The library has been successfully used as a component of two experimental HPF translation systems.
The kernel of NPAC library is a C++ class library. It is currently implemented on top of MPI. The library design is solidly object-oriented, but efficiency is maintained as a primary goal. The overall architecture of the library is illustrated in the figure. At the top level are several compiler-specific interfaces to a common run-time kernel. The four interfaces shown in the figure are illustrative. They include two different Fortran interfaces (used by different HPF compilers), a user-level C++ interface called ad++, and a Java interface. The development of several top-level interfaces has produced a robust kernel interface, on which we anticipate other language- and compiler- specific interfaces can be constructed relatively straightforwardly.
The communication operations supported include HPF/F90 array intrinsic
operations (CSHIFT
, MATMUL
, SUM
,
etc, etc), the
function write_halo
, which updates ghost areas of a distributed
array, the function remap
, which is equivalent to a Fortran 90
array assignment between conforming sections of two arbitrarily
distributed HPF arrays, and various gather- and scatter- type
operations allowing irregular patterns of data access. Arithmetic
operations supported include all F95 array reduction and matrix
arithmetic operations, and HPF combining scatter. A complete set of
HPF standard library functions is under development.
HPF Compilation
A subset HPF compiler developed at NPAC is embedded in a compiler construction framework shown in the figure.
"HPJava"
As envisioned at NPAC, "HPJava" is an extensible framework for SPMD
programming. The initial components will be language bindings
to MPI and the HPF array model, as implemented in the PCRC run-time.
The MPI binding will be realized as a class library wrapper to
a native MPI implementation. Pure class library bindings to the PCRC
kernel will also be provided. However, without language-level
support for distributed arrays, the full potential of the library
cannot easily be exploited. Hence we are implementing a translator for
a minimally extended Java dialect. This dialect provides HPF distributed
arrays and distributed control constructs as language primitives. The
extended Java shares many features with HPF, but preserves an explicit
SPMD programming model, so that data parallel programming can mixed
freely with message-passing or other SPMD programming styles.