Programmable Array Compiler

The Programmable Array Compiler (PAC) is a tool for writing compilers
that support distibuted array constructs. It has been developed for:
- building domain -specific compilers based on Fortran language,
- implementing distributed-array language constructs,
- experimenting with various data- and task- parallel language constructs.
The PAC compiler supports several constructs found in HPF and CM Fortran:
- array statements,
- where and forall constructs,
- dynamic memory management,
- directives for distributing data, defining SIMD regions, etc.
The compiler is programed using a language definition file (LDF)
that:
- describes how to translate a program from global view of code to local
view,
- for each of several fortran constructs (array statements, I/O, etc)
contains code template to translate the construct,
- code templates describe details of communication, synchronization,
atomicity, etc.,
- the preprocessor supplies several compile time functions that can be
used to extract information from the constructs being translated,
- specifies array expressions that can optimized by the compiler.
Language definition files have been and are being written for two different
domains: a data-parallel Fortran compiler and a task-parallel Fortran compiler.
Data-parallel Fortran compiler
- used for reactive ground water transport (with favorable performance
over HPF),
- synchronized data parallel model for transport,
- typical communication is for updating ghost cells,
- also supports limited asynchronous model for chemistry computation.
Task-parallel Fortran compiler
- uses Global Arrays library as a run-time system,
- asynchronous MIMDmodel of computations,
- typical communication involves remote gets and puts,
and
- atomic operations on sections of distributed arrays.
Contact person: Matt Rosing <rosing@pnl.gov> or <rosing@frii.com>