The explosion
of java over the last year has been driven largely by its in role in bringing a
new generation of interactive web pages to World Wide Web. Undoubtedly various
features of the languages-compactness, byte code portability, security, and so
on—make it particularly attractive as an implementation languages for applets
embedded in web pages. But it is clear that the ambition of the Java
development team go well beyond enhancing the functionality of HTML documents.
“Java is designed to meet the chalanges of
application development on the context of heterogeneous, network-wide
distributed environments. Paramaount amoung these chalanges is secure delivery
of applications that consume the minimum of systems resources, can run on any hardware
and software platform, can be extended dynamically.”
Several of these concerns are mirrored in
developments in the High Prerformance Computing world over a number of years. A
decade ago the focus of interest in the parallel computing community was on
parallel hardware. A parallel computer was typically built from specialized
processers through a proprietary high-performance communication switch. If the
machine also had to be programmed in a proprietary language, that was an
acceptable price for the benefits of using a supercomputer. This attitude was
not sustainable as one parallel architecture gave way to another, and cost of
porting software became exorbitant. For several years now, portability across
platforms had been a central concern in parallel computing.
HPJava is a programming language extended from Java to
support parallel programming, especially (but not exclusively) data parallel
programming on message passing and distributed memory systems, from
multi-processor systems to workstation clusters.
Although it has a close relationship with HPF, the
design of HPJava does not inherit the HPF programming model. Instead the
language introduces a high-level structured SPMD programming style--the HPspmd model. A program written in
this kind of language explicitly coordinates well-defined process groups. These
cooperate in a loosely synchronous manner, sharing logical threads of control.
As in a conventional distributed-memory SPMD program, only a process owning a
data item such as an array element is allowed to access the item directly. The
language provides special constructs that allow programmers to meet this
constraint conveniently.
Besides the normal variables of the sequential
base language, the language model introduces classes of global variables that
are stored collectively across process groups. Primarily, these are distributed arrays.
They provide a global name space in the form of globally subscripted arrays,
with assorted distribution patterns. This helps to relieve programmers of error-prone
activities such as the local-to-global, global-to-local subscript translations
which occur in data parallel applications.
In addition to special data types the language
provides special constructs to facilitate both data parallel and task parallel
programming. Through these constructs, different processors can either work
simultaneously on globally addressed data, or independently execute complex
procedures on locally held data. The conversion between these phases is
seamless.
In
the traditional SPMD mold, the language itself does not provide implicit data
movement semantics. This greatly simplifies the task of the compiler, and
should encourage programmers to use algorithms that exploit locality. Data on
remote processors is accessed exclusively through explicit library calls. In
particular, the initial HPJava implementation relies on a library of collective
communication routines originally developed as part of an HPF runtime library.
Other distributed-array-oriented communication libraries may be bound to the
language later. Due to the explicit SPMD programming model, low level MPI
communication is always available as a fall-back. The language itself only
provides basic concepts to organize data arrays and process groups. Different
communication patterns are implemented as library functions. This allows the
possibility that if a new communication pattern is needed, it is relatively
easily integrated through new libraries.
2. Overview of HPJava
HPJava stands for “high performance java”. Java
already provides parallelism through threads. But that model of parallelism can
only be easily exploited on shared memory computers. HPJava is targetted at
distributed memory parallel computers (most likely, networks of PCs and
workstations).
Java packages for HPspmd programming
The current runtime
interface for HPJava is called adJava.
It consists of two Java packages. The first is the HPspmd runtime proper. It
includes the classes needed to translate language constructs. The second
package provides communication and some simple I/O functions. These two
packages will be outlined in this section.
The classes in the first
package include an environment class, distributed array ``container classes'',
and related classes describing process groups and index ranges. The environment
class SpmdEnv provides functions to initialize and finalize the underlying
communication library (currently MPI). Constructors call native functions to
prepare the lower level communication package. An important field, apg, defines
the group of processes that is cooperating in ``loose synchrony'' at the
current point of execution.
The other classes in this
package correspond directly to HPJava built-in classes. The first hierarchy is
based on Group. A group, or process group, defines some subset of
the processes executing the SPMD program. Groups have two important roles in
HPJava. First they are used to describe how program variables such as arrays
are distributed or replicated across the process pool. Secondly they are used
to specify which subset of processes execute a particular code fragment.
Important members of adJava Group class include the pair on(), no() used to
translate the on construct.
0 comments:
Post a Comment