NPAC PCRC Runtime Kernel (Adlib) [11] was originally
implemented as a high-level runtime library, designed to support
translation of data-parallel languages. An early version of Adlib was
implemented in 1994 in the shpf project at Southampton
University. A much improved--virtually rewritten--version was
completed in the Parallel Compiler Runtime Consortium (PCRC) project
at Northeast Parallel Architecture Center (NPAC) at Syracuse
University. Adlib was initially invented for HPF.
It was completely reimplemented for HPJava.
Adlib supports a built-in representation of a distributed array, and a
library of communication and arithmetic operations acting on these
arrays. The array model supports HPF-like distribution formats, and
arbitrary sections, and is more general than GA. The Adlib
communication library concentrates on collective communication rather
than one-sided communication. It also provides some collective
gather/scatter operations for irregular access.
A Distributed Array Descriptor (DAD) played an very important
role in earlier implementation of the Adlib library. A DAD object
describes the layout of elements of an array distributed across
processors. The original Adlib kernel was a C++ library, built on
MPI. The array descriptor is implemented as an object of type
DAD. The public interface of the DAD had three
fields. An integer value, rank is the dimensionality,
, of
the array, greater than or equal to zero. A process group object,
group, defines a multidimensional process grid embedded in the
set of processes executing the program--the group over which the
array is distributed. A vector, maps, has
map objects, one
for each dimension of the array. Each map object was made up of an
integer local memory stride and a range object.
There are several interfaces to the kernel Adlib. The shpf Fortran
interface is a Fortran 90 interface using a kind of dope vector. The
PCRC Fortran interface is a Fortran 77 interface using handles to DAD
objects. The ad++ interface is a high-level C++ interface
supporting distributed arrays as template container classes. An early
HPJava system used a Java Native Interface (JNI) wrapper to the
original C++ version of Adlib.