In recent years embedded systems with multiple processors have become increasingly important. These systems often consist of a general-purpose processor and one, or even several, digital signal processors (DSPs). For portability, flexibility, and robustness it is often useful to regard such a cluster as a single, parallel, system. Since such a system contains several types of processor, it is said to be *heterogeneous*.
It is possible to generalize some of the programming models that are used for homogeneous systems to cover these heterogeneous systems. This makes it possible to draw upon the large body of knowledge that has been developed for compilation to traditional parallel computers.
At the Delft University of Technology we are developing a language and compilation system that generates efficient parallel code for both homogeneous and heterogeneous parallel systems. The language SPAR is an extension to Java. The compilation model of SPAR/Java allows the programmer to leave the placement of data and tasks to the compiler.
We must recognize, however, that the compiler, especially early versions, will not always be able determine the optimimal placement (or even a good placement) automatically. This means that the user sometimes has to give the compiler some help. For that purpose it is necessary to provide the user with a notation that clearly and effectively describes the desired placement of code or data.
In this paper such a notation is described. More specifically, it describes an annotation language that allows the description of explicit or partially explicit placement of data, tasks, or both on processors in a homogeneous or heterogeneous parallel system.
Features of this annotation language are:
Inevitably the distribution notation reveals the internal model of the compiler, so in effect the paper also describes the internal parallelization model of our compiler. We also briefly describe the compilation process that implements the parallelization model.