StarPU Handbook
starpu_openmp.h
Go to the documentation of this file.
1 /* StarPU --- Runtime system for heterogeneous multicore architectures.
2  *
3  * Copyright (C) 2014,2015,2017,2019 CNRS
4  * Copyright (C) 2014-2016,2018 Inria
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_OPENMP_H__
19 #define __STARPU_OPENMP_H__
20 
21 #include <starpu_config.h>
22 
29 #if defined STARPU_OPENMP
30 
39 typedef struct { void *internal; } starpu_omp_lock_t;
40 
50 typedef struct { void *internal; } starpu_omp_nest_lock_t;
51 
63 {
70 };
71 
78 {
85 };
86 
92 {
108  void *cl_arg;
113  size_t cl_arg_size;
118  unsigned cl_arg_free;
119 
125 
135 };
136 
142 {
159  void *cl_arg;
164  size_t cl_arg_size;
169  unsigned cl_arg_free;
170  int priority;
171 
182 
193 
197  int is_loop;
198  int nogroup_clause;
199 
200  int collapse;
201  int num_tasks;
202  unsigned long long nb_iterations;
203  unsigned long long grainsize;
204  unsigned long long begin_i;
205  unsigned long long end_i;
206  unsigned long long chunk;
207 };
208 
209 #ifdef __cplusplus
210 extern "C"
211 {
212 #define __STARPU_OMP_NOTHROW throw ()
213 #else
214 #define __STARPU_OMP_NOTHROW __attribute__((__nothrow__))
215 #endif
216 
225 extern int starpu_omp_init(void) __STARPU_OMP_NOTHROW;
229 extern void starpu_omp_shutdown(void) __STARPU_OMP_NOTHROW;
230 
247 extern void starpu_omp_parallel_region(const struct starpu_omp_parallel_region_attr *attr) __STARPU_OMP_NOTHROW;
248 
257 extern void starpu_omp_master(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
258 
268 extern int starpu_omp_master_inline(void) __STARPU_OMP_NOTHROW;
269 
285 extern void starpu_omp_barrier(void) __STARPU_OMP_NOTHROW;
286 
298 extern void starpu_omp_critical(void (*f)(void *arg), void *arg, const char *name) __STARPU_OMP_NOTHROW;
299 
309 extern void starpu_omp_critical_inline_begin(const char *name) __STARPU_OMP_NOTHROW;
310 
320 extern void starpu_omp_critical_inline_end(const char *name) __STARPU_OMP_NOTHROW;
321 
339 extern void starpu_omp_single(void (*f)(void *arg), void *arg, int nowait) __STARPU_OMP_NOTHROW;
340 
351 extern int starpu_omp_single_inline(void) __STARPU_OMP_NOTHROW;
352 
365 extern void starpu_omp_single_copyprivate(void (*f)(void *arg, void *data, unsigned long long data_size), void *arg, void *data, unsigned long long data_size) __STARPU_OMP_NOTHROW;
366 
377 extern void *starpu_omp_single_copyprivate_inline_begin(void *data) __STARPU_OMP_NOTHROW;
378 
391 extern void starpu_omp_single_copyprivate_inline_end(void) __STARPU_OMP_NOTHROW;
392 
413 extern void starpu_omp_for(void (*f)(unsigned long long _first_i, unsigned long long _nb_i, void *arg), void *arg, unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, int nowait) __STARPU_OMP_NOTHROW;
414 
433 extern int starpu_omp_for_inline_first(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_first_i, unsigned long long *_nb_i) __STARPU_OMP_NOTHROW;
434 
453 extern int starpu_omp_for_inline_next(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_first_i, unsigned long long *_nb_i) __STARPU_OMP_NOTHROW;
454 
467 extern void starpu_omp_for_alt(void (*f)(unsigned long long _begin_i, unsigned long long _end_i, void *arg), void *arg, unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, int nowait) __STARPU_OMP_NOTHROW;
468 
479 extern int starpu_omp_for_inline_first_alt(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_begin_i, unsigned long long *_end_i) __STARPU_OMP_NOTHROW;
480 
491 extern int starpu_omp_for_inline_next_alt(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_begin_i, unsigned long long *_end_i) __STARPU_OMP_NOTHROW;
492 
501 extern void starpu_omp_ordered(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
502 
510 extern void starpu_omp_ordered_inline_begin(void) __STARPU_OMP_NOTHROW;
511 
518 extern void starpu_omp_ordered_inline_end(void) __STARPU_OMP_NOTHROW;
519 
530 extern void starpu_omp_sections(unsigned long long nb_sections, void (**section_f)(void *arg), void **section_arg, int nowait) __STARPU_OMP_NOTHROW;
531 
546 extern void starpu_omp_sections_combined(unsigned long long nb_sections, void (*section_f)(unsigned long long section_num, void *arg), void *section_arg, int nowait) __STARPU_OMP_NOTHROW;
547 
563 extern void starpu_omp_task_region(const struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW;
564 
572 extern void starpu_omp_taskwait(void) __STARPU_OMP_NOTHROW;
573 
583 extern void starpu_omp_taskgroup(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
584 
594 extern void starpu_omp_taskgroup_inline_begin(void) __STARPU_OMP_NOTHROW;
595 
605 extern void starpu_omp_taskgroup_inline_end(void) __STARPU_OMP_NOTHROW;
606 
607 extern void starpu_omp_taskloop_inline_begin(struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW;
608 
609 extern void starpu_omp_taskloop_inline_end(const struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW;
610 
631 extern void starpu_omp_set_num_threads(int threads) __STARPU_OMP_NOTHROW;
632 
643 extern int starpu_omp_get_num_threads() __STARPU_OMP_NOTHROW;
644 
656 extern int starpu_omp_get_thread_num() __STARPU_OMP_NOTHROW;
657 
669 extern int starpu_omp_get_max_threads() __STARPU_OMP_NOTHROW;
670 
681 extern int starpu_omp_get_num_procs(void) __STARPU_OMP_NOTHROW;
682 
689 extern int starpu_omp_in_parallel(void) __STARPU_OMP_NOTHROW;
690 
698 extern void starpu_omp_set_dynamic(int dynamic_threads) __STARPU_OMP_NOTHROW;
699 
708 extern int starpu_omp_get_dynamic(void) __STARPU_OMP_NOTHROW;
709 
721 extern void starpu_omp_set_nested(int nested) __STARPU_OMP_NOTHROW;
722 
735 extern int starpu_omp_get_nested(void) __STARPU_OMP_NOTHROW;
736 
740 extern int starpu_omp_get_cancellation(void) __STARPU_OMP_NOTHROW;
741 
750 extern void starpu_omp_set_schedule(enum starpu_omp_sched_value kind, int modifier) __STARPU_OMP_NOTHROW;
751 
759 extern void starpu_omp_get_schedule(enum starpu_omp_sched_value *kind, int *modifier) __STARPU_OMP_NOTHROW;
760 
766 extern int starpu_omp_get_thread_limit(void) __STARPU_OMP_NOTHROW;
767 
779 extern void starpu_omp_set_max_active_levels(int max_levels) __STARPU_OMP_NOTHROW;
780 
792 extern int starpu_omp_get_max_active_levels(void) __STARPU_OMP_NOTHROW;
793 
805 extern int starpu_omp_get_level(void) __STARPU_OMP_NOTHROW;
806 
812 extern int starpu_omp_get_ancestor_thread_num(int level) __STARPU_OMP_NOTHROW;
813 
819 extern int starpu_omp_get_team_size(int level) __STARPU_OMP_NOTHROW;
820 
832 extern int starpu_omp_get_active_level(void) __STARPU_OMP_NOTHROW;
833 
840 extern int starpu_omp_in_final(void) __STARPU_OMP_NOTHROW;
841 
847 extern enum starpu_omp_proc_bind_value starpu_omp_get_proc_bind(void) __STARPU_OMP_NOTHROW;
848 
849 extern int starpu_omp_get_num_places(void) __STARPU_OMP_NOTHROW;
850 
851 extern int starpu_omp_get_place_num_procs(int place_num) __STARPU_OMP_NOTHROW;
852 
853 extern void starpu_omp_get_place_proc_ids(int place_num, int *ids) __STARPU_OMP_NOTHROW;
854 
855 extern int starpu_omp_get_place_num(void) __STARPU_OMP_NOTHROW;
856 
857 extern int starpu_omp_get_partition_num_places(void) __STARPU_OMP_NOTHROW;
858 
859 extern void starpu_omp_get_partition_place_nums(int *place_nums) __STARPU_OMP_NOTHROW;
860 
869 extern void starpu_omp_set_default_device(int device_num) __STARPU_OMP_NOTHROW;
870 
879 extern int starpu_omp_get_default_device(void) __STARPU_OMP_NOTHROW;
880 
886 extern int starpu_omp_get_num_devices(void) __STARPU_OMP_NOTHROW;
887 
895 extern int starpu_omp_get_num_teams(void) __STARPU_OMP_NOTHROW;
896 
904 extern int starpu_omp_get_team_num(void) __STARPU_OMP_NOTHROW;
905 
909 extern int starpu_omp_is_initial_device(void) __STARPU_OMP_NOTHROW;
910 
913 extern int starpu_omp_get_initial_device(void) __STARPU_OMP_NOTHROW;
914 
925 extern int starpu_omp_get_max_task_priority(void) __STARPU_OMP_NOTHROW;
926 
935 extern void starpu_omp_init_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
936 
945 extern void starpu_omp_destroy_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
946 
956 extern void starpu_omp_set_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
957 
967 extern void starpu_omp_unset_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
968 
981 extern int starpu_omp_test_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
982 
991 extern void starpu_omp_init_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
992 
1001 extern void starpu_omp_destroy_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1002 
1015 extern void starpu_omp_set_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1016 
1031 extern void starpu_omp_unset_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1032 
1048 extern int starpu_omp_test_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1049 
1057 extern void starpu_omp_atomic_fallback_inline_begin(void) __STARPU_OMP_NOTHROW;
1058 
1065 extern void starpu_omp_atomic_fallback_inline_end(void) __STARPU_OMP_NOTHROW;
1066 
1074 extern double starpu_omp_get_wtime(void) __STARPU_OMP_NOTHROW;
1075 
1083 extern double starpu_omp_get_wtick(void) __STARPU_OMP_NOTHROW;
1084 
1093 extern void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base) __STARPU_OMP_NOTHROW;
1094 
1097 extern struct starpu_arbiter *starpu_omp_get_default_arbiter(void) __STARPU_OMP_NOTHROW;
1098 
1101 #ifdef __cplusplus
1102 }
1103 #endif
1104 
1105 #endif /* STARPU_USE_OPENMP && !STARPU_DONT_INCLUDE_OPENMP_HEADERS */
1106 
1109 #endif /* __STARPU_OPENMP_H__ */
void starpu_omp_master(void(*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW
void starpu_omp_set_nested(int nested) __STARPU_OMP_NOTHROW
Definition: starpu_task.h:250
int starpu_omp_get_dynamic(void) __STARPU_OMP_NOTHROW
struct starpu_codelet cl
Definition: starpu_openmp.h:98
int starpu_omp_get_team_num(void) __STARPU_OMP_NOTHROW
void starpu_omp_set_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:91
Definition: starpu_openmp.h:68
void starpu_omp_ordered_inline_begin(void) __STARPU_OMP_NOTHROW
int starpu_omp_for_inline_first(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_first_i, unsigned long long *_nb_i) __STARPU_OMP_NOTHROW
int starpu_omp_test_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_active_level(void) __STARPU_OMP_NOTHROW
void starpu_omp_set_max_active_levels(int max_levels) __STARPU_OMP_NOTHROW
void starpu_omp_for(void(*f)(unsigned long long _first_i, unsigned long long _nb_i, void *arg), void *arg, unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, int nowait) __STARPU_OMP_NOTHROW
int starpu_omp_get_ancestor_thread_num(int level) __STARPU_OMP_NOTHROW
void starpu_omp_critical_inline_begin(const char *name) __STARPU_OMP_NOTHROW
void starpu_omp_get_schedule(enum starpu_omp_sched_value *kind, int *modifier) __STARPU_OMP_NOTHROW
void starpu_omp_destroy_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_in_parallel(void) __STARPU_OMP_NOTHROW
void starpu_omp_shutdown(void) __STARPU_OMP_NOTHROW
void starpu_omp_taskgroup_inline_end(void) __STARPU_OMP_NOTHROW
void starpu_omp_set_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_team_size(int level) __STARPU_OMP_NOTHROW
void starpu_omp_parallel_region(const struct starpu_omp_parallel_region_attr *attr) __STARPU_OMP_NOTHROW
int starpu_omp_for_inline_first_alt(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_begin_i, unsigned long long *_end_i) __STARPU_OMP_NOTHROW
size_t cl_arg_size
Definition: starpu_openmp.h:113
void * starpu_omp_single_copyprivate_inline_begin(void *data) __STARPU_OMP_NOTHROW
int untied_clause
Definition: starpu_openmp.h:187
int is_loop
Definition: starpu_openmp.h:197
void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base) __STARPU_OMP_NOTHROW
void starpu_omp_single_copyprivate_inline_end(void) __STARPU_OMP_NOTHROW
int num_threads
Definition: starpu_openmp.h:134
int final_clause
Definition: starpu_openmp.h:181
void starpu_omp_destroy_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
void starpu_omp_set_schedule(enum starpu_omp_sched_value kind, int modifier) __STARPU_OMP_NOTHROW
int starpu_omp_get_default_device(void) __STARPU_OMP_NOTHROW
void starpu_omp_atomic_fallback_inline_begin(void) __STARPU_OMP_NOTHROW
void starpu_omp_ordered(void(*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:82
Definition: starpu_openmp.h:50
int starpu_omp_in_final(void) __STARPU_OMP_NOTHROW
enum starpu_omp_proc_bind_value starpu_omp_get_proc_bind(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_thread_num() __STARPU_OMP_NOTHROW
int starpu_omp_for_inline_next(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_first_i, unsigned long long *_nb_i) __STARPU_OMP_NOTHROW
int starpu_omp_get_level(void) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:67
const char * name
Definition: starpu_task.h:516
int starpu_omp_master_inline(void) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:79
int starpu_omp_init(void) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:83
void starpu_omp_taskgroup_inline_begin(void) __STARPU_OMP_NOTHROW
int starpu_omp_for_inline_next_alt(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_begin_i, unsigned long long *_end_i) __STARPU_OMP_NOTHROW
int starpu_omp_get_nested(void) __STARPU_OMP_NOTHROW
void * cl_arg
Definition: starpu_openmp.h:108
starpu_omp_sched_value
Definition: starpu_openmp.h:62
void starpu_omp_set_default_device(int device_num) __STARPU_OMP_NOTHROW
void starpu_omp_single_copyprivate(void(*f)(void *arg, void *data, unsigned long long data_size), void *arg, void *data, unsigned long long data_size) __STARPU_OMP_NOTHROW
void starpu_omp_set_num_threads(int threads) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:141
void starpu_omp_unset_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_thread_limit(void) __STARPU_OMP_NOTHROW
void starpu_omp_single(void(*f)(void *arg), void *arg, int nowait) __STARPU_OMP_NOTHROW
int starpu_omp_get_cancellation(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_devices(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_procs(void) __STARPU_OMP_NOTHROW
struct _starpu_data_state * starpu_data_handle_t
Definition: starpu_data.h:46
Definition: starpu_openmp.h:69
Definition: starpu_openmp.h:39
int starpu_omp_get_max_task_priority(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_threads() __STARPU_OMP_NOTHROW
void starpu_omp_init_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:65
int mergeable_clause
Definition: starpu_openmp.h:192
void starpu_omp_critical_inline_end(const char *name) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:80
double starpu_omp_get_wtick(void) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:66
void starpu_omp_atomic_fallback_inline_end(void) __STARPU_OMP_NOTHROW
void starpu_omp_critical(void(*f)(void *arg), void *arg, const char *name) __STARPU_OMP_NOTHROW
int starpu_omp_test_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
void * cl_arg
Definition: starpu_openmp.h:159
void starpu_omp_unset_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
unsigned cl_arg_free
Definition: starpu_openmp.h:169
unsigned cl_arg_free
Definition: starpu_openmp.h:118
int starpu_omp_get_max_active_levels(void) __STARPU_OMP_NOTHROW
void starpu_omp_sections_combined(unsigned long long nb_sections, void(*section_f)(unsigned long long section_num, void *arg), void *section_arg, int nowait) __STARPU_OMP_NOTHROW
int starpu_omp_get_max_threads() __STARPU_OMP_NOTHROW
void starpu_omp_barrier(void) __STARPU_OMP_NOTHROW
double starpu_omp_get_wtime(void) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:64
starpu_data_handle_t * handles
Definition: starpu_openmp.h:103
void starpu_omp_for_alt(void(*f)(unsigned long long _begin_i, unsigned long long _end_i, void *arg), void *arg, unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, int nowait) __STARPU_OMP_NOTHROW
size_t cl_arg_size
Definition: starpu_openmp.h:164
int starpu_omp_single_inline(void) __STARPU_OMP_NOTHROW
void starpu_omp_taskgroup(void(*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_teams(void) __STARPU_OMP_NOTHROW
void starpu_omp_task_region(const struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW
starpu_data_handle_t * handles
Definition: starpu_openmp.h:154
void starpu_omp_init_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_is_initial_device(void) __STARPU_OMP_NOTHROW
int if_clause
Definition: starpu_openmp.h:176
void starpu_omp_set_dynamic(int dynamic_threads) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:81
void starpu_omp_taskwait(void) __STARPU_OMP_NOTHROW
void starpu_omp_sections(unsigned long long nb_sections, void(**section_f)(void *arg), void **section_arg, int nowait) __STARPU_OMP_NOTHROW
Definition: starpu_openmp.h:84
int if_clause
Definition: starpu_openmp.h:124
starpu_omp_proc_bind_value
Definition: starpu_openmp.h:77
void starpu_omp_ordered_inline_end(void) __STARPU_OMP_NOTHROW