StarPU Handbook
starpu_worker.h
Go to the documentation of this file.
1 /* StarPU --- Runtime system for heterogeneous multicore architectures.
2  *
3  * Copyright (C) 2013-2017 Inria
4  * Copyright (C) 2010-2015,2017,2019 CNRS
5  * Copyright (C) 2009-2014,2016,2017,2019 Université de Bordeaux
6  * Copyright (C) 2013 Thibaut Lambert
7  * Copyright (C) 2016 Uppsala University
8  *
9  * StarPU is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or (at
12  * your option) any later version.
13  *
14  * StarPU is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17  *
18  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
19  */
20 
21 #ifndef __STARPU_WORKER_H__
22 #define __STARPU_WORKER_H__
23 
24 #include <stdlib.h>
25 #include <starpu_config.h>
26 #include <starpu_thread.h>
27 #include <starpu_task.h>
28 
29 #ifdef STARPU_HAVE_HWLOC
30 #include <hwloc.h>
31 #endif
32 
33 #ifdef __cplusplus
34 extern "C"
35 {
36 #endif
37 
43 enum starpu_node_kind
44 {
45  STARPU_UNUSED=0,
46  STARPU_CPU_RAM=1,
47  STARPU_CUDA_RAM=2,
48  STARPU_OPENCL_RAM=3,
49  STARPU_DISK_RAM=4,
50  STARPU_MIC_RAM=5,
51  STARPU_MPI_MS_RAM=6
52 };
53 
62 {
69 };
70 
75 {
80  int cursor;
81  void *value;
82  void *possible_value;
83  char visited[STARPU_NMAXWORKERS];
84  int possibly_parallel;
85 };
86 
91 {
94 };
95 
104 {
108  int *workerids;
109  void *collection_private;
113  unsigned nworkers;
114  void *unblocked_workers;
115  unsigned nunblocked_workers;
116  void *masters;
117  unsigned nmasters;
118  char present[STARPU_NMAXWORKERS];
119  char is_unblocked[STARPU_NMAXWORKERS];
120  char is_master[STARPU_NMAXWORKERS];
128  unsigned (*has_next)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it);
132  int (*get_next)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it);
136  int (*add)(struct starpu_worker_collection *workers, int worker);
140  int (*remove)(struct starpu_worker_collection *workers, int worker);
144  void (*init)(struct starpu_worker_collection *workers);
148  void (*deinit)(struct starpu_worker_collection *workers);
153  void (*init_iterator_for_parallel_tasks)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it, struct starpu_task *task);
154 };
155 
156 extern struct starpu_worker_collection worker_list;
157 extern struct starpu_worker_collection worker_tree;
158 
164 unsigned starpu_worker_get_count(void);
165 
170 unsigned starpu_cpu_worker_get_count(void);
171 
176 unsigned starpu_cuda_worker_get_count(void);
177 
182 unsigned starpu_opencl_worker_get_count(void);
183 
187 unsigned starpu_mic_worker_get_count(void);
188 
192 unsigned starpu_mpi_ms_worker_get_count(void);
193 
198 unsigned starpu_mic_device_get_count(void);
199 
207 int starpu_worker_get_id(void);
208 
209 unsigned _starpu_worker_get_id_check(const char *f, int l);
210 
216 unsigned starpu_worker_get_id_check(void);
217 
218 #define starpu_worker_get_id_check() _starpu_worker_get_id_check(__FILE__, __LINE__)
219 int starpu_worker_get_bindid(int workerid);
220 
221 void starpu_sched_find_all_worker_combinations(void);
222 
233 
240 
253 unsigned starpu_worker_get_ids_by_type(enum starpu_worker_archtype type, int *workerids, unsigned maxsize);
254 
260 
268 
278 void starpu_worker_get_name(int id, char *dst, size_t maxlen);
279 
285 
296 int starpu_worker_get_devid(int id);
297 
298 int starpu_worker_get_mp_nodeid(int id);
299 
300 struct starpu_tree* starpu_workers_get_tree(void);
301 
302 unsigned starpu_worker_get_sched_ctx_list(int worker, unsigned **sched_ctx);
303 
304 unsigned starpu_worker_is_blocked_in_parallel(int workerid);
305 
306 unsigned starpu_worker_is_slave_somewhere(int workerid);
307 
312 
313 int starpu_bindid_get_workerids(int bindid, int **workerids);
314 
315 int starpu_worker_get_devids(enum starpu_worker_archtype type, int *devids, int num);
316 
317 int starpu_worker_get_stream_workerids(unsigned devid, int *workerids, enum starpu_worker_archtype type);
318 
319 unsigned starpu_worker_get_sched_ctx_id_stream(unsigned stream_workerid);
320 
321 #ifdef STARPU_HAVE_HWLOC
322 
328 hwloc_cpuset_t starpu_worker_get_hwloc_cpuset(int workerid);
333 hwloc_obj_t starpu_worker_get_hwloc_obj(int workerid);
334 #endif
335 
336 int starpu_memory_node_get_devid(unsigned node);
337 
342 
347 unsigned starpu_worker_get_memory_node(unsigned workerid);
348 
349 unsigned starpu_memory_nodes_get_count(void);
350 int starpu_memory_node_get_name(unsigned node, char *name, size_t size);
351 int starpu_memory_nodes_get_numa_count(void);
352 
358 
363 int starpu_memory_nodes_numa_devid_to_id(unsigned id);
364 
371 enum starpu_node_kind starpu_node_get_kind(unsigned node);
372 
383 
395 void starpu_worker_relax_on(void);
396 
405 void starpu_worker_relax_off(void);
406 
412 
418 void starpu_worker_lock(int workerid);
419 
427 int starpu_worker_trylock(int workerid);
428 
433 void starpu_worker_unlock(int workerid);
434 
438 void starpu_worker_lock_self(void);
439 
443 void starpu_worker_unlock_self(void);
444 
445 #ifdef STARPU_WORKER_CALLBACKS
446 
451 void starpu_worker_set_going_to_sleep_callback(void (*callback)(unsigned workerid));
452 
458 void starpu_worker_set_waking_up_callback(void (*callback)(unsigned workerid));
459 #endif
460 
473 unsigned starpu_combined_worker_get_count(void);
474 unsigned starpu_worker_is_combined_worker(int id);
475 
480 
488 
495 
499 int starpu_combined_worker_assign_workerid(int nworkers, int workerid_array[]);
500 
504 int starpu_combined_worker_get_description(int workerid, int *worker_size, int **combined_workerid);
505 
510 int starpu_combined_worker_can_execute_task(unsigned workerid, struct starpu_task *task, unsigned nimpl);
511 
516 void starpu_parallel_task_barrier_init(struct starpu_task *task, int workerid);
517 
523 void starpu_parallel_task_barrier_init_n(struct starpu_task *task, int worker_size);
524 
527 #ifdef __cplusplus
528 }
529 #endif
530 
531 #endif /* __STARPU_WORKER_H__ */
enum starpu_node_kind starpu_node_get_kind(unsigned node)
void starpu_worker_relax_off(void)
unsigned starpu_mic_worker_get_count(void)
void starpu_worker_display_names(FILE *output, enum starpu_worker_archtype type)
unsigned starpu_mic_device_get_count(void)
int starpu_combined_worker_get_description(int workerid, int *worker_size, int **combined_workerid)
int * workerids
Definition: starpu_worker.h:108
Definition: starpu_worker.h:103
int starpu_combined_worker_get_size(void)
Definition: starpu_worker.h:66
Definition: starpu_worker.h:63
int starpu_combined_worker_get_id(void)
Definition: starpu_worker.h:64
int starpu_combined_worker_can_execute_task(unsigned workerid, struct starpu_task *task, unsigned nimpl)
int starpu_combined_worker_get_rank(void)
starpu_worker_archtype
Definition: starpu_worker.h:61
int cursor
Definition: starpu_worker.h:80
int starpu_worker_get_by_type(enum starpu_worker_archtype type, int num)
Definition: starpu_worker.h:74
void starpu_worker_lock_self(void)
Definition: starpu_worker.h:92
unsigned starpu_combined_worker_get_count(void)
Definition: starpu_worker.h:68
void starpu_worker_relax_on(void)
void starpu_worker_set_going_to_sleep_callback(void(*callback)(unsigned workerid))
unsigned starpu_worker_get_local_memory_node(void)
int starpu_worker_sched_op_pending(void)
void starpu_parallel_task_barrier_init(struct starpu_task *task, int workerid)
Definition: starpu_task.h:548
int starpu_worker_trylock(int workerid)
void starpu_worker_lock(int workerid)
Definition: starpu_tree.h:33
int starpu_memory_nodes_numa_id_to_devid(int osid)
void(* init)(struct starpu_worker_collection *workers)
Definition: starpu_worker.h:144
void starpu_worker_unlock(int workerid)
int starpu_worker_get_relax_state(void)
unsigned starpu_mpi_ms_worker_get_count(void)
int starpu_memory_nodes_numa_devid_to_id(unsigned id)
int starpu_worker_get_by_devid(enum starpu_worker_archtype type, int devid)
unsigned starpu_cpu_worker_get_count(void)
void(* init_iterator)(struct starpu_worker_collection *workers, struct starpu_sched_ctx_iterator *it)
Definition: starpu_worker.h:152
enum starpu_worker_archtype starpu_worker_get_type(int id)
#define STARPU_NMAXWORKERS
Definition: starpu_config.h:115
unsigned starpu_worker_get_ids_by_type(enum starpu_worker_archtype type, int *workerids, unsigned maxsize)
void starpu_parallel_task_barrier_init_n(struct starpu_task *task, int worker_size)
Definition: starpu_worker.h:65
void starpu_worker_set_waking_up_callback(void(*callback)(unsigned workerid))
unsigned nworkers
Definition: starpu_worker.h:113
void starpu_worker_get_name(int id, char *dst, size_t maxlen)
Definition: starpu_worker.h:67
char * starpu_worker_get_type_as_string(enum starpu_worker_archtype type)
unsigned starpu_opencl_worker_get_count(void)
hwloc_cpuset_t starpu_worker_get_hwloc_cpuset(int workerid)
hwloc_obj_t starpu_worker_get_hwloc_obj(int workerid)
enum starpu_worker_collection_type type
Definition: starpu_worker.h:124
unsigned starpu_worker_get_memory_node(unsigned workerid)
int starpu_worker_get_id(void)
int starpu_combined_worker_assign_workerid(int nworkers, int workerid_array[])
void(* deinit)(struct starpu_worker_collection *workers)
Definition: starpu_worker.h:148
unsigned starpu_worker_get_count(void)
void starpu_worker_unlock_self(void)
#define starpu_worker_get_id_check()
Definition: starpu_worker.h:218
starpu_worker_collection_type
Definition: starpu_worker.h:90
Definition: starpu_worker.h:93
unsigned starpu_cuda_worker_get_count(void)
int starpu_worker_get_devid(int id)
int starpu_worker_get_count_by_type(enum starpu_worker_archtype type)