in visualization_utils/plotting.py [0:0]
def plot_convergence_per_workloads_for_paper(input_dir_names, res_column_name_number):
budget_alpha = 1
non_optimization_alpha = .1
budget_marker = "_"
regu_marker = "."
budget_marker_size = 4
regu_marker_size = 1
#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
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)
experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
experiment_names.append(experiment_name)
#color_values = ["r","b","y","black","brown","purple"]
color_values = {}
color_values["latency_edge_detection"] = color_values["best_des_so_far_latency_edge_detection"] =color_values["latency_budget_edge_detection"] = matplotlib.colors.to_rgba("red")
color_values["latency_hpvm_cava"] =color_values["best_des_so_far_latency_hpvm_cava"] = color_values["latency_budget_hpvm_cava"] = matplotlib.colors.to_rgba("magenta")
color_values["latency_audio_decoder"] = color_values["best_des_so_far_latency_audio_decoder"] =color_values["latency_budget_audio_decoder"] = matplotlib.colors.to_rgba("orange")
color_values["area_non_dram"] =color_values["best_des_so_far_area_non_dram"] = color_values["area_budget"] = matplotlib.colors.to_rgba("forestgreen")
color_values["brown"] = (1,0,0,1)
color_values["power"] = color_values["best_des_so_far_power"] =color_values["power_budget"] = matplotlib.colors.to_rgba("mediumblue")
color_values["latency_budget_edge_detection"] = matplotlib.colors.to_rgba("white")
color_values["latency_budget_hpvm_cava"] = matplotlib.colors.to_rgba("white")
color_values["latency_budget_audio_decoder"] = matplotlib.colors.to_rgba("white")
color_values["area_budget"] = matplotlib.colors.to_rgba("white")
color_values["power_budget"] = matplotlib.colors.to_rgba("white")
column_name_color_val_dict = {"best_des_so_far_power":"purple", "power_budget":"purple","best_des_so_far_area_non_dram":"blue", "area_budget":"blue",
"latency_budget_hpvm_cava":"orange", "latency_budget_audio_decoder":"yellow", "latency_budget_edge_detection":"red",
"best_des_so_far_latency_hpvm_cava":"orange", "best_des_so_far_latency_audio_decoder": "yellow","best_des_so_far_latency_edge_detection": "red",
"latency_budget":"white"
}
"""
column_name_color_val_dict = {"power":"purple", "power_budget":"purple","area_non_dram":"blue", "area_budget":"blue",
"latency_budget_hpvm_cava":"orange", "latency_budget_audio_decoder":"yellow", "latency_budget_edge_detection":"red",
"latency_hpvm_cava":"orange", "latency_audio_decoder": "yellow","latency_edge_detection": "red",
"latency_budget":"white"
}
"""
axis_font = {'size': '20'}
fontSize = 20
x_column_name = "iteration cnt"
#y_column_name_list = ["power", "area_non_dram", "latency", "latency_budget", "power_budget","area_budget"]
y_column_name_list = ["power", "area_non_dram", "latency"]
experiment_column_value = {}
for file_full_addr in file_full_addr_list:
experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
experiment_column_value[experiment_name] = {}
for y_column_name in y_column_name_list:
if "budget" in y_column_name :
prefix = ""
else:
prefix = "best_des_so_far_"
y_column_name = prefix+y_column_name
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"]
if not y_column_name == prefix+"latency":
experiment_column_value[experiment_name][y_column_name] = []
with open(file_full_addr, newline='') as csvfile:
resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
for i, row in enumerate(resultReader):
if i > 1:
if row[trueNum] == "FALSE" or row[move_name_number]=="identity":
continue
metric_chosen = row[res_column_name_number["transformation_metric"]]
workload_chosen = row[res_column_name_number["workload"]]
if "budget" in y_column_name:
alpha = budget_alpha
elif metric_chosen in y_column_name :
alpha = 1
else:
alpha = non_optimization_alpha
col_value = row[y_column_number]
if ";" in col_value:
col_value = col_value[:-1]
col_values = col_value.split(";")
for col_val in col_values:
if "=" in col_val:
if "budget" in y_column_name:
alpha = budget_alpha
elif workload_chosen in col_val:
alpha = 1
else:
alpha = non_optimization_alpha
val_splitted = col_val.split("=")
value_to_add = (float(row[x_column_number]), (val_splitted[0], val_splitted[1]), alpha)
else:
value_to_add = (float(row[x_column_number]), col_val, alpha)
if y_column_name in [prefix+"latency", prefix+"latency_budget"] :
new_tuple = (value_to_add[0], 1000*float(value_to_add[1][1]), value_to_add[2])
if y_column_name+"_"+value_to_add[1][0] not in experiment_column_value[experiment_name].keys():
experiment_column_value[experiment_name][y_column_name + "_" + value_to_add[1][0]] = []
experiment_column_value[experiment_name][y_column_name+"_"+value_to_add[1][0]].append(new_tuple)
if y_column_name in [prefix+"power", prefix+"power_budget"]:
new_tuple = (value_to_add[0], float(value_to_add[1])*1000, value_to_add[2])
experiment_column_value[experiment_name][y_column_name].append(new_tuple)
elif y_column_name in [prefix+"area_non_dram", prefix+"area_budget"]:
new_tuple = (value_to_add[0], float(value_to_add[1]) * 1000000, value_to_add[2])
experiment_column_value[experiment_name][y_column_name].append(new_tuple)
# prepare for plotting and plot
fig = plt.figure(figsize=(15, 8))
ax = fig.add_subplot(111)
for column, values in experiment_column_value[experiment_name].items():
print(column)
if "budget" in column:
marker = budget_marker
marker_size = budget_marker_size
else:
marker = regu_marker
marker_size =regu_marker_size
x_values = [el[0] for el in values]
y_values = [el[1] for el in values]
colors = []
for el in values:
color_ = list(color_values[column])
color_[-1] = el[2]
colors.append(tuple(color_))
#alphas = [el[2] for el in values]
ax.set_yscale('log')
if "budget" in column:
marker = '_'
#alpha_ = .3
else:
marker = "x"
#alpha_ = 1
for i,x in enumerate(x_values):
ax.plot(x_values[i], y_values[i], label=column, color=colors[i], marker=marker, markersize=marker_size)
#ax.set_title("experiment vs system implicaction")
ax.set_xlabel(x_column_name, fontsize=fontSize)
y_axis_name = "_".join(list(experiment_column_value[experiment_name].keys()))
ax.set_ylabel(y_axis_name, fontsize=fontSize)
ax.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=fontSize)
plt.tight_layout()
# dump in the top folder
output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
output_dir = os.path.join(output_base_dir, "single_workload/convergence")
if not os.path.exists(output_dir):
os.mkdir(output_dir)
fig.savefig(os.path.join(output_dir,experiment_name+"_convergence.png"))
# plt.show()
plt.close('all')