Features
Par4All is an automatic parallelizing and optimizing compiler (workbench) for C and Fortran sequential programs.
The purpose of this source-to-source compiler is to adapt existing applications to various hardware targets such as multicore systems, high performance computers and GPUs. It creates a new source code and thus allows the original source code of the application to remain unchanged.
The main benefits of this source-to-source approach are:
- to keep the original source code of the application free from modifications,
- to obtain generated parallelized sources for various hardware platforms,
- to be able to optimize manually the generated source code.
The generated sources just need to be processed through the usual compilers:
- optimized compilers for a given processor,
- vendor compilers for embedded processors,
- CUDA,
- OpenCL,
- OpenMP,
- link with MPI and other libraries.
Internally, Par4All is currently composed of different components:
- the PIPS source-to-source compiler that began at MINES ParisTech in 1988 and is currently developed also in many other places: HPC Project , TÉLÉCOM Bretagne , IT SudParis, RPI (Rensselaer Polytechnic Institute),
- the PolyLib used by PIPS,
- GCC/GFC for the Fortran95 parser,
- and of course own tools and scripts to make all these components and the global infrastructure usable.
Par4All is an open source project that merges various open source developments. More info on the community here.
Par4All current version
The current 1.3.1 version can generate CUDA and OpenCL code from C code and OpenMP from C and Fortran code with a simple easy to easy-to-use high-level script p4a. With this script, you can get a parallelized version of your sources or even call the backend compiler to generate executable binaries with gcc, nvcc or icc for example.
On the Benchmarks page, there are some performance results with Par4All on multicores and GPU.
What is going on?
- Code generation for more embedded systems (Tilera, Kalray MPPA, ST P2012, EdkDSP)
- Fortran 95 support with the gcc/gfc front-end
- More user-friendly interfaces (Eclipse…)
- Scilab and Xcos to OpenMP/CUDA/OpenCL with Wild Cruncher
- Improving vector code generation (x86 SSE & AVX, ARM Neon, CUDA and OpenCL vectors)
- Better CUDA generation (loop fusion, shared memory…)
- Improving the OpenMP output
- Automatic instrumentation for loop parameters extraction at runtime
- Java compilation & parallelization to OpenMP/CUDA/OpenCL
- Python compilation & parallelization to OpenMP/CUDA/OpenCL
Roadmap
- Par4All 0.1 and 0.2 went out to provide Fortran 77 to OpenMP parallelization to modernize legacy code and C to OpenMP parallelization. There were first releases to test the integration process and were not really distributed as packages or with high level compilation scripts
- Par4All 1.0 (07/2010) parallelizes Fortran and C to OpenMP and C to CUDA and is the first easy-to-use public version
- Par4All 1.1 (03/2011) deals with C99 and introduces basic support for Fortran 95 to OpenMP
- Par4All 1.2 (07/2011) loop-fusion and communication optimizations for CUDA
- Par4All 1.3.1 (01/2012) generates OpenCL

