Skip to content
Snippets Groups Projects
Commit b47bdf9d authored by Andreas Klöckner's avatar Andreas Klöckner
Browse files

Revert "Merge branch 'remove-ambigiuous-scheduling-warning' into 'master'"

This reverts merge request !62
parent 0107d077
No related branches found
No related tags found
No related merge requests found
......@@ -456,8 +456,8 @@ control is the nesting of loops. For example, should the *i* loop be nested
around the *j* loop, or the other way around, in the following simple
zero-fill kernel?
It turns out that Loopy will choose a loop nesting for us, but it might be
ambiguous. Consider the following code:
It turns out that Loopy will typically choose a loop nesting for us, but it
does not like doing so. Loo.py will react to the following code
.. doctest::
......@@ -467,8 +467,13 @@ ambiguous. Consider the following code:
... a[i,j] = 0
... """)
Both nestings of the inames `i` and `j` result in a correct kernel.
This ambiguity can be resolved:
By saying::
LoopyWarning: kernel scheduling was ambiguous--more than one schedule found, ignoring
And by picking one of the possible loop orderings at random.
The warning (and the nondeterminism it warns about) is easily resolved:
.. doctest::
......
......@@ -1959,7 +1959,7 @@ def get_one_scheduled_kernel(kernel):
if CACHING_ENABLED:
try:
result = schedule_cache[sched_cache_key]
result, ambiguous = schedule_cache[sched_cache_key]
logger.debug("%s: schedule cache hit" % kernel.name)
from_cache = True
......@@ -1967,18 +1967,38 @@ def get_one_scheduled_kernel(kernel):
pass
if not from_cache:
ambiguous = False
kernel_count = 0
from time import time
start_time = time()
logger.info("%s: schedule start" % kernel.name)
result = next(iter(generate_loop_schedules(kernel)))
for scheduled_kernel in generate_loop_schedules(kernel):
kernel_count += 1
if kernel_count == 1:
# use the first schedule
result = scheduled_kernel
if kernel_count == 2:
ambiguous = True
break
logger.info("%s: scheduling done after %.2f s" % (
kernel.name, time()-start_time))
if ambiguous:
from warnings import warn
from loopy.diagnostic import LoopyWarning
warn("scheduling for kernel '%s' was ambiguous--more than one "
"schedule found, ignoring" % kernel.name, LoopyWarning,
stacklevel=2)
if CACHING_ENABLED and not from_cache:
schedule_cache[sched_cache_key] = result
schedule_cache[sched_cache_key] = result, ambiguous
return result
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment