Moshe Goldstein/david dayan - Implementing Parallel Programming Design Patterns using EFL for Python
EFL (Embedded Flexible Language), a deterministic parallel programming
tool, may be embedded in any host language. Two versions of the EFL
pre-compiler for Python were implemented. One translates EFL blocks
into Python's Multiprocessing code, and the other one into DTM/MPI4PY
code. EFL implementations of Parallel Programming Design Patterns will
be shown, generated parallel code compared, and differences discussed.
-----
Multi-core CPUs are abundant and utilizing them effectively requires
programmers to parallelize CPU-intensive code. To facilitate this, we
have developed EFL (Embedded Flexible Language), a deterministic
parallel programming tool.
The parallel parts of a program are written as EFL-blocks, which are
embedded into a sequential host language program. The sequential parts
of the program are written in the host language, outside the EFL
blocks.
EFL may be embedded in any host language by writing an appropriate EFL
pre-compiler. At the moment, we implemented two versions of the EFL
pre-compiler. Both pre-compilers translate EFL blocks into parallel
Python code - one of them generates parallel code based on Python's
Multiprocessing module, and the other one generates parallel code
based on the DTM/MPI4PY Python module.
We will present the principles upon which EFL is built. We will show
the implementation of Parallel Programming Design Patterns using EFL's
parallel programming constructs (such as parallel assignments,
parallel for-loops, etc.). Using our two EFL pre-compilers we will
show their translation to Python parallel code according to the
Multiprocessing module as well as the DTM/MPI4PY module. The
differences between code versions produced by the EFL pre-compilers
will be discussed. |