PIPS: Automatic Parallelizer and Code Transformation Framework
PIPS is a source-to-source compilation framework for analyzing and transforming C and Fortran programs.
The goal of the PIPS project is to develop a free, open and extensible workbench for automatically analyzing and transforming scientific and signal processing applications. The PIPS workbench is especially relevant for people interested in whole program compilation, a.k.a. application compilation or interprocedural compilation, reverse-engineering, program verification, source-to-source program optimization and parallelization. Its interprocedural analyses help with program understanding and with checking legality and impact of automatic program transformations. These transformations are used to reduce the execution cost and latency, as well as the optimization cost itself. They can also be used to support or ease code debugging and maintenance, and to check and enforce coding rules.
Techniques developed for PIPS can be re-used for signal processing code written in C, because pointers, data structures and dynamic allocation are not used much, and for Java code optimization because array boundary checking must be minimized conservatively.
PIPS is a free open workbench which has been used as support to develop new analyses or program transformations by several teams from MINES ParisTech (the initiator of the project in 1988!), CEA-DAM, Southampton University, TÉLÉCOM Bretagne, Telecom SudParis, SRU (Slippery Rock University), HPC Project, RPI (Rensselaer Polytechnic Institute) and ENS Cachan. These new developments benefit at no cost from the general infrastructure and from already available analyses and transformations. PIPS has also been used to develop a HPF prototype compiler and to study optimizations for HPF.
PIPS is not primarily designed to support compiler back-end research like SUIF but is much better as a C and Fortran source-to-source tool because the data types (e.g. complex) the code structures, the comments and, to some extent, the initial statement numbers are preserved. However, PIPS can be used to generate assembly code by lowering and specializing the interal representation.
PIPS used to stand for the French Parallélisation Interprocédurale de Programme Scientifiques but can also be understood now as Programming Integrated Parallel System or Parallelization Infrastructure for Parallel Systems.
What's new? What's going on?
- Intraprocedural points-to analysis
- CUDA output support is improving for Par4All
- Python scripting (PYPS) to easily build more complex tools
- Program optimization based on genetic algorithms (use PYPS)
- OpenCL support through the OpenGPU project will begin soon
- Eclipse integration through the OpenGPU project will begin soon
- Fortran 90 and Fortran 95 is on-going with the integration of the gfc parser from GCC gfortran
- XML DOM support for the internal representation (AST) with XPath support is going on
- A Debian package of PIPS is available
- gpips, GTK-based GUI for PIPS. So a GUI is back after 10 years of absence... :-) (2009/04/08)
- The FREIA project uses PIPS to generate code for the Ter@Pics and SPOC hardware accelerators from image processing applications (2008+)
- New web site and Trac system for collaborative development (2008)
- Basic C99 support
- Parallelization for the KAAPI runtime soon through the SAFESCALE project has been thought about
- code generation for parallel heterogeneous architectures with hardware synthesis for the PHRASE and CoMap projects
- PIPS is available with SubVersioN (SVN)
- multimédia instruction set (MMX and SSE-like) code generation with SAC (SIMD Architecture Compiler)
- Semantics analysis of CFG sharpened
- Semantics analysis for non-integer types: boolean, float and strings
- Array Bound Checking with minimal overhead
- Array Alias analysis
- Variable Freeze for code specialization
- Perfect Club benchmarks: adm, arc2d, bdna, dyfesm, flo52, mdg, ocean, qcd, smsi, spec77, spice, track, trdf
- Spec-CFP95 benchmarks: applu, apsi , fpppp, hydro2d, mgrid, su2cor, swim, tomcatv, turb3d, wave5
- Number of simultaneously analyzed modules above 700 (150 K lines)!