Sfoglia il codice sorgente

Add _starpu_fifo_pop_this_task.

Samuel Thibault 9 anni fa
parent
commit
0bab6cdf8e
3 ha cambiato i file con 23 aggiunte e 10 eliminazioni
  1. 1 0
      ChangeLog
  2. 20 9
      src/sched_policies/fifo_queues.c
  3. 2 1
      src/sched_policies/fifo_queues.h

+ 1 - 0
ChangeLog

@@ -183,6 +183,7 @@ Small features:
   * Add submit_hook and do_schedule scheduler methods.
   * Add starpu_sleep.
   * Add starpu_task_list_ismember.
+  * Add _starpu_fifo_pop_this_task.
 
 Changes:
   * Data interfaces (variable, vector, matrix and block) now define

+ 20 - 9
src/sched_policies/fifo_queues.c

@@ -212,6 +212,25 @@ int _starpu_fifo_push_back_task(struct _starpu_fifo_taskq *fifo_queue, struct st
 	return 0;
 }
 
+int _starpu_fifo_pop_this_task(struct _starpu_fifo_taskq *fifo_queue, int workerid, struct starpu_task *task)
+{
+	unsigned nimpl = 0;
+	STARPU_ASSERT(task);
+#ifdef STARPU_DEBUG
+	STARPU_ASSERT(starpu_task_list_ismember(&fifo_queue->taskq, task));
+#endif
+
+	if (workerid < 0 || starpu_worker_can_execute_task_first_impl(workerid, task, &nimpl))
+	{
+		starpu_task_set_implementation(task, nimpl);
+		starpu_task_list_erase(&fifo_queue->taskq, task);
+		fifo_queue->ntasks--;
+		return 1;
+	}
+
+	return 0;
+}
+
 struct starpu_task *_starpu_fifo_pop_task(struct _starpu_fifo_taskq *fifo_queue, int workerid)
 {
 	struct starpu_task *task;
@@ -220,16 +239,8 @@ struct starpu_task *_starpu_fifo_pop_task(struct _starpu_fifo_taskq *fifo_queue,
 	     task != starpu_task_list_end(&fifo_queue->taskq);
 	     task  = starpu_task_list_next(task))
 	{
-		unsigned nimpl = 0;
-		STARPU_ASSERT(task);
-
-		if (workerid < 0 || starpu_worker_can_execute_task_first_impl(workerid, task, &nimpl))
-		{
-			starpu_task_set_implementation(task, nimpl);
-			starpu_task_list_erase(&fifo_queue->taskq, task);
-			fifo_queue->ntasks--;
+		if (_starpu_fifo_pop_this_task(fifo_queue, workerid, task))
 			return task;
-		}
 	}
 
 	return NULL;

+ 2 - 1
src/sched_policies/fifo_queues.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2013  Université de Bordeaux
+ * Copyright (C) 2010-2013, 2016  Université de Bordeaux
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -57,6 +57,7 @@ int _starpu_fifo_push_sorted_task(struct _starpu_fifo_taskq *fifo_queue, struct
 int _starpu_fifo_push_task(struct _starpu_fifo_taskq *fifo, struct starpu_task *task);
 int _starpu_fifo_push_back_task(struct _starpu_fifo_taskq *fifo_queue, struct starpu_task *task);
 
+int _starpu_fifo_pop_this_task(struct _starpu_fifo_taskq *fifo_queue, int workerid, struct starpu_task *task);
 struct starpu_task *_starpu_fifo_pop_task(struct _starpu_fifo_taskq *fifo, int workerid);
 struct starpu_task *_starpu_fifo_pop_local_task(struct _starpu_fifo_taskq *fifo);
 struct starpu_task *_starpu_fifo_pop_every_task(struct _starpu_fifo_taskq *fifo, int workerid);