In a simple parallel programming environment this information is entirely specified by the user, but this places a heavy burden on the user. It is much more comfortable for the user if parts of the placement can be left unspecified.
However, this means that the user must be able to specify part of the data placement and work assignment, and it must be clear which data placements and work assignment are left to the compiler. The compiler must then find the optimal choices for the placements that the user has left unspecified.
In this paper we present a compiler framework that takes a program with partial work and data placement information, and transforms it into an explicit parallel program optimised for the amount of communication.