LLVM OpenMP 22.0.0git
serialized.c
Go to the documentation of this file.
1// clang-format off
2// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %s
3// REQUIRES: ompt
4// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7
5// clang-format on
6#define TEST_NEED_PRINT_FRAME_FROM_OUTLINED_FN
7#include "callback.h"
8#include <omp.h>
9#include <math.h>
10
11int main() {
13 print_frame(0);
14#pragma omp parallel num_threads(2)
15 {
16 print_frame_from_outlined_fn(1);
17 print_ids(0);
18 print_ids(1);
19 print_frame(0);
20#pragma omp master
21 {
22 print_ids(0);
23 void *creator_frame = get_frame_address(0);
24 int t = (int)sin(0.1);
25#pragma omp task if (t)
26 {
27 if (creator_frame == get_frame_address(0)) {
28 printf("Assume this code was inlined which the compiler is allowed "
29 "to do:\n");
30 print_frame(0);
31 } else if (creator_frame == get_frame_address(1)) {
32 printf("Assume this code was called from the application:\n");
33 print_frame(1);
34 } else {
35 // The exit frame must be our parent!
36 printf("Assume this code was not inlined, exit frame must be our "
37 "parent:\n");
38 print_frame_from_outlined_fn(1);
39 }
40 print_ids(0);
41 print_ids(1);
42 print_ids(2);
43 }
45 print_ids(0);
46 }
47 print_ids(0);
48 }
49
50 // clang-format off
51 // Check if libomp supports the callbacks for this test.
52 // CHECK-NOT: {{^}}0: Could not register callback
53
54 // CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]
55
56 // make sure initial data pointers are null
57 // CHECK-NOT: 0: new_task_data initially not null
58
59 // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_initial_task_begin: parallel_id={{[0-f]+}}
60 // CHECK-SAME: task_id={{[0-f]+}}, actual_parallelism=1, index=1, flags=1
61
62 // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)
63 // CHECK-SAME: =[[MAIN_REENTER:(0x)?[0-f]+]]
64 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin
65 // CHECK-SAME: parent_task_id=[[PARENT_TASK_ID:[0-f]+]]
66 // CHECK-SAME: parent_task_frame.exit=[[NULL]]
67 // CHECK-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}}
68 // CHECK-SAME: parallel_id=[[PARALLEL_ID:[0-f]+]], requested_team_size=2
69 // CHECK-SAME: codeptr_ra={{(0x)?[0-f]+}}, invoker={{[0-9]+}}
70
71 // nested parallel masters
72 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin
73 // CHECK-SAME: parallel_id=[[PARALLEL_ID]]
74 // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]]
75 // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address
76 // CHECK-SAME: =[[EXIT:(0x)?[0-f]+]]
77
78 // CHECK: {{^}}[[MASTER_ID]]: task level 0
79 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
80 // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]
81
82 // CHECK: {{^}}[[MASTER_ID]]: task level 1
83 // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID:[0-f]+]]
84 // CHECK-SAME: task_id=[[PARENT_TASK_ID]],
85 // CHECK-SAME: exit_frame=[[NULL]], reenter_frame={{(0x)?[0-f]+}}
86
87 // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)=[[REENTER:(0x)?[0-f]+]]
88 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create
89 // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID]]
90 // CHECK-SAME: parent_task_frame.exit=[[EXIT]]
91 // CHECK-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}}
92 // CHECK-SAME: new_task_id=[[TASK_ID:[0-f]+]]
93 // CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:(0x)?[0-f]+]]{{[0-f][0-f]}}
94
95 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule:
96 // CHECK-SAME: first_task_id=[[IMPLICIT_TASK_ID]], second_task_id=[[TASK_ID]]
97 // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address
98 // CHECK-SAME: =[[TASK_EXIT:(0x)?[0-f]+]]
99 // CHECK: {{^}}[[MASTER_ID]]: task level 0
100 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[TASK_ID]]
101 // CHECK-SAME: exit_frame=[[TASK_EXIT]], reenter_frame=[[NULL]]
102
103 // CHECK: {{^}}[[MASTER_ID]]: task level 1
104 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
105 // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame={{(0x)?[0-f]+}}
106
107 // CHECK: {{^}}[[MASTER_ID]]: task level 2
108 // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]]
109 // CHECK-SAME: task_id=[[PARENT_TASK_ID]]
110 // CHECK-SAME: exit_frame=[[NULL]], reenter_frame={{(0x)?[0-f]+}}
111
112 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule
113 // CHECK-SAME: first_task_id=[[TASK_ID]], second_task_id=[[IMPLICIT_TASK_ID]]
114 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_end: task_id=[[TASK_ID]]
115 // CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
116
117 // CHECK: {{^}}[[MASTER_ID]]: task level 0
118 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
119 // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]
120
121 // implicit barrier parallel
122 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_begin
123 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
124 // CHECK: {{^}}[[MASTER_ID]]: task level 0
125 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
126 // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]
127 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_end
128 // parallel_id is 0 because the region ended in the barrier!
129 // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
130 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end
131 // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
132
133 // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin
134 // CHECK-SAME: parallel_id=[[PARALLEL_ID]]
135 // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]]
136 // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address
137 // CHECK-SAME: =[[EXIT:(0x)?[0-f]+]]
138 // CHECK: {{^}}[[THREAD_ID]]: task level 0
139 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
140 // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]
141 // CHECK: {{^}}[[THREAD_ID]]: task level 1
142 // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]]
143 // CHECK-SAME: task_id=[[PARENT_TASK_ID]]
144 // CHECK-SAME: exit_frame=[[NULL]], reenter_frame={{(0x)?[0-f]+}}
145
146 // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address(0)={{(0x)?[0-f]+}}
147 // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin
148 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
149 // CHECK: {{^}}[[THREAD_ID]]: task level 0
150 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
151 // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]
152 // parallel_id is 0 because the region ended in the barrier!
153 // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_end
154 // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
155
156 // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
157 // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
158 // clang-format on
159
160 return 0;
161}
#define print_frame(level)
Definition callback.h:210
#define print_fuzzy_address(id)
Definition callback.h:360
static void print_ids(int level)
Definition callback.h:187
#define get_frame_address(level)
Definition callback.h:208
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
#define omp_set_nested
Definition kmp_stub.cpp:36
int main()
Definition serialized.c:8