def get_subsystem_values(db, m, ml, directory, full): pl = sim.ProcessList(m.machine, directory) for b in m.benchmarks: pl.add_benchmark(b) result = dict() fifo_stats = FIFOStats() if full: baseline = ml.clone() # for f in baseline.all_fifos(): # f.depth = 1 score = db.get_score(m, baseline, True) if score is None: score, fstats = pl.run(ml, -1) db.add_score(m, baseline, True, score) db.add_result(m, str(ml), -1, score, fstats) result[0] = score return result, fifo_stats else: for b in m.benchmarks: subsystem = b.index mem = ml.get_subsystem(subsystem) mem_name = mem.get_name(True) value, fs_str = db.get_result(m, mem_name, subsystem) if value is None: value, fstats = pl.run(ml, subsystem) db.add_result(m, mem_name, subsystem, value, fstats) else: fstats = FIFOStats(fs_str) if value < 0: raise PendingException() result[subsystem] = value fifo_stats.combine(fstats) return result, fifo_stats