LLVM OpenMP* Runtime Library
ompd-specific.h
1 /*
2  * ompd-specific.h -- OpenMP debug support
3  */
4 
5 //===----------------------------------------------------------------------===//
6 //
7 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
8 // See https://llvm.org/LICENSE.txt for license information.
9 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "kmp.h"
14 #include "omp-tools.h"
15 #include <stdint.h>
16 
17 #ifndef __OMPD_SPECIFIC_H__
18 #define __OMPD_SPECIFIC_H__
19 
20 #if OMPD_SUPPORT
21 
22 void ompd_init();
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 extern char *ompd_env_block;
28 extern ompd_size_t ompd_env_block_size;
29 extern char *__kmp_tool_verbose_init;
30 #ifdef __cplusplus
31 } /* extern "C" */
32 #endif
33 
34 extern uint64_t ompd_state;
35 #define OMPD_ENABLE_BP 0x1
36 
37 #define OMPD_FOREACH_ACCESS(OMPD_ACCESS) \
38  OMPD_ACCESS(kmp_base_info_t, th_current_task) \
39  OMPD_ACCESS(kmp_base_info_t, th_team) \
40  OMPD_ACCESS(kmp_base_info_t, th_info) \
41  OMPD_ACCESS(kmp_base_info_t, ompt_thread_info) \
42  \
43  OMPD_ACCESS(kmp_base_root_t, r_in_parallel) \
44  \
45  OMPD_ACCESS(kmp_base_team_t, ompt_team_info) \
46  OMPD_ACCESS(kmp_base_team_t, ompt_serialized_team_info) \
47  OMPD_ACCESS(kmp_base_team_t, t_active_level) \
48  OMPD_ACCESS(kmp_base_team_t, t_implicit_task_taskdata) \
49  OMPD_ACCESS(kmp_base_team_t, t_master_tid) \
50  OMPD_ACCESS(kmp_base_team_t, t_nproc) \
51  OMPD_ACCESS(kmp_base_team_t, t_level) \
52  OMPD_ACCESS(kmp_base_team_t, t_parent) \
53  OMPD_ACCESS(kmp_base_team_t, t_pkfn) \
54  OMPD_ACCESS(kmp_base_team_t, t_threads) \
55  \
56  OMPD_ACCESS(kmp_desc_t, ds) \
57  \
58  OMPD_ACCESS(kmp_desc_base_t, ds_thread) \
59  OMPD_ACCESS(kmp_desc_base_t, ds_tid) \
60  \
61  OMPD_ACCESS(kmp_info_t, th) \
62  \
63  OMPD_ACCESS(kmp_r_sched_t, r_sched_type) \
64  OMPD_ACCESS(kmp_r_sched_t, chunk) \
65  \
66  OMPD_ACCESS(kmp_root_t, r) \
67  \
68  OMPD_ACCESS(kmp_internal_control_t, dynamic) \
69  OMPD_ACCESS(kmp_internal_control_t, max_active_levels) \
70  OMPD_ACCESS(kmp_internal_control_t, nproc) \
71  OMPD_ACCESS(kmp_internal_control_t, proc_bind) \
72  OMPD_ACCESS(kmp_internal_control_t, sched) \
73  OMPD_ACCESS(kmp_internal_control_t, default_device) \
74  OMPD_ACCESS(kmp_internal_control_t, thread_limit) \
75  \
76  OMPD_ACCESS(kmp_taskdata_t, ompt_task_info) \
77  OMPD_ACCESS(kmp_taskdata_t, td_flags) \
78  OMPD_ACCESS(kmp_taskdata_t, td_icvs) \
79  OMPD_ACCESS(kmp_taskdata_t, td_parent) \
80  OMPD_ACCESS(kmp_taskdata_t, td_team) \
81  \
82  OMPD_ACCESS(kmp_task_t, routine) \
83  \
84  OMPD_ACCESS(kmp_team_p, t) \
85  \
86  OMPD_ACCESS(kmp_nested_nthreads_t, used) \
87  OMPD_ACCESS(kmp_nested_nthreads_t, nth) \
88  \
89  OMPD_ACCESS(kmp_nested_proc_bind_t, used) \
90  OMPD_ACCESS(kmp_nested_proc_bind_t, bind_types) \
91  \
92  OMPD_ACCESS(ompt_task_info_t, frame) \
93  OMPD_ACCESS(ompt_task_info_t, scheduling_parent) \
94  OMPD_ACCESS(ompt_task_info_t, task_data) \
95  \
96  OMPD_ACCESS(ompt_team_info_t, parallel_data) \
97  \
98  OMPD_ACCESS(ompt_thread_info_t, state) \
99  OMPD_ACCESS(ompt_thread_info_t, wait_id) \
100  OMPD_ACCESS(ompt_thread_info_t, thread_data) \
101  \
102  OMPD_ACCESS(ompt_data_t, value) \
103  OMPD_ACCESS(ompt_data_t, ptr) \
104  \
105  OMPD_ACCESS(ompt_frame_t, exit_frame) \
106  OMPD_ACCESS(ompt_frame_t, enter_frame) \
107  \
108  OMPD_ACCESS(ompt_lw_taskteam_t, parent) \
109  OMPD_ACCESS(ompt_lw_taskteam_t, ompt_team_info) \
110  OMPD_ACCESS(ompt_lw_taskteam_t, ompt_task_info)
111 
112 #define OMPD_FOREACH_BITFIELD(OMPD_BITFIELD) \
113  OMPD_BITFIELD(kmp_tasking_flags_t, final) \
114  OMPD_BITFIELD(kmp_tasking_flags_t, tiedness) \
115  OMPD_BITFIELD(kmp_tasking_flags_t, tasktype) \
116  OMPD_BITFIELD(kmp_tasking_flags_t, task_serial) \
117  OMPD_BITFIELD(kmp_tasking_flags_t, tasking_ser) \
118  OMPD_BITFIELD(kmp_tasking_flags_t, team_serial) \
119  OMPD_BITFIELD(kmp_tasking_flags_t, started) \
120  OMPD_BITFIELD(kmp_tasking_flags_t, executing) \
121  OMPD_BITFIELD(kmp_tasking_flags_t, complete) \
122  OMPD_BITFIELD(kmp_tasking_flags_t, freed) \
123  OMPD_BITFIELD(kmp_tasking_flags_t, native)
124 
125 #define OMPD_FOREACH_SIZEOF(OMPD_SIZEOF) \
126  OMPD_SIZEOF(kmp_info_t) \
127  OMPD_SIZEOF(kmp_taskdata_t) \
128  OMPD_SIZEOF(kmp_task_t) \
129  OMPD_SIZEOF(kmp_tasking_flags_t) \
130  OMPD_SIZEOF(kmp_thread_t) \
131  OMPD_SIZEOF(ompt_data_t) \
132  OMPD_SIZEOF(ompt_id_t) \
133  OMPD_SIZEOF(__kmp_avail_proc) \
134  OMPD_SIZEOF(__kmp_max_nth) \
135  OMPD_SIZEOF(__kmp_stksize) \
136  OMPD_SIZEOF(__kmp_omp_cancellation) \
137  OMPD_SIZEOF(__kmp_max_task_priority) \
138  OMPD_SIZEOF(__kmp_display_affinity) \
139  OMPD_SIZEOF(__kmp_affinity_format) \
140  OMPD_SIZEOF(__kmp_tool_libraries) \
141  OMPD_SIZEOF(__kmp_tool_verbose_init) \
142  OMPD_SIZEOF(__kmp_tool) \
143  OMPD_SIZEOF(ompd_state) \
144  OMPD_SIZEOF(kmp_nested_nthreads_t) \
145  OMPD_SIZEOF(__kmp_nested_nth) \
146  OMPD_SIZEOF(kmp_nested_proc_bind_t) \
147  OMPD_SIZEOF(__kmp_nested_proc_bind) \
148  OMPD_SIZEOF(int) \
149  OMPD_SIZEOF(char) \
150  OMPD_SIZEOF(__kmp_gtid) \
151  OMPD_SIZEOF(__kmp_nth)
152 
153 #endif /* OMPD_SUPPORT */
154 #endif