An important goal of HPF is to achieve code portability across a variety of parallel machines. This requires not only that HPF programs compile on all target machines, but also that a highly-efficient HPF program on one parallel machine be able to achieve reasonably high efficiency on another parallel machine with a comparable number of processors. Otherwise, the effort spent by a programmer to achieve high performance on one machine would be wasted when the HPF code is ported to another machine. Although shared-memory machines and distributed-memory machines may use different low-level primitives, there is broad similarity with respect to the fundamental factors that affect the performance of parallel programs on these machines. Thus, achieving high efficiency across different parallel machines with the same high level HPF program is a feasible goal. Some of the fundamental factors affecting the performance of a parallel program are the degree of available parallelism, exploitation of data locality, and choice of appropriate task granularity. HPF provides mechanisms for the programmer to guide the compiler with respect to these factors.
The first versions of HPF were defined to extend Fortran 90. HPF 2.0 is defined as an extension to the current Fortran Standard (Fortran 95). Future revisions of HPF will include and be consistent with advances in the Fortran standards, as they are approved by ISO.
Building on Fortran, HPF language features fall into four categories:
HPF directives appear as structured comments that suggest implementation strategies or assert facts about a program to the compiler. When properly used, they affect only the efficiency of the computation performed, but do not change the value computed by the program. The form of the HPF directives has been chosen so that a future Fortran standard may choose to include these features as full statements in the language by deleting the initial comment header.
A few new language features have been defined as direct extensions to Fortran syntax and interpretation. The new HPF language features differ from HPF directives in that they are first-class language constructs and can directly affect the result computed by a program.
The HPF library of computational functions defines a standard interface to routines that have proven valuable for high performance computing. These additional functions include those for mapping inquiry, bit manipulation, array reduction, array combining scatter, prefix and suffix, and sorting.
A small number of changes and restrictions to Fortran 95 have also been defined. The most significant restrictions are those imposed on the use of sequence and storage association, since they are not compatible with the data distribution features of HPF. It is however possible to retain sequence and storage association semantics in a program by use of certain explicit HPF directives.