Browse Source

pass the task as parameter to the iterator for parallel_tasks instead of a certain field

Andra Hugo 10 years ago
parent
commit
84bc7e7d6a

+ 1 - 1
include/starpu_worker.h

@@ -72,7 +72,7 @@ struct starpu_worker_collection
 	void (*init)(struct starpu_worker_collection *workers);
 	void (*deinit)(struct starpu_worker_collection *workers);
 	void (*init_iterator)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it);
-	void (*init_iterator_for_parallel_tasks)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, unsigned possibly_parallel);
+	void (*init_iterator_for_parallel_tasks)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, struct starpu_task *task);
 };
 
 extern struct starpu_worker_collection worker_list;

+ 1 - 1
src/core/sched_ctx.c

@@ -1149,7 +1149,7 @@ int _starpu_nworkers_able_to_execute_task(struct starpu_task *task, struct _star
 
 	struct starpu_sched_ctx_iterator it;
 
-	workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+	workers->init_iterator_for_parallel_tasks(workers, &it, task);
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);

+ 3 - 3
src/sched_policies/deque_modeling_policy_data_aware.c

@@ -475,7 +475,7 @@ static int _dm_push_task(struct starpu_task *task, unsigned prio, unsigned sched
 
 	struct starpu_sched_ctx_iterator it;
 
-	workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+	workers->init_iterator_for_parallel_tasks(workers, &it, task);
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
@@ -620,7 +620,7 @@ static void compute_all_performance_predictions(struct starpu_task *task,
 	struct starpu_worker_collection *workers = starpu_sched_ctx_get_worker_collection(sched_ctx_id);
 
 	struct starpu_sched_ctx_iterator it;
-	workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+	workers->init_iterator_for_parallel_tasks(workers, &it, task);
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
@@ -814,7 +814,7 @@ static double _dmda_push_task(struct starpu_task *task, unsigned prio, unsigned
 	if (forced_best == -1)
 	{
 		struct starpu_sched_ctx_iterator it;
-		workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+		workers->init_iterator_for_parallel_tasks(workers, &it, task);
 		while(workers->has_next(workers, &it))
 		{
 			worker = workers->get_next(workers, &it);

+ 2 - 3
src/sched_policies/eager_central_policy.c

@@ -95,7 +95,7 @@ static int push_task_eager_policy(struct starpu_task *task)
 	char dowake[STARPU_NMAXWORKERS] = { 0 };
 #endif
 
-	workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+	workers->init_iterator_for_parallel_tasks(workers, &it, task);
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
@@ -124,8 +124,7 @@ static int push_task_eager_policy(struct starpu_task *task)
 #ifndef STARPU_NON_BLOCKING_DRIVERS
 	/* Now that we have a list of potential workers, try to wake one */
 
-//	workers->init_iterator(workers, &it);
-	workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+	workers->init_iterator_for_parallel_tasks(workers, &it, task);
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);

+ 2 - 2
src/sched_policies/eager_central_priority_policy.c

@@ -142,7 +142,7 @@ static int _starpu_priority_push_task(struct starpu_task *task)
 #ifndef STARPU_NON_BLOCKING_DRIVERS
 	char dowake[STARPU_NMAXWORKERS] = { 0 };
 #endif
-	workers->init_iterator_for_parallel_tasks(workers, &it, task->possibly_parallel);
+	workers->init_iterator_for_parallel_tasks(workers, &it, task);
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
@@ -254,7 +254,7 @@ static struct starpu_task *_starpu_priority_pop_task(unsigned sched_ctx_id)
 		struct starpu_worker_collection *workers = starpu_sched_ctx_get_worker_collection(sched_ctx_id);
 
 		struct starpu_sched_ctx_iterator it;
-		workers->init_iterator_for_parallel_tasks(workers, &it, chosen_task->possibly_parallel);
+		workers->init_iterator_for_parallel_tasks(workers, &it, chosen_task);
 		while(workers->has_next(workers, &it))
 		{
 			worker = workers->get_next(workers, &it);

+ 3 - 3
src/worker_collection/worker_list.c

@@ -264,10 +264,10 @@ static void list_init_iterator(struct starpu_worker_collection *workers, struct
 
 }
 
-static void list_init_iterator_for_parallel_tasks(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, unsigned possibly_parallel)
+static void list_init_iterator_for_parallel_tasks(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, struct starpu_task *task)
 {
 	list_init_iterator(workers, it);
-	it->possibly_parallel = possibly_parallel; /* 0/1 => this field indicates if we consider masters only or slaves not blocked too */
+	it->possibly_parallel = task->possibly_parallel; /* 0/1 => this field indicates if we consider masters only or slaves not blocked too */
 
 	int *workerids = (int *)workers->workerids;
 	unsigned nworkers = workers->nworkers;
@@ -278,7 +278,7 @@ static void list_init_iterator_for_parallel_tasks(struct starpu_worker_collectio
 		if(!starpu_worker_is_blocked(workerids[i]))
 		{
 			((int*)workers->unblocked_workers)[nub++] = workerids[i];
-			if(!possibly_parallel) /* don't bother filling the table with masters we won't use it anyway */
+			if(!it->possibly_parallel) /* don't bother filling the table with masters we won't use it anyway */
 				continue;
 			if(!starpu_worker_is_slave_somewhere(workerids[i]))
 				((int*)workers->masters)[nm++] = workerids[i];

+ 3 - 3
src/worker_collection/worker_tree.c

@@ -294,16 +294,16 @@ static void tree_init_iterator(struct starpu_worker_collection *workers, struct
 		it->visited[i] = 0;
 }
 
-static void tree_init_iterator_for_parallel_tasks(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, unsigned possibly_parallel)
+static void tree_init_iterator_for_parallel_tasks(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, struct starpu_task *task)
 {
 	tree_init_iterator(workers, it);
-	it->possibly_parallel = possibly_parallel;
+	it->possibly_parallel = task->possibly_parallel;
 	int i;
 	int nworkers = starpu_worker_get_count();
 	for(i = 0; i < nworkers; i++)
 	{
 		workers->is_unblocked[i] = (workers->present[i] && !starpu_worker_is_blocked(i));
-		if(!possibly_parallel) /* don't bother filling the table with masters we won't use it anyway */
+		if(!it->possibly_parallel) /* don't bother filling the table with masters we won't use it anyway */
 			continue;
 		workers->is_master[i] = (workers->present[i] && !starpu_worker_is_blocked(i) && !starpu_worker_is_slave_somewhere(i));
 	}