Preliminary note

polyhedral.info provides
information about the polyhedral compilation community including both the
latest developments as well as an overview of existing work. Heavily relying on
community contributions, it provides information
about software tools that use polyhedral
compilation techniques, the latest publications
in this area as well as community events.

Polyhedral Compilation

Polyhedral compilation encompasses the compilation techniques that rely on the
representation of programs, especially those involving nested loops and arrays,
thanks to parametric polyhedra FEAUTRIER1988PARAMETRICWILDE1993POLYLIBLOECHNER1999POLYLIB or Presburger relations KELLY1996OMEGAVERDOOLAEGE2010ISL,
and that exploit combinatorial and geometrical optimizations on these objects
to analyze and optimize the programs. Initially proposed in the context of
compilers-parallelizers, it is now used for a wide range of applications,
including automatic parallelization, data locality optimizations, memory
management optimizations, program verification, communication optimizations,
SIMDization, code generation for hardware accelerators, high-level synthesis,
etc. There has been experience in using such techniques in static compilers,
just-in-time compilers, as well as DSL compilers. The polyhedral research
community has a strong academic background, but more and more industry users
start to adapt such technologies as well.

The interest of using polyhedral representations is that they can be
manipulated or optimized with algorithms whose complexity depends on their
structure and not on the number of elements they represent. Furthermore,
generic and compact solutions can be designed that depend on program parameters
(e.g., loop bounds, tile sizes, array bounds). In a word, polyhedral techniques
are the symbolic counterpart, for structured loops (but without unrolling
them), of compilation techniques (such as scheduling, lifetime analysis,
register allocation) designed for acyclic control-flow graphs or unstructured
loops. Also, compared to optimizations that handle loops or arrays as a whole,
polyhedral techniques can work at the granularity of their elements, i.e., at
the granularity of a loop iteration and instance of a statement (operation),
and at the granularity of an array element.

The underlying theory dates back to seminal contributions such as The
Organization of Computations for Uniform Recurrence Equations by Karp, Miller,
and Winograd (1968) KARP1967 and Array Expansion
(1988) FEAUTRIER1988ARRAY and Dataflow Analysis of
Array and Scalar References (1991) FEAUTRIER1991 by
P. Feautrier, and was built on important contributions in the 80s on loop
transformations (work of Lamport LAMPORT1974, Banerjee,
Wolfe, Allen and Kennedy, Irigoin and Triolet IRIGOIN1988, etc.) and on systolic arrays design (work of
Quinton, Rajopadhye, Delosme, etc.), before the big picture emerged. The
development of optimizations tools such as PIP FEAUTRIER1988PARAMETRIC (parametric integer programming)
in 1988, which enables parametric optimization on polyhedra, Polylib WILDE1993POLYLIBLOECHNER1999POLYLIB (with developments since 1987, on top
of Chernikova’s algorithm), and Omega KELLY1996OMEGA
around 1990 PUGH1991UNIFORM (by Bill Pugh and his
group) were key contributions to make such polyhedral optimizations
possible. The 1978 seminal paper on abstract interpretation Automatic
Discovery of Linear Restraints Among Variables of a Program by Cousot and
HalbwachsCOUSOT1978 can also be considered as one axis
of foundations for polyhedral analysis, even if it gave rise to an
initially-disjoint community.

Since then, in the last 20 years, the research community has extended the
theory and the available polyhedral tools and libraries with Ehrhart
polynomials CLAUSS1996, Barvinok’s counting algorithm,
lattice optimizations, Presburger formulas manipulations, code generation
algorithms. The development of freely-available tools such as ISL, CLooG,
Pluto, PIPS, Fadalib, Cl@k, Gecos, to quote but a few, and the introduction of
polyhedral libraries in GCC and LLVM were important steps for the dissemination
of polyhedral compilation. The field of applications now covers a wide range of
directions such as:

Program analysis

Dependence analysis

Array expansion and single assignment transformation

Liveness and reuse/locality analysis of array elements

Array region analysis and approximations

Scheduling theory

Farkas lemma and multi-dimensional scheduling

Automatic vectorization and parallelization of nested loops

Link with loop transformations (interchange, fusion, retiming, etc.)

Loop tiling and tiling models

Program verification

Computability and decidability

Program termination

Race detections

Mapping algorithms

Systolic array design

Memory mapping with memory reuse (array contraction)

Data mapping (HPF-like), data distribution for distributed memory

Communication optimizations

Counting and Ehrhart polynomials

Analysis of cache misses

Memory size computations

Iteration counting (WCET)

Parallelizing compiler developments

Hardware synthesis

Automatic vectorizers/parallelizers

Compilation for GPUs

Iterative compilation

Binary optimizations and runtime optimizations

Since 2011, the research community in polyhedral code analysis and
optimizations meets annually at the International Workshop on Polyhedral
Compilation Techniques (IMPACT) where last results are presented and some panel
discussions are organized. IMPACT started as a workshop of the conference
CGO’11 and is now a regular satellite workshop of the international conference
HIPEAC. A polyhedral school has also been initiated in 2013 with a double
objective: to teach polyhedral techniques and tools to newcomers (typically
PhD students or researchers interested to bring such techniques to their
application field) and to help polyhedral specialists discuss and establish the
state-of-the-art of their field. A second edition of this school is planned.