Accéder au contenu.
Menu Sympa

starpu-devel - [Starpu-devel] [PATCH v2 2/6] _starpu_fifo_push_task(): Fix "TODO: if prio, put at back".

Objet : Developers list for StarPU

Archives de la liste

[Starpu-devel] [PATCH v2 2/6] _starpu_fifo_push_task(): Fix "TODO: if prio, put at back".


Chronologique Discussions 
  • From: Cyril Roelandt <cyril.roelandt@inria.fr>
  • To: starpu-devel@lists.gforge.inria.fr
  • Subject: [Starpu-devel] [PATCH v2 2/6] _starpu_fifo_push_task(): Fix "TODO: if prio, put at back".
  • Date: Mon, 22 Oct 2012 04:56:32 +0200
  • List-archive: <http://lists.gforge.inria.fr/pipermail/starpu-devel>
  • List-id: "Developers list. For discussion of new features, code changes, etc." <starpu-devel.lists.gforge.inria.fr>

Move _starpu_fifo_push_sorted_task() from deque_modeling_policy_data_aware to
fifo_queues.c.

Signed-off-by: Cyril Roelandt <cyril.roelandt@inria.fr>
---
.../deque_modeling_policy_data_aware.c | 67 ---------------
trunk/src/sched_policies/fifo_queues.c | 89
+++++++++++++++++++-
trunk/src/sched_policies/fifo_queues.h | 5 +
3 files changed, 90 insertions(+), 71 deletions(-)

diff --git a/trunk/src/sched_policies/deque_modeling_policy_data_aware.c
b/trunk/src/sched_policies/deque_modeling_policy_data_aware.c
index 2eebba1..202f84f 100644
--- a/trunk/src/sched_policies/deque_modeling_policy_data_aware.c
+++ b/trunk/src/sched_policies/deque_modeling_policy_data_aware.c
@@ -200,73 +200,6 @@ static struct starpu_task *dmda_pop_every_task(void)
return new_list;
}

-static
-int _starpu_fifo_push_sorted_task(struct _starpu_fifo_taskq *fifo_queue,
pthread_mutex_t *sched_mutex, pthread_cond_t *sched_cond, struct starpu_task
*task)
-{
- struct starpu_task_list *list = &fifo_queue->taskq;
-
- _STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
-
- _STARPU_TRACE_JOB_PUSH(task, 0);
-
- if (list->head == NULL)
- {
- list->head = task;
- list->tail = task;
- task->prev = NULL;
- task->next = NULL;
- }
- else
- {
- struct starpu_task *current = list->head;
- struct starpu_task *prev = NULL;
-
- while (current)
- {
- if (current->priority >= task->priority)
- break;
-
- prev = current;
- current = current->next;
- }
-
- if (prev == NULL)
- {
- /* Insert at the front of the list */
- list->head->prev = task;
- task->prev = NULL;
- task->next = list->head;
- list->head = task;
- }
- else
- {
- if (current)
- {
- /* Insert between prev and current */
- task->prev = prev;
- prev->next = task;
- task->next = current;
- current->prev = task;
- }
- else
- {
- /* Insert at the tail of the list */
- list->tail->next = task;
- task->next = NULL;
- task->prev = list->tail;
- list->tail = task;
- }
- }
- }
-
- fifo_queue->ntasks++;
- fifo_queue->nprocessed++;
-
- _STARPU_PTHREAD_COND_SIGNAL(sched_cond);
- _STARPU_PTHREAD_MUTEX_UNLOCK(sched_mutex);
-
- return 0;
-}



diff --git a/trunk/src/sched_policies/fifo_queues.c
b/trunk/src/sched_policies/fifo_queues.c
index 72e44f7..ea5b1ea 100644
--- a/trunk/src/sched_policies/fifo_queues.c
+++ b/trunk/src/sched_policies/fifo_queues.c
@@ -52,14 +52,68 @@ int _starpu_fifo_empty(struct _starpu_fifo_taskq *fifo)
return fifo->ntasks == 0;
}

-/* TODO: revert front/back? */
-int _starpu_fifo_push_task(struct _starpu_fifo_taskq *fifo_queue,
pthread_mutex_t *sched_mutex, pthread_cond_t *sched_cond, struct starpu_task
*task)
+int
+_starpu_fifo_push_sorted_task(struct _starpu_fifo_taskq *fifo_queue,
+ pthread_mutex_t *sched_mutex,
+ pthread_cond_t *sched_cond,
+ struct starpu_task *task)
{
+ struct starpu_task_list *list = &fifo_queue->taskq;
+
_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);

_STARPU_TRACE_JOB_PUSH(task, 0);
- /* TODO: if prio, put at back */
- starpu_task_list_push_front(&fifo_queue->taskq, task);
+
+ if (list->head == NULL)
+ {
+ list->head = task;
+ list->tail = task;
+ task->prev = NULL;
+ task->next = NULL;
+ }
+ else
+ {
+ struct starpu_task *current = list->head;
+ struct starpu_task *prev = NULL;
+
+ while (current)
+ {
+ if (current->priority >= task->priority)
+ break;
+
+ prev = current;
+ current = current->next;
+ }
+
+ if (prev == NULL)
+ {
+ /* Insert at the front of the list */
+ list->head->prev = task;
+ task->prev = NULL;
+ task->next = list->head;
+ list->head = task;
+ }
+ else
+ {
+ if (current)
+ {
+ /* Insert between prev and current */
+ task->prev = prev;
+ prev->next = task;
+ task->next = current;
+ current->prev = task;
+ }
+ else
+ {
+ /* Insert at the tail of the list */
+ list->tail->next = task;
+ task->next = NULL;
+ task->prev = list->tail;
+ list->tail = task;
+ }
+ }
+ }
+
fifo_queue->ntasks++;
fifo_queue->nprocessed++;

@@ -69,6 +123,33 @@ int _starpu_fifo_push_task(struct _starpu_fifo_taskq
*fifo_queue, pthread_mutex_
return 0;
}

+/* TODO: revert front/back? */
+int _starpu_fifo_push_task(struct _starpu_fifo_taskq *fifo_queue,
pthread_mutex_t *sched_mutex, pthread_cond_t *sched_cond, struct starpu_task
*task)
+{
+
+ if (task->priority > 0)
+ {
+ _STARPU_TRACE_JOB_PUSH(task, 1);
+ _starpu_fifo_push_sorted_task(fifo_queue, sched_mutex,
+ sched_cond, task);
+ }
+ else
+ {
+ _STARPU_TRACE_JOB_PUSH(task, 0);
+
+ _STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
+ starpu_task_list_push_front(&fifo_queue->taskq, task);
+
+ fifo_queue->ntasks++;
+ fifo_queue->nprocessed++;
+
+ _STARPU_PTHREAD_COND_SIGNAL(sched_cond);
+ _STARPU_PTHREAD_MUTEX_UNLOCK(sched_mutex);
+ }
+
+ return 0;
+}
+
struct starpu_task *_starpu_fifo_pop_task(struct _starpu_fifo_taskq
*fifo_queue, int workerid)
{
struct starpu_task *task;
diff --git a/trunk/src/sched_policies/fifo_queues.h
b/trunk/src/sched_policies/fifo_queues.h
index c8dac4e..946cd38 100644
--- a/trunk/src/sched_policies/fifo_queues.h
+++ b/trunk/src/sched_policies/fifo_queues.h
@@ -44,6 +44,11 @@ void _starpu_destroy_fifo(struct _starpu_fifo_taskq *fifo);

int _starpu_fifo_empty(struct _starpu_fifo_taskq *fifo);

+int _starpu_fifo_push_sorted_task(struct _starpu_fifo_taskq *fifo_queue,
+ pthread_mutex_t *sched_mutex,
+ pthread_cond_t *sched_cond,
+ struct starpu_task *task);
+
int _starpu_fifo_push_task(struct _starpu_fifo_taskq *fifo, pthread_mutex_t
*sched_mutex, pthread_cond_t *sched_cond, struct starpu_task *task);

struct starpu_task *_starpu_fifo_pop_task(struct _starpu_fifo_taskq *fifo,
int workerid);
--
1.7.9






Archives gérées par MHonArc 2.6.19+.

Haut de le page