1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3 <!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
6 <META http-equiv=
"Content-Type" content=
"text/html; charset=ISO-8859-1">
7 <title>Polly - Polyhedral optimizations for LLVM
</title>
8 <link type=
"text/css" rel=
"stylesheet" href=
"menu.css">
9 <link type=
"text/css" rel=
"stylesheet" href=
"content.css">
13 <!--#include virtual="menu.html.incl"-->
15 <!--*********************************************************************-->
17 <!--*********************************************************************-->
19 <p> Polly is a high-level loop and data-locality optimizer and optimization
20 infrastructure for LLVM. It uses an abstract mathematical representation based
21 on integer polyhedra to analyze and optimize the memory access pattern of a
22 program. We currently perform classical loop transformations, especially
23 tiling and loop fusion to improve data-locality. Polly can also exploit
24 OpenMP level parallelism, expose SIMDization opportunities.
</p>
26 For many users, however, it's not the existing optimizations in Polly that are
27 of most interest, but the new analyses and optimizations enabled by the Polly
29 <a href=
"https://polyhedral.info">polyhedral.info
</a> you can get an idea of
30 what has already been done and what is possible in the context of polyhedral
33 <!--=====================================================================-->
35 <!--=====================================================================-->
38 <tr><td><b>2017</b></td></tr>
39 <tr><td width=
"120"><p>September
</p></td>
41 <h4>High-Performance Generalized Matrix Multiplication
</h4>
42 Polly automatically detects and optimizes generalized matrix
43 multiplication, the computation C
← α ⊗ C
⊕ β
44 ⊗ A
⊗ B, where A, B, and C are three appropriately sized
45 matrices,
⊕ and
⊗ operations are originating from the
46 corresponding matrix semiring, and
α and
β are constants, and
47 beta is not equal to zero. It allows to obtain the highly optimized form
48 structured similar to the expert implementation of GEMM that can be found
49 in GotoBLAS and its successors.
50 <h4>The performance evaluation of GEMM
</h4>
51 <img src=
"images/GEMM_double.png" /><br />
53 <tr><td><b>2017</b></td></tr>
54 <tr><td width=
"120"><p>January
</p></td>
56 <a href=
"http://impact.gforge.inria.fr/impact2017">IMPACT
2017</a> program
57 announced. Join IMPACT
2017 on January
23rd in Stockholm
<a
58 href=
"https://www.hipeac.net/2017/stockholm/">@HiPEAC'
17</a>.
61 <tr><td><b>2016</b></td></tr>
62 <tr><td width=
"120"><p>August
</p></td>
64 <a href=
"http://impact.gforge.inria.fr/impact2017">IMPACT
2017</a> the
7th
65 International Workshop on Polyhedral Compilation Techniques will take place
66 at January
23-
25,
2017 together with HiPEAC
2017 in Stockholm, Sweden. It is
67 a great opportunity to discuss and present work on Polyhedral Compilation,
68 including work on Polly.
71 <tr><td width=
"120"><p>April
</p></td>
73 A source checkout that contains Polly now provides Polly functionality
74 by default in clang/opt/bugpoint without the need to load an additional
78 <tr><td><b>2015</b></td></tr>
79 <tr><td width=
"120"><p>July
</p></td>
81 <h4>AST Generation Paper published in TOPLAS
</h4>
82 The July issue of TOPLAS contains a
50 page discussion of the AST
83 generation techniques used in Polly. This discussion gives not only an
84 in-depth description of how we (re)generate an imperative AST from our
85 polyhedral based mathematical program description, but also gives
86 interesting insights about:
88 <li><b>Schedule trees:
</b> A tree-based mathematical program description
89 that enables us to perform loop transformations on an abstract level,
90 while issues like the generation of the correct loop structure and loop
91 bounds will be taken care of by our AST generator.
92 <li><b>Polyhedral unrolling:
</b> We discuss techniques that allow the
93 unrolling of non-trivial loops in the context of parameteric loop bounds,
94 complex tile shapes and conditionally executed statements. Such unrolling
95 support enables the generation of predicated code e.g. in the context of
97 <li><b>Isolation for full/partial tile separation:
</b> We discuss native
98 support for handling full/partial tile separation and -- in general --
99 native support for isolation of boundary cases to enable smooth code
100 generation for core computations.
101 <li><b>AST generation with modulo constraints:
</b> We discuss how modulo
102 mappings are lowered to efficient C/LLVM code.
103 <li><b>User-defined constraint sets for run-time checks
</b> We discuss how
104 arbitrary sets of constraints can be used to automatically create run-time
105 checks that ensure a set of constraints actually hold. This feature is
106 very useful to verify at run-time various assumptions that have been taken
107 program optimization.
110 <a href=
"https://www.grosser.es#pub-polyhedral-AST-generation">
111 <em>Polyhedral AST generation is more than scanning polyhedra
</em></a><br />
112 Tobias Grosser, Sven Verdoolaege, Albert Cohen
<br />
113 ACM Transations on Programming Languages and Systems (TOPLAS),
37(
4),
122 <tr><td width=
"120"><p>February
</p></td>
124 <h4>Polly allows now non-affine subregions
</h4>
125 Data-dependent or floating point conditionals inside a SCoP can now be
126 overapproximated in order to increase the applicability on general purpose
130 <tr><td><b>2014</b></td></tr>
131 <tr><td width=
"120"><p>August
</p></td>
133 <h4>Polly drops the support of ScopLib and the external optimizer PoCC
</h4>
134 The support for ScopLib as an exchange format has been removed as recent
135 versions of clan, candl and pluto all support the OpenScop exchange format.
137 The support of the external optimizer PoCC has been dropped in favor of the
138 isl optimizer (default) and the still available pluto support.
141 <tr><td><b>2014</b></td></tr>
142 <tr><td width=
"120"><p>June
</p></td>
144 <h4>Polly can be built without GPL licensed software
</h4> After Sebastian
146 and David Peixotto's (both Qualcomm) recent
<a
147 href=
"https://repo.or.cz/w/isl.git/commit/60703e3ee89b9d5d4d1afb6a3f611292c0884574">commit
</a>
148 to isl, isl's latest development version can be built with imath instead of
149 GMP. With both CLooG and gmp having become optional, the last obligatory
150 dependency to GPL licensed software has been removed. Now Polly only depends
151 on isl (and the included imath), which are both MIT licensed.
154 <tr><td width=
"120"><p>April
</p></td>
156 <h4>Polly Phone Call -
23April
</h4>
157 We had a polly phone call about delinearizing array accesses (II)
<a
158 href=
"https://docs.google.com/document/d/1IZewI8Up0iEkCNIPr6gVtwJxF7RV6KmXkdwOBM_Q5Cs/edit?usp=sharing ">Meeting notes
</a> are available online.
159 <h4>Polly Phone Call -
17th April
</h4>
160 We had a polly phone call about delinearizing array accesses
<a
161 href=
"https://docs.google.com/document/d/14d3ehkH2MsvBdqsEOSYjysH0Ztyzb75Lp843hnxh2IA/edit?usp=sharing">Meeting notes
</a> are available online.
162 <h4>Polly Phone Call -
10th April
</h4>
163 We had a polly phone call.
<a
164 href=
"https://docs.google.com/document/d/12W-qZjiZGEQ_lVrob4OzvKJI3EooonC-ap1b9f9KCUE/edit?usp=sharing">Meeting notes
</a> are available online.
165 <h4>Polly Phone Call -
4th April
</h4>
166 We had a polly phone call.
<a
167 href=
"https://drive.google.com/folderview?id=0B7OMOXTgCYIUWkpJbWVJcW04ams&usp=sharing">Meeting notes
</a> are available online.
170 <tr><td width=
"120"><p>March
</p></td>
172 <h4>Static link Polly into tools
</h4> Polly can now be configured with 'cmake
173 -D LINK_POLLY_INTO_TOOLS:Bool=ON' to be statically linked in the tools (opt,
174 bugpoint, and clang.) This makes it easier to use polly without having to load
175 a shared library, and it also reduces the complexity of compiling Polly on
179 <tr><td width=
"120"><p>February
</p></td>
181 <h4>Polly presentation at FOSDEM
2014</h4> Polly was
<a
182 href=
"https://fosdem.org/2014/schedule/event/polly/">presented
</a> at the
183 FOSDEM LLVM developer's meeting.
184 <h4>New LLVM test-suite buildbots
</h4>
185 The set of
<a href=
"http://lab.llvm.org:8011/console?category=polly">Polly
186 buildbots
</a> has been extended. We now have
16 new blades that track
187 correctness and performance when compiling the LLVM test-suite. For now five
188 of them are used to provide
<a
189 href=
"https://llvm.org/perf/db_default/v4/nts/22463">fine granularity
190 reports
</a> (almost per-commit)
191 for 'clang -O3' (no polly). We also have six machines that track different
192 configurations of polly.
195 <tr><td width=
"120"><p>January
</p></td>
197 <h4>islplot released
</h4>
198 <a href=
"https://github.com/tobig/islplot">islplot
</a> is a library that
199 generates illustrations of integer sets and maps. It relies on
<a
200 href=
"https://repo.or.cz/w/isl.git">isl
</a> to model the integer sets and uses the
<a
201 href=
"https://pypi.python.org/pypi/islpy">islpy
</a> Python bindings to access
202 them. Plotting is performed with
<a
203 href=
"https://matplotlib.org">matplotlib
</a>. The following
<a
204 href=
"https://nbviewer.ipython.org/github/tobig/islplot/blob/master/notebooks/islplot-examples.ipynb">
205 Examples
</a> show its use.
208 <tr><td><b>2013</b></td></tr>
209 <tr><td width=
"120"><p>November
</p></td>
211 <h4>Loop optimization BoF at upcoming LLVM conference
</h4>
212 At the upcoming
<a href=
"https://llvm.org/devmtg/2013-11/#bof5">LLVM conference
213 </a> there will be a loop optimization BoF discussing Polly and other high
214 level loop optimizers.
217 <tr><td width=
"120"><p>October
</p></td>
219 <h4>Automatic code coverage and static analysis tests
</h4>
220 Sylvestre Ledru set up automatic tests for
<a
221 href=
"https://llvm.org/reports/coverage/">code coverage
</a> and
222 <a href=
"https://llvm.org/reports/scan-build/">static analysis
</a>
223 which run at least once a day and which include results for Polly.
224 <h4>Move to CLooG
0.18.1 and isl
0.12.1</h4>
225 With the move to an isl
0.12 version Polly can be compiled without the
226 need to link directly to GMP (if isl is used for code generation). Currently
227 isl is still internally using GMP, but private patches exist to also remove
228 this dependency. Without the use of GMP, a
<b>GPL free
</b> version of Polly
232 <tr><td><b>2012</b></td></tr>
233 <tr><td width=
"120"><p>December
</p></td>
235 <h4> New publication in the PPL Journal
238 We published a journal version of the Polly paper named
240 Polly - Performing polyhedral optimizations on a low-level intermediate
241 representation
</em> in the Parallel Processing Letters
2012.
243 <tr><td width=
"120"><p>September
</p></td>
245 <h4>Experimental support for the
<b>new isl code generator
</b></h4>
246 The code generator can be parameterized on a fine-grained
247 level. It gives direct control for example over unrolling, the amount of
248 control overhead and the code size. It can also be used to
249 create loops to handle border conditions or to perform full-partial tile
251 We also relicensed isl under the
<b>MIT license
</b>. This means, with the
252 exception of GMP (LGPL), there is no other (L)GPL licensed software used in
254 use of GMP is limited to a well defined interface. Replacing it with
255 a BSD licensed replacement is a tractable engineering project we would
256 be very interested in. For more information about isl see the
<a
257 href=
"http://www.kotnet.org/~skimo/isl/manual.pdf">isl manual
</a>.
260 <tr><td width=
"120"><p>July
</p></td>
262 <p> Polly can now be directly linked to the
<a
263 href=
"http://pluto-compiler.sourceforge.net/">Pluto optimizer
</a>. We were
264 already able to perform Pluto-like optimizations with Polly, as a similar
265 algorithm was added to isl half a year ago. However, being able to directly
266 compare with the original implementation will not only bring in competition in
267 the optimizer field. It will also allow new experiments with a cutting edge
269 This support was on of the outcomes of the
1-day Polly workshop and the
270 following week of joint work at IISC Bangalore and in cooperation with
275 <tr><td width=
"120"><p>February
</p></td>
277 <p>Polly is an official LLVM project, reachable at
<a
278 href=
"https://polly.llvm.org">https://polly.llvm.org
</a></p>
280 <tr><td width=
"120"><p>January
</p></td>
282 <p>Improved support for the isl scheduling optimizer
</p>
283 Polly can now automatically optimize all
<a
284 href=
"https://web.cse.ohio-state.edu/~pouchet.2/software/polybench/">polybench
285 2.0</a> kernels without the help of
286 an external optimizer. The compile time is reasonable and we can show
287 notable speedups for various kernels.
291 <tr><td><b><br/>2011</b></td></tr>
292 <tr><td width=
"120"><p>November
</p></td>
295 Talk at the
<a href=
"https://llvm.org/devmtg/2011-11/">
296 LLVM Developer Meeting
2011</a></p>
298 (Allows parameters in array subscript and max/signextend)
302 <td><p>October
</p></td>
304 <p>Polly can use the isl schedule optimizer
<br>
305 (The optimizer is similar to the one in Pluto, but it is part of isl)
310 <td><p>August
</p></td>
313 <a href=
"example_load_Polly_into_clang.html">Use Polly as
321 <p> Polly builder as part of the
<a
322 href=
"http://lab.llvm.org:8011/console">LLVM Buildbots
</a>
330 <p><a href=
"https://www.grosser.es">Tobias
</a> is founded for
332 href=
"https://ai.google/research/outreach/phd-fellowship/recipients/?category=2011">
333 Google Europe Fellowship in Efficient Computing
</a>.
340 <td><p><a href=
"https://www.grosser.es">Tobias
</a>' diploma thesis and
341 Raghesh's master thesis. See our
<a
342 href=
"publications.html">list of publications
</a>.
</p></td>
346 <td><p>April
</p></td>
347 <td><p>Polly moves to the LLVM infrastructure (svn, bugtracker)
</p></td>
351 <td><p>March
</p></td>
352 <td><p>Presentation at
<a
353 href=
"http://impact2011.inrialpes.fr/">CGO/IMPACT
</a></p>
355 polybench
2.0 with vectorization and OpenMP code generation
</p>
359 <td><p>Februar
</p></td>
360 <td><p>pollycc - a script to automatically compile with
361 polyhedral optimizations
</p></td>
365 <td><p> Januar
</p></td>
366 <td><p> Basic OpenMP support, Alias analysis integration,
367 Pluto/POCC support
</p></td>
370 <tr><td><b><br>2010</b></td></tr>
372 <td><p> December
</p></td>
373 <td><p>Basic vectorization support
</p></td>
377 <td><p> November
</p></td>
378 <td><p>Talk at the
<a
379 href=
"https://llvm.org/devmtg/2010-11/">LLVM Developer Meeting
</a> </p></td>
383 <td><p>October
</p></td>
384 <td><p>Dependency analysis
</p>
385 <p>Finished Phase
1 - Get something working
</p>
386 <p>Support scalar dependences and sequential SCoPs
</p>
391 <td><p>August
</p></td>
392 <td><p>RegionInfo pass committed to LLVM
</p>
393 <p>llvm-test suite compiles
</p>
399 <td><p>Code generation works for normal SCoPs.
</p></td>
404 <td><p>The CLooG AST can be parsed.
</p>
409 <td><p>April
</p></td>
410 <td><p>SCoPs can automatically be detected.
</p></td>
414 <td><p>March
</p></td>
415 <td><p>The RegionInfo framework is almost completed.
</p></td>
419 <td><p>February
</p></td>
420 <td><p>Translate a simple loop to Polly-IR and regenerate a loop structure
421 with CLooG works.
</p>
422 <p>ISL and CLooG are integrated.
</p></td>
428 <td><p>January
</p></td>
429 <td><p>The RegionInfo pass is finished.
</p></td>
432 <tr><td><b><br>2009</b></td></tr>
434 <td><p>End of the year
</p></td>
435 <td><p>Work on the infrastructure started.
</p></td>