likwid-counter-packing.py
def build_minimal_runs(events):
    """Compile list of minimal runs for given events."""
    # Eliminate multiples
    events = [e for i, e in enumerate(events) if events.index(e) == i]

    # Build list of runs per register group
    scheduled_runs = {}
    scheduled_events = []
    cur_run = 0
    while len(scheduled_events) != len(events):
        for event_tpl in events:
            event, registers, parameters = event_tpl
            # Skip allready scheduled events
            if event_tpl in scheduled_events:
                continue
            # Compile explicit list of possible register locations
            for possible_reg in register_options(registers):
                # Schedule in current run, if register is not yet in use
                s = scheduled_runs.setdefault(cur_run, {})
                if possible_reg not in s:
                    s[possible_reg] = (event, possible_reg, parameters)
                    # ban from further scheduling attempts
                    scheduled_events.append(event_tpl)
                    break
        cur_run += 1

    # Collaps all register dicts to single runs
    runs = [list(v.values()) for v in scheduled_runs.values()]

    return runs
def build_minimal_runs(events):
    # Eliminate multiples
    events = [e for i, e in enumerate(events) if events.index(e) == i]

    # Build list of runs per register group
    scheduled_runs = {}
    scheduled_events = []
    cur_run = 0
    while len(scheduled_events) != len(events):
        for event_tpl in events:
            event, registers, parameters = event_tpl
            # Skip allready scheduled events
            if event_tpl in scheduled_events:
                continue
            # Compile explicit list of possible register locations
            for possible_reg in register_options(registers):
                # Schedule in current run, if register is not yet in use
                s = scheduled_runs.setdefault(cur_run, {})
                if possible_reg not in s:
                    s[possible_reg] = (event, possible_reg, parameters)
                    # ban from further scheduling attempts
                    scheduled_events.append(event_tpl)
                    break
        cur_run += 1

    # Collaps all register dicts to single runs
    runs = [list(v.values()) for v in scheduled_runs.values()]

    return runs
def build_minimal_runs ( events ) : # Eliminate multiples events = [ e for i , e in enumerate ( events ) if events . index ( e ) == i ] # Build list of runs per register group scheduled_runs = { } scheduled_events = [ ] cur_run = 0 while len ( scheduled_events ) != len ( events ) : for event_tpl in events : event , registers , parameters = event_tpl # Skip allready scheduled events if event_tpl in scheduled_events : continue # Compile explicit list of possible register locations for possible_reg in register_options ( registers ) : # Schedule in current run, if register is not yet in use s = scheduled_runs . setdefault ( cur_run , { } ) if possible_reg not in s : s [ possible_reg ] = ( event , possible_reg , parameters ) # ban from further scheduling attempts scheduled_events . append ( event_tpl ) break cur_run += 1 # Collaps all register dicts to single runs runs = [ list ( v . values ( ) ) for v in scheduled_runs . values ( ) ] return runs
Compile list of minimal runs for given events.
Compile list of minimal runs for given events .