Browse Source

sched_policies: create/remove worker collections outside scheduler policies

Samuel Pitoiset 9 years ago
parent
commit
f29efa4f4d

+ 2 - 5
examples/sched_ctx/dummy_sched_with_ctx.c

@@ -29,8 +29,6 @@ struct dummy_sched_data
 
 
 static void init_dummy_sched(unsigned sched_ctx_id)
 static void init_dummy_sched(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	struct dummy_sched_data *data = (struct dummy_sched_data*)malloc(sizeof(struct dummy_sched_data));
 	struct dummy_sched_data *data = (struct dummy_sched_data*)malloc(sizeof(struct dummy_sched_data));
 
 
 
 
@@ -49,8 +47,6 @@ static void deinit_dummy_sched(unsigned sched_ctx_id)
 
 
 	STARPU_ASSERT(starpu_task_list_empty(&data->sched_list));
 	STARPU_ASSERT(starpu_task_list_empty(&data->sched_list));
 
 
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
-
 	starpu_pthread_mutex_destroy(&data->policy_mutex);
 	starpu_pthread_mutex_destroy(&data->policy_mutex);
 
 
 	free(data);
 	free(data);
@@ -125,7 +121,8 @@ static struct starpu_sched_policy dummy_sched_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "dummy",
 	.policy_name = "dummy",
-	.policy_description = "dummy scheduling strategy"
+	.policy_description = "dummy scheduling strategy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 void dummy_func(void *descr[] STARPU_ATTRIBUTE_UNUSED, void *arg STARPU_ATTRIBUTE_UNUSED)
 void dummy_func(void *descr[] STARPU_ATTRIBUTE_UNUSED, void *arg STARPU_ATTRIBUTE_UNUSED)

+ 2 - 5
examples/scheduler/dummy_sched.c

@@ -35,8 +35,6 @@ struct dummy_sched_data
 
 
 static void init_dummy_sched(unsigned sched_ctx_id)
 static void init_dummy_sched(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	struct dummy_sched_data *data = (struct dummy_sched_data*)malloc(sizeof(struct dummy_sched_data));
 	struct dummy_sched_data *data = (struct dummy_sched_data*)malloc(sizeof(struct dummy_sched_data));
 
 
 
 
@@ -55,8 +53,6 @@ static void deinit_dummy_sched(unsigned sched_ctx_id)
 
 
 	STARPU_ASSERT(starpu_task_list_empty(&data->sched_list));
 	STARPU_ASSERT(starpu_task_list_empty(&data->sched_list));
 
 
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
-
 	starpu_pthread_mutex_destroy(&data->policy_mutex);
 	starpu_pthread_mutex_destroy(&data->policy_mutex);
 
 
 	free(data);
 	free(data);
@@ -131,7 +127,8 @@ static struct starpu_sched_policy dummy_sched_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "dummy",
 	.policy_name = "dummy",
-	.policy_description = "dummy scheduling strategy"
+	.policy_description = "dummy scheduling strategy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 void dummy_func(void *descr[] STARPU_ATTRIBUTE_UNUSED, void *arg STARPU_ATTRIBUTE_UNUSED)
 void dummy_func(void *descr[] STARPU_ATTRIBUTE_UNUSED, void *arg STARPU_ATTRIBUTE_UNUSED)

+ 2 - 0
include/starpu_scheduler.h

@@ -46,6 +46,8 @@ struct starpu_sched_policy
 
 
 	const char *policy_name;
 	const char *policy_name;
 	const char *policy_description;
 	const char *policy_description;
+
+	enum starpu_worker_collection_type worker_type;
 };
 };
 
 
 struct starpu_sched_policy **starpu_sched_get_predefined_policies();
 struct starpu_sched_policy **starpu_sched_get_predefined_policies();

+ 4 - 0
src/core/sched_policy.c

@@ -188,6 +188,9 @@ void _starpu_init_sched_policy(struct _starpu_machine_config *config, struct _st
 
 
 	load_sched_policy(selected_policy, sched_ctx);
 	load_sched_policy(selected_policy, sched_ctx);
 
 
+	starpu_sched_ctx_create_worker_collection(sched_ctx->id,
+						  sched_ctx->sched_policy->worker_type);
+
 	_STARPU_TRACE_WORKER_SCHEDULING_PUSH;
 	_STARPU_TRACE_WORKER_SCHEDULING_PUSH;
 	sched_ctx->sched_policy->init_sched(sched_ctx->id);
 	sched_ctx->sched_policy->init_sched(sched_ctx->id);
 	_STARPU_TRACE_WORKER_SCHEDULING_POP;
 	_STARPU_TRACE_WORKER_SCHEDULING_POP;
@@ -202,6 +205,7 @@ void _starpu_deinit_sched_policy(struct _starpu_sched_ctx *sched_ctx)
 		policy->deinit_sched(sched_ctx->id);
 		policy->deinit_sched(sched_ctx->id);
 		_STARPU_TRACE_WORKER_SCHEDULING_POP;
 		_STARPU_TRACE_WORKER_SCHEDULING_POP;
 	}
 	}
+	starpu_sched_ctx_delete_worker_collection(sched_ctx->id);
 }
 }
 
 
 static void _starpu_push_task_on_specific_worker_notify_sched(struct starpu_task *task, struct _starpu_worker *worker, int workerid, int perf_workerid)
 static void _starpu_push_task_on_specific_worker_notify_sched(struct starpu_task *task, struct _starpu_worker *worker, int workerid, int perf_workerid)

+ 10 - 8
src/sched_policies/deque_modeling_policy_data_aware.c

@@ -997,8 +997,6 @@ static void dmda_remove_workers(unsigned sched_ctx_id, int *workerids, unsigned
 
 
 static void initialize_dmda_policy(unsigned sched_ctx_id)
 static void initialize_dmda_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	struct _starpu_dmda_data *dt = (struct _starpu_dmda_data*)malloc(sizeof(struct _starpu_dmda_data));
 	struct _starpu_dmda_data *dt = (struct _starpu_dmda_data*)malloc(sizeof(struct _starpu_dmda_data));
 
 
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)dt);
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)dt);
@@ -1052,7 +1050,6 @@ static void deinitialize_dmda_policy(unsigned sched_ctx_id)
 
 
 	free(dt->queue_array);
 	free(dt->queue_array);
 	free(dt);
 	free(dt);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 /* dmda_pre_exec_hook is called right after the data transfer is done and right
 /* dmda_pre_exec_hook is called right after the data transfer is done and right
@@ -1198,7 +1195,8 @@ struct starpu_sched_policy _starpu_sched_dm_policy =
 	.post_exec_hook = dmda_post_exec_hook,
 	.post_exec_hook = dmda_post_exec_hook,
 	.pop_every_task = dmda_pop_every_task,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dm",
 	.policy_name = "dm",
-	.policy_description = "performance model"
+	.policy_description = "performance model",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 struct starpu_sched_policy _starpu_sched_dmda_policy =
 struct starpu_sched_policy _starpu_sched_dmda_policy =
@@ -1215,7 +1213,8 @@ struct starpu_sched_policy _starpu_sched_dmda_policy =
 	.post_exec_hook = dmda_post_exec_hook,
 	.post_exec_hook = dmda_post_exec_hook,
 	.pop_every_task = dmda_pop_every_task,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmda",
 	.policy_name = "dmda",
-	.policy_description = "data-aware performance model"
+	.policy_description = "data-aware performance model",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 struct starpu_sched_policy _starpu_sched_dmda_sorted_policy =
 struct starpu_sched_policy _starpu_sched_dmda_sorted_policy =
@@ -1232,7 +1231,8 @@ struct starpu_sched_policy _starpu_sched_dmda_sorted_policy =
 	.post_exec_hook = dmda_post_exec_hook,
 	.post_exec_hook = dmda_post_exec_hook,
 	.pop_every_task = dmda_pop_every_task,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmdas",
 	.policy_name = "dmdas",
-	.policy_description = "data-aware performance model (sorted)"
+	.policy_description = "data-aware performance model (sorted)",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 struct starpu_sched_policy _starpu_sched_dmda_sorted_decision_policy =
 struct starpu_sched_policy _starpu_sched_dmda_sorted_decision_policy =
@@ -1249,7 +1249,8 @@ struct starpu_sched_policy _starpu_sched_dmda_sorted_decision_policy =
 	.post_exec_hook = dmda_post_exec_hook,
 	.post_exec_hook = dmda_post_exec_hook,
 	.pop_every_task = dmda_pop_every_task,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmdasd",
 	.policy_name = "dmdasd",
-	.policy_description = "data-aware performance model (sorted decision)"
+	.policy_description = "data-aware performance model (sorted decision)",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 struct starpu_sched_policy _starpu_sched_dmda_ready_policy =
 struct starpu_sched_policy _starpu_sched_dmda_ready_policy =
@@ -1266,5 +1267,6 @@ struct starpu_sched_policy _starpu_sched_dmda_ready_policy =
 	.post_exec_hook = dmda_post_exec_hook,
 	.post_exec_hook = dmda_post_exec_hook,
 	.pop_every_task = dmda_pop_every_task,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmdar",
 	.policy_name = "dmdar",
-	.policy_description = "data-aware performance model (ready)"
+	.policy_description = "data-aware performance model (ready)",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 6 - 8
src/sched_policies/eager_central_policy.c

@@ -35,12 +35,6 @@ struct _starpu_eager_center_policy_data
 
 
 static void initialize_eager_center_policy(unsigned sched_ctx_id)
 static void initialize_eager_center_policy(unsigned sched_ctx_id)
 {
 {
-#ifdef STARPU_HAVE_HWLOC
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_TREE);
-#else
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-#endif
-
 	struct _starpu_eager_center_policy_data *data = (struct _starpu_eager_center_policy_data*)malloc(sizeof(struct _starpu_eager_center_policy_data));
 	struct _starpu_eager_center_policy_data *data = (struct _starpu_eager_center_policy_data*)malloc(sizeof(struct _starpu_eager_center_policy_data));
 
 
 	_STARPU_DISP("Warning: you are running the default eager scheduler, which is not very smart. Make sure to read the StarPU documentation about adding performance models in order to be able to use the dmda or dmdas scheduler instead.\n");
 	_STARPU_DISP("Warning: you are running the default eager scheduler, which is not very smart. Make sure to read the StarPU documentation about adding performance models in order to be able to use the dmda or dmdas scheduler instead.\n");
@@ -68,7 +62,6 @@ static void deinitialize_eager_center_policy(unsigned sched_ctx_id)
 	_starpu_destroy_fifo(data->fifo);
 	_starpu_destroy_fifo(data->fifo);
 	starpu_bitmap_destroy(data->waiters);
 	starpu_bitmap_destroy(data->waiters);
 
 
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 	STARPU_PTHREAD_MUTEX_DESTROY(&data->policy_mutex);
 	STARPU_PTHREAD_MUTEX_DESTROY(&data->policy_mutex);
 	free(data);
 	free(data);
 }
 }
@@ -225,5 +218,10 @@ struct starpu_sched_policy _starpu_sched_eager_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = pop_every_task_eager_policy,
 	.pop_every_task = pop_every_task_eager_policy,
 	.policy_name = "eager",
 	.policy_name = "eager",
-	.policy_description = "eager policy with a central queue"
+	.policy_description = "eager policy with a central queue",
+#ifdef STARPU_HAVE_HWLOC
+	.worker_type = STARPU_WORKER_TREE,
+#else
+	.worker_type = STARPU_WORKER_LIST,
+#endif
 };
 };

+ 2 - 3
src/sched_policies/eager_central_priority_policy.c

@@ -83,7 +83,6 @@ static void _starpu_destroy_priority_taskq(struct _starpu_priority_taskq *priori
 
 
 static void initialize_eager_center_priority_policy(unsigned sched_ctx_id)
 static void initialize_eager_center_priority_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct _starpu_eager_central_prio_data *data = (struct _starpu_eager_central_prio_data*)malloc(sizeof(struct _starpu_eager_central_prio_data));
 	struct _starpu_eager_central_prio_data *data = (struct _starpu_eager_central_prio_data*)malloc(sizeof(struct _starpu_eager_central_prio_data));
 
 
 	/* In this policy, we support more than two levels of priority. */
 	/* In this policy, we support more than two levels of priority. */
@@ -114,7 +113,6 @@ static void deinitialize_eager_center_priority_policy(unsigned sched_ctx_id)
 	_starpu_destroy_priority_taskq(data->taskq);
 	_starpu_destroy_priority_taskq(data->taskq);
 	starpu_bitmap_destroy(data->waiters);
 	starpu_bitmap_destroy(data->waiters);
 
 
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 	STARPU_PTHREAD_MUTEX_DESTROY(&data->policy_mutex);
 	STARPU_PTHREAD_MUTEX_DESTROY(&data->policy_mutex);
 	free(data);
 	free(data);
 }
 }
@@ -322,5 +320,6 @@ struct starpu_sched_policy _starpu_sched_prio_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "prio",
 	.policy_name = "prio",
-	.policy_description = "eager (with priorities)"
+	.policy_description = "eager (with priorities)",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 6 - 7
src/sched_policies/heteroprio.c

@@ -198,11 +198,6 @@ static inline void default_init_sched(unsigned sched_ctx_id)
 
 
 static void initialize_heteroprio_policy(unsigned sched_ctx_id)
 static void initialize_heteroprio_policy(unsigned sched_ctx_id)
 {
 {
-#ifdef STARPU_HAVE_HWLOC
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_TREE);
-#else
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-#endif
 	/* Alloc the scheduler data  */
 	/* Alloc the scheduler data  */
 	struct _starpu_heteroprio_data *hp = (struct _starpu_heteroprio_data*)malloc(sizeof(struct _starpu_heteroprio_data));
 	struct _starpu_heteroprio_data *hp = (struct _starpu_heteroprio_data*)malloc(sizeof(struct _starpu_heteroprio_data));
 	memset(hp, 0, sizeof(*hp));
 	memset(hp, 0, sizeof(*hp));
@@ -288,7 +283,6 @@ static void deinitialize_heteroprio_policy(unsigned sched_ctx_id)
 
 
 	starpu_bitmap_destroy(hp->waiters);
 	starpu_bitmap_destroy(hp->waiters);
 
 
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 	STARPU_PTHREAD_MUTEX_DESTROY(&hp->policy_mutex);
 	STARPU_PTHREAD_MUTEX_DESTROY(&hp->policy_mutex);
 	free(hp);
 	free(hp);
 }
 }
@@ -666,5 +660,10 @@ struct starpu_sched_policy _starpu_sched_heteroprio_policy =
         .post_exec_hook = NULL,
         .post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
         .policy_name = "heteroprio",
         .policy_name = "heteroprio",
-        .policy_description = "heteroprio"
+        .policy_description = "heteroprio",
+#ifdef STARPU_HAVE_HWLOC
+	.worker_type = STARPU_WORKER_TREE,
+#else
+	.worker_type = STARPU_WORKER_LIST,
+#endif
 };
 };

+ 2 - 4
src/sched_policies/hierarchical_heft.c

@@ -14,8 +14,6 @@ static struct  starpu_sched_component_composed_recipe *  recipe_for_worker(enum
 
 
 static void initialize_heft_center_policy(unsigned sched_ctx_id)
 static void initialize_heft_center_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	struct starpu_sched_component_specs specs;
 	struct starpu_sched_component_specs specs;
 	memset(&specs,0,sizeof(specs));
 	memset(&specs,0,sizeof(specs));
 
 
@@ -55,7 +53,6 @@ static void deinitialize_heft_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 
 
 	starpu_sched_tree_destroy(t);
 	starpu_sched_tree_destroy(t);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 
 
@@ -74,5 +71,6 @@ struct starpu_sched_policy _starpu_sched_tree_heft_hierarchical_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "tree-heft-hierarchical",
 	.policy_name = "tree-heft-hierarchical",
-	.policy_description = "hierarchical heft tree policy"
+	.policy_description = "hierarchical heft tree policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 6 - 8
src/sched_policies/locality_work_stealing_policy.c

@@ -322,12 +322,6 @@ static void lws_remove_workers(unsigned sched_ctx_id, int *workerids, unsigned n
 
 
 static void lws_initialize_policy(unsigned sched_ctx_id)
 static void lws_initialize_policy(unsigned sched_ctx_id)
 {
 {
-#ifdef STARPU_HAVE_HWLOC
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_TREE);
-#else
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-#endif
-
 	struct _starpu_lws_data *ws = (struct _starpu_lws_data*)malloc(sizeof(struct _starpu_lws_data));
 	struct _starpu_lws_data *ws = (struct _starpu_lws_data*)malloc(sizeof(struct _starpu_lws_data));
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)ws);
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)ws);
 
 
@@ -349,7 +343,6 @@ static void lws_deinit_policy(unsigned sched_ctx_id)
 	free(ws->proxlist);
 	free(ws->proxlist);
 #endif
 #endif
 	free(ws);
 	free(ws);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_lws_policy =
 struct starpu_sched_policy _starpu_sched_lws_policy =
@@ -364,5 +357,10 @@ struct starpu_sched_policy _starpu_sched_lws_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "lws",
 	.policy_name = "lws",
-	.policy_description = "locality work stealing"
+	.policy_description = "locality work stealing",
+#ifdef STARPU_HAVE_HWLOC
+	.worker_type = STARPU_WORKER_TREE,
+#else
+	.worker_type = STARPU_WORKER_LIST,
+#endif
 };
 };

+ 2 - 4
src/sched_policies/modular_eager.c

@@ -25,8 +25,6 @@ static void initialize_eager_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * eager_component;
 	struct starpu_sched_component * eager_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
@@ -45,7 +43,6 @@ static void deinitialize_eager_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_eager_policy =
 struct starpu_sched_policy _starpu_sched_modular_eager_policy =
@@ -60,5 +57,6 @@ struct starpu_sched_policy _starpu_sched_modular_eager_policy =
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-eager",
 	.policy_name = "modular-eager",
-	.policy_description = "eager modular policy"
+	.policy_description = "eager modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/modular_eager_prefetching.c

@@ -28,8 +28,6 @@ static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * eager_component;
 	struct starpu_sched_component * eager_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
@@ -59,7 +57,6 @@ static void deinitialize_eager_prefetching_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_eager_prefetching_policy =
 struct starpu_sched_policy _starpu_sched_modular_eager_prefetching_policy =
@@ -74,5 +71,6 @@ struct starpu_sched_policy _starpu_sched_modular_eager_prefetching_policy =
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-eager-prefetching",
 	.policy_name = "modular-eager-prefetching",
-	.policy_description = "eager with prefetching modular policy"
+	.policy_description = "eager with prefetching modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/modular_heft.c

@@ -33,8 +33,6 @@
 
 
 static void initialize_heft_center_policy(unsigned sched_ctx_id)
 static void initialize_heft_center_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	/* The application may use any integer */
 	/* The application may use any integer */
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
 		starpu_sched_ctx_set_min_priority(sched_ctx_id, INT_MIN);
 		starpu_sched_ctx_set_min_priority(sched_ctx_id, INT_MIN);
@@ -120,7 +118,6 @@ static void deinitialize_heft_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(t);
 	starpu_sched_tree_destroy(t);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_heft_policy =
 struct starpu_sched_policy _starpu_sched_modular_heft_policy =
@@ -135,5 +132,6 @@ struct starpu_sched_policy _starpu_sched_modular_heft_policy =
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-heft",
 	.policy_name = "modular-heft",
-	.policy_description = "heft modular policy"
+	.policy_description = "heft modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/modular_heft2.c

@@ -33,8 +33,6 @@
 
 
 static void initialize_heft2_center_policy(unsigned sched_ctx_id)
 static void initialize_heft2_center_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	/* The application may use any integer */
 	/* The application may use any integer */
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
 		starpu_sched_ctx_set_min_priority(sched_ctx_id, INT_MIN);
 		starpu_sched_ctx_set_min_priority(sched_ctx_id, INT_MIN);
@@ -94,7 +92,6 @@ static void deinitialize_heft2_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(t);
 	starpu_sched_tree_destroy(t);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_heft2_policy =
 struct starpu_sched_policy _starpu_sched_modular_heft2_policy =
@@ -109,5 +106,6 @@ struct starpu_sched_policy _starpu_sched_modular_heft2_policy =
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-heft2",
 	.policy_name = "modular-heft2",
-	.policy_description = "heft modular2 policy"
+	.policy_description = "heft modular2 policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/modular_prio.c

@@ -22,8 +22,6 @@ static void initialize_prio_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * eager_component;
 	struct starpu_sched_component * eager_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_prio_create(t, NULL);
  	t->root = starpu_sched_component_prio_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
@@ -42,7 +40,6 @@ static void deinitialize_prio_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_prio_policy =
 struct starpu_sched_policy _starpu_sched_modular_prio_policy =
@@ -57,5 +54,6 @@ struct starpu_sched_policy _starpu_sched_modular_prio_policy =
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-prio",
 	.policy_name = "modular-prio",
-	.policy_description = "prio modular policy"
+	.policy_description = "prio modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/modular_prio_prefetching.c

@@ -25,8 +25,6 @@ static void initialize_prio_prefetching_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * eager_component;
 	struct starpu_sched_component * eager_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_prio_create(t, NULL);
  	t->root = starpu_sched_component_prio_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
 	eager_component = starpu_sched_component_eager_create(t, NULL);
@@ -56,7 +54,6 @@ static void deinitialize_prio_prefetching_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_prio_prefetching_policy =
 struct starpu_sched_policy _starpu_sched_modular_prio_prefetching_policy =
@@ -71,5 +68,6 @@ struct starpu_sched_policy _starpu_sched_modular_prio_prefetching_policy =
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.post_exec_hook = starpu_sched_component_worker_post_exec_hook,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-prio-prefetching",
 	.policy_name = "modular-prio-prefetching",
-	.policy_description = "prio prefetching modular policy"
+	.policy_description = "prio prefetching modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 4 - 8
src/sched_policies/modular_random.c

@@ -25,8 +25,6 @@ static void initialize_random_fifo_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * random_component;
 	struct starpu_sched_component * random_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
@@ -45,7 +43,6 @@ static void deinitialize_random_fifo_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_random_policy =
 struct starpu_sched_policy _starpu_sched_modular_random_policy =
@@ -60,7 +57,8 @@ struct starpu_sched_policy _starpu_sched_modular_random_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-random",
 	.policy_name = "modular-random",
-	.policy_description = "random modular policy"
+	.policy_description = "random modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 /* Random scheduler with a priority queue for its scheduling window */
 /* Random scheduler with a priority queue for its scheduling window */
@@ -70,8 +68,6 @@ static void initialize_random_prio_center_policy(unsigned sched_ctx_id)
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * random_component;
 	struct starpu_sched_component * random_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_prio_create(t, NULL);
  	t->root = starpu_sched_component_prio_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
@@ -90,7 +86,6 @@ static void deinitialize_random_prio_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_random_prio_policy =
 struct starpu_sched_policy _starpu_sched_modular_random_prio_policy =
@@ -105,5 +100,6 @@ struct starpu_sched_policy _starpu_sched_modular_random_prio_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-random-prio",
 	.policy_name = "modular-random-prio",
-	.policy_description = "random-prio modular policy"
+	.policy_description = "random-prio modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 4 - 8
src/sched_policies/modular_random_prefetching.c

@@ -28,8 +28,6 @@ static void initialize_random_fifo_prefetching_center_policy(unsigned sched_ctx_
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component * random_component;
 	struct starpu_sched_component * random_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
@@ -59,7 +57,6 @@ static void deinitialize_random_fifo_prefetching_center_policy(unsigned sched_ct
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_random_prefetching_policy =
 struct starpu_sched_policy _starpu_sched_modular_random_prefetching_policy =
@@ -74,7 +71,8 @@ struct starpu_sched_policy _starpu_sched_modular_random_prefetching_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-random-prefetching",
 	.policy_name = "modular-random-prefetching",
-	.policy_description = "random prefetching modular policy"
+	.policy_description = "random prefetching modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };
 
 
 /* Random scheduler with priority queues for its scheduling window and its workers. */
 /* Random scheduler with priority queues for its scheduling window and its workers. */
@@ -84,8 +82,6 @@ static void initialize_random_prio_prefetching_center_policy(unsigned sched_ctx_
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 	struct starpu_sched_component *random_component;
 	struct starpu_sched_component *random_component;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_prio_create(t, NULL);
  	t->root = starpu_sched_component_prio_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
 	random_component = starpu_sched_component_random_create(t, NULL);
@@ -115,7 +111,6 @@ static void deinitialize_random_prio_prefetching_center_policy(unsigned sched_ct
 {
 {
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *tree = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(tree);
 	starpu_sched_tree_destroy(tree);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_modular_random_prio_prefetching_policy =
 struct starpu_sched_policy _starpu_sched_modular_random_prio_prefetching_policy =
@@ -130,5 +125,6 @@ struct starpu_sched_policy _starpu_sched_modular_random_prio_prefetching_policy
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-random-prio-prefetching",
 	.policy_name = "modular-random-prio-prefetching",
-	.policy_description = "random-prio prefetching modular policy"
+	.policy_description = "random-prio prefetching modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/modular_ws.c

@@ -23,8 +23,6 @@ static void initialize_ws_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *t;
 	struct starpu_sched_tree *t;
 
 
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	t = starpu_sched_tree_create(sched_ctx_id);
 	t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_work_stealing_create(t, NULL);
  	t->root = starpu_sched_component_work_stealing_create(t, NULL);
 
 
@@ -40,7 +38,6 @@ static void deinitialize_ws_center_policy(unsigned sched_ctx_id)
 {
 {
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct starpu_sched_tree *t = (struct starpu_sched_tree*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	starpu_sched_tree_destroy(t);
 	starpu_sched_tree_destroy(t);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 
 
@@ -56,5 +53,6 @@ struct starpu_sched_policy _starpu_sched_modular_ws_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "modular-ws",
 	.policy_name = "modular-ws",
-	.policy_description = "work stealing modular policy"
+	.policy_description = "work stealing modular policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/parallel_eager.c

@@ -119,8 +119,6 @@ static void peager_remove_workers(unsigned sched_ctx_id, int *workerids, unsigne
 
 
 static void initialize_peager_policy(unsigned sched_ctx_id)
 static void initialize_peager_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	struct _starpu_peager_data *data = (struct _starpu_peager_data*)malloc(sizeof(struct _starpu_peager_data));
 	struct _starpu_peager_data *data = (struct _starpu_peager_data*)malloc(sizeof(struct _starpu_peager_data));
 	/* masters pick tasks from that queue */
 	/* masters pick tasks from that queue */
 	data->fifo = _starpu_create_fifo();
 	data->fifo = _starpu_create_fifo();
@@ -137,7 +135,6 @@ static void deinitialize_peager_policy(unsigned sched_ctx_id)
 	/* deallocate the job queue */
 	/* deallocate the job queue */
 	_starpu_destroy_fifo(data->fifo);
 	_starpu_destroy_fifo(data->fifo);
 
 
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
         STARPU_PTHREAD_MUTEX_DESTROY(&data->policy_mutex);
         STARPU_PTHREAD_MUTEX_DESTROY(&data->policy_mutex);
 
 
 	free(data);
 	free(data);
@@ -299,5 +296,6 @@ struct starpu_sched_policy _starpu_sched_peager_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "peager",
 	.policy_name = "peager",
-	.policy_description = "parallel eager policy"
+	.policy_description = "parallel eager policy",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 3
src/sched_policies/parallel_heft.c

@@ -547,7 +547,6 @@ static void parallel_heft_add_workers(__attribute__((unused)) unsigned sched_ctx
 
 
 static void initialize_parallel_heft_policy(unsigned sched_ctx_id)
 static void initialize_parallel_heft_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct _starpu_pheft_data *hd = (struct _starpu_pheft_data*)malloc(sizeof(struct _starpu_pheft_data));
 	struct _starpu_pheft_data *hd = (struct _starpu_pheft_data*)malloc(sizeof(struct _starpu_pheft_data));
 
 
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
@@ -578,7 +577,6 @@ static void initialize_parallel_heft_policy(unsigned sched_ctx_id)
 static void parallel_heft_deinit(unsigned sched_ctx_id)
 static void parallel_heft_deinit(unsigned sched_ctx_id)
 {
 {
 	struct _starpu_pheft_data *hd = (struct _starpu_pheft_data*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	struct _starpu_pheft_data *hd = (struct _starpu_pheft_data*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 	STARPU_PTHREAD_MUTEX_DESTROY(&hd->global_push_mutex);
 	STARPU_PTHREAD_MUTEX_DESTROY(&hd->global_push_mutex);
 	free(hd);
 	free(hd);
 }
 }
@@ -596,5 +594,6 @@ struct starpu_sched_policy _starpu_sched_parallel_heft_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "pheft",
 	.policy_name = "pheft",
-	.policy_description = "parallel HEFT"
+	.policy_description = "parallel HEFT",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 3
src/sched_policies/random_policy.c

@@ -99,13 +99,11 @@ static int random_push_task(struct starpu_task *task)
 
 
 static void initialize_random_policy(unsigned sched_ctx_id)
 static void initialize_random_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	starpu_srand48(time(NULL));
 	starpu_srand48(time(NULL));
 }
 }
 
 
 static void deinitialize_random_policy(unsigned sched_ctx_id)
 static void deinitialize_random_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_random_policy =
 struct starpu_sched_policy _starpu_sched_random_policy =
@@ -120,5 +118,6 @@ struct starpu_sched_policy _starpu_sched_random_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "random",
 	.policy_name = "random",
-	.policy_description = "weighted random based on worker overall performance"
+	.policy_description = "weighted random based on worker overall performance",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };

+ 2 - 4
src/sched_policies/work_stealing_policy.c

@@ -432,8 +432,6 @@ static void ws_remove_workers(unsigned sched_ctx_id, int *workerids, unsigned nw
 
 
 static void initialize_ws_policy(unsigned sched_ctx_id)
 static void initialize_ws_policy(unsigned sched_ctx_id)
 {
 {
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
-
 	struct _starpu_work_stealing_data *ws = (struct _starpu_work_stealing_data*)malloc(sizeof(struct _starpu_work_stealing_data));
 	struct _starpu_work_stealing_data *ws = (struct _starpu_work_stealing_data*)malloc(sizeof(struct _starpu_work_stealing_data));
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)ws);
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)ws);
 
 
@@ -455,7 +453,6 @@ static void deinit_ws_policy(unsigned sched_ctx_id)
 
 
 	free(ws->queue_array);
 	free(ws->queue_array);
         free(ws);
         free(ws);
-        starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 }
 }
 
 
 struct starpu_sched_policy _starpu_sched_ws_policy =
 struct starpu_sched_policy _starpu_sched_ws_policy =
@@ -470,5 +467,6 @@ struct starpu_sched_policy _starpu_sched_ws_policy =
 	.post_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "ws",
 	.policy_name = "ws",
-	.policy_description = "work stealing"
+	.policy_description = "work stealing",
+	.worker_type = STARPU_WORKER_LIST,
 };
 };