common.py
4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import os, sys, argparse
import numpy
import matplotlib.pyplot as plt
import json
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.patches import Rectangle
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from sets import Set
rc('font',**{'family':'serif','serif':['Times'], 'size': 9})
rc('text', usetex=True)
legend_size = 8
text_size = 9
def setup_parser():
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input-dir', action="store", default="data/496", help='Input data path')
parser.add_argument('-o', '--output-dir', action="store", default="plots/496", help='Output plots path')
parser.add_argument('-f', '--full_settings', action="store_true", default=True, help = 'all 496 steps')
parser.add_argument('--cpufreqs', action="store", type=str, help='comma separated cpu frequencies')
parser.add_argument('--memfreqs', action="store", type=str, help='comma separated mem frequencies')
parser.add_argument('--inefficiency', action='store', type=str, default=[x/10.0 for x in range(10, 21)], help='Inefficiencies')
return parser
def get_benchmarks(args):
if args.full_settings:
benchmarks=['bzip2', 'gcc','gobmk','lbm','libquantum','milc']
else:
benchmarks=['astar','bzip2','dealII','gcc','gobmk','h264ref','hmmer','lbm','libquantum','mcf','milc','namd','omnetpp','perlbench','povray','sjeng','soplex','specrand998','specrand999','xalancbmk'] # removed sphinx as it has only one sample
# benchmarks=['astar','bzip2','dealII','gcc','gobmk','h264ref','hmmer','lbm','libquantum','mcf','milc','namd','omnetpp','perlbench','povray','sjeng','soplex','specrand998','specrand999','sphinx','xalancbmk']
labels = list(benchmarks)
labels = list([x.replace('libquantum', 'libq.') for x in labels])
return benchmarks, labels
def get_cpu_freq_plot_list(args):
if args.full_settings:
return [int(v)/1000 for v in range(100000, 1000001, 90000)]
else:
return [int(v)/1000 for v in range(100000, 1000001, 100000)]
def get_mem_freq_plot_list(args):
if args.full_settings:
return [int(v)/1000 for v in range(200000, 800001, 40000)]
else:
return [int(v)/1000 for v in range(200000, 800001, 100000)]
def get_plot():
return plt.figure(figsize=(6, 2.5)).add_subplot('111')
def get_mul_ineffs():
return [1, 1.3, 1.6, 3.0]
#def save_plot(ax, outputf):
# plt.tight_layout(pad=-1, w_pad=-1, h_pad=-1)
# plt.savefig("%s.pdf" % (outputf), bbox_inches='tight')
def save_plot(ax, outputf, **kwargs):
plt.savefig("%s.pdf" % (outputf), bbox_inches='tight', **kwargs)
plt.close()
def get_cpi(bmark, dir_path):
stats_file = os.path.join(os.path.join(dir_path, "cpi_mpki_data"), "%s_1000000_800000.dat" % (bmark))
cpi = []
with open(stats_file, "r") as f:
for line in f:
stat = json.loads(line)
instructions = stat["cpu_instruction_count"]
cycles = stat["cpu_busy_cycles"] + \
stat["cpu_quiesce_time_ns"] / 1000 + \
stat["cpu_dram_stall_time_ns"] / 1000 + \
stat["cpu_l1l2_stall_cycles"]
cpi.append( float(cycles) / instructions)
return cpi
def get_mpki(bmark, dir_path):
stats_file = os.path.join(os.path.join(dir_path, "cpi_mpki_data"), "%s_1000000_800000.dat" % (bmark))
mpki = []
with open(stats_file, "r") as f:
for line in f:
stat = json.loads(line)
instructions = stat["cpu_instruction_count"]
misses = stat["mem_read_count"]
mpki.append( float(misses * 1000) / instructions)
return mpki
def parse(argv, full_settings=False):
parser = setup_parser()
args = parser.parse_args(argv[1:])
if args.cpufreqs:
args.cpufreqs = [int(v) for v in args.cpufreqs.split(',')]
else:
#cpu_freq_list = [int(v) for v in range(100000, 1000001, 100000)]
if args.full_settings or full_settings:
args.cpufreqs = [100000, 130005, 160000, 190006, 220022, 250000, 280034, 324992, 340020, 385060, 400000, 445038, 475059, 505051, 520021, 550055, 580046, 610128, 654879, 684932, 714706, 745156, 775194, 805153, 834725, 850340, 880282, 925069, 955110, 985222, 1000000]
else:
args.cpufreqs = [100000, 205002, 309981, 400000, 505051, 610128, 714796, 805153, 909918, 1000000]
if args.memfreqs:
args.memfreqs = [int(v) for v in args.memfreqs.split(',')]
else:
if args.full_settings or full_settings:
args.memfreqs = [200000, 240000, 280000, 320000, 360000, 400000, 440000, 480000, 520000, 560000, 600000, 640000, 680000, 720000, 760000, 800000]
else:
args.memfreqs = [200000, 300030, 400000, 500000, 610128, 710227, 800000]
if isinstance(args.inefficiency, str):
args.inefficiency = [float(x) for x in args.inefficiency.split(',')]
return args