Commit Graph

43 Commits

Author SHA1 Message Date
Tobias Grosser
92f5480f04 ScheduleOpt: Add option to bound scheduling coefficients of dimensions.
llvm-svn: 150953
2012-02-20 08:41:47 +00:00
Tobias Grosser
4d63b9d0f9 ScheduleOptimizer: Dump the calculated schedule in debug mode
llvm-svn: 150951
2012-02-20 08:41:21 +00:00
Tobias Grosser
992e60ca57 ScheduleOpt: Add option to bound constant term coefficients
llvm-svn: 150950
2012-02-20 08:41:15 +00:00
Tobias Grosser
1e03ad7213 ScheduleOpt: Only get RAW dependences if we asked for raw
llvm-svn: 150574
2012-02-15 09:58:42 +00:00
Tobias Grosser
1deda29598 ScheduleOpt: Allow to configure for which dependences to optimize
We can either optimize for RAW dependences or for all dependences.
For the moment, I do not see a big difference here.

llvm-svn: 150484
2012-02-14 14:02:48 +00:00
Tobias Grosser
00383a75b8 CodeGen: Get dependences for validity and proximity separately
This change itself should not change functionality, but it will make it easier
to support use different dependence kinds in for validity and proximity
constraints.

llvm-svn: 150483
2012-02-14 14:02:44 +00:00
Tobias Grosser
5f9a762056 ScopInfo: Add Scop::getDomains()
llvm-svn: 150482
2012-02-14 14:02:40 +00:00
Tobias Grosser
98610eed34 ScheduleOptimizer: Change vars to start with uppercase letter
llvm-svn: 150430
2012-02-13 23:31:39 +00:00
Tobias Grosser
8ad6bc339a Schedule: Sort includes and remove useless ones
llvm-svn: 149383
2012-01-31 13:26:29 +00:00
Tobias Grosser
9f75aba51f Remove leftover constant
llvm-svn: 149290
2012-01-30 22:46:22 +00:00
Tobias Grosser
18aa54cbae Scheduling: Limiting the constant term is not necessary any more
Due to our gist simplifications, limiting the constant term does not seem to
be necessary any more.

Pointed out by Sven Verdoolaege

llvm-svn: 149288
2012-01-30 22:44:05 +00:00
Tobias Grosser
a4ea90b88c Typo: Maxize -> Mazimize
Found by Sebastian Pop.

llvm-svn: 149287
2012-01-30 22:43:56 +00:00
Tobias Grosser
50ff31dabe Scheduling: Set fusion strategy to minimal
This has shown better results for 2mm, 3mm and a couple of other benchmarks.

After this we show consistenly better results as PoCC with maxfuse. We need
to see if PoCC can also give better results with another fusion strategy.

llvm-svn: 149267
2012-01-30 19:38:58 +00:00
Tobias Grosser
95e860c19c Scheduling: Add option to disable schedule_maximise_band_depth
maximise_band_depth does not seem to have any effect for now, but it may help to
increase the amount of tileable loops. We expose the flag to be able to analyze
its effects when looking into individual benchmarks.

llvm-svn: 149266
2012-01-30 19:38:54 +00:00
Tobias Grosser
b3ad85b03c Scheduler: Allow to select the fusion strategy
llvm-svn: 149265
2012-01-30 19:38:50 +00:00
Tobias Grosser
42152ff3c7 Scheduling: Use original schedule if we cannot find a new one
After this we can now compile all polybench 2.0 kernels without any compiler
crash.

llvm-svn: 149264
2012-01-30 19:38:47 +00:00
Tobias Grosser
a26db47083 Scheduler: Simplify dependences by default (only isl)
This speeds up the scheduler by orders of magnitude and in addition yields often
to a better schedule.

With this we can compile all polybench kernels with less than 5x compile time
overhead. In general the overhead is even less than 2-3x.  This is still with
running a lot of redundant passes and no compile time tuning at all. There are
several obvious areas where we can improve here further.

There are also two test cases where we cannot find a schedule any more (cholesky
and another). I will look into them later on.

With this we have a very solid base line from which we can start to optimize
further.

llvm-svn: 149263
2012-01-30 19:38:43 +00:00
Tobias Grosser
f4bea399a9 Scheduler: Try to maximize the band depth
Previously the scheduler was splitting bands at the level at which it detected
that the splitting of the band is necessary. This may introduce an additional
level of bands, that can be avoided by backtracking and splitting on a higher
level. Additional splits reduce the number of loops that can be tiled, such that
avoiding splits and maximizing the band depth seems preferable.

As a first data point we looked at 2mm and 3mm from the polybench test suite.
For both maximizing the tilable bands results in a significant (5-10x)
performance improvement.

This patch enables the isl scheduler option to maximize the band depth.

llvm-svn: 146557
2011-12-14 08:58:43 +00:00
Tobias Grosser
768140c6e1 Scheduler: Set maximal constant term
If larger coefficients appear as part of the input dependences, the schedule
calculation can take a very long time. We observed that the main overhead in
this calculation is due to optimizing the constant coefficients. They are
misused to increase locality by merging several unrelated dimensions into a
single dimension. This unwanted optimization increases the complexity of the
generated code and furthermore slows it down.

We use a new isl scheduler option to bound the values in the constant dimension
by a user defined value (20 in our case). If the right value is choosen, costly
overoptimization is prevented.

This solution works, but requires a specific (here almost randomly choosen)
value by which the constants are bound. For the moment, this is our best
solution, but we hope to to find a more generic one later on.

After these patch the extremly long compile time for simple kernels like 2mm or
3mm is reduced to a reasonable amount of time (Not more than a couple of seconds
even in debug mode).

llvm-svn: 146556
2011-12-14 08:58:39 +00:00
Tobias Grosser
b6033396fd ScheduleOptimizer: Do not tile bands with just one dimension
llvm-svn: 146149
2011-12-08 13:02:58 +00:00
Tobias Grosser
2493e92530 ScheduleOptimizer: Rewrite getPrevectorMap to use isl_pw_aff
This increases the readablity. This also adds some comments that explain
what this function does.

llvm-svn: 146028
2011-12-07 07:42:57 +00:00
Tobias Grosser
4dca439cfc Register Passes: Use -polly-optimizer=(isl|pocc) to switch optimizers
This replaces the old option -polly-use-pocc. Also call the passes uniformly
-polly-opt-pocc and -polly-opt-isl.

llvm-svn: 145071
2011-11-22 19:40:19 +00:00
Tobias Grosser
6287201d6e ScheduleOptimizer: Start with an empty union_map and add elements
llvm-svn: 144900
2011-11-17 12:56:04 +00:00
Tobias Grosser
1ae9a60426 ScheduleOptimizer: Some style changes
- Use uppercase letters according to the LLVM coding style
- Rename functions to not include 'tiledSchedule', but just Schedule. This
  is more correct as tiling might be disabled.

llvm-svn: 144899
2011-11-17 12:56:03 +00:00
Tobias Grosser
79b30201d6 ScheduleOptimizer: Use early exit
Style fix, noted by Sebastian Pop.

llvm-svn: 144898
2011-11-17 12:56:00 +00:00
Tobias Grosser
967239c029 Only have a single option to disable tiling for both isl and Pocc optimzer
This also documents the new option on the website.

llvm-svn: 142775
2011-10-23 20:59:44 +00:00
Tobias Grosser
67707b7131 Enable prevectorization with -enable-polly-vector.
This removes the separate prevector options for the Pluto and isl scheduler.

llvm-svn: 142774
2011-10-23 20:59:40 +00:00
Tobias Grosser
22636bf498 Rename -enable-schedule-prevector to -polly-prevector
llvm-svn: 142771
2011-10-23 20:59:29 +00:00
Tobias Grosser
353a2684bc ScheduleOptimizer: Allow to disable tiling
llvm-svn: 142770
2011-10-23 20:59:26 +00:00
Tobias Grosser
73600b8edd Initialize the passes early and properly.
llvm-svn: 141455
2011-10-08 00:30:40 +00:00
Tobias Grosser
cf3942dfa6 ScopInfo: Only give away a copy of the schedule.
llvm-svn: 141256
2011-10-06 00:04:05 +00:00
Tobias Grosser
f53388034d Adapt to introduction of isl_space
Polly should now be compiled with CLooG 0c252c88946b27b7b61a1a8d8fd7f94d2461dbfd
and isl 56b7d238929980e62218525b4b3be121af386edf. The most convenient way to
update is utils/checkout_cloog.sh.

llvm-svn: 141251
2011-10-06 00:03:35 +00:00
Tobias Grosser
c532f12965 Fix crashes due to unaligned parameters
Due to the recent introduction of isl_id, parameters need now always to be
aligned. This was not yet taken care of in the code path of vectorization and
dependence analysis.

llvm-svn: 138555
2011-08-25 08:40:59 +00:00
Tobias Grosser
b406d227d2 ScheduleOptimizer: Fix another memleak
llvm-svn: 138554
2011-08-25 08:40:52 +00:00
Tobias Grosser
a954242c88 ScheduleOptimizer: Fix another memory leak
llvm-svn: 138401
2011-08-23 22:35:23 +00:00
Tobias Grosser
6e0fdcadfe ScheduleOptimizer: Fix some memory errors.
This fixes reference counting if the schedule optimizer is used.

llvm-svn: 138325
2011-08-23 12:31:14 +00:00
Tobias Grosser
2bd3af1e89 Fix two compiler warnings
One of them actually pointed to an invalid condition in an assert.

llvm-svn: 136657
2011-08-01 22:39:00 +00:00
Tobias Grosser
44f19ac3fb ScheduleOpt: Fix some bugs
isl changed a function name, we did not properly initialize some variables
and we freed an isl_ctx object.

llvm-svn: 134448
2011-07-05 22:15:53 +00:00
Tobias Grosser
7c5ba83015 ScheduleOpt: Prevectorize the innermost parallel loop
Only prevectorize loops that are actually parallel and can
be vectorized. Take the innermost loop that is eligible.

llvm-svn: 134187
2011-06-30 20:29:20 +00:00
Tobias Grosser
c6699b7fe8 ScheduleOpt: Add first version of prevectorization
We just strip-mine the innermost dimension by the vector width. This does not
take into account if this dimension is parallel nor if it is constant.

llvm-svn: 134186
2011-06-30 20:29:13 +00:00
Tobias Grosser
de68cc91cf ScheduleOpt: Use band forest to get the schedules
isl introduced a new representation for the schedules it calculates. The new
representation uses a forest of bands and is closer to the structure of the
data as the old interface. Switch to the new interface, as it is nicer to use
and as the old interface will soon be removed from isl.

WARNING: This commit needs a version of isl that is more recent that the one
         included in CLooG. See:
	 http://polly.grosser.es/get_started.html#islTrunk
llvm-svn: 134181
2011-06-30 20:01:02 +00:00
Tobias Grosser
76747f76a0 ScheduleOptimizer: Declare functions static
Functions that are currently only used in this file can be declared static.

Suggested by: ether

llvm-svn: 131960
2011-05-24 12:20:07 +00:00
Tobias Grosser
30aa24cd6b ScheduleOptimizer: Add an isl based schedule optimizer
The isl based routines implement a new interpretation of the Pluto algorithm
new interpretation. This patch requires a recent version of isl to be installed.

llvm-svn: 131354
2011-05-14 19:02:06 +00:00