isl_schedule_constraints: split proximity constraints into coincidence/proximity
commit79fed64e9227b5c1814df23829901d32c1811ae1
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 27 Aug 2013 12:40:07 +0000 (27 14:40 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 18 Sep 2013 11:09:59 +0000 (18 13:09 +0200)
treeb9f20614ccd9b9a97bc2ee8818880fc059033151
parent2a665500370d4fa9230911a499e7dbde0b997442
isl_schedule_constraints: split proximity constraints into coincidence/proximity

Before this commit, the only way to tell the schedule to try and
schedule pairs of iterations together was to add the pair to the
proximity constraints hoping that the extreme case of zero dependence
distance can be reached over all proximity constraints.
This fortuitous case would result in the "zero_distance" of a band member
being set.

This works out reasonably well for flow dependences for which you
typically want to minimize the dependence distance and where having
a zero dependence distance may allow parallelization.

There are however cases where only one of these two effects is desired.
For example, false dependences affect parallelism, but
you may or may not be interested in minimizing the dependence
distance over them.
On the other hand, you may want to add input dependences to
the proximity constraints, but they should not affect parallelism.

We therefore split the proximity constraints into proximity and
coincidence constraints.  The new proximity constraints have
the same effect of communicating a desire to minimize dependence
distances as the original proximity constraints, but they no longer
affect any "zero_distance" property.
Instead, the coincidence constraints can be used to express
a desire to schedule pairs of domain iterations together.
Success results in the "coincident" property being set on the band member.

During the construction of a band, the scheduler first tries to
satisfy the coincidence constraints.  If this fails, then it tries
again without the coincidence constraints.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/band.h
include/isl/schedule.h
isl_band.c
isl_band_private.h
isl_options.c
isl_options_private.h
isl_schedule.c
isl_schedule_private.h
isl_test.c