blob: 36b45f7a91ea271c2dfffc4e6060320a0592bacc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
/*
* ompt-internal.h - header of OMPT internal data structures
*/
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef __OMPT_INTERNAL_H__
#define __OMPT_INTERNAL_H__
#include "ompt-event-specific.h"
#include "omp-tools.h"
#define OMPT_VERSION 1
#define _OMP_EXTERN extern "C"
#define OMPT_INVOKER(x) \
((x == fork_context_gnu) ? ompt_parallel_invoker_program \
: ompt_parallel_invoker_runtime)
#define ompt_callback(e) e##_callback
typedef struct ompt_callbacks_internal_s {
#define ompt_event_macro(event, callback, eventid) \
callback ompt_callback(event);
FOREACH_OMPT_EVENT(ompt_event_macro)
#undef ompt_event_macro
} ompt_callbacks_internal_t;
typedef struct ompt_callbacks_active_s {
unsigned int enabled : 1;
#define ompt_event_macro(event, callback, eventid) unsigned int event : 1;
FOREACH_OMPT_EVENT(ompt_event_macro)
#undef ompt_event_macro
} ompt_callbacks_active_t;
#define TASK_TYPE_DETAILS_FORMAT(info) \
((info->td_flags.task_serial || info->td_flags.tasking_ser) \
? ompt_task_undeferred \
: 0x0) | \
((!(info->td_flags.tiedness)) ? ompt_task_untied : 0x0) | \
(info->td_flags.final ? ompt_task_final : 0x0) | \
(info->td_flags.target \
? ompt_task_target \
: (info->td_flags.tasktype ? ompt_task_explicit \
: ompt_task_implicit)) | \
(info->td_flags.merged_if0 ? ompt_task_mergeable : 0x0)
typedef struct {
ompt_frame_t frame;
ompt_data_t task_data;
struct kmp_taskdata *scheduling_parent;
int thread_num;
ompt_dispatch_chunk_t dispatch_chunk;
} ompt_task_info_t;
typedef struct {
ompt_data_t parallel_data;
void *master_return_address;
} ompt_team_info_t;
typedef struct ompt_lw_taskteam_s {
ompt_team_info_t ompt_team_info;
ompt_task_info_t ompt_task_info;
int heap;
struct ompt_lw_taskteam_s *parent;
} ompt_lw_taskteam_t;
typedef struct {
ompt_data_t thread_data;
ompt_data_t task_data; /* stored here from implicit barrier-begin until
implicit-task-end */
ompt_data_t target_task_data; /* required by target support */
void *return_address; /* stored here on entry of runtime */
ompt_state_t state;
ompt_wait_id_t wait_id;
int ompt_task_yielded;
int parallel_flags; // information for the last parallel region invoked
void *idle_frame;
} ompt_thread_info_t;
extern ompt_callbacks_internal_t ompt_callbacks;
#if OMPT_SUPPORT && OMPT_OPTIONAL
#if USE_FAST_MEMORY
#define KMP_OMPT_DEPS_ALLOC __kmp_fast_allocate
#define KMP_OMPT_DEPS_FREE __kmp_fast_free
#else
#define KMP_OMPT_DEPS_ALLOC __kmp_thread_malloc
#define KMP_OMPT_DEPS_FREE __kmp_thread_free
#endif
#endif /* OMPT_SUPPORT && OMPT_OPTIONAL */
#ifdef __cplusplus
extern "C" {
#endif
void ompt_pre_init(void);
void ompt_post_init(void);
void ompt_fini(void);
#define OMPT_GET_RETURN_ADDRESS(level) \
__builtin_extract_return_addr(__builtin_return_address(level))
#define OMPT_GET_FRAME_ADDRESS(level) __builtin_frame_address(level)
#define OMPT_FRAME_FLAGS_APP (ompt_frame_application | ompt_frame_cfa)
#define OMPT_FRAME_FLAGS_RUNTIME (ompt_frame_runtime | ompt_frame_cfa)
int __kmp_control_tool(uint64_t command, uint64_t modifier, void *arg);
extern ompt_callbacks_active_t ompt_enabled;
#if KMP_OS_WINDOWS
#define UNLIKELY(x) (x)
#define OMPT_NOINLINE __declspec(noinline)
#else
#define UNLIKELY(x) __builtin_expect(!!(x), 0)
#define OMPT_NOINLINE __attribute__((noinline))
#endif
#ifdef __cplusplus
}
#endif
#endif
|