17 #ifndef __PRIO_DEQUE_H__
18 #define __PRIO_DEQUE_H__
20 #include <starpu_scheduler.h>
27 struct starpu_task_prio_list list;
35 double exp_start, exp_end, exp_len;
40 memset(pdeque,0,
sizeof(*pdeque));
41 starpu_task_prio_list_init(&pdeque->list);
46 starpu_task_prio_list_deinit(&pdeque->list);
52 return pdeque->ntasks == 0;
55 static inline void _starpu_prio_deque_erase(
struct _starpu_prio_deque *pdeque,
struct starpu_task *task)
57 starpu_task_prio_list_erase(&pdeque->list, task);
63 starpu_task_prio_list_push_front(&pdeque->list, task);
67 static inline int _starpu_prio_deque_push_back_task(
struct _starpu_prio_deque *pdeque,
struct starpu_task *task)
69 starpu_task_prio_list_push_back(&pdeque->list, task);
73 int _starpu_prio_deque_push_back_task(
struct _starpu_prio_deque *,
struct starpu_task *);
76 static inline struct starpu_task * _starpu_prio_deque_highest_task(
struct _starpu_prio_deque *pdeque)
78 struct starpu_task *task;
79 if (starpu_task_prio_list_empty(&pdeque->list))
81 task = starpu_task_prio_list_front_highest(&pdeque->list);
91 struct starpu_task *task;
92 if (starpu_task_prio_list_empty(&pdeque->list))
94 task = starpu_task_prio_list_pop_front_highest(&pdeque->list);
99 static inline struct starpu_task * _starpu_prio_deque_pop_back_task(
struct _starpu_prio_deque *pdeque)
101 struct starpu_task *task;
102 if (starpu_task_prio_list_empty(&pdeque->list))
104 task = starpu_task_prio_list_pop_back_lowest(&pdeque->list);
109 static inline int _starpu_prio_deque_pop_this_task(
struct _starpu_prio_deque *pdeque,
int workerid,
struct starpu_task *task)
113 STARPU_ASSERT(starpu_task_prio_list_ismember(&pdeque->list, task));
116 if (workerid < 0 || starpu_worker_can_execute_task_first_impl(workerid, task, &nimpl))
118 starpu_task_set_implementation(task, nimpl);
119 starpu_task_prio_list_erase(&pdeque->list, task);
135 struct starpu_task *_starpu_prio_deque_deque_first_ready_task(
struct _starpu_prio_deque *,
unsigned workerid);
static struct starpu_task * _starpu_prio_deque_pop_task(struct _starpu_prio_deque *pdeque)
Definition: prio_deque.h:89
struct starpu_task * _starpu_prio_deque_deque_task_for_worker(struct _starpu_prio_deque *, int workerid, int *skipped)
struct starpu_task * _starpu_prio_deque_pop_task_for_worker(struct _starpu_prio_deque *, int workerid, int *skipped)
static int _starpu_prio_deque_is_empty(struct _starpu_prio_deque *pdeque)
Definition: prio_deque.h:50
static int _starpu_prio_deque_push_front_task(struct _starpu_prio_deque *pdeque, struct starpu_task *task)
Definition: prio_deque.h:61
Definition: prio_deque.h:26