StarPU Handbook - StarPU Performances
starpu_scheduler_toolbox.h
Go to the documentation of this file.
1 /* StarPU --- Runtime system for heterogeneous multicore architectures.
2  *
3  * Copyright (C) 2008-2023 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
4  * Copyright (C) 2016 Uppsala University
5  *
6  * StarPU is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or (at
9  * your option) any later version.
10  *
11  * StarPU is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  *
15  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
16  */
17 
18 #ifndef __STARPU_SCHEDULER_TOOLBOX_FIFO_QUEUES_H__
19 #define __STARPU_SCHEDULER_TOOLBOX_FIFO_QUEUES_H__
20 
21 #include <starpu.h>
22 #include <starpu_scheduler.h>
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
44 typedef struct starpu_st_fifo_taskq *starpu_st_fifo_taskq_t;
45 
48 void starpu_st_fifo_taskq_init(starpu_st_fifo_taskq_t fifo);
49 void starpu_st_fifo_taskq_destroy(starpu_st_fifo_taskq_t fifo);
50 int starpu_st_fifo_taskq_empty(starpu_st_fifo_taskq_t fifo);
51 double starpu_st_fifo_taskq_get_exp_len_prev_task_list(starpu_st_fifo_taskq_t fifo_queue, struct starpu_task *task, int workerid, int nimpl, int *fifo_ntasks);
52 
55 
58 
61 
64 
67 
75 
81 
84 
87 
90 
93 
96 
99 
102 
105 
108 
109 int starpu_st_fifo_taskq_push_sorted_task(starpu_st_fifo_taskq_t fifo_queue, struct starpu_task *task);
110 int starpu_st_fifo_taskq_push_task(starpu_st_fifo_taskq_t fifo, struct starpu_task *task);
111 int starpu_st_fifo_taskq_push_back_task(starpu_st_fifo_taskq_t fifo_queue, struct starpu_task *task);
112 
113 int starpu_st_fifo_taskq_pop_this_task(starpu_st_fifo_taskq_t fifo_queue, int workerid, struct starpu_task *task);
114 struct starpu_task *starpu_st_fifo_taskq_pop_task(starpu_st_fifo_taskq_t fifo, int workerid);
121 
126 
130 typedef struct starpu_st_prio_deque *starpu_st_prio_deque_t;
131 
136 void starpu_st_prio_deque_destroy(starpu_st_prio_deque_t pdeque);
139 
140 int starpu_st_prio_deque_push_back_task(starpu_st_prio_deque_t pdeque, struct starpu_task *task);
143 
148 struct starpu_task *starpu_st_prio_deque_deque_first_ready_task(starpu_st_prio_deque_t pdeque, unsigned workerid);
149 
150 struct starpu_task *starpu_st_prio_deque_pop_task(starpu_st_prio_deque_t pdeque);
151 struct starpu_task *starpu_st_prio_deque_highest_task(starpu_st_prio_deque_t pdeque);
152 struct starpu_task *starpu_st_prio_deque_pop_back_task(starpu_st_prio_deque_t pdeque);
153 int starpu_st_prio_deque_pop_this_task(starpu_st_prio_deque_t pdeque, int workerid, struct starpu_task *task);
154 
155 void starpu_st_prio_deque_erase(starpu_st_prio_deque_t pdeque, struct starpu_task *task);
156 
157 int starpu_st_normalize_prio(int priority, int num_priorities, unsigned sched_ctx_id);
158 int starpu_st_non_ready_buffers_count(struct starpu_task *task, unsigned worker);
159 void starpu_st_non_ready_buffers_size(struct starpu_task *task, unsigned worker, size_t *non_readyp, size_t *non_loadingp, size_t *non_allocatedp);
160 
163 #ifdef __cplusplus
164 }
165 #endif
166 
167 #endif /* __STARPU_SCHEDULER_TOOLBOX_FIFO_QUEUES_H__ */
unsigned workerid
Definition: starpu_task.h:1186
int priority
Definition: starpu_task.h:1250
Definition: starpu_task.h:662
double starpu_st_fifo_exp_start_get(starpu_st_fifo_taskq_t fifo)
double starpu_st_fifo_exp_end_get(starpu_st_fifo_taskq_t fifo)
int starpu_st_prio_deque_is_empty(starpu_st_prio_deque_t pdeque)
void starpu_st_prio_deque_init(starpu_st_prio_deque_t pdeque)
void starpu_st_fifo_exp_len_set(starpu_st_fifo_taskq_t fifo, double exp_len)
double * starpu_st_fifo_exp_len_per_priority_get(starpu_st_fifo_taskq_t fifo)
unsigned * starpu_st_fifo_ntasks_per_priority_get(starpu_st_fifo_taskq_t fifo)
void starpu_st_fifo_pipeline_len_inc(starpu_st_fifo_taskq_t fifo, double pipeline_len)
double starpu_st_fifo_pipeline_len_get(starpu_st_fifo_taskq_t fifo)
struct starpu_st_prio_deque * starpu_st_prio_deque_t
Definition: starpu_scheduler_toolbox.h:130
void starpu_st_fifo_exp_len_inc(starpu_st_fifo_taskq_t fifo, double exp_len)
struct starpu_task * starpu_st_prio_deque_pop_task_for_worker(starpu_st_prio_deque_t pdeque, int workerid, struct starpu_task **skipped)
int starpu_st_prio_deque_push_front_task(starpu_st_prio_deque_t pdeque, struct starpu_task *task)
unsigned starpu_st_fifo_ntasks_get(starpu_st_fifo_taskq_t fifo)
starpu_st_fifo_taskq_t starpu_st_fifo_taskq_create(void) STARPU_ATTRIBUTE_MALLOC
void starpu_st_fifo_exp_start_set(starpu_st_fifo_taskq_t fifo, double exp_start)
struct starpu_st_fifo_taskq * starpu_st_fifo_taskq_t
Definition: starpu_scheduler_toolbox.h:44
void starpu_st_fifo_pipeline_len_set(starpu_st_fifo_taskq_t fifo, double pipeline_len)
void starpu_st_fifo_exp_end_set(starpu_st_fifo_taskq_t fifo, double exp_end)
struct starpu_task * starpu_st_fifo_taskq_pop_first_ready_task(starpu_st_fifo_taskq_t fifo_queue, unsigned workerid, int num_priorities)
void starpu_st_fifo_nprocessed_inc(starpu_st_fifo_taskq_t fifo, int n)
struct starpu_task * starpu_st_fifo_taskq_pop_local_task(starpu_st_fifo_taskq_t fifo)
unsigned starpu_st_fifo_nprocessed_get(starpu_st_fifo_taskq_t fifo)
void starpu_st_fifo_ntasks_inc(starpu_st_fifo_taskq_t fifo, int n)
double starpu_st_fifo_exp_len_get(starpu_st_fifo_taskq_t fifo)
struct starpu_task * starpu_st_prio_deque_deque_task_for_worker(starpu_st_prio_deque_t pdeque, int workerid, struct starpu_task **skipped)
#define STARPU_ATTRIBUTE_MALLOC
Definition: starpu_util.h:129