in design_utils/design.py [0:0]
def get_compute_system_attr(self):
ips = [el for el in self.dp_rep.get_blocks() if el.subtype == "ip"]
gpps = [el for el in self.dp_rep.get_blocks() if el.subtype == "gpp"]
# get frequency data
ips_freqs = [mem.get_block_freq() for mem in ips]
gpp_freqs = [mem.get_block_freq() for mem in gpps]
if len(ips_freqs) == 0:
ips_avg_freq = 0
else:
ips_avg_freq= sum(ips_freqs)/max(len(ips_freqs),1)
loop_itr_ratio = []
for ip in ips:
loop_itr_ratio.append(ip.get_loop_itr_cnt()/ip.get_loop_max_possible_itr_cnt())
if len(ips) == 0:
loop_itr_ratio_avg = 0
else:
loop_itr_ratio_avg = st.mean(loop_itr_ratio)
if len(ips_freqs) in [0,1]:
ips_freq_std = 0
ips_freq_coeff_var = 0
loop_itr_ratio_std = 0
loop_itr_ratio_var = 0
else:
ips_freq_std = st.stdev(ips_freqs)
ips_freq_coeff_var = st.stdev(ips_freqs)/st.mean(ips_freqs)
loop_itr_ratio_std = st.stdev(loop_itr_ratio)
loop_itr_ratio_var = st.stdev(loop_itr_ratio)/st.mean(loop_itr_ratio)
if len(gpp_freqs) == 0:
gpps_avg_freq = 0
else:
gpps_avg_freq= sum(gpp_freqs)/max(len(gpp_freqs),1)
if len(gpp_freqs + ips_freqs) in [0,1]:
pes_freq_std = 0
pes_freq_coeff_var = 0
else:
pes_freq_std = st.stdev(ips_freqs + gpp_freqs)
pes_freq_coeff_var = st.stdev(ips_freqs + gpp_freqs) / st.mean(ips_freqs + gpp_freqs)
# get area data
ips_area = [mem.get_area() for mem in ips]
gpp_area = [mem.get_area() for mem in gpps]
if len(ips_area) == 0:
ips_total_area = 0
else:
ips_total_area = sum(ips_area)
if len(ips_area) in [0,1]:
ips_area_std = 0
ips_area_coeff_var = 0
else:
ips_area_std = st.stdev(ips_area)
ips_area_coeff_var = st.stdev(ips_area) / st.mean(ips_area)
if len(gpp_area) == 0:
gpps_total_area = 0
else:
gpps_total_area = sum(gpp_area)
if len(ips_area + gpp_area) in [0,1]:
pes_area_std = 0
pes_area_coeff_var = 0
else:
pes_area_std = st.stdev(ips_area+gpp_area)
pes_area_coeff_var = st.stdev(ips_area+gpp_area)/st.mean(ips_area+gpp_area)
phase_accelerator_parallelism = {}
for phase, krnls in self.dp_rep.phase_krnl_present.items():
accelerators_in_parallel = []
for krnl in krnls:
accelerators_in_parallel.extend([blk for blk in krnl.get_blocks() if blk.subtype == "ip"])
if len(accelerators_in_parallel) == 0:
continue
phase_accelerator_parallelism[phase] = len(accelerators_in_parallel)
if len(phase_accelerator_parallelism.keys()) == 0:
avg_accel_parallelism = 0
max_accel_parallelism = 0
else:
avg_accel_parallelism = sum(list(phase_accelerator_parallelism.values()))/len(list(phase_accelerator_parallelism.values()))
max_accel_parallelism = max(list(phase_accelerator_parallelism.values()))
phase_gpp_parallelism = {}
for phase, krnls in self.dp_rep.phase_krnl_present.items():
gpps_in_parallel = []
for krnl in krnls:
gpps_in_parallel.extend([blk for blk in krnl.get_blocks() if blk.subtype == "gpp"])
if len(gpps_in_parallel) == 0:
continue
phase_gpp_parallelism[phase] = len(gpps_in_parallel)
if len(phase_gpp_parallelism.keys()) == 0:
avg_gpp_parallelism = 0
max_gpp_parallelism = 0
else:
avg_gpp_parallelism = sum(list(phase_gpp_parallelism.values()))/len(list(phase_gpp_parallelism.values()))
max_gpp_parallelism = max(list(phase_gpp_parallelism.values()))
buses = [el for el in self.dp_rep.get_blocks() if el.subtype == "ic"]
bus_neigh_count = []
for bus in buses:
pe_neighs = [neigh for neigh in bus.get_neighs() if neigh.type == "pe"]
bus_neigh_count.append(len(pe_neighs))
cluster_pe_cnt_avg = st.mean(bus_neigh_count)
if len(bus_neigh_count) in [0,1]:
cluster_pe_cnt_std = 0
cluster_pe_cnt_coeff_var = 0
else:
cluster_pe_cnt_std = st.stdev(bus_neigh_count)
cluster_pe_cnt_coeff_var = st.stdev(bus_neigh_count)/st.mean(bus_neigh_count)
return {
"avg_accel_parallelism": avg_accel_parallelism, "max_accel_parallelism":max_accel_parallelism,
"avg_gpp_parallelism": avg_gpp_parallelism, "max_gpp_parallelism": max_gpp_parallelism,
"ip_cnt":len(ips), "gpp_cnt": len(gpps),
"ips_avg_freq": ips_avg_freq, "gpps_avg_freq":gpps_avg_freq,
"ips_freq_std": ips_freq_std, "pes_freq_std": pes_freq_std,
"ips_freq_coeff_var": ips_freq_coeff_var, "pes_freq_coeff_var": pes_freq_coeff_var,
"ips_total_area": ips_total_area, "gpps_total_area":gpps_total_area,
"ips_area_std": ips_area_std, "pes_area_std": pes_area_std,
"ips_area_coeff_var": ips_area_coeff_var, "pes_area_coeff_var": pes_area_coeff_var,
"pe_total_area":ips_total_area+gpps_total_area,
"loop_itr_ratio_avg":loop_itr_ratio_avg,
"loop_itr_ratio_std":loop_itr_ratio_std,
"loop_itr_ratio_var":loop_itr_ratio_var,
"cluster_pe_cnt_avg":cluster_pe_cnt_avg,
"cluster_pe_cnt_std":cluster_pe_cnt_std,
"cluster_pe_cnt_coeff_var":cluster_pe_cnt_coeff_var
}