POET stands for Parameterized Optimizations for Empirical Tuning, or Programmable Optimizations for Empirical tuning. Consider it a scripting language for building small-scale optimizing compilers. The language implementation is open-source. Find the most recent releases at the
Downloads section.
POET has been used to support a large number of compiler optimizations, including loop interchange, parallelization, blocking, fusion/
fission, strength reduction, scalar replacement, SSE vectorization, among others,
and to fully support the code generation of several domain-specific languages, including
automatic tester/timer generation, and automatically translating a finite-statemachine-
based behavior modeling language to C++/Java code.
For more information on POET, refer
Documents or
Publications sections.
History
The POET language was designed and implemented by
Qing Yi at the University of Texas at San Antonio in Mar, 2007 before she moved to Unversity of Colorado at Colorado Springs in 2012.
POET Transformation Engine
POET is an interpreted language designed for
applying advanced program transformations to
code in arbitrary languages as well as quickly
building ad-hoc source-to-source translators between
these languages. It has been used to
support the transformation needs of both popular
programming languages such as C/C++,
Java, FORTRAN, and several domain-specific
languages that we have designed on the fly for
various purposes. Figure shows the structure
of a typical POET transformation engine, which
is essentially a POET language interpreter coupled
with a set of transformation libraries and
language syntax descriptions. The transformation
libraries include predefined POET routines
which can be invoked to apply a large number
of compiler optimizations such as loop interchange,
parallelization, fusion, blocking, unrolling,
array copying, scalar replacement, among others. The language syntax specifications,
on the other hand, are used by the POET interpreter to dynamically parse input code in
a variety of different programming languages. The developer needs to write a POET script
to specify which input files to parse using which syntax descriptions, what transformations
to apply to the input code after parsing, and which syntax to use to unparse the transformation
result. The POET script can be extensively parameterized and reconfigured via
command-line options when invoking the transformation engine.