Ejemplo n.º 1
0
def mean_df():
    def avg_ondemand(onds, arg):
        ond = dvfsModel()
        ond.loadData(filename='data/dvfs/ondemand/' + onds[0],
                     arg_num=arg,
                     method='constTime')
        df = ond.dataFrame
        for f in onds[1:]:
            ond.loadData(filename='data/dvfs/ondemand/' + onds[0],
                         arg_num=arg,
                         method='constTime')
            df['energy'] += ond.dataFrame['energy']
        df['energy'] /= len(onds)
        return df

    ondemand = avg_ondemand(['ferret_completo_2.pkl', 'ferret_completo_3.pkl'],
                            6)
    pw_model = powerModel('data/ipmi_2-32_cpuload.pw')
    perf_model = performanceModel('data/dataframes/' + 'completo_ferret_3.pkl',
                                  'data/svr/' + 'completo_ferret_3.pkl')
    en_model = energyModel(pw_model, perf_model)

    ond = ondemand[['in', 'thr', 'time', 'energy']].sort_values(['in', 'thr'])
    nthreads = ond['thr'].unique().shape[0]
    ond = pd.crosstab(ond['in'], ond['thr'], ond['energy'], aggfunc=min)
    df = en_model.realMinimalEnergy().sort_values('in_cat')['energy']
    df = pd.concat([df] * nthreads, axis=1)
    ond = pd.DataFrame(ond.values / df.values, columns=ond.columns)

    ond.plot.bar()
    plt.plot([-1, 6], [1, 1], '--', color='k', label='proposto')
    plt.title('Ferret')
    plt.tight_layout()
    plt.savefig('fotos/comp2/ferret.png')
Ejemplo n.º 2
0
def createPowerModel(path, save_model):
    pw_model = powerModel()
    pw_model.loadData(filename=path,
                      verbose=0,
                      load_sensors=False,
                      freqs_filter=get_range(args.freqs),
                      thrs_filter=get_range(args.thrs))
    pw_model.fit()
    pw_model.save(save_model)
    error = pw_model.error()
    print("Power model constants, ", pw_model.power_model_x)
    print("Erro, ", error)

    return pw_model
Ejemplo n.º 3
0
def visualizePowerModel(path):
    # Plot the measured values and the model
    pw_model = powerModel(path)
    freqs = get_range(args.freqs) if args.freqs else pw_model.frequencies
    thrs = get_range(args.thrs) if args.thrs else pw_model.threads
    est = pw_model.estimate(freqs, thrs)
    plotData.setProps(xlabel="Frequencies (GHz)",
                      ylabel="Active Cores",
                      zlabel="Power (W)")
    plotData.plot3D(x=pw_model.frequencies,
                    y=pw_model.threads,
                    z=pw_model.powers,
                    legend='Measurements')
    plotData.plot3D(x=freqs, y=thrs, z=est, points=False, legend='Model')
    plotData.plotShow(showLegend=True)
Ejemplo n.º 4
0
def createPowerModel(path, save_model):
    pw_model = powerModel(
        power_model_=lambda x, f, p: x[0] * f**3 + x[1] * f + x[2],
        power_mode_n_=3)
    pw_model.loadData(filename=path,
                      verbose=2,
                      load_sensors=False,
                      freqs_filter=get_range(args.freqs),
                      thrs_filter=get_range(args.thrs))
    pw_model.fit()
    pw_model.save(save_model)
    error = pw_model.error()
    print("Power model constants, ", pw_model.power_model_x)
    print("Erro, ", error)

    return pw_model
Ejemplo n.º 5
0
def figures(appname=None, energy=True, in_cmp=3):
    from energyOptimal import plotData
    for app, title in zip(parsec_models, titles):
        if (appname and not appname in app) or (not app):
            continue
        pw_model = powerModel('data/ipmi_2-32_cpuload.pw')
        perf_model = performanceModel('data/dataframes/' + app,
                                      'data/svr/' + app)
        en_model = energyModel(pw_model,
                               perf_model,
                               freq_range_=np.arange(1.2e6, 2.3e6, 0.1e6) /
                               1e6)

        plotData.setProps(xlabel='Frequencies (GHz)',
                          ylabel='Active threads',
                          zlabel='Energy (kJ)' if energy else 'Time (s)',
                          title=title)
        df_ = perf_model.dataFrame[perf_model.dataFrame['in_cat'] ==
                                   in_cmp].sort_values(['freq', 'thr'])
        df_pred_ = en_model.dataFrame[en_model.dataFrame['in_cat'] ==
                                      in_cmp].sort_values(['freq', 'thr'])

        # df_pred_= df_pred_[df_pred_['thr'].isin(list(range(8,33,2)))]
        # df_= df_[df_['thr'].isin(list(range(8,33,2)))]
        plotData.plot3D(x=df_['freq'].unique(),
                        y=df_['thr'].unique(),
                        z=df_['energy'].values /
                        1e3 if energy else df_['time'].values,
                        points=True,
                        legend='Measurements')

        plotData.plot3D(x=df_pred_['freq'].unique(),
                        y=df_pred_['thr'].unique(),
                        z=df_pred_['energy_model'].values /
                        1e3 if energy else df_pred_['time'].values,
                        points=False,
                        legend='Model')
        plotData.ax.view_init(30, 60)
        if 'HPL' in app:
            plotData.ax.set_zlim(0, 15)
        aux = 'energy' if energy else 'time'
        plotData.savePlot('fotos/{}/{}.png'.format(aux, app), showLegend=True)
Ejemplo n.º 6
0
def comparation(appname=None,
                proposed_bar=False,
                relative=True,
                thrs_filter=[]):
    row = []
    for title, dvfs, model, arg in zip(titles, parsec_dvfs, parsec_models,
                                       parsecapps_argnum):
        if 'freq' in model or not model:
            continue
        if appname and not appname in dvfs:
            continue

        ondemand = dvfsModel()
        ondemand.loadData(filename='data/dvfs/ondemand/' + dvfs,
                          arg_num=arg,
                          method='constTime')
        pw_model = powerModel('data/ipmi_2-32_cpuload.pw')
        perf_model = performanceModel('data/dataframes/' + model,
                                      'data/svr/' + model)
        en_model = energyModel(pw_model, perf_model)

        #TODO verify if arguments match

        ond = ondemand.dataFrame[['in', 'thr', 'time', 'energy']]
        ond = pd.merge(ond, perf_model.dataFrame[[
            'in', 'in_cat'
        ]]).drop_duplicates().sort_values(['in_cat', 'thr'])

        if thrs_filter:
            ond = ond[ond['thr'].isin(thrs_filter)]
        ond_en = pd.crosstab(ond['in_cat'],
                             ond['thr'],
                             ond['energy'],
                             aggfunc=min)
        ond_time = pd.crosstab(ond['in_cat'],
                               ond['thr'],
                               ond['time'],
                               aggfunc=min)
        min_df = en_model.realMinimalEnergy().sort_values('in_cat')

        if proposed_bar:
            ond_en['proposed'] = min_df['energy'].values
            ond_time['proposed'] = min_df['time'].values
        if relative:
            aux = pd.concat([min_df['energy']] * (len(ond_en.columns)), axis=1)
            saving = pd.DataFrame(ond_en.values - aux.values,
                                  columns=ond_en.columns)
            ond_en = pd.DataFrame(ond_en.values / aux.values,
                                  columns=ond_en.columns)
            aux = pd.concat([min_df['time']] * (len(ond_en.columns)), axis=1)
            ond_time = pd.DataFrame(ond_time.values / aux.values,
                                    columns=ond_time.columns)

            row.append([
                dvfs,
                ond_en.max(axis=1).mean(),
                ond_en.mean(axis=1).mean(), ond_en[32].mean(),
                ond_en.min(axis=1).mean(),
                ond_time.max(axis=1).mean(),
                ond_time.mean(axis=1).mean(), ond_time[32].mean(),
                ond_time.min(axis=1).mean(),
                saving.max(axis=1).sum(),
                saving.median(axis=1).sum(), saving[32].sum(),
                saving.min(axis=1).sum(),
                perf_model.dataFrame.energy.sum()
            ])

        ond_en.plot.bar(figsize=(12, 7))
        if relative:
            plt.plot([-1, 6], [1, 1], '--', color='k', label='proposed')
            plt.plot([-1, 6], [ond_en.mean().mean(),
                               ond_en.mean().mean()],
                     ':',
                     color='k',
                     label='average gain')

        plt.xlabel('Inputs', fontsize=18)
        plt.ylabel('Energy relative' if relative else 'Eenergy (J)',
                   fontsize=18)
        plt.xticks(fontsize=18)
        plt.yticks(fontsize=18)
        plt.title(title, fontsize=22)
        plt.legend(loc='center right', bbox_to_anchor=(1.2, 0.55), fontsize=12)
        plt.tight_layout()
        plt.savefig('fotos/relative/%s.png' % dvfs)
        # plt.show()

    if relative and not proposed_bar:
        df = pd.DataFrame(row,
                          columns=[
                              'app', 'max_en', 'mean_en', '32_en', 'min_en',
                              'max_time', 'mean_time', '32_time', 'min_time',
                              'max_save', 'median_save', '32_save', 'min_save',
                              'train_energy'
                          ])
        df[[
            'max_en', 'mean_en', '32_en', 'min_en', 'max_time', 'mean_time',
            '32_time', 'min_time'
        ]] -= 1
        df[[
            'max_en', 'mean_en', '32_en', 'min_en', 'max_time', 'mean_time',
            '32_time', 'min_time'
        ]] *= 100
        df['max_run'] = df['train_energy'] / df['max_save']
        df['median_run'] = df['train_energy'] / df['median_save']
        df['32_run'] = df['train_energy'] / df['32_save']
        df['min_run'] = df['train_energy'] / df['min_save']

        df = df.sort_values('32_en', ascending=False)
        df = pd.concat((df,
                        pd.DataFrame([['mean'] + list(df.mean().values)],
                                     columns=df.columns)))
        df.to_csv('tables/relative.csv')
        print(df)
Ejemplo n.º 7
0
    for r in str_range.split(';'):
        sr = r.split(',')
        if len(sr) >= 2:
            start = float(sr[0])
            stop = float(sr[1])
            if len(sr) == 3:
                step = float(sr[2])
            else:
                step = 1.0
            _range += list(np.arange(start, stop, step))
        elif len(sr) > 0:
            _range += list([float(sr[0])])
    return _range


pw_model = powerModel(args.path_power)
perf_model = performanceModel(args.path_dataframe, args.path_svr)
en_model = energyModel(pw_model,
                       perf_model,
                       thr_range_=get_range(args.thrs),
                       freq_range_=get_range(args.freqs))
df = perf_model.dataFrame.sort_values(['freq', 'thr'])
df_pred = en_model.dataFrame.sort_values(['freq', 'thr'])

print(en_model.minimalEnergy())


def update_data(val):
    d = int(val)
    plotData.setProps(xlabel='Frequencies (GHz)',
                      ylabel='Active threads',
Ejemplo n.º 8
0
from energyOptimal.powerModel import powerModel
from energyOptimal import plotData
import numpy as np
import pandas as pd

pw_model_full = powerModel(filename='data/ipmi_2-32_cpuload.pw')
print("Percetage error pw_mode full: {}".format(pw_model_full.error()))

thrs_filter = [[2, 32], [2, 16, 32], [2, 8, 16, 32], [2, 8, 16, 24, 32]]

freq_filter = [
    [1.2, 2.2],
    [1.2, 1.7, 2.2],
    [1.2, 1.5, 1.7, 2.2],
    [1.2, 1.5, 1.7, 2.0, 2.2],
]

table = []
for freq in freq_filter:
    for thr in thrs_filter:
        n_points = len(freq) * len(thr)

        print("points {} freqs {} thrs {}".format(n_points, freq, thr))

        pw_model = powerModel()
        pw_model.loadData(filename='data/power_model/ipmi_2-32_cpuload.pkl',
                          freqs_filter=freq,
                          thrs_filter=thr)
        pw_model.fit()

        f_est, p_est = pw_model_full.frequencies, pw_model_full.threads