Bladeren bron

Add to _starpu_prio_deque_pop_task_for_worker and _starpu_prio_deque_deque_task_for_worker a skipped paramter, to know whether some tasks were there, but can not be executed by the worker

Samuel Thibault 8 jaren geleden
bovenliggende
commit
24cf50b5a3

+ 1 - 1
src/sched_policies/component_work_stealing.c

@@ -57,7 +57,7 @@ static struct starpu_task *  steal_task_round_robin(struct starpu_sched_componen
 		struct _starpu_prio_deque * fifo = wsd->fifos[i];
 
 		STARPU_PTHREAD_MUTEX_LOCK(wsd->mutexes[i]);
-		task = _starpu_prio_deque_deque_task_for_worker(fifo, workerid);
+		task = _starpu_prio_deque_deque_task_for_worker(fifo, workerid, NULL);
 		if(task && !isnan(task->predicted))
 		{
 			fifo->exp_len -= task->predicted;

+ 1 - 1
src/sched_policies/graph_test_policy.c

@@ -320,7 +320,7 @@ static struct starpu_task *pop_task_graph_test_policy(unsigned sched_ctx_id)
 		return NULL;
 	}
 
-	chosen_task = _starpu_prio_deque_pop_task_for_worker(prio, workerid);
+	chosen_task = _starpu_prio_deque_pop_task_for_worker(prio, workerid, NULL);
 	if (!chosen_task)
 		/* Tell pushers that we are waiting for tasks for us */
 		starpu_bitmap_set(data->waiters, workerid);

+ 5 - 2
src/sched_policies/prio_deque.c

@@ -51,6 +51,9 @@ static inline int pred_can_execute(struct starpu_task * t, void * pworkerid)
 				pdeque->ntasks--;				\
 				return t;					\
 			}							\
+			else							\
+				if (skipped)					\
+					*skipped = 1;				\
 		}								\
 		return NULL;							\
 	}
@@ -58,7 +61,7 @@ static inline int pred_can_execute(struct starpu_task * t, void * pworkerid)
 /* deque a task of the higher priority available */
 
 /* From the front of the list for the highest priority */
-struct starpu_task * _starpu_prio_deque_pop_task_for_worker(struct _starpu_prio_deque * pdeque, int workerid)
+struct starpu_task * _starpu_prio_deque_pop_task_for_worker(struct _starpu_prio_deque * pdeque, int workerid, int *skipped)
 {
 	STARPU_ASSERT(pdeque);
 	STARPU_ASSERT(workerid >= 0 && (unsigned) workerid < starpu_worker_get_count());
@@ -66,7 +69,7 @@ struct starpu_task * _starpu_prio_deque_pop_task_for_worker(struct _starpu_prio_
 }
 
 /* From the back of the list for the highest priority */
-struct starpu_task * _starpu_prio_deque_deque_task_for_worker(struct _starpu_prio_deque * pdeque, int workerid)
+struct starpu_task * _starpu_prio_deque_deque_task_for_worker(struct _starpu_prio_deque * pdeque, int workerid, int *skipped)
 {
 	STARPU_ASSERT(pdeque);
 	STARPU_ASSERT(workerid >= 0 && (unsigned) workerid < starpu_worker_get_count());

+ 2 - 2
src/sched_policies/prio_deque.h

@@ -75,7 +75,7 @@ static inline struct starpu_task * _starpu_prio_deque_pop_task(struct _starpu_pr
 
 /* return a task that can be executed by workerid
  */
-struct starpu_task * _starpu_prio_deque_pop_task_for_worker(struct _starpu_prio_deque *, int workerid);
+struct starpu_task * _starpu_prio_deque_pop_task_for_worker(struct _starpu_prio_deque *, int workerid, int *skipped);
 
 /* deque a task of the higher priority available */
 static inline struct starpu_task * _starpu_prio_deque_deque_task(struct _starpu_prio_deque *pdeque)
@@ -88,6 +88,6 @@ static inline struct starpu_task * _starpu_prio_deque_deque_task(struct _starpu_
 
 /* return a task that can be executed by workerid
  */
-struct starpu_task * _starpu_prio_deque_deque_task_for_worker(struct _starpu_prio_deque *, int workerid);
+struct starpu_task * _starpu_prio_deque_deque_task_for_worker(struct _starpu_prio_deque *, int workerid, int *skipped);
 
 #endif /* __PRIO_DEQUE_H__ */