def plot(fdir): (voltage,power,ve_cycles) = plot_voltage.get_voltage(fdir) mcpat_stats= util.get_data(os.path.join(fdir, 'mcpat_stats.bin'), np.ubyte) # events_p_cycle =num_event_per_cycle(10, mcpat_stats) # event_cycles = np.argwhere(events_p_cycle > 0) # secondy =num_event_per_cycle(4, mcpat_stats) #dcachereadmiss # secondy =num_event_per_cycle(67, mcpat_stats) #l2readmiss # secondy =num_event_per_cycle(68, mcpat_stats) #l3readmiss # secondy = num_event_per_cycle(44, mcpat_stats) #mispred # secondy = num_event_per_cycle(68, mcpat_stats) #l2readmiss secondy = power plot_voltage.plot([voltage], ve_cycles, '2_8_big_volt_power_50', show_all_ves=True, secondy=secondy) # for k,v in stat_id_name.items(): # secondy = num_event_per_cycle(k, mcpat_stats) # print(v, sum(secondy)) # name = "1_23_volt_" + v # plot_voltage.plot([voltage], ve_cycles, name, show_all_ves=False, # secondy=secondy, pstart=107000,pstop=150500) return
def plot(fdir): def moving_average(a, n=3): ret = np.cumsum(a, dtype=float) ret[n:] = ret[n:] - ret[:-n] return ret[n - 1:] / n (voltage, power, ve_cycles) = plot_voltage.get_voltage(fdir) # rob_data = Data(fdir, 2, "rob.bin", np.uintc) # secondy = rob_data.get_series(1) secondy = moving_average(power) plot_voltage.plot([voltage], ve_cycles, '1_26_big_volt_power_1.3m-2.4m', show_all_ves=False, secondy=secondy, pstart=1320782, pstop=2418999) # for k,v in stat_id_name.items(): # secondy = num_event_per_cycle(k, mcpat_stats) # print(v, sum(secondy)) # name = "1_23_volt_" + v # plot_voltage.plot([voltage], ve_cycles, name, show_all_ves=False, # secondy=secondy, pstart=107000,pstop=150500) return
def mcpathistory_w_ve(fdir): mp = Mcpat_Stats(fdir) (voltage, power, ve_cycle) = plot_voltage.get_voltage(fdir) history_len = 250 for ve in ve_cycle: print(f"--ve: {ve}") mp.print_history(ve, history_len)
def view_historyreg(fdir): (voltage, power, ve_cycle) = plot_voltage.get_voltage(fdir) historyreg = Data(fdir, 2, 'historyreg.bin', np.uintc) history = 50 for ve in ve_cycle: data = historyreg.get_data(ve, history) if data is not None: for i in range(history): print(data[0 + i * 2], ":", event_name(data[1 + i * 2])) print(ve) input()
def mispredict_history_w_ve(fdir): (voltage, power, ve_cycle) = plot_voltage.get_voltage(fdir) historyreg = Data(fdir, 3, 'mispredict.bin', np.uint) history = 10 for ve in ve_cycle: data = historyreg.get_data(ve, history) if data is not None: for i in range(history): print(data[0 + i * 3], ":", hex(data[1 + i * 3]), data[2 + i * 3]) print(ve) input()
def parse_fetch(fdir): (voltage, power, ve_cycle) = plot_voltage.get_voltage(fdir) fetch = Data(fdir, 4, 'fetch.bin', np.ulonglong) history = 100 for ve in ve_cycle: data = fetch.get_data(ve, history) if data is not None: for i in range(history): print(data[0 + i * 4], ":", hex(data[1 + i * 4]), "->", hex(data[3 + i * 4]), ":", data[2 + i * 4]) print(ve) input()
def run(): hr = 0.79 fp = 0.18 dirs = os.listdir() cnt = 0 mit_wattage = 0 mit_time = 0 for full_dir in util.get_dirs( "/home/jimmyjz2/output_9_17_lotsofstats/gem5_out"): ret = plot_voltage.get_voltage(full_dir) if ret: cnt += 1 (voltage, power, ve_cycles) = ret voltage_m, power_m, ve_cycles_m = plot_voltage.get_voltage( full_dir, clk_offset=-2E9) if len(ve_cycles) < 3: continue for ve in ve_cycles: power[ve:ve + pdn.THROTTLE_DUR] = power_m[ve:ve + pdn.THROTTLE_DUR] mit_wattage += np.average(power) numpred = len(ve_cycles) + len(ve_cycles) * fp num_miss = len(ve_cycles) * (1 - hr) mit_time += len(voltage_m) / pdn.CLK mit_time += (numpred * pdn.THROTTLE_DUR) / (pdn.CLK_THROTTLE / 2) mit_time += (num_miss * pdn.THROTTLE_DUR) / (pdn.CLK_THROTTLE / 2) mit_wattage /= cnt mit_time /= cnt print("AVERAGE MIT PWR", mit_wattage) print("AVERAGE MIT TIME", mit_time)
def fetchhistory_w_ve(fdir): print(fdir) (voltage, power, ve_cycle) = plot_voltage.get_voltage(fdir) fetch = Data(fdir, 4, 'fetch.bin', np.uint) fetchredir = Data(fdir, 3, 'fetch_redirect.bin', np.uintc) # (redir_cycle, oldpc, newpc) = fetchredir.get_data(11208,0)[0] # print(f"{redir_cycle}: fetch redirect {hex(oldpc)}->{hex(newpc)}") # print(fetchredir.data[60:66]) # return mcpat_data = Mcpat_Stats(fdir) l3readmisses = mcpat_data.data[61] history_len = 80 # for i,(k,v) in enumerate(stat_id_name.items()): # print(f"{i} - {v}") prev_cycle = 0 for ve in ve_cycle: print(f"--ve: {ve}") data = fetch.get_data(ve + 30, history_len) if data is not None: for val in data: cycle = val[0] addr = val[1] taken = val[2] target = val[3] flags = "" if (l3readmisses[cycle] > 0): flags += ("l3miss ") if ((cycle > ve and prev_cycle < ve) or cycle == ve): flags += ("ve") (redir_cycle, oldpc, newpc) = fetchredir.get_data(cycle, 0)[0] if redir_cycle <= cycle and redir_cycle > prev_cycle: print( f"---{redir_cycle}: fetch redirect {hex(oldpc)}->{hex(newpc)}" ) print( f"{cycle}(+{cycle-prev_cycle}): {hex(addr)}->{hex(target)} taken:{taken} {flags}" ) prev_cycle = cycle
def run(): gem5dir = "/home/jimmy/output_10_28/gem5_out/matrixmult_HarvardPowerPredictor_1000000_5000000_10-1000000" (voltage,power,ve_cycle) = plot_voltage.get_voltage(gem5dir) mcpat_stats= util.get_data(os.path.join(gem5dir, 'mcpat_stats.bin'), np.ubyte) print(mcpat_stats[0:100]) cycle_idx = parse_mcpat_stat(mcpat_stats) LOOKBACK = 5 for ve in ve_cycle: if ve-LOOKBACK < 0 or ve < 50000: continue cycle = ve-LOOKBACK while True: print("CYCLE {}: POWER= {} VOLTAGE={}".format(cycle,power[cycle],voltage[cycle])) if cycle == ve: print("VE!!") print_mcpat_stats(cycle_idx, cycle, mcpat_stats) inp = input() if inp == 'c': break cycle +=1
def run2(): dirs = os.listdir() cnt = 0 avg_pwr = 0 avg_time = 0 for full_dir in util.get_dirs( "/home/jimmyjz2/output_9_17_lotsofstats/gem5_out"): ret = plot_voltage.get_voltage(full_dir, vdc_offset=0.02, clk_offset=-1.4E9) if ret: cnt += 1 voltage, power, ve_cycles = ret temp = float(np.sum(power) / len(power)) avg_pwr = avg_pwr + temp avg_time += len(voltage) / (pdn.CLK + clk_offset) avg_pwr /= cnt avg_time /= cnt print("AVERAGE pwr ", avg_pwr) print("AVERAGE time ", avg_time)
def plot_power(fdir, cycle): (voltage, power, ve_cycle) = plot_voltage.get_voltage(fdir) his = 300 for i in range(cycle - his, cycle, 1): print(f"{i}: {power[i]}")
def plot(): gem5dir = "/home/jimmy/output_10_28/gem5_out/matrixmult_HarvardPowerPredictor_1000000_5000000_10-1000000" (voltage,power,ve_cycle) = plot_voltage.get_voltage(gem5dir) event_cycles = get_event_cycles([1], mcpat_stats)