def gaheft_reschedule(wf_added_time): copy_gaheft_schedule = Schedule({node:[item for item in items] for (node, items) in ga_initial_schedule.mapping.items()}) added_time = all_initial_wf_time * wf_added_time mark_finished(copy_gaheft_schedule) gaheft_added = DynamicHeft(added_wf, resource_manager, estimator) gaheft_added.current_time = added_time gaheft_added_schedule = gaheft_added.run(copy_gaheft_schedule) new_ga = GAComputationManager(15, added_wf, resource_manager, estimator) gaheft_added_schedule = new_ga.run(gaheft_added_schedule, added_time, False)[2] mark_finished(gaheft_added_schedule) nodes_seq_validaty = Utility.validateNodesSeq(gaheft_added_schedule) if nodes_seq_validaty is not True: raise Exception("Check for nodes_seq_validaty didn't pass") initial_wf_validaty = Utility.validateParentsAndChildren(gaheft_added_schedule, initial_wf) if initial_wf_validaty is not True: raise Exception("Check for initial_wf_validaty didn't pass") added_wf_validaty = Utility.validateParentsAndChildren(gaheft_added_schedule, added_wf) if added_wf_validaty is not True: raise Exception("Check for added_wf_validaty didn't pass") #print("All Ok!") result = Utility.makespan(gaheft_added_schedule) return result
def gaheft_reschedule(wf_added_time): copy_gaheft_schedule = Schedule({ node: [item for item in items] for (node, items) in ga_initial_schedule.mapping.items() }) added_time = all_initial_wf_time * wf_added_time mark_finished(copy_gaheft_schedule) gaheft_added = DynamicHeft(added_wf, resource_manager, estimator) gaheft_added.current_time = added_time gaheft_added_schedule = gaheft_added.run(copy_gaheft_schedule) new_ga = GAComputationManager(15, added_wf, resource_manager, estimator) gaheft_added_schedule = new_ga.run(gaheft_added_schedule, added_time, False)[2] mark_finished(gaheft_added_schedule) nodes_seq_validaty = Utility.validateNodesSeq(gaheft_added_schedule) if nodes_seq_validaty is not True: raise Exception("Check for nodes_seq_validaty didn't pass") initial_wf_validaty = Utility.validateParentsAndChildren( gaheft_added_schedule, initial_wf) if initial_wf_validaty is not True: raise Exception("Check for initial_wf_validaty didn't pass") added_wf_validaty = Utility.validateParentsAndChildren( gaheft_added_schedule, added_wf) if added_wf_validaty is not True: raise Exception("Check for added_wf_validaty didn't pass") #print("All Ok!") result = Utility.makespan(gaheft_added_schedule) return result
def fitness_ordering_resourceconf(workflow, estimator, solution): os = solution[ORDERING_SPECIE] rcs = solution[RESOURCE_CONFIG_SPECIE] ## TODO: refactor this flops_set = [conf.flops for conf in rcs if conf is not None] resources = ResourceGenerator.r(flops_set) resource_manager = ExperimentResourceManager(resources) heft = DynamicHeft(workflow, resource_manager, estimator, os) schedule = heft.run({n: [] for n in resource_manager.get_nodes()}) result = Utility.makespan(schedule) return 1 / result
def _run_heft(): dynamic_planner = DynamicHeft(wf, resource_manager, estimator) nodes = HeftHelper.to_nodes(resource_manager.resources) current_cleaned_schedule = Schedule({node: [] for node in nodes}) schedule_dynamic_heft = dynamic_planner.run(current_cleaned_schedule) self._validate(wf, estimator, schedule_dynamic_heft) if is_visualized: viz.visualize_task_node_mapping(wf, schedule_dynamic_heft) # Utility.create_jedule_visualization(schedule_dynamic_heft, wf_name+'_heft') pass return schedule_dynamic_heft
def fitness_ordering_resourceconf(workflow, estimator, solution): os = solution[ORDERING_SPECIE] rcs = solution[RESOURCE_CONFIG_SPECIE] ## TODO: refactor this flops_set = [conf.flops for conf in rcs if conf is not None] resources = ResourceGenerator.r(flops_set) resource_manager = ExperimentResourceManager(resources) heft = DynamicHeft(workflow, resource_manager, estimator, os) schedule = heft.run({n: [] for n in resource_manager.get_nodes()}) result = Utility.makespan(schedule) return 1/result
def _run_heft(): dynamic_planner = DynamicHeft(wf, resource_manager, estimator) nodes = HeftHelper.to_nodes(resource_manager.resources) current_cleaned_schedule = Schedule({node: [] for node in nodes}) schedule_dynamic_heft = dynamic_planner.run( current_cleaned_schedule) self._validate(wf, estimator, schedule_dynamic_heft) if is_visualized: viz.visualize_task_node_mapping(wf, schedule_dynamic_heft) # Utility.create_jedule_visualization(schedule_dynamic_heft, wf_name+'_heft') pass return schedule_dynamic_heft
wf_added_times = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] #wf_added_times = [0.1] initial_wf_name = "Montage_30" added_wf_name = "Montage_25" initial_wf = ExecutorRunner.get_wf(initial_wf_name, "00") added_wf = ExecutorRunner.get_wf(added_wf_name, "10") bundle = Utility.get_default_bundle() (estimator, resource_manager, initial_schedule) = ExecutorRunner.get_infrastructure(bundle, 1.0, False) ## planning for initial wf heft = DynamicHeft(initial_wf, resource_manager, estimator) empty_schedule = Schedule({node:[] for node in heft.get_nodes()}) heft_schedule = heft.run(empty_schedule) all_initial_wf_time = Utility.makespan(heft_schedule) print("Initial time: " + str(all_initial_wf_time)) n = 1 ## planning for added wf def heft_reschedule(wf_added_time): copy_heft_schedule = Schedule({node:[item for item in items] for (node, items) in heft_schedule.mapping.items()}) added_time = all_initial_wf_time * wf_added_time heft_added = DynamicHeft(added_wf, resource_manager, estimator) heft_added.current_time = added_time heft_added_schedule = heft_added.run(copy_heft_schedule)