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
- Re: [Starpu-devel] [PATCH 5/7] src/sched_policies/deque_modeling_policy_data_aware.c: add a compute_all_performance_predictions() function., (suite)
- Re: [Starpu-devel] [PATCH 5/7] src/sched_policies/deque_modeling_policy_data_aware.c: add a compute_all_performance_predictions() function., Samuel Thibault, 19/10/2012
- [Starpu-devel] [PATCH 6/7] Reindent _dmda_push_task()., Cyril Roelandt, 16/10/2012
- Re: [Starpu-devel] [PATCH 6/7] Reindent _dmda_push_task()., Samuel Thibault, 19/10/2012
- [Starpu-devel] [PATCH 7/7] Handle bundles in deque_modeling_policy_data_aware.c., Cyril Roelandt, 16/10/2012
- Re: [Starpu-devel] [PATCH 7/7] Handle bundles in deque_modeling_policy_data_aware.c., Samuel Thibault, 19/10/2012
- [Starpu-devel] [PATCH 1/7] src/sched_policies/heft.c: use an array of _starpu_fifo_taskq* rather than multiple global variables., Cyril Roelandt, 16/10/2012
- Re: [Starpu-devel] [PATCH 0/7][Review needed] A first step towards the factorization of heft and dm*., Samuel Thibault, 19/10/2012
- Re: [Starpu-devel] [PATCH 0/7][Review needed] A first step towards the factorization of heft and dm*., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 1/6] src/sched_policies/heft.c: use an array of _starpu_fifo_taskq* rather than multiple global variables., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 2/6] _starpu_fifo_push_task(): Fix "TODO: if prio, put at back"., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 3/6] Heft: use a scheduler-specific fifo rather than pushing tasks directly to the workers' local tasks., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 4/6] heft.c: Remove the "bundle" parameter from compute_all_performance_predictions()., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 5/6] src/sched_policies/deque_modeling_policy_data_aware.c: add a compute_all_performance_predictions() function., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 6/6] Reindent _dmda_push_task()., Cyril Roelandt, 22/10/2012
- Re: [Starpu-devel] [PATCH 0/7][Review needed] A first step towards the factorization of heft and dm*., Samuel Thibault, 22/10/2012
- Re: [Starpu-devel] [PATCH 0/7][Review needed] A first step towards the factorization of heft and dm*., Cyril Roelandt, 22/10/2012
- [Starpu-devel] [PATCH v2 1/6] src/sched_policies/heft.c: use an array of _starpu_fifo_taskq* rather than multiple global variables., Cyril Roelandt, 22/10/2012
- Re: [Starpu-devel] [PATCH 0/7][Review needed] A first step towards the factorization of heft and dm*., Cyril Roelandt, 22/10/2012
Archives gérées par MHonArc 2.6.19+.