node_eager.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <common/thread.h>
  2. #include <core/sched_policy.h>
  3. #include "node_sched.h"
  4. #include "fifo_queues.h"
  5. static void initialize_eager_center_policy(unsigned sched_ctx_id)
  6. {
  7. starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
  8. struct _starpu_sched_tree *data = malloc(sizeof(struct _starpu_sched_tree));
  9. STARPU_PTHREAD_RWLOCK_INIT(&data->lock,NULL);
  10. data->root = _starpu_sched_node_fifo_create();
  11. data->workers = _starpu_bitmap_create();
  12. unsigned i;
  13. for(i = 0; i < starpu_worker_get_count(); i++)
  14. {
  15. struct _starpu_sched_node * node = _starpu_sched_node_worker_get(i);
  16. if(!node)
  17. continue;
  18. node->fathers[sched_ctx_id] = data->root;
  19. _starpu_sched_node_add_child(data->root, node);
  20. }
  21. _starpu_set_workers_bitmaps();
  22. _starpu_tree_call_init_data(data);
  23. starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)data);
  24. }
  25. static void deinitialize_eager_center_policy(unsigned sched_ctx_id)
  26. {
  27. struct _starpu_sched_tree *tree = (struct _starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
  28. _starpu_bitmap_destroy(tree->workers);
  29. _starpu_tree_destroy(tree, sched_ctx_id);
  30. starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
  31. }
  32. struct starpu_sched_policy _starpu_sched_tree_eager_policy =
  33. {
  34. .init_sched = initialize_eager_center_policy,
  35. .deinit_sched = deinitialize_eager_center_policy,
  36. .add_workers = _starpu_tree_add_workers,
  37. .remove_workers = _starpu_tree_remove_workers,
  38. .push_task = _starpu_tree_push_task,
  39. .pop_task = _starpu_tree_pop_task,
  40. .pre_exec_hook = NULL,
  41. .post_exec_hook = NULL,
  42. .pop_every_task = NULL,//pop_every_task_eager_policy,
  43. .policy_name = "tree",
  44. .policy_description = "test tree policy"
  45. };