Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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)
Esempio n. 4
0
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()
Esempio n. 5
0
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()
Esempio n. 6
0
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()
Esempio n. 7
0
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)
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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)
Esempio n. 11
0
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]}")
Esempio n. 12
0
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)