The Pisa Parallel Programming Language (P3L for short) is an innovative parallel programming language based on the concept of skeletons/templates. Parallel computations can be expressed by using a hierarchical composition of a restricted set of parallel constructs (the skeletons). Each P3L skeleton defines a common form or `paradigm' of parallelism exploitation. If you have never heard about skeletons please have a look at the Skeletal Parallelism Homepage. Skeletons model both task parallelism (exploited among independent unrelated tasks) and data parallelism (exploited within the computation of a single task). Moreover there are control skeletons which allow the definition of sequential P3L modules and the iteration of skeleton compositions.
Skeletons currenlty included in the current version of P3L (P3L-2) are:
Task parallel skeletons:
FARM, modeling a set of identical workers computing in parallel a
stream of independent tasks;
PIPE, exploiting pipeline parallelism in the evaluation of a cascade of stages.
Data parallel skeletons:
MAP, modeling independent data parallel computations in which the
same function is applied to all the elements of an array of data,
REDUCE, exploiting parallelism in the reduction of the elements of an array by means of an associative and commutative operator,
SCANL, SCANR, implementing parallel prefix computations of the elements of an array by means of an associative and commutative operator,
COMP, expressing blocks of data parallel computations
Control skeletons :
LOOP, expressing the iteration of any skeleton compositions
SEQ, which encapsulates sequential fragments of C code implementing non-parallel modules of the application
P3L is built on top of C, in the sense that it uses C to express the sequential parts of a P3L application and uses a C-like syntax of data types and skeletons. However, the P3L approach can be in principle extended to other sequential (and paralell!) programming language such as C++, Fortran, Java, HPF etc. You can find a detailed description of P3L in the anacleto user manual
A first prototype compiler p3lc
was developed in 1993/94. p3lc accepted programs in P3L-1,
subset of current P3L skeletons (FARM, PIPE, LOOP, SEQ and MAP)
and generated code for a
Transputer-based Meiko CS/1 MIMD machine and for PVM running on a
cluster of UNIX workstations.
Click here to follow an example P3L program and its compilation using old p3lc . People working on the definition of P3L-1 and on the implementation of p3lc were mainly Bruno Bacci, Marco Danelutto, Milon Mackey, Salvatore Orlando and Susanna Pelagatti. The project took place at the (now closed) HP Pisa Science Center.
We are currently working on
anacleto a new P3L-2 compiler generating C+MPI code for PC running Linux and Fujitsu AP1000
ocamlp3l a skeleton based extension of Ocaml