diff --git a/loopy/schedule.py b/loopy/schedule.py index 44df6d2cd1a33411e1adf2db7cde367a5c25c773..3fe96701bdca32e8f8e613db4d7a57831ccdf2a6 100644 --- a/loopy/schedule.py +++ b/loopy/schedule.py @@ -1207,43 +1207,9 @@ def generate_loop_schedules(kernel, debug_args={}): debug=debug, allow_boost=None), generate_loop_schedules_internal(sched_state, debug=debug)] - for gen in generators: - for gen_sched in gen: - # gen_sched = insert_barriers(kernel, gen_sched, - # reverse=False, kind="global") - # for sched_item in gen_sched: - # if isinstance(sched_item, Barrier) and sched_item.kind == "global": - # raise LoopyError("kernel requires a global barrier %s" - # % sched_item.comment) - - debug.stop() - - logger.info("%s: barrier insertion: start" % kernel.name) - - gen_sched = insert_barriers(kernel, gen_sched, - reverse=False, kind="local") - - logger.info("%s: barrier insertion: done" % kernel.name) - - yield kernel.copy( - schedule=gen_sched, - state=kernel_state.SCHEDULED) - debug.start() - - schedule_count += 1 - - # if no-boost mode yielded a viable schedule, stop now - if schedule_count: - break - - debug.done_scheduling() - - if not schedule_count: + def print_longest_dead_end(): if debug.interactive: - print(75*"-") - print("ERROR: Sorry--loo.py did not find a schedule for your kernel.") - print(75*"-") print("Loo.py will now show you the scheduler state at the point") print("where the longest (dead-end) schedule was generated, in the") print("the hope that some of this makes sense and helps you find") @@ -1262,6 +1228,50 @@ def generate_loop_schedules(kernel, debug_args={}): debug=debug): pass + try: + for gen in generators: + for gen_sched in gen: + # gen_sched = insert_barriers(kernel, gen_sched, + # reverse=False, kind="global") + + # for sched_item in gen_sched: + # if isinstance(sched_item, Barrier) and sched_item.kind == "global": + # raise LoopyError("kernel requires a global barrier %s" + # % sched_item.comment) + + debug.stop() + + logger.info("%s: barrier insertion: start" % kernel.name) + + gen_sched = insert_barriers(kernel, gen_sched, + reverse=False, kind="local") + + logger.info("%s: barrier insertion: done" % kernel.name) + + yield kernel.copy( + schedule=gen_sched, + state=kernel_state.SCHEDULED) + debug.start() + + schedule_count += 1 + + # if no-boost mode yielded a viable schedule, stop now + if schedule_count: + break + + except KeyboardInterrupt: + print(75*"-") + print("Interrupted during scheduling") + print(75*"-") + print_longest_dead_end() + raise + + debug.done_scheduling() + if not schedule_count: + print(75*"-") + print("ERROR: Sorry--loo.py did not find a schedule for your kernel.") + print(75*"-") + print_longest_dead_end() raise RuntimeError("no valid schedules found") logger.info("%s: schedule done" % kernel.name)