Version 2.03

The OCamlP3l programming paradigm is skeleton programming. The
skeletons encapsulate basic parallel programming patterns in a well understood
and structured approach. Based on P3L, the Pisa Parallel Programming
Language, OCamlP3l skeleton algebra is embedded in a full-fledged functional
programming language, namely Objective Caml.

The skeleton programming approach used in OCamlP3l allows three different
operational interpretations of the same source program:

the sequential interpretation which is deterministic, hence easy
to understand and debug,

the parallel interpretation using a network of computing nodes
run in parallel to speed up the computation,

the graphical interpretation, which is run to obtain a drawing of
the parallel computing network deployed at run-time by the parallel
interpretation.

These three operational semantics are obtained by recompilation of the source
program using three different compile-time options of the compiler.
The corner stone of this extremely fruitful approach is the adequacy property
between the sequential and parallel operational interpretations: they always
lead to the same result.

Writing parallel programs is not easy, and debugging them is usually a
nightmare. To cope with these difficulties, a structured approach to parallel
programming using skeletons and templates based compilation techniques has been
developed over the past years by several researchers, including the P3L group
in Pisa. The OCamlP3l system combines the OCaml functional programming language
together with the P3l skeletons, yielding a powerful parallel programming
methodology: OCamlP3l allows the programmer to write and debug a sequential
version of the program (which, if not easy, could be considered as routine),
and then the parallel version is automatically inferred by recompilation of the
source program. The invaluable advantage of this approach is staging: the
programmer has just to concentrate on the easy part, the sequential
programming, relying upon the OCamlP3l system to obtain the hard part, the
parallel version. As an additional benefit, the semantics adequacy between the
sequential and parallel versions of the program is no more the programmer's
concern: it is now the entire responsibility of the OCamlP3l compiler.