in visualization_utils/plotting-ying.py [0:0]
def plot_codesign_nav_breakdown_cross_workload(input_dir_names, input_all_res_column_name_number):
trueNum = input_all_res_column_name_number["move validity"]
# 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, input_all_res_column_name_number)
"""
Ying: the following lines are added to make the names clearer in the plottings
"""
if experiment_name[0] == 'a':
experiment_name = "Audio"
elif experiment_name[0] == 'h':
experiment_name = "CAVA"
elif experiment_name[0] == 'e':
experiment_name = "ED"
"""
Ying: adding finished
"""
experiment_names.append(experiment_name)
axis_font = {'size': '25'}
fontSize = 25
column_name_list = ["transformation_metric", "transformation_block_type", "move name", "comm_comp", "architectural principle", "high level optimization name", "exact optimization name", "neighbouring design space size"]
#column_name_list = ["transformation_metric", "move name"]#, "comm_comp", "architectural principle", "high level optimization name", "exact optimization name", "neighbouring design space size"]
#column_name = "move name"
# initialize the dictionary
column_column_value_experiment_frequency_dict = {}
for column_name in column_name_list:
column_value_experiment_frequency_dict = {}
# get all possible the values of interest
all_values = get_all_col_values_of_a_folders(input_dir_names, input_all_res_column_name_number, column_name)
columne_number = all_res_column_name_number[column_name]
for column in all_values:
"""
Ying: the following lines are added for "IC", "Mem", and "PE"
"""
if column_name == "transformation_block_type":
if column == "ic":
column = "IC"
elif column == "mem":
column = "Mem"
elif column == "pe":
column = "PE"
if column_name == "architectural principle":
if column == "identity" or column == "spatial_locality":
continue
elif column == "task_level_parallelism":
column = "TLP"
elif column == "loop_level_parallelism":
column = "LLP"
"""
Ying: adding finished
"""
column_value_experiment_frequency_dict[column] = {}
# get all the data
for file_full_addr in file_full_addr_list:
with open(file_full_addr, newline='') as csvfile:
resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
experiment_name = get_experiments_name( file_full_addr, input_all_res_column_name_number)
"""
Ying: the following lines are added to make the names clearer in the plottings
"""
if experiment_name[0] == 'a':
experiment_name = "Audio"
elif experiment_name[0] == 'h':
experiment_name = "CAVA"
elif experiment_name[0] == 'e':
experiment_name = "ED"
"""
Ying: adding finished
"""
for column_value in all_values:
"""
Ying: the following lines are added for "IC", "Mem", and "PE"
"""
if column_name == "transformation_block_type":
if column_value == "ic":
column_value = "IC"
elif column_value == "mem":
column_value = "Mem"
elif column_value == "pe":
column_value = "PE"
if column_name == "architectural principle":
if column_value == "identity" or column_value == "spatial_locality":
continue
elif column_value == "task_level_parallelism":
column_value = "TLP"
elif column_value == "loop_level_parallelism":
column_value = "LLP"
"""
Ying: adding finished
"""
column_value_experiment_frequency_dict[column_value][experiment_name] = 0
for i, row in enumerate(resultReader):
#if row[trueNum] != "True":
# continue
if i > 1:
try:
# the following for workload awareness
#if row[all_res_column_name_number["move name"]] == "identity":
# continue
#if row[all_res_column_name_number["architectural principle"]] == "spatial_locality":
# continue
col_value = row[columne_number]
col_values = col_value.split(";")
for col_val in col_values:
if "=" in col_val:
val_splitted = col_val.split("=")
column_value_experiment_frequency_dict[val_splitted[0]][experiment_name] += float(val_splitted[1])
else:
"""
Ying: the following lines are added for "IC", "Mem", and "PE"
"""
if column_name == "transformation_block_type":
if col_val == "ic":
col_val = "IC"
elif col_val == "mem":
col_val = "Mem"
elif col_val == "pe":
col_val = "PE"
if column_name == "architectural principle":
if col_val == "identity" or col_val == "spatial_locality":
continue
elif col_val == "task_level_parallelism":
col_val = "TLP"
elif col_val == "loop_level_parallelism":
col_val = "LLP"
"""
Ying: adding finished
"""
column_value_experiment_frequency_dict[col_val][experiment_name] += 1
except:
print("what")
total_cnt = {}
for el in column_value_experiment_frequency_dict.values():
for exp, values in el.items():
if exp not in total_cnt.keys():
total_cnt[exp] = 0
total_cnt[exp] += values
for col_val, exp_vals in column_value_experiment_frequency_dict.items():
for exp, values in exp_vals.items():
column_value_experiment_frequency_dict[col_val][exp] = column_value_experiment_frequency_dict[col_val][exp]
if column_name != "architectural principle" and column_name != "comm_comp" and total_cnt[exp] != 0: # Ying: add to get rid of normalization for the two plottings
column_value_experiment_frequency_dict[col_val][exp] /= total_cnt[exp] # normalize
# prepare for plotting and plot
# plt.figure(figsize=(6, 6))
index = experiment_names
plotdata = pd.DataFrame(column_value_experiment_frequency_dict, index=index)
plotdata.plot(kind='bar', stacked=True, figsize=(8, 8))
plt.rc('font', **axis_font)
plt.xlabel("Workloads", **axis_font)
# plt.ylabel(column_name, **axis_font) # Ying: replace with the following lines
"""
Ying: set the ylabel acordingly
"""
if column_name != "comm_comp":
if column_name == "architectural principle" or column_name == "comm_comp":
plt.ylabel("Iteration Count", **axis_font)
else:
plt.ylabel("Normalized Iteration Portion", **axis_font)
"""
Ying: adding finished
"""
plt.xticks(fontsize=fontSize, rotation=0) # Ying: the original one was 45)
plt.yticks(fontsize=fontSize)
# plt.title("experiment vs " + column_name, **axis_font) # Ying: comment it out as discussed
# plt.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=fontSize) # Ying: replaced with the following line
plt.legend(bbox_to_anchor=(0.5, 1.15), loc='upper center', fontsize=fontSize, ncol=3)
# 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/nav_breakdown")
if not os.path.exists(output_dir):
os.makedirs(output_dir)
plt.tight_layout()
plt.savefig(os.path.join(output_dir,'_'.join(column_name.split(" "))+".png"), bbox_inches='tight')
# plt.show()
plt.close('all')
column_column_value_experiment_frequency_dict[column_name] = copy.deepcopy(column_value_experiment_frequency_dict)
"""
# multi-stack plot here
index = experiment_names
plotdata = pd.DataFrame(column_column_value_experiment_frequency_dict, index=index)
df_g = plotdata.groupby(["transformation_metric", "move name"])
plotdata.plot(kind='bar', stacked=True, figsize=(12, 10))
plt.rc('font', **axis_font)
plt.xlabel("experiments", **axis_font)
plt.ylabel(column_name, **axis_font)
plt.xticks(fontsize=fontSize, rotation=45)
plt.yticks(fontsize=fontSize)
plt.title("experiment vs " + column_name, **axis_font)
plt.legend(bbox_to_anchor=(1, 1), loc='upper left', 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/nav_breakdown")
if not os.path.exists(output_dir):
os.makedirs(output_dir)
plt.tight_layout()
plt.savefig(os.path.join(output_dir,'column____'.join(column_name.split(" "))+".png"), bbox_inches='tight')
# plt.show()
plt.close('all')
"""
return column_column_value_experiment_frequency_dict