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

Make scheduling more deterministic

parent aa13e867
No related branches found
No related tags found
No related merge requests found
......@@ -440,9 +440,6 @@ class SchedulerState(Record):
*Note:* ``ilp`` and ``vec`` are not 'parallel' for the purposes of the
scheduler. See :attr:`ilp_inames`, :attr:`vec_inames`.
.. attribute:: loop_priority
.. rubric:: Time-varying scheduler state
.. attribute:: active_inames
......@@ -536,7 +533,10 @@ def generate_loop_schedules_internal(
def insn_sort_key(insn_id):
insn = kernel.id_to_insn[insn_id]
return (insn.priority, len(active_groups & insn.groups))
# Sort by insn.id as a last criterion to achieve deterministic
# schedule generation order.
return (insn.priority, len(active_groups & insn.groups), insn.id)
insn_ids_to_try = sorted(sched_state.unscheduled_insn_ids,
key=insn_sort_key, reverse=True)
......@@ -864,7 +864,11 @@ def generate_loop_schedules_internal(
found_viable_schedule = False
for iname in sorted(tier,
key=lambda iname: iname_to_usefulness.get(iname, 0),
key=lambda iname: (
iname_to_usefulness.get(iname, 0),
# Sort by iname to achieve deterministic
# ordering of generated schedules.
iname),
reverse=True):
for sub_sched in generate_loop_schedules_internal(
......
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