Current commercial parallel supercomputers are clearly the next generation of high performance machines [4][3]. Although parallel computers have been commercially available for some time, their use has been mostly limited to academic and research institutions. This is mainly due to the lack of software tools available to develop parallel programs. Writing programs for parallel machines using message passing model is a complicated, time-consuming, and error-prone task [5]. Karp and Babb [7][6] selected a simple program and rewrote it to run on nine commercially available parallel machines. They report being surprised to see how complicated some of these programs became.
Fortran has been a popular language for developing software for industry for the past few decades. Accordingly, there has been significant research in developing parallelizing compilers for Fortran codes. Most notable examples include Parafrase at the University of Illinois [8] and PFC at Rice University [9]. In this approach, the compiler takes a sequential Fortran 77 program as input, applies a set of transformation rules, and produces a parallelized code for the target machine. New transformation rules are added to the compiler as they are learned.
A sequential language, such as Fortran 77, hides a problem parallelism in sequential loops and in other sequential constructs. A program is written without any parallel constructs provided, even if the user is willing to express parallelism explicitly. Furthermore, the user may optimize the program to reduce memory usage and computation time. This makes the potential parallelism more difficult to detect. Therefore, compiling a sequential program into a parallel program is not a natural approach. An alternative approach is to use a source programming language that can naturally represent an application using parallel constructs. Fortran 90 (with some extensions) is such a language. The extensions may include the forall statement and compiler directives for data partitioning, such as decomposition, alignment, and distribution.
From our point of view, Fortran 90 (and its dialects including Fortran 90D/HPF) is not regarded as the natural portable language only for SIMD computers [10], but as a natural language for parallelism of a large class of synchronous and some loosely synchrounous problems [14][13][12][11]. In Fortran 90D/HPF, parallelism is represented with parallel constructs, such as array operations, forall statements, and intrinsic functions. The forall statement is not a standard construct in Fortran 90; however, this construct is included in Fortran 90D/HPF.
A Fortran 90D/HPF parallel compiler exploits only the parallelism expressed in these parallel constructs. Fortran 90D/HPF compiler does not attempt to parallelize other constructs, such as do loops and while loops, since they are naturally sequential. Developing a compiler under this assumption becomes much easier. Also users can reliably understand where parallelism will be exploited.