diff --git a/doc/tutorial.rst b/doc/tutorial.rst index d9627deed502a8cecbdda4933268d29c1b546207..9e4bd8c913361ad87783dc9220919fc32d8e5e90 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -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 typically choose a loop nesting for us, but it -does not like doing so. Loo.py will react to the following code +It turns out that Loopy will choose a loop nesting for us, but it might be +ambiguous. Consider the following code: .. doctest:: @@ -467,13 +467,8 @@ does not like doing so. Loo.py will react to the following code ... a[i,j] = 0 ... """) -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: +Both nestings of the inames `i` and `j` result in a correct kernel. +This ambiguity can be resolved: .. doctest:: diff --git a/loopy/schedule/__init__.py b/loopy/schedule/__init__.py index e23e5f350864a623d2ff05551fc2d559c361d734..bf51147b516f84e247c7ab94c103e4c202072a9b 100644 --- a/loopy/schedule/__init__.py +++ b/loopy/schedule/__init__.py @@ -1959,7 +1959,7 @@ def get_one_scheduled_kernel(kernel): if CACHING_ENABLED: try: - result, ambiguous = schedule_cache[sched_cache_key] + result = schedule_cache[sched_cache_key] logger.debug("%s: schedule cache hit" % kernel.name) from_cache = True @@ -1967,38 +1967,18 @@ 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) - 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 + result = next(iter(generate_loop_schedules(kernel))) 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, ambiguous + schedule_cache[sched_cache_key] = result return result