hanchenye-llvm-project/polly
Tobias Grosser ca7f5bb767 Full/partial tile separation for vectorization
We isolate full tiles from partial tiles to be able to, for example, vectorize
loops with parametric lower and/or upper bounds.

If we use -polly-vectorizer=stripmine, we can see execution-time improvements:
correlation from 1m7361s to 0m5720s (-67.05 %), covariance from 1m5561s to
0m5680s (-63.50 %), ary3 from 2m3201s to 1m2361s (-46.72 %), CrystalMk from
8m5565s to 7m4285s (-13.18 %).

The current full/partial tile separation increases compile-time more than
necessary. As a result, we see in compile time regressions, for example, for 3mm
from 0m6320s to 0m9881s (56.34%). Some of this compile time increase is expected
as we generate more IR and consequently more time is spent in the LLVM backends.
However, a first investiagation has shown that a larger portion of compile time
is unnecessarily spent inside Polly's parallelism detection and could be
eliminated by propagating existing knowledge about vector loop parallelism.
Before enabling -polly-vectorizer=stripmine by default, it is necessary to
address this compile-time issue.

Contributed-by: Roman Gareev <gareevroman@gmail.com>

Reviewers: jdoerfert, grosser

Subscribers: grosser, #polly

Differential Revision: http://reviews.llvm.org/D13779

llvm-svn: 250809
2015-10-20 09:12:21 +00:00
..
autoconf Generate gitversion.h in autoconf builds 2015-09-09 13:15:11 +00:00
cmake Compile ISL into its own library 2015-09-24 11:30:22 +00:00
include/polly Full/partial tile separation for vectorization 2015-10-20 09:12:21 +00:00
lib Full/partial tile separation for vectorization 2015-10-20 09:12:21 +00:00
test Full/partial tile separation for vectorization 2015-10-20 09:12:21 +00:00
tools Do not compile GPU library with sanitizers 2015-07-28 12:51:23 +00:00
utils Revise polly-{update|check}-format targets 2015-09-14 16:59:50 +00:00
www Mark a couple of issues as done 2015-09-24 14:30:14 +00:00
.arcconfig Adjusted arc linter config for modern version of arcanist 2015-08-12 09:01:16 +00:00
.arclint Adjusted arc linter config for modern version of arcanist 2015-08-12 09:01:16 +00:00
.gitattributes
.gitignore Add git patch files to .gitignore 2015-06-23 20:55:01 +00:00
CMakeLists.txt Add -sort-includes to our automatic source code formatting 2015-10-15 12:18:37 +00:00
CREDITS.txt
LICENSE.txt
Makefile
Makefile.common.in
Makefile.config.in Fix autotools build 2015-06-25 16:50:13 +00:00
README
configure Enable ISL's small integer optimization 2015-06-25 20:47:35 +00:00

README

Polly - Polyhedral optimizations for LLVM
-----------------------------------------
http://polly.llvm.org/

Polly uses a mathematical representation, the polyhedral model, to represent and
transform loops and other control flow structures. Using an abstract
representation it is possible to reason about transformations in a more general
way and to use highly optimized linear programming libraries to figure out the
optimal loop structure. These transformations can be used to do constant
propagation through arrays, remove dead loop iterations, optimize loops for
cache locality, optimize arrays, apply advanced automatic parallelization, drive
vectorization, or they can be used to do software pipelining.