diff --git a/loopy/kernel/tools.py b/loopy/kernel/tools.py index da56e53a72d0b8a5aa9535fd0f3d9219e5a8bbae..67c703136cd29a6ff67f7f6a011bb3e5ed718c91 100644 --- a/loopy/kernel/tools.py +++ b/loopy/kernel/tools.py @@ -28,6 +28,7 @@ import six from six.moves import intern import numpy as np +import islpy as isl from islpy import dim_type from loopy.diagnostic import LoopyError @@ -768,7 +769,13 @@ def assign_automatic_axes(kernel, axis=0, local_size=None): If *axis* is None, find a suitable axis automatically. """ - desired_length = kernel.get_constant_iname_length(iname) + try: + desired_length = kernel.get_constant_iname_length(iname) + except isl.Error: + # Likely unbounded, automatic assignment is not + # going to happen for this iname + return assign_automatic_axes(kernel, + axis=recursion_axis, local_size=local_size) if axis is None: # {{{ find a suitable axis @@ -870,10 +877,14 @@ def assign_automatic_axes(kernel, axis=0, local_size=None): # "invalid" pass: There are still unassigned axis after the # numbered "valid" passes--assign the remainder by length. + def get_iname_length(iname): + try: + return kernel.get_constant_iname_length(iname) + except isl.Error: + return -1 # assign longest auto axis inames first auto_axis_inames.sort( - key=lambda iname: ( - kernel.get_constant_iname_length(iname), iname), + key=get_iname_length, reverse=True) if auto_axis_inames: