in DSE_utils/hill_climbing.py [0:0]
def log_data(self, this_itr_ex_sim_dp_dict):
ctr = len(self.log_data_list)
for sim_dp in this_itr_ex_sim_dp_dict.values():
sim_dp.add_exploration_and_simulation_approximate_time(self.neighbour_selection_time/len(list(this_itr_ex_sim_dp_dict.keys())))
ma = sim_dp.get_move_applied() # move applied
if not ma == None:
sorted_metrics = self.convert_tuple_list_to_parsable_csv(
[(el, val) for el, val in ma.sorted_metrics.items()])
metric = ma.get_metric()
transformation_name = ma.get_transformation_name()
task_name = ma.get_kernel_ref().get_task_name()
block_type = ma.get_block_ref().type
dir = ma.get_dir()
generation_time = ma.get_generation_time()
sorted_blocks = self.convert_tuple_list_to_parsable_csv(
[(el.get_generic_instance_name(), val) for el, val in ma.sorted_blocks])
sorted_kernels = self.convert_tuple_list_to_parsable_csv(
[(el.get_task_name(), val) for el, val in ma.sorted_kernels.items()])
blk_instance_name = ma.get_block_ref().get_generic_instance_name()
blk_type = ma.get_block_ref().type
comm_comp = (ma.get_system_improvement_log())["comm_comp"]
high_level_optimization = (ma.get_system_improvement_log())["high_level_optimization"]
exact_optimization = (ma.get_system_improvement_log())["exact_optimization"]
architectural_principle = (ma.get_system_improvement_log())["architectural_principle"]
block_selection_time = ma.get_logs("block_selection_time")
kernel_selection_time = ma.get_logs("kernel_selection_time")
transformation_selection_time = ma.get_logs("transformation_selection_time")
pickling_time = ma.get_logs("pickling_time")
metric_selection_time = ma.get_logs("metric_selection_time")
dir_selection_time = ma.get_logs("dir_selection_time")
move_validity = ma.is_valid()
ref_des_dist_to_goal_all = ma.get_logs("ref_des_dist_to_goal_all")
ref_des_dist_to_goal_non_cost = ma.get_logs("ref_des_dist_to_goal_non_cost")
neighbouring_design_space_size = self.convert_dictionary_to_parsable_csv_with_semi_column(ma.get_design_space_size())
workload = ma.get_logs("workload")
else: # happens at the very fist iteration
pickling_time = 0
sorted_metrics = ""
metric = ""
transformation_name = ""
task_name = ""
block_type = ""
dir = ""
generation_time = ''
sorted_blocks = ''
sorted_kernels = {}
blk_instance_name = ''
blk_type = ''
comm_comp = ""
high_level_optimization = ""
exact_optimization = ""
architectural_principle = ""
block_selection_time = ""
kernel_selection_time = ""
metric_selection_time = ""
dir_selection_time = ""
transformation_selection_time = ""
move_validity = ""
ref_des_dist_to_goal_all = ""
ref_des_dist_to_goal_non_cost = ""
neighbouring_design_space_size = ""
workload = ""
sub_block_area_break_down = self.convert_dictionary_to_parsable_csv_with_underline(sim_dp.dp_stats.SOC_area_subtype_dict)
block_area_break_down = self.convert_dictionary_to_parsable_csv_with_underline(sim_dp.dp_stats.SOC_area_dict)
routing_complexity = sim_dp.dp_rep.get_hardware_graph().get_routing_complexity()
area_non_dram = sim_dp.dp_stats.get_system_complex_area_stacked_dram()["non_dram"]
area_dram = sim_dp.dp_stats.get_system_complex_area_stacked_dram()["dram"]
simple_topology = sim_dp.dp_rep.get_hardware_graph().get_simplified_topology_code()
channel_cnt = sim_dp.dp_rep.get_hardware_graph().get_number_of_channels()
blk_cnt = sum([int(el) for el in simple_topology.split("_")])
bus_cnt = [int(el) for el in simple_topology.split("_")][0]
mem_cnt = [int(el) for el in simple_topology.split("_")][1]
pe_cnt = [int(el) for el in simple_topology.split("_")][2]
task_cnt = len(list(sim_dp.dp_rep.krnl_phase_present.keys()))
#itr_depth_multiplied = sim_dp.dp_rep.get_iteration_number() * config.SA_depth + sim_dp.dp_rep.get_depth_number()
self.total_iteration_cnt = ctr
data = {
"data_number": ctr,
"iteration cnt" : self.total_iteration_cnt,
"exploration_plus_simulation_time" : sim_dp.get_exploration_and_simulation_approximate_time(),
"observed population number" : sim_dp.dp_rep.get_population_observed_number(),
"SA_total_depth": str(config.SA_depth),
"transformation_selection_mode": str(config.transformation_selection_mode),
"workload": workload,
"population generation cnt": sim_dp.dp_rep.get_population_generation_cnt(),
"simulation time" : sim_dp.dp_rep.get_simulation_time(),
"transformation generation time" : generation_time,
"metric selection time" :metric_selection_time,
"dir selection time" :dir_selection_time,
"kernel selection time" :kernel_selection_time,
"block selection time" : block_selection_time,
"transformation selection time" : transformation_selection_time,
"design duplication time": pickling_time,
"neighbour selection time": self.neighbour_selection_time,
"dist_to_goal_all" : sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power", "cost"],
mode="eliminate"),
"dist_to_goal_non_cost" : sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power"],
mode="eliminate"),
"ref_des_dist_to_goal_all" : ref_des_dist_to_goal_all,
"ref_des_dist_to_goal_non_cost" : ref_des_dist_to_goal_non_cost,
"best_des_so_far_dist_to_goal_non_cost": self.so_far_best_sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power"],
mode="eliminate"),
"best_des_so_far_dist_to_goal_all": self.so_far_best_sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power"],
mode="eliminate"),
"best_des_so_far_area_non_dram": self.so_far_best_sim_dp.dp_stats.get_system_complex_area_stacked_dram()["non_dram"],
"best_des_so_far_area_dram": self.so_far_best_sim_dp.dp_stats.get_system_complex_area_stacked_dram()["dram"],
#"area_breakdown_subtype":self.convert_dictionary_to_parsable_csv_with_semi_column(sim_dp.dp_stats.SOC_area_subtype_dict.keys()),
#"best_des_so_far_area_breakdown_subtype":self.so_far_best_sim_dp.dp_stats.convert_dictionary_to_parsable_csv_with_semi_column(sim_dp.dp_stats.SOC_area_subtype_dict.keys()),
"system block count" : blk_cnt,
"system PE count" : pe_cnt,
"system bus count" : bus_cnt,
"system memory count" : mem_cnt,
"routing complexity" : routing_complexity,
"workload_set" : '_'.join(sim_dp.database.db_input.workload_tasks.keys()),
"block_impact_sorted" : sorted_blocks,
"kernel_impact_sorted" : sorted_kernels,
"metric_impact_sorted" : sorted_metrics,
"transformation_metric" : metric,
"move validity" : move_validity,
"move name" : transformation_name,
"transformation_kernel" : task_name,
"transformation_block_name" : blk_instance_name,
"transformation_block_type" : blk_type,
"transformation_dir" : dir,
"comm_comp" : comm_comp,
"high level optimization name" : high_level_optimization,
"exact optimization name": exact_optimization,
"architectural principle" : architectural_principle,
"neighbouring design space size" : neighbouring_design_space_size,
"block_area_break_down":block_area_break_down,
"sub_block_area_break_down":sub_block_area_break_down,
"task_cnt": task_cnt,
"channel_cnt":channel_cnt,
"area_dram":area_dram,
"area_non_dram":area_non_dram
}
for metric in config.all_metrics:
# convert dictionary to a parsable data
data_ = sim_dp.dp_stats.get_system_complex_metric(metric)
if isinstance(data_, dict):
data__ =self.convert_dictionary_to_parsable_csv_with_semi_column(data_)
else:
data__ = data_
data[metric] = data__
if metric in sim_dp.database.db_input.get_budget_dict("glass").keys():
# convert dictionary to a parsable rsult
data_ = sim_dp.database.db_input.get_budget_dict("glass")[metric]
if isinstance(data_, dict):
data__ = self.convert_dictionary_to_parsable_csv_with_semi_column(data_)
else:
data__ = data_
data[metric +"_budget"] = data__
for metric in config.all_metrics:
# convert dictionary to a parsable data
data_ = self.so_far_best_sim_dp.dp_stats.get_system_complex_metric(metric)
if isinstance(data_, dict):
data__ = self.convert_dictionary_to_parsable_csv_with_semi_column(data_)
else:
data__ = data_
data["best_des_so_far_"+metric] = data__
ctr +=1
self.log_data_list.append(data)