in visualization_utils/plotting.py [0:0]
def plot_codesign_rate_efficacy_cross_workloads_updated(input_dir_names, res_column_name_number):
#itrColNum = all_res_column_name_number["iteration cnt"]
#distColNum = all_res_column_name_number["dist_to_goal_non_cost"]
trueNum = all_res_column_name_number["move validity"]
move_name_number = all_res_column_name_number["move name"]
# experiment_names
file_full_addr_list = []
for dir_name in input_dir_names:
file_full_addr = os.path.join(dir_name, "result_summary/FARSI_simple_run_0_1_all_reults.csv")
file_full_addr_list.append(file_full_addr)
axis_font = {'fontname': 'Arial', 'size': '4'}
x_column_name = "iteration cnt"
#y_column_name_list = ["high level optimization name", "exact optimization name", "architectural principle", "comm_comp"]
y_column_name_list = ["exact optimization name", "architectural principle", "comm_comp", "workload"]
#y_column_name_list = ["high level optimization name", "exact optimization name", "architectural principle", "comm_comp"]
column_co_design_cnt = {}
column_non_co_design_cnt = {}
column_co_design_rate = {}
column_non_co_design_rate = {}
column_co_design_efficacy_avg = {}
column_non_co_design_efficacy_rate = {}
column_non_co_design_efficacy = {}
column_co_design_dist= {}
column_co_design_dist_avg= {}
column_co_design_improvement = {}
experiment_name_list = []
last_col_val = ""
for file_full_addr in file_full_addr_list:
experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
experiment_name_list.append(experiment_name)
column_co_design_dist_avg[experiment_name] = {}
column_co_design_efficacy_avg[experiment_name] = {}
column_co_design_cnt = {}
for y_column_name in y_column_name_list:
y_column_number = res_column_name_number[y_column_name]
x_column_number = res_column_name_number[x_column_name]
dis_to_goal_column_number = res_column_name_number["dist_to_goal_non_cost"]
ref_des_dis_to_goal_column_number = res_column_name_number["ref_des_dist_to_goal_non_cost"]
column_co_design_cnt[y_column_name] = []
column_non_co_design_cnt[y_column_name] = []
column_non_co_design_efficacy[y_column_name] = []
column_co_design_dist[y_column_name] = []
column_co_design_improvement[y_column_name] = []
column_co_design_rate[y_column_name] = []
all_values = get_all_col_values_of_a_folders(input_dir_names, all_res_column_name_number, y_column_name)
last_row_change = ""
with open(file_full_addr, newline='') as csvfile:
resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
rows = list(resultReader)
for i, row in enumerate(rows):
if i > 1:
last_row = rows[i - 1]
if row[y_column_number] not in all_values or row[move_name_number]=="identity":
continue
col_value = row[y_column_number]
col_values = col_value.split(";")
for idx, col_val in enumerate(col_values):
# only for improvement
if float(row[ref_des_dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]) < 0:
continue
try:
delta_x_column = (float(row[x_column_number]) - float(last_row[x_column_number]))/len(col_values)
except:
pass
delta_improvement = (float(last_row[dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]))/(float(last_row[dis_to_goal_column_number])*len(col_values))
if not col_val == last_col_val and i > 1:
if not last_row_change == "":
distance_from_last_change = float(last_row[x_column_number]) - float(last_row_change[x_column_number]) + idx * delta_x_column
column_co_design_dist[y_column_name].append(distance_from_last_change)
improvement_from_last_change = (float(last_row[dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]))/float(last_row[dis_to_goal_column_number]) + idx *delta_improvement
column_co_design_improvement[y_column_name].append(improvement_from_last_change)
last_row_change = copy.deepcopy(last_row)
last_col_val = col_val
# co_des cnt
# we ignore the first element as the first element distance is always zero
co_design_dist_sum = 0
co_design_efficacy_sum = 0
avg_ctr = 1
co_design_dist_selected = column_co_design_dist[y_column_name]
co_design_improvement_selected = column_co_design_improvement[y_column_name]
for idx,el in enumerate(column_co_design_dist[y_column_name]):
if idx == len(co_design_dist_selected) - 1:
break
co_design_dist_sum += 1/(column_co_design_dist[y_column_name][idx] + column_co_design_dist[y_column_name][idx+1])
co_design_efficacy_sum += (column_co_design_improvement[y_column_name][idx] + column_co_design_improvement[y_column_name][idx+1])
#/(column_co_design_dist[y_column_name][idx] + column_co_design_dist[y_column_name][idx+1])
avg_ctr+=1
column_co_design_improvement = {}
column_co_design_dist_avg[experiment_name][y_column_name]= co_design_dist_sum/avg_ctr
column_co_design_efficacy_avg[experiment_name][y_column_name] = co_design_efficacy_sum/avg_ctr
#result = {"rate":{}, "efficacy":{}}
#rate_column_co_design = {}
plt.figure()
plotdata = pd.DataFrame(column_co_design_dist_avg, index=y_column_name_list)
#plotdata_2 = pd.DataFrame(column_co_design_efficacy_avg, index=y_column_name_list)
fontSize = 10
plotdata.plot(kind='bar', fontsize=fontSize)
#plotdata_2.plot(kind='bar', fontsize=fontSize)
plt.xticks(fontsize=fontSize, rotation=6)
plt.yticks(fontsize=fontSize)
plt.xlabel("co design parameter", fontsize=fontSize)
plt.ylabel("co design distance", fontsize=fontSize)
plt.title("co desgin distance of different parameters", fontsize=fontSize)
# dump in the top folder
output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
output_dir = os.path.join(output_base_dir, "cross_workloads/co_design_rate")
if not os.path.exists(output_dir):
os.makedirs(output_dir)
plt.savefig(os.path.join(output_dir,"_".join(experiment_name_list[0]) +"_"+"co_design_avg_dist"+'_'.join(y_column_name_list)+".png"))
plt.close('all')
plt.figure()
plotdata = pd.DataFrame(column_co_design_efficacy_avg, index=y_column_name_list)
fontSize = 10
plotdata.plot(kind='bar', fontsize=fontSize)
plt.xticks(fontsize=fontSize, rotation=6)
plt.yticks(fontsize=fontSize)
plt.xlabel("co design parameter", fontsize=fontSize)
plt.ylabel("co design dis", fontsize=fontSize)
plt.title("co desgin efficacy of different parameters", fontsize=fontSize)
# dump in the top folder
output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
output_dir = os.path.join(output_base_dir, "cross_workloads/co_design_rate")
if not os.path.exists(output_dir):
os.makedirs(output_dir)
plt.savefig(os.path.join(output_dir,"_".join(experiment_name_list) +"_"+"co_design_efficacy"+'_'.join(y_column_name_list)+".png"))
plt.close('all')