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-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
4  *
5  * StarPU is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation; either version 2.1 of the License, or (at
8  * your option) any later version.
9  *
10  * StarPU is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  *
14  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
15  */
16 
17 #ifndef __STARPU_OPENMP_H__
18 #define __STARPU_OPENMP_H__
19 
20 #include <starpu_config.h>
21 
28 #if defined STARPU_OPENMP
38 typedef struct { void *internal; } starpu_omp_lock_t;
39 
49 typedef struct { void *internal; } starpu_omp_nest_lock_t;
50 
62 {
69 };
70 
77 {
84 };
85 
91 {
97  struct starpu_codelet cl;
107  void *cl_arg;
112  size_t cl_arg_size;
117  unsigned cl_arg_free;
118 
124 
134 };
135 
141 {
148  struct starpu_codelet cl;
158  void *cl_arg;
163  size_t cl_arg_size;
168  unsigned cl_arg_free;
169  int priority;
170 
181 
192 
196  int is_loop;
197  int nogroup_clause;
198 
199  int collapse;
200  int num_tasks;
201  unsigned long long nb_iterations;
202  unsigned long long grainsize;
203  unsigned long long begin_i;
204  unsigned long long end_i;
205  unsigned long long chunk;
206 };
207 
208 #ifdef __cplusplus
209 extern "C"
210 {
211 #define __STARPU_OMP_NOTHROW throw ()
212 #else
213 #define __STARPU_OMP_NOTHROW __attribute__((__nothrow__))
214 #endif
215 
224 extern int starpu_omp_init(void) __STARPU_OMP_NOTHROW;
228 extern void starpu_omp_shutdown(void) __STARPU_OMP_NOTHROW;
229 
246 extern void starpu_omp_parallel_region(const struct starpu_omp_parallel_region_attr *attr) __STARPU_OMP_NOTHROW;
247 
256 extern void starpu_omp_master(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
257 
267 extern int starpu_omp_master_inline(void) __STARPU_OMP_NOTHROW;
268 
284 extern void starpu_omp_barrier(void) __STARPU_OMP_NOTHROW;
285 
297 extern void starpu_omp_critical(void (*f)(void *arg), void *arg, const char *name) __STARPU_OMP_NOTHROW;
298 
308 extern void starpu_omp_critical_inline_begin(const char *name) __STARPU_OMP_NOTHROW;
309 
319 extern void starpu_omp_critical_inline_end(const char *name) __STARPU_OMP_NOTHROW;
320 
338 extern void starpu_omp_single(void (*f)(void *arg), void *arg, int nowait) __STARPU_OMP_NOTHROW;
339 
350 extern int starpu_omp_single_inline(void) __STARPU_OMP_NOTHROW;
351 
364 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;
365 
376 extern void *starpu_omp_single_copyprivate_inline_begin(void *data) __STARPU_OMP_NOTHROW;
377 
390 extern void starpu_omp_single_copyprivate_inline_end(void) __STARPU_OMP_NOTHROW;
391 
412 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;
413 
432 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;
433 
452 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;
453 
466 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;
467 
478 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;
479 
490 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;
491 
500 extern void starpu_omp_ordered(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
501 
509 extern void starpu_omp_ordered_inline_begin(void) __STARPU_OMP_NOTHROW;
510 
517 extern void starpu_omp_ordered_inline_end(void) __STARPU_OMP_NOTHROW;
518 
529 extern void starpu_omp_sections(unsigned long long nb_sections, void (**section_f)(void *arg), void **section_arg, int nowait) __STARPU_OMP_NOTHROW;
530 
545 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;
546 
562 extern void starpu_omp_task_region(const struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW;
563 
571 extern void starpu_omp_taskwait(void) __STARPU_OMP_NOTHROW;
572 
582 extern void starpu_omp_taskgroup(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
583 
593 extern void starpu_omp_taskgroup_inline_begin(void) __STARPU_OMP_NOTHROW;
594 
604 extern void starpu_omp_taskgroup_inline_end(void) __STARPU_OMP_NOTHROW;
605 
606 extern void starpu_omp_taskloop_inline_begin(struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW;
607 
608 extern void starpu_omp_taskloop_inline_end(const struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW;
609 
630 extern void starpu_omp_set_num_threads(int threads) __STARPU_OMP_NOTHROW;
631 
642 extern int starpu_omp_get_num_threads() __STARPU_OMP_NOTHROW;
643 
655 extern int starpu_omp_get_thread_num() __STARPU_OMP_NOTHROW;
656 
668 extern int starpu_omp_get_max_threads() __STARPU_OMP_NOTHROW;
669 
680 extern int starpu_omp_get_num_procs(void) __STARPU_OMP_NOTHROW;
681 
688 extern int starpu_omp_in_parallel(void) __STARPU_OMP_NOTHROW;
689 
697 extern void starpu_omp_set_dynamic(int dynamic_threads) __STARPU_OMP_NOTHROW;
698 
707 extern int starpu_omp_get_dynamic(void) __STARPU_OMP_NOTHROW;
708 
720 extern void starpu_omp_set_nested(int nested) __STARPU_OMP_NOTHROW;
721 
734 extern int starpu_omp_get_nested(void) __STARPU_OMP_NOTHROW;
735 
739 extern int starpu_omp_get_cancellation(void) __STARPU_OMP_NOTHROW;
740 
749 extern void starpu_omp_set_schedule(enum starpu_omp_sched_value kind, int modifier) __STARPU_OMP_NOTHROW;
750 
758 extern void starpu_omp_get_schedule(enum starpu_omp_sched_value *kind, int *modifier) __STARPU_OMP_NOTHROW;
759 
765 extern int starpu_omp_get_thread_limit(void) __STARPU_OMP_NOTHROW;
766 
778 extern void starpu_omp_set_max_active_levels(int max_levels) __STARPU_OMP_NOTHROW;
779 
791 extern int starpu_omp_get_max_active_levels(void) __STARPU_OMP_NOTHROW;
792 
804 extern int starpu_omp_get_level(void) __STARPU_OMP_NOTHROW;
805 
811 extern int starpu_omp_get_ancestor_thread_num(int level) __STARPU_OMP_NOTHROW;
812 
818 extern int starpu_omp_get_team_size(int level) __STARPU_OMP_NOTHROW;
819 
831 extern int starpu_omp_get_active_level(void) __STARPU_OMP_NOTHROW;
832 
839 extern int starpu_omp_in_final(void) __STARPU_OMP_NOTHROW;
840 
846 extern enum starpu_omp_proc_bind_value starpu_omp_get_proc_bind(void) __STARPU_OMP_NOTHROW;
847 
848 extern int starpu_omp_get_num_places(void) __STARPU_OMP_NOTHROW;
849 
850 extern int starpu_omp_get_place_num_procs(int place_num) __STARPU_OMP_NOTHROW;
851 
852 extern void starpu_omp_get_place_proc_ids(int place_num, int *ids) __STARPU_OMP_NOTHROW;
853 
854 extern int starpu_omp_get_place_num(void) __STARPU_OMP_NOTHROW;
855 
856 extern int starpu_omp_get_partition_num_places(void) __STARPU_OMP_NOTHROW;
857 
858 extern void starpu_omp_get_partition_place_nums(int *place_nums) __STARPU_OMP_NOTHROW;
859 
868 extern void starpu_omp_set_default_device(int device_num) __STARPU_OMP_NOTHROW;
869 
878 extern int starpu_omp_get_default_device(void) __STARPU_OMP_NOTHROW;
879 
885 extern int starpu_omp_get_num_devices(void) __STARPU_OMP_NOTHROW;
886 
894 extern int starpu_omp_get_num_teams(void) __STARPU_OMP_NOTHROW;
895 
903 extern int starpu_omp_get_team_num(void) __STARPU_OMP_NOTHROW;
904 
908 extern int starpu_omp_is_initial_device(void) __STARPU_OMP_NOTHROW;
909 
912 extern int starpu_omp_get_initial_device(void) __STARPU_OMP_NOTHROW;
913 
924 extern int starpu_omp_get_max_task_priority(void) __STARPU_OMP_NOTHROW;
925 
934 extern void starpu_omp_init_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
935 
944 extern void starpu_omp_destroy_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
945 
955 extern void starpu_omp_set_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
956 
966 extern void starpu_omp_unset_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
967 
980 extern int starpu_omp_test_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW;
981 
990 extern void starpu_omp_init_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
991 
1000 extern void starpu_omp_destroy_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1001 
1014 extern void starpu_omp_set_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1015 
1030 extern void starpu_omp_unset_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1031 
1047 extern int starpu_omp_test_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW;
1048 
1056 extern void starpu_omp_atomic_fallback_inline_begin(void) __STARPU_OMP_NOTHROW;
1057 
1064 extern void starpu_omp_atomic_fallback_inline_end(void) __STARPU_OMP_NOTHROW;
1065 
1073 extern double starpu_omp_get_wtime(void) __STARPU_OMP_NOTHROW;
1074 
1082 extern double starpu_omp_get_wtick(void) __STARPU_OMP_NOTHROW;
1083 
1092 extern void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base) __STARPU_OMP_NOTHROW;
1093 
1096 extern struct starpu_arbiter *starpu_omp_get_default_arbiter(void) __STARPU_OMP_NOTHROW;
1097 
1100 #ifdef __cplusplus
1101 }
1102 #endif
1103 
1104 #endif /* STARPU_USE_OPENMP && !STARPU_DONT_INCLUDE_OPENMP_HEADERS */
1105 
1108 #endif /* __STARPU_OPENMP_H__ */
const char * name
Definition: starpu_task.h:515
Definition: starpu_task.h:250
struct _starpu_data_state * starpu_data_handle_t
Definition: starpu_data.h:44
int num_threads
Definition: starpu_openmp.h:133
struct starpu_codelet cl
Definition: starpu_openmp.h:148
size_t cl_arg_size
Definition: starpu_openmp.h:163
int mergeable_clause
Definition: starpu_openmp.h:191
int is_loop
Definition: starpu_openmp.h:196
struct starpu_codelet cl
Definition: starpu_openmp.h:97
starpu_data_handle_t * handles
Definition: starpu_openmp.h:153
size_t cl_arg_size
Definition: starpu_openmp.h:112
int untied_clause
Definition: starpu_openmp.h:186
void * cl_arg
Definition: starpu_openmp.h:107
starpu_data_handle_t * handles
Definition: starpu_openmp.h:102
unsigned cl_arg_free
Definition: starpu_openmp.h:168
void * cl_arg
Definition: starpu_openmp.h:158
int final_clause
Definition: starpu_openmp.h:180
unsigned cl_arg_free
Definition: starpu_openmp.h:117
int if_clause
Definition: starpu_openmp.h:123
int if_clause
Definition: starpu_openmp.h:175
int starpu_omp_get_thread_limit(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
void starpu_omp_destroy_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
void starpu_omp_ordered_inline_end(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_nested(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_team_size(int level) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_teams(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_ancestor_thread_num(int level) __STARPU_OMP_NOTHROW
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
void starpu_omp_set_num_threads(int threads) __STARPU_OMP_NOTHROW
int starpu_omp_get_active_level(void) __STARPU_OMP_NOTHROW
void starpu_omp_critical_inline_end(const char *name) __STARPU_OMP_NOTHROW
starpu_omp_sched_value
Definition: starpu_openmp.h:62
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
void starpu_omp_master(void(*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW
void starpu_omp_set_dynamic(int dynamic_threads) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_threads() __STARPU_OMP_NOTHROW
void starpu_omp_set_default_device(int device_num) __STARPU_OMP_NOTHROW
int starpu_omp_get_max_threads() __STARPU_OMP_NOTHROW
void starpu_omp_parallel_region(const struct starpu_omp_parallel_region_attr *attr) __STARPU_OMP_NOTHROW
void starpu_omp_init_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
enum starpu_omp_proc_bind_value starpu_omp_get_proc_bind(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_level(void) __STARPU_OMP_NOTHROW
void starpu_omp_taskgroup_inline_end(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
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_destroy_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_default_device(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_num_devices(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_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
void starpu_omp_taskgroup(void(*f)(void *arg), void *arg) __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
double starpu_omp_get_wtick(void) __STARPU_OMP_NOTHROW
void starpu_omp_single_copyprivate_inline_end(void) __STARPU_OMP_NOTHROW
void starpu_omp_set_nested(int nested) __STARPU_OMP_NOTHROW
void starpu_omp_taskwait(void) __STARPU_OMP_NOTHROW
void starpu_omp_ordered_inline_begin(void) __STARPU_OMP_NOTHROW
void starpu_omp_set_max_active_levels(int max_levels) __STARPU_OMP_NOTHROW
void starpu_omp_atomic_fallback_inline_begin(void) __STARPU_OMP_NOTHROW
void starpu_omp_init_lock(starpu_omp_lock_t *lock) __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
void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base) __STARPU_OMP_NOTHROW
void starpu_omp_set_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
void starpu_omp_get_schedule(enum starpu_omp_sched_value *kind, int *modifier) __STARPU_OMP_NOTHROW
void starpu_omp_set_schedule(enum starpu_omp_sched_value kind, int modifier) __STARPU_OMP_NOTHROW
void starpu_omp_single(void(*f)(void *arg), void *arg, int nowait) __STARPU_OMP_NOTHROW
void starpu_omp_critical(void(*f)(void *arg), void *arg, const char *name) __STARPU_OMP_NOTHROW
int starpu_omp_get_dynamic(void) __STARPU_OMP_NOTHROW
int starpu_omp_single_inline(void) __STARPU_OMP_NOTHROW
void starpu_omp_shutdown(void) __STARPU_OMP_NOTHROW
int starpu_omp_init(void) __STARPU_OMP_NOTHROW
void * starpu_omp_single_copyprivate_inline_begin(void *data) __STARPU_OMP_NOTHROW
void starpu_omp_taskgroup_inline_begin(void) __STARPU_OMP_NOTHROW
int starpu_omp_in_final(void) __STARPU_OMP_NOTHROW
void starpu_omp_critical_inline_begin(const char *name) __STARPU_OMP_NOTHROW
int starpu_omp_test_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_max_task_priority(void) __STARPU_OMP_NOTHROW
int starpu_omp_test_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_cancellation(void) __STARPU_OMP_NOTHROW
void starpu_omp_barrier(void) __STARPU_OMP_NOTHROW
int starpu_omp_master_inline(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_thread_num() __STARPU_OMP_NOTHROW
starpu_omp_proc_bind_value
Definition: starpu_openmp.h:77
int starpu_omp_get_num_procs(void) __STARPU_OMP_NOTHROW
void starpu_omp_atomic_fallback_inline_end(void) __STARPU_OMP_NOTHROW
void starpu_omp_ordered(void(*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW
void starpu_omp_task_region(const struct starpu_omp_task_region_attr *attr) __STARPU_OMP_NOTHROW
void starpu_omp_set_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_in_parallel(void) __STARPU_OMP_NOTHROW
int starpu_omp_is_initial_device(void) __STARPU_OMP_NOTHROW
double starpu_omp_get_wtime(void) __STARPU_OMP_NOTHROW
void starpu_omp_unset_nest_lock(starpu_omp_nest_lock_t *lock) __STARPU_OMP_NOTHROW
void starpu_omp_unset_lock(starpu_omp_lock_t *lock) __STARPU_OMP_NOTHROW
int starpu_omp_get_max_active_levels(void) __STARPU_OMP_NOTHROW
int starpu_omp_get_team_num(void) __STARPU_OMP_NOTHROW
@ starpu_omp_sched_static
Definition: starpu_openmp.h:64
@ starpu_omp_sched_undefined
Definition: starpu_openmp.h:63
@ starpu_omp_sched_auto
Definition: starpu_openmp.h:67
@ starpu_omp_sched_guided
Definition: starpu_openmp.h:66
@ starpu_omp_sched_runtime
Definition: starpu_openmp.h:68
@ starpu_omp_sched_dynamic
Definition: starpu_openmp.h:65
@ starpu_omp_proc_bind_false
Definition: starpu_openmp.h:79
@ starpu_omp_proc_bind_spread
Definition: starpu_openmp.h:83
@ starpu_omp_proc_bind_true
Definition: starpu_openmp.h:80
@ starpu_omp_proc_bind_master
Definition: starpu_openmp.h:81
@ starpu_omp_proc_bind_close
Definition: starpu_openmp.h:82
@ starpu_omp_proc_bind_undefined
Definition: starpu_openmp.h:78
Definition: starpu_openmp.h:38
Definition: starpu_openmp.h:49
Definition: starpu_openmp.h:91
Definition: starpu_openmp.h:141