hierarchical_heft.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <starpu_sched_component.h>
  2. #include <core/workers.h>
  3. static struct starpu_sched_component_composed_recipe * recipe_for_worker(enum starpu_worker_archtype a STARPU_ATTRIBUTE_UNUSED)
  4. {
  5. struct starpu_sched_component_composed_recipe * r = starpu_sched_component_composed_recipe_create();
  6. starpu_sched_component_composed_recipe_add(r, starpu_sched_component_best_implementation_create, NULL);
  7. starpu_sched_component_composed_recipe_add(r, starpu_sched_component_fifo_create, NULL);
  8. return r;
  9. }
  10. static void initialize_heft_center_policy(unsigned sched_ctx_id)
  11. {
  12. struct starpu_sched_component_specs specs;
  13. memset(&specs,0,sizeof(specs));
  14. struct starpu_heft_data heft_data =
  15. {
  16. .alpha = 1.0,
  17. .beta = 2.0,
  18. .gamma = 0.0,
  19. .idle_power = 0.0,
  20. .no_perf_model_component_create = starpu_sched_component_random_create,
  21. .arg_no_perf_model = NULL,
  22. .calibrating_component_create = starpu_sched_component_random_create,
  23. .arg_calibrating_component = NULL,
  24. };
  25. struct starpu_sched_component_composed_recipe * r = starpu_sched_component_composed_recipe_create();
  26. starpu_sched_component_composed_recipe_add(r,(struct starpu_sched_component * (*)(void*))starpu_sched_component_heft_create,&heft_data);
  27. specs.hwloc_machine_composed_sched_component = r;
  28. r = starpu_sched_component_composed_recipe_create();
  29. starpu_sched_component_composed_recipe_add(r, starpu_sched_component_best_implementation_create, NULL);
  30. starpu_sched_component_composed_recipe_add(r, starpu_sched_component_fifo_create ,NULL);
  31. specs.hwloc_component_composed_sched_component = r;
  32. specs.worker_composed_sched_component = recipe_for_worker;
  33. struct starpu_sched_tree *t = starpu_sched_component_make_scheduler(sched_ctx_id, specs);
  34. starpu_sched_component_composed_recipe_destroy(specs.hwloc_machine_composed_sched_component);
  35. starpu_sched_tree_update_workers(t);
  36. starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)t);
  37. }
  38. static void deinitialize_heft_center_policy(unsigned sched_ctx_id)
  39. {
  40. struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
  41. starpu_sched_tree_destroy(t);
  42. }
  43. struct starpu_sched_policy _starpu_sched_tree_heft_hierarchical_policy =
  44. {
  45. .init_sched = initialize_heft_center_policy,
  46. .deinit_sched = deinitialize_heft_center_policy,
  47. .add_workers = starpu_sched_tree_add_workers,
  48. .remove_workers = starpu_sched_tree_remove_workers,
  49. .push_task = starpu_sched_tree_push_task,
  50. .pop_task = starpu_sched_tree_pop_task,
  51. .pre_exec_hook = NULL,
  52. .post_exec_hook = NULL,
  53. .pop_every_task = NULL,
  54. .policy_name = "tree-heft-hierarchical",
  55. .policy_description = "hierarchical heft tree policy",
  56. .worker_type = STARPU_WORKER_LIST,
  57. };