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);
42 STARPU_HG_DISABLE_CHECKING(pdeque->exp_start);
43 STARPU_HG_DISABLE_CHECKING(pdeque->exp_end);
44 STARPU_HG_DISABLE_CHECKING(pdeque->exp_len);
49 starpu_task_prio_list_deinit(&pdeque->list);
55 return pdeque->ntasks == 0;
58 static inline void _starpu_prio_deque_erase(
struct _starpu_prio_deque *pdeque,
struct starpu_task *task)
60 starpu_task_prio_list_erase(&pdeque->list, task);
66 starpu_task_prio_list_push_front(&pdeque->list, task);
70 static inline int _starpu_prio_deque_push_back_task(
struct _starpu_prio_deque *pdeque,
struct starpu_task *task)
72 starpu_task_prio_list_push_back(&pdeque->list, task);
76 int _starpu_prio_deque_push_back_task(
struct _starpu_prio_deque *,
struct starpu_task *);
79 static inline struct starpu_task * _starpu_prio_deque_highest_task(
struct _starpu_prio_deque *pdeque)
81 struct starpu_task *task;
82 if (starpu_task_prio_list_empty(&pdeque->list))
84 task = starpu_task_prio_list_front_highest(&pdeque->list);
94 struct starpu_task *task;
95 if (starpu_task_prio_list_empty(&pdeque->list))
97 task = starpu_task_prio_list_pop_front_highest(&pdeque->list);
102 static inline struct starpu_task * _starpu_prio_deque_pop_back_task(
struct _starpu_prio_deque *pdeque)
104 struct starpu_task *task;
105 if (starpu_task_prio_list_empty(&pdeque->list))
107 task = starpu_task_prio_list_pop_back_lowest(&pdeque->list);
112 static inline int _starpu_prio_deque_pop_this_task(
struct _starpu_prio_deque *pdeque,
int workerid,
struct starpu_task *task)
116 STARPU_ASSERT(starpu_task_prio_list_ismember(&pdeque->list, task));
119 if (workerid < 0 || starpu_worker_can_execute_task_first_impl(workerid, task, &nimpl))
121 starpu_task_set_implementation(task, nimpl);
122 starpu_task_prio_list_erase(&pdeque->list, task);
138 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:92
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:53
static int _starpu_prio_deque_push_front_task(struct _starpu_prio_deque *pdeque, struct starpu_task *task)
Definition: prio_deque.h:64
Definition: prio_deque.h:26