LLVM OpenMP 19.0.0git
callback.h
Go to the documentation of this file.
1#ifndef _BSD_SOURCE
2#define _BSD_SOURCE
3#endif
4#ifndef _DEFAULT_SOURCE
5#define _DEFAULT_SOURCE
6#endif
7#include <stdio.h>
8#ifndef __STDC_FORMAT_MACROS
9#define __STDC_FORMAT_MACROS
10#endif
11#include <inttypes.h>
12#include <omp.h>
13#include <omp-tools.h>
14#include "ompt-signal.h"
15
16// Used to detect architecture
17#include "../../src/kmp_platform.h"
18
19#ifndef _TOOL_PREFIX
20#define _TOOL_PREFIX ""
21// If no _TOOL_PREFIX is set, we assume that we run as part of an OMPT test
22#define _OMPT_TESTS
23#endif
24
25static const char *ompt_thread_t_values[] = {
26 "ompt_thread_UNDEFINED", "ompt_thread_initial", "ompt_thread_worker",
27 "ompt_thread_other"};
28
29static const char *ompt_task_status_t_values[] = {
30 "ompt_task_UNDEFINED",
31 "ompt_task_complete", // 1
32 "ompt_task_yield", // 2
33 "ompt_task_cancel", // 3
34 "ompt_task_detach", // 4
35 "ompt_task_early_fulfill", // 5
36 "ompt_task_late_fulfill", // 6
37 "ompt_task_switch", // 7
38 "ompt_taskwait_complete" // 8
39};
40static const char* ompt_cancel_flag_t_values[] = {
41 "ompt_cancel_parallel",
42 "ompt_cancel_sections",
43 "ompt_cancel_loop",
44 "ompt_cancel_taskgroup",
45 "ompt_cancel_activated",
46 "ompt_cancel_detected",
47 "ompt_cancel_discarded_task"
48};
49
50static const char *ompt_dependence_type_t_values[36] = {
51 "ompt_dependence_type_UNDEFINED",
52 "ompt_dependence_type_in", // 1
53 "ompt_dependence_type_out", // 2
54 "ompt_dependence_type_inout", // 3
55 "ompt_dependence_type_mutexinoutset", // 4
56 "ompt_dependence_type_source", // 5
57 "ompt_dependence_type_sink", // 6
58 "ompt_dependence_type_inoutset", // 7
59 "", "", "", "", "", "", // 8-13
60 "", "", "", "", "", "", "", "", "", "", // 14-23
61 "", "", "", "", "", "", "", "", "", "", // 24-33
62 "ompt_dependence_type_out_all_memory", // 34
63 "ompt_dependence_type_inout_all_memory" // 35
64};
65
66static void format_task_type(int type, char *buffer) {
67 char *progress = buffer;
68 if (type & ompt_task_initial)
69 progress += sprintf(progress, "ompt_task_initial");
70 if (type & ompt_task_implicit)
71 progress += sprintf(progress, "ompt_task_implicit");
72 if (type & ompt_task_explicit)
73 progress += sprintf(progress, "ompt_task_explicit");
74 if (type & ompt_task_target)
75 progress += sprintf(progress, "ompt_task_target");
76 if (type & ompt_task_taskwait)
77 progress += sprintf(progress, "ompt_task_taskwait");
78 if (type & ompt_task_undeferred)
79 progress += sprintf(progress, "|ompt_task_undeferred");
80 if (type & ompt_task_untied)
81 progress += sprintf(progress, "|ompt_task_untied");
82 if (type & ompt_task_final)
83 progress += sprintf(progress, "|ompt_task_final");
84 if (type & ompt_task_mergeable)
85 progress += sprintf(progress, "|ompt_task_mergeable");
86 if (type & ompt_task_merged)
87 progress += sprintf(progress, "|ompt_task_merged");
88}
89
90static ompt_set_callback_t ompt_set_callback;
91static ompt_get_callback_t ompt_get_callback;
92static ompt_get_state_t ompt_get_state;
93static ompt_get_task_info_t ompt_get_task_info;
94static ompt_get_task_memory_t ompt_get_task_memory;
95static ompt_get_thread_data_t ompt_get_thread_data;
96static ompt_get_parallel_info_t ompt_get_parallel_info;
97static ompt_get_unique_id_t ompt_get_unique_id;
98static ompt_finalize_tool_t ompt_finalize_tool;
99static ompt_get_num_procs_t ompt_get_num_procs;
100static ompt_get_num_places_t ompt_get_num_places;
101static ompt_get_place_proc_ids_t ompt_get_place_proc_ids;
102static ompt_get_place_num_t ompt_get_place_num;
103static ompt_get_partition_place_nums_t ompt_get_partition_place_nums;
104static ompt_get_proc_id_t ompt_get_proc_id;
105static ompt_enumerate_states_t ompt_enumerate_states;
106static ompt_enumerate_mutex_impls_t ompt_enumerate_mutex_impls;
107
108static void print_ids(int level)
109{
110 int task_type, thread_num;
111 ompt_frame_t *frame;
112 ompt_data_t *task_parallel_data;
113 ompt_data_t *task_data;
114 int exists_task = ompt_get_task_info(level, &task_type, &task_data, &frame,
115 &task_parallel_data, &thread_num);
116 char buffer[2048];
117 format_task_type(task_type, buffer);
118 if (frame)
119 printf("%" PRIu64 ": task level %d: parallel_id=%" PRIu64
120 ", task_id=%" PRIu64 ", exit_frame=%p, reenter_frame=%p, "
121 "task_type=%s=%d, thread_num=%d\n",
123 exists_task ? task_parallel_data->value : 0,
124 exists_task ? task_data->value : 0, frame->exit_frame.ptr,
125 frame->enter_frame.ptr, buffer, task_type, thread_num);
126}
127
128#define get_frame_address(level) __builtin_frame_address(level)
129
130#define print_frame(level) \
131 printf("%" PRIu64 ": __builtin_frame_address(%d)=%p\n", \
132 ompt_get_thread_data()->value, level, get_frame_address(level))
133
134// clang (version 5.0 and above) adds an intermediate function call with debug flag (-g)
135#if defined(TEST_NEED_PRINT_FRAME_FROM_OUTLINED_FN)
136 #if defined(DEBUG) && defined(__clang__) && __clang_major__ >= 5
137 #define print_frame_from_outlined_fn(level) print_frame(level+1)
138 #else
139 #define print_frame_from_outlined_fn(level) print_frame(level)
140 #endif
141
142 #if defined(__clang__) && __clang_major__ >= 5
143 #warning "Clang 5.0 and later add an additional wrapper for outlined functions when compiling with debug information."
144 #warning "Please define -DDEBUG iff you manually pass in -g to make the tests succeed!"
145 #endif
146#endif
147
148// This macro helps to define a label at the current position that can be used
149// to get the current address in the code.
150//
151// For print_current_address():
152// To reliably determine the offset between the address of the label and the
153// actual return address, we insert a NOP instruction as a jump target as the
154// compiler would otherwise insert an instruction that we can't control. The
155// instruction length is target dependent and is explained below.
156//
157// (The empty block between "#pragma omp ..." and the __asm__ statement is a
158// workaround for a bug in the Intel Compiler.)
159#define define_ompt_label(id) \
160 {} \
161 __asm__("nop"); \
162ompt_label_##id:
163
164// This macro helps to get the address of a label that is inserted by the above
165// macro define_ompt_label(). The address is obtained with a GNU extension
166// (&&label) that has been tested with gcc, clang and icc.
167#define get_ompt_label_address(id) (&& ompt_label_##id)
168
169// This macro prints the exact address that a previously called runtime function
170// returns to.
171#define print_current_address(id) \
172 define_ompt_label(id) \
173 print_possible_return_addresses(get_ompt_label_address(id))
174
175#if KMP_ARCH_X86 || KMP_ARCH_X86_64
176// On X86 the NOP instruction is 1 byte long. In addition, the compiler inserts
177// a MOV instruction for non-void runtime functions which is 3 bytes long.
178#define print_possible_return_addresses(addr) \
179 printf("%" PRIu64 ": current_address=%p or %p for non-void functions\n", \
180 ompt_get_thread_data()->value, ((char *)addr) - 1, ((char *)addr) - 4)
181#elif KMP_ARCH_PPC64
182// On Power the NOP instruction is 4 bytes long. In addition, the compiler
183// inserts a second NOP instruction (another 4 bytes). For non-void runtime
184// functions Clang inserts a STW instruction (but only if compiling under
185// -fno-PIC which will be the default with Clang 8.0, another 4 bytes).
186#define print_possible_return_addresses(addr) \
187 printf("%" PRIu64 ": current_address=%p or %p\n", ompt_get_thread_data()->value, \
188 ((char *)addr) - 8, ((char *)addr) - 12)
189#elif KMP_ARCH_AARCH64 || KMP_ARCH_AARCH64_32
190// On AArch64 the NOP instruction is 4 bytes long, can be followed by inserted
191// store instruction (another 4 bytes long).
192// FIXME: PR #65696 addded a third possibility (12 byte offset) to make the
193// tests pass on Darwin. Adding the same for other OSes. However, the proper
194// fix for this is to remove the extra branch instruction being generated by
195// the AArch64 backend. See issue #69627.
196#define print_possible_return_addresses(addr) \
197 printf("%" PRIu64 ": current_address=%p or %p or %p\n", \
198 ompt_get_thread_data()->value, ((char *)addr) - 4, \
199 ((char *)addr) - 8, ((char *)addr) - 12)
200#elif KMP_ARCH_RISCV64
201#if __riscv_compressed
202// On RV64GC the C.NOP instruction is 2 byte long. In addition, the compiler
203// inserts a J instruction (targeting the successor basic block), which
204// accounts for another 4 bytes. Finally, an additional J instruction may
205// appear (adding 4 more bytes) when the C.NOP is referenced elsewhere (ie.
206// another branch).
207#define print_possible_return_addresses(addr) \
208 printf("%" PRIu64 ": current_address=%p or %p\n", \
209 ompt_get_thread_data()->value, ((char *)addr) - 6, ((char *)addr) - 10)
210#else
211// On RV64G the NOP instruction is 4 byte long. In addition, the compiler
212// inserts a J instruction (targeting the successor basic block), which
213// accounts for another 4 bytes. Finally, an additional J instruction may
214// appear (adding 4 more bytes) when the NOP is referenced elsewhere (ie.
215// another branch).
216#define print_possible_return_addresses(addr) \
217 printf("%" PRIu64 ": current_address=%p or %p\n", \
218 ompt_get_thread_data()->value, ((char *)addr) - 8, ((char *)addr) - 12)
219#endif
220#elif KMP_ARCH_LOONGARCH64
221// On LoongArch64 the NOP instruction is 4 bytes long, can be followed by
222// inserted jump instruction (another 4 bytes long). And an additional jump
223// instruction may appear (adding 4 more bytes) when the NOP is referenced
224// elsewhere (ie. another branch).
225#define print_possible_return_addresses(addr) \
226 printf("%" PRIu64 ": current_address=%p or %p or %p\n", \
227 ompt_get_thread_data()->value, ((char *)addr) - 4, \
228 ((char *)addr) - 8, ((char *)addr) - 12)
229#elif KMP_ARCH_VE
230// On VE the NOP instruction is 8 byte long. In addition, the compiler inserts
231// a ??? instruction for non-void runtime functions which is ? bytes long.
232#define print_possible_return_addresses(addr) \
233 printf("%" PRIu64 ": current_address=%p or %p\n", \
234 ompt_get_thread_data()->value, ((char *)addr) - 8, \
235 ((char *)addr) - 8)
236#elif KMP_ARCH_S390X
237// On s390x the NOP instruction is 2 bytes long. For non-void runtime
238// functions Clang inserts a STY instruction (but only if compiling under
239// -fno-PIC which will be the default with Clang 8.0, another 6 bytes).
240//
241// Another possibility is:
242//
243// brasl %r14,__kmpc_end_master@plt
244// a7 f4 00 02 j 0f
245// 47 00 00 00 0: nop
246// a7 f4 00 02 j addr
247// addr:
248#define print_possible_return_addresses(addr) \
249 printf("%" PRIu64 ": current_address=%p or %p or %p\n", \
250 ompt_get_thread_data()->value, ((char *)addr) - 2, \
251 ((char *)addr) - 8, ((char *)addr) - 12)
252#else
253#error Unsupported target architecture, cannot determine address offset!
254#endif
255
256
257// This macro performs a somewhat similar job to print_current_address(), except
258// that it discards a certain number of nibbles from the address and only prints
259// the most significant bits / nibbles. This can be used for cases where the
260// return address can only be approximated.
261//
262// To account for overflows (ie the most significant bits / nibbles have just
263// changed as we are a few bytes above the relevant power of two) the addresses
264// of the "current" and of the "previous block" are printed.
265#define print_fuzzy_address(id) \
266 define_ompt_label(id) \
267 print_fuzzy_address_blocks(get_ompt_label_address(id))
268
269// If you change this define you need to adapt all capture patterns in the tests
270// to include or discard the new number of nibbles!
271#define FUZZY_ADDRESS_DISCARD_NIBBLES 2
272#define FUZZY_ADDRESS_DISCARD_BYTES (1 << ((FUZZY_ADDRESS_DISCARD_NIBBLES) * 4))
273#define print_fuzzy_address_blocks(addr) \
274 printf("%" PRIu64 ": fuzzy_address=0x%" PRIx64 " or 0x%" PRIx64 \
275 " or 0x%" PRIx64 " or 0x%" PRIx64 " (%p)\n", \
276 ompt_get_thread_data()->value, \
277 ((uint64_t)addr) / FUZZY_ADDRESS_DISCARD_BYTES - 1, \
278 ((uint64_t)addr) / FUZZY_ADDRESS_DISCARD_BYTES, \
279 ((uint64_t)addr) / FUZZY_ADDRESS_DISCARD_BYTES + 1, \
280 ((uint64_t)addr) / FUZZY_ADDRESS_DISCARD_BYTES + 2, addr)
281
282#define register_ompt_callback_t(name, type) \
283 do { \
284 type f_##name = &on_##name; \
285 if (ompt_set_callback(name, (ompt_callback_t)f_##name) == ompt_set_never) \
286 printf("0: Could not register callback '" #name "'\n"); \
287 } while (0)
288
289#define register_ompt_callback(name) register_ompt_callback_t(name, name##_t)
290
291#ifndef USE_PRIVATE_TOOL
292static void
294 ompt_mutex_t kind,
295 unsigned int hint,
296 unsigned int impl,
297 ompt_wait_id_t wait_id,
298 const void *codeptr_ra)
299{
300 switch(kind)
301 {
302 case ompt_mutex_lock:
303 printf("%" PRIu64 ":" _TOOL_PREFIX
304 " ompt_event_wait_lock: wait_id=%" PRIu64 ", hint=%" PRIu32
305 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
306 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
307 break;
308 case ompt_mutex_test_lock:
309 printf("%" PRIu64 ":" _TOOL_PREFIX
310 " ompt_event_wait_test_lock: wait_id=%" PRIu64 ", hint=%" PRIu32
311 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
312 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
313 break;
314 case ompt_mutex_nest_lock:
315 printf("%" PRIu64 ":" _TOOL_PREFIX
316 " ompt_event_wait_nest_lock: wait_id=%" PRIu64 ", hint=%" PRIu32
317 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
318 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
319 break;
320 case ompt_mutex_test_nest_lock:
321 printf("%" PRIu64 ":" _TOOL_PREFIX
322 " ompt_event_wait_test_nest_lock: wait_id=%" PRIu64
323 ", hint=%" PRIu32 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
324 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
325 break;
326 case ompt_mutex_critical:
327 printf("%" PRIu64 ":" _TOOL_PREFIX
328 " ompt_event_wait_critical: wait_id=%" PRIu64 ", hint=%" PRIu32
329 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
330 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
331 break;
332 case ompt_mutex_atomic:
333 printf("%" PRIu64 ":" _TOOL_PREFIX
334 " ompt_event_wait_atomic: wait_id=%" PRIu64 ", hint=%" PRIu32
335 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
336 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
337 break;
338 case ompt_mutex_ordered:
339 printf("%" PRIu64 ":" _TOOL_PREFIX
340 " ompt_event_wait_ordered: wait_id=%" PRIu64 ", hint=%" PRIu32
341 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
342 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
343 break;
344 default:
345 break;
346 }
347}
348
349static void
351 ompt_mutex_t kind,
352 ompt_wait_id_t wait_id,
353 const void *codeptr_ra)
354{
355 switch(kind)
356 {
357 case ompt_mutex_lock:
358 printf("%" PRIu64 ":" _TOOL_PREFIX
359 " ompt_event_acquired_lock: wait_id=%" PRIu64 ", codeptr_ra=%p \n",
360 ompt_get_thread_data()->value, wait_id, codeptr_ra);
361 break;
362 case ompt_mutex_test_lock:
363 printf("%" PRIu64 ":" _TOOL_PREFIX
364 " ompt_event_acquired_test_lock: wait_id=%" PRIu64
365 ", codeptr_ra=%p \n",
366 ompt_get_thread_data()->value, wait_id, codeptr_ra);
367 break;
368 case ompt_mutex_nest_lock:
369 printf("%" PRIu64 ":" _TOOL_PREFIX
370 " ompt_event_acquired_nest_lock_first: wait_id=%" PRIu64
371 ", codeptr_ra=%p \n",
372 ompt_get_thread_data()->value, wait_id, codeptr_ra);
373 break;
374 case ompt_mutex_test_nest_lock:
375 printf("%" PRIu64 ":" _TOOL_PREFIX
376 " ompt_event_acquired_test_nest_lock_first: wait_id=%" PRIu64
377 ", codeptr_ra=%p \n",
378 ompt_get_thread_data()->value, wait_id, codeptr_ra);
379 break;
380 case ompt_mutex_critical:
381 printf("%" PRIu64 ":" _TOOL_PREFIX
382 " ompt_event_acquired_critical: wait_id=%" PRIu64
383 ", codeptr_ra=%p \n",
384 ompt_get_thread_data()->value, wait_id, codeptr_ra);
385 break;
386 case ompt_mutex_atomic:
387 printf("%" PRIu64 ":" _TOOL_PREFIX
388 " ompt_event_acquired_atomic: wait_id=%" PRIu64
389 ", codeptr_ra=%p \n",
390 ompt_get_thread_data()->value, wait_id, codeptr_ra);
391 break;
392 case ompt_mutex_ordered:
393 printf("%" PRIu64 ":" _TOOL_PREFIX
394 " ompt_event_acquired_ordered: wait_id=%" PRIu64
395 ", codeptr_ra=%p \n",
396 ompt_get_thread_data()->value, wait_id, codeptr_ra);
397 break;
398 default:
399 break;
400 }
401}
402
403static void
405 ompt_mutex_t kind,
406 ompt_wait_id_t wait_id,
407 const void *codeptr_ra)
408{
409 switch(kind)
410 {
411 case ompt_mutex_lock:
412 printf("%" PRIu64 ":" _TOOL_PREFIX
413 " ompt_event_release_lock: wait_id=%" PRIu64 ", codeptr_ra=%p \n",
414 ompt_get_thread_data()->value, wait_id, codeptr_ra);
415 break;
416 case ompt_mutex_nest_lock:
417 printf("%" PRIu64 ":" _TOOL_PREFIX
418 " ompt_event_release_nest_lock_last: wait_id=%" PRIu64
419 ", codeptr_ra=%p \n",
420 ompt_get_thread_data()->value, wait_id, codeptr_ra);
421 break;
422 case ompt_mutex_critical:
423 printf("%" PRIu64 ":" _TOOL_PREFIX
424 " ompt_event_release_critical: wait_id=%" PRIu64
425 ", codeptr_ra=%p \n",
426 ompt_get_thread_data()->value, wait_id, codeptr_ra);
427 break;
428 case ompt_mutex_atomic:
429 printf("%" PRIu64 ":" _TOOL_PREFIX
430 " ompt_event_release_atomic: wait_id=%" PRIu64
431 ", codeptr_ra=%p \n",
432 ompt_get_thread_data()->value, wait_id, codeptr_ra);
433 break;
434 case ompt_mutex_ordered:
435 printf("%" PRIu64 ":" _TOOL_PREFIX
436 " ompt_event_release_ordered: wait_id=%" PRIu64
437 ", codeptr_ra=%p \n",
438 ompt_get_thread_data()->value, wait_id, codeptr_ra);
439 break;
440 default:
441 break;
442 }
443}
444
445static void
447 ompt_scope_endpoint_t endpoint,
448 ompt_wait_id_t wait_id,
449 const void *codeptr_ra)
450{
451 switch(endpoint)
452 {
453 case ompt_scope_begin:
454 printf("%" PRIu64 ":" _TOOL_PREFIX
455 " ompt_event_acquired_nest_lock_next: wait_id=%" PRIu64
456 ", codeptr_ra=%p \n",
457 ompt_get_thread_data()->value, wait_id, codeptr_ra);
458 break;
459 case ompt_scope_end:
460 printf("%" PRIu64 ":" _TOOL_PREFIX
461 " ompt_event_release_nest_lock_prev: wait_id=%" PRIu64
462 ", codeptr_ra=%p \n",
463 ompt_get_thread_data()->value, wait_id, codeptr_ra);
464 break;
465 case ompt_scope_beginend:
466 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
467 exit(-1);
468 }
469}
470
471static void
473 ompt_sync_region_t kind,
474 ompt_scope_endpoint_t endpoint,
475 ompt_data_t *parallel_data,
476 ompt_data_t *task_data,
477 const void *codeptr_ra)
478{
479 switch(endpoint)
480 {
481 case ompt_scope_begin:
482 switch(kind)
483 {
484 case ompt_sync_region_barrier:
485 case ompt_sync_region_barrier_implicit:
486 case ompt_sync_region_barrier_implicit_workshare:
487 case ompt_sync_region_barrier_implicit_parallel:
488 case ompt_sync_region_barrier_teams:
489 case ompt_sync_region_barrier_explicit:
490 case ompt_sync_region_barrier_implementation:
491 printf("%" PRIu64 ":" _TOOL_PREFIX
492 " ompt_event_barrier_begin: parallel_id=%" PRIu64
493 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
494 ompt_get_thread_data()->value, parallel_data->value,
495 task_data->value, codeptr_ra);
496 print_ids(0);
497 break;
498 case ompt_sync_region_taskwait:
499 printf("%" PRIu64 ":" _TOOL_PREFIX
500 " ompt_event_taskwait_begin: parallel_id=%" PRIu64
501 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
502 ompt_get_thread_data()->value, parallel_data->value,
503 task_data->value, codeptr_ra);
504 break;
505 case ompt_sync_region_taskgroup:
506 printf("%" PRIu64 ":" _TOOL_PREFIX
507 " ompt_event_taskgroup_begin: parallel_id=%" PRIu64
508 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
509 ompt_get_thread_data()->value, parallel_data->value,
510 task_data->value, codeptr_ra);
511 break;
512 case ompt_sync_region_reduction:
513 printf("ompt_sync_region_reduction should never be passed to "
514 "on_ompt_callback_sync_region\n");
515 exit(-1);
516 break;
517 }
518 break;
519 case ompt_scope_end:
520 switch(kind)
521 {
522 case ompt_sync_region_barrier:
523 case ompt_sync_region_barrier_implicit:
524 case ompt_sync_region_barrier_explicit:
525 case ompt_sync_region_barrier_implicit_workshare:
526 case ompt_sync_region_barrier_implicit_parallel:
527 case ompt_sync_region_barrier_teams:
528 case ompt_sync_region_barrier_implementation:
529 printf("%" PRIu64 ":" _TOOL_PREFIX
530 " ompt_event_barrier_end: parallel_id=%" PRIu64
531 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
533 (parallel_data) ? parallel_data->value : 0, task_data->value,
534 codeptr_ra);
535 break;
536 case ompt_sync_region_taskwait:
537 printf("%" PRIu64 ":" _TOOL_PREFIX
538 " ompt_event_taskwait_end: parallel_id=%" PRIu64
539 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
541 (parallel_data) ? parallel_data->value : 0, task_data->value,
542 codeptr_ra);
543 break;
544 case ompt_sync_region_taskgroup:
545 printf("%" PRIu64 ":" _TOOL_PREFIX
546 " ompt_event_taskgroup_end: parallel_id=%" PRIu64
547 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
549 (parallel_data) ? parallel_data->value : 0, task_data->value,
550 codeptr_ra);
551 break;
552 case ompt_sync_region_reduction:
553 printf("ompt_sync_region_reduction should never be passed to "
554 "on_ompt_callback_sync_region\n");
555 exit(-1);
556 break;
557 }
558 break;
559 case ompt_scope_beginend:
560 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
561 exit(-1);
562 }
563}
564
565static void
567 ompt_sync_region_t kind,
568 ompt_scope_endpoint_t endpoint,
569 ompt_data_t *parallel_data,
570 ompt_data_t *task_data,
571 const void *codeptr_ra)
572{
573 switch(endpoint)
574 {
575 case ompt_scope_begin:
576 switch(kind)
577 {
578 case ompt_sync_region_barrier:
579 case ompt_sync_region_barrier_implicit:
580 case ompt_sync_region_barrier_implicit_workshare:
581 case ompt_sync_region_barrier_implicit_parallel:
582 case ompt_sync_region_barrier_teams:
583 case ompt_sync_region_barrier_explicit:
584 case ompt_sync_region_barrier_implementation:
585 printf("%" PRIu64 ":" _TOOL_PREFIX
586 " ompt_event_wait_barrier_begin: parallel_id=%" PRIu64
587 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
588 ompt_get_thread_data()->value, parallel_data->value,
589 task_data->value, codeptr_ra);
590 break;
591 case ompt_sync_region_taskwait:
592 printf("%" PRIu64 ":" _TOOL_PREFIX
593 " ompt_event_wait_taskwait_begin: parallel_id=%" PRIu64
594 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
595 ompt_get_thread_data()->value, parallel_data->value,
596 task_data->value, codeptr_ra);
597 break;
598 case ompt_sync_region_taskgroup:
599 printf("%" PRIu64 ":" _TOOL_PREFIX
600 " ompt_event_wait_taskgroup_begin: parallel_id=%" PRIu64
601 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
602 ompt_get_thread_data()->value, parallel_data->value,
603 task_data->value, codeptr_ra);
604 break;
605 case ompt_sync_region_reduction:
606 printf("ompt_sync_region_reduction should never be passed to "
607 "on_ompt_callback_sync_region_wait\n");
608 exit(-1);
609 break;
610 }
611 break;
612 case ompt_scope_end:
613 switch(kind)
614 {
615 case ompt_sync_region_barrier:
616 case ompt_sync_region_barrier_implicit:
617 case ompt_sync_region_barrier_implicit_workshare:
618 case ompt_sync_region_barrier_implicit_parallel:
619 case ompt_sync_region_barrier_teams:
620 case ompt_sync_region_barrier_explicit:
621 case ompt_sync_region_barrier_implementation:
622 printf("%" PRIu64 ":" _TOOL_PREFIX
623 " ompt_event_wait_barrier_end: parallel_id=%" PRIu64
624 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
626 (parallel_data) ? parallel_data->value : 0, task_data->value,
627 codeptr_ra);
628 break;
629 case ompt_sync_region_taskwait:
630 printf("%" PRIu64 ":" _TOOL_PREFIX
631 " ompt_event_wait_taskwait_end: parallel_id=%" PRIu64
632 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
634 (parallel_data) ? parallel_data->value : 0, task_data->value,
635 codeptr_ra);
636 break;
637 case ompt_sync_region_taskgroup:
638 printf("%" PRIu64 ":" _TOOL_PREFIX
639 " ompt_event_wait_taskgroup_end: parallel_id=%" PRIu64
640 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
642 (parallel_data) ? parallel_data->value : 0, task_data->value,
643 codeptr_ra);
644 break;
645 case ompt_sync_region_reduction:
646 printf("ompt_sync_region_reduction should never be passed to "
647 "on_ompt_callback_sync_region_wait\n");
648 exit(-1);
649 break;
650 }
651 break;
652 case ompt_scope_beginend:
653 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
654 exit(-1);
655 }
656}
657
658static void on_ompt_callback_reduction(ompt_sync_region_t kind,
659 ompt_scope_endpoint_t endpoint,
660 ompt_data_t *parallel_data,
661 ompt_data_t *task_data,
662 const void *codeptr_ra) {
663 switch (endpoint) {
664 case ompt_scope_begin:
665 printf("%" PRIu64 ":" _TOOL_PREFIX
666 " ompt_event_reduction_begin: parallel_id=%" PRIu64
667 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
669 (parallel_data) ? parallel_data->value : 0, task_data->value,
670 codeptr_ra);
671 break;
672 case ompt_scope_end:
673 printf("%" PRIu64 ":" _TOOL_PREFIX
674 " ompt_event_reduction_end: parallel_id=%" PRIu64
675 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
677 (parallel_data) ? parallel_data->value : 0, task_data->value,
678 codeptr_ra);
679 break;
680 case ompt_scope_beginend:
681 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
682 exit(-1);
683 }
684}
685
686static void
688 ompt_data_t *thread_data,
689 const void *codeptr_ra)
690{
691 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_flush: codeptr_ra=%p\n",
692 thread_data->value, codeptr_ra);
693}
694
695static void
697 ompt_data_t *task_data,
698 int flags,
699 const void *codeptr_ra)
700{
701 const char* first_flag_value;
702 const char* second_flag_value;
703 if(flags & ompt_cancel_parallel)
704 first_flag_value = ompt_cancel_flag_t_values[0];
705 else if(flags & ompt_cancel_sections)
706 first_flag_value = ompt_cancel_flag_t_values[1];
707 else if(flags & ompt_cancel_loop)
708 first_flag_value = ompt_cancel_flag_t_values[2];
709 else if(flags & ompt_cancel_taskgroup)
710 first_flag_value = ompt_cancel_flag_t_values[3];
711
712 if(flags & ompt_cancel_activated)
713 second_flag_value = ompt_cancel_flag_t_values[4];
714 else if(flags & ompt_cancel_detected)
715 second_flag_value = ompt_cancel_flag_t_values[5];
716 else if(flags & ompt_cancel_discarded_task)
717 second_flag_value = ompt_cancel_flag_t_values[6];
718
719 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_cancel: task_data=%" PRIu64
720 ", flags=%s|%s=%" PRIu32 ", codeptr_ra=%p\n",
721 ompt_get_thread_data()->value, task_data->value, first_flag_value,
722 second_flag_value, flags, codeptr_ra);
723}
724
725static void
727 ompt_scope_endpoint_t endpoint,
728 ompt_data_t *parallel_data,
729 ompt_data_t *task_data,
730 unsigned int team_size,
731 unsigned int thread_num,
732 int flags)
733{
734 switch(endpoint)
735 {
736 case ompt_scope_begin:
737 if(task_data->ptr)
738 printf("%s\n", "0: task_data initially not null");
739 task_data->value = ompt_get_unique_id();
740
741 //there is no parallel_begin callback for implicit parallel region
742 //thus it is initialized in initial task
743 if(flags & ompt_task_initial)
744 {
745 char buffer[2048];
746
747 format_task_type(flags, buffer);
748 // Only check initial task not created by teams construct
749 if (team_size == 1 && thread_num == 1 && parallel_data->ptr)
750 printf("%s\n", "0: parallel_data initially not null");
751 parallel_data->value = ompt_get_unique_id();
752 printf("%" PRIu64 ":" _TOOL_PREFIX
753 " ompt_event_initial_task_begin: parallel_id=%" PRIu64
754 ", task_id=%" PRIu64 ", actual_parallelism=%" PRIu32
755 ", index=%" PRIu32 ", flags=%" PRIu32 "\n",
756 ompt_get_thread_data()->value, parallel_data->value,
757 task_data->value, team_size, thread_num, flags);
758 } else {
759 printf("%" PRIu64 ":" _TOOL_PREFIX
760 " ompt_event_implicit_task_begin: parallel_id=%" PRIu64
761 ", task_id=%" PRIu64 ", team_size=%" PRIu32
762 ", thread_num=%" PRIu32 "\n",
763 ompt_get_thread_data()->value, parallel_data->value,
764 task_data->value, team_size, thread_num);
765 }
766
767 break;
768 case ompt_scope_end:
769 if(flags & ompt_task_initial){
770 printf("%" PRIu64 ":" _TOOL_PREFIX
771 " ompt_event_initial_task_end: parallel_id=%" PRIu64
772 ", task_id=%" PRIu64 ", actual_parallelism=%" PRIu32
773 ", index=%" PRIu32 "\n",
775 (parallel_data) ? parallel_data->value : 0, task_data->value,
776 team_size, thread_num);
777 } else {
778 printf("%" PRIu64 ":" _TOOL_PREFIX
779 " ompt_event_implicit_task_end: parallel_id=%" PRIu64
780 ", task_id=%" PRIu64 ", team_size=%" PRIu32
781 ", thread_num=%" PRIu32 "\n",
783 (parallel_data) ? parallel_data->value : 0, task_data->value,
784 team_size, thread_num);
785 }
786 break;
787 case ompt_scope_beginend:
788 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
789 exit(-1);
790 }
791}
792
793static void
795 ompt_mutex_t kind,
796 unsigned int hint,
797 unsigned int impl,
798 ompt_wait_id_t wait_id,
799 const void *codeptr_ra)
800{
801 switch(kind)
802 {
803 case ompt_mutex_lock:
804 printf("%" PRIu64 ":" _TOOL_PREFIX
805 " ompt_event_init_lock: wait_id=%" PRIu64 ", hint=%" PRIu32
806 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
807 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
808 break;
809 case ompt_mutex_nest_lock:
810 printf("%" PRIu64 ":" _TOOL_PREFIX
811 " ompt_event_init_nest_lock: wait_id=%" PRIu64 ", hint=%" PRIu32
812 ", impl=%" PRIu32 ", codeptr_ra=%p \n",
813 ompt_get_thread_data()->value, wait_id, hint, impl, codeptr_ra);
814 break;
815 default:
816 break;
817 }
818}
819
820static void
822 ompt_mutex_t kind,
823 ompt_wait_id_t wait_id,
824 const void *codeptr_ra)
825{
826 switch(kind)
827 {
828 case ompt_mutex_lock:
829 printf("%" PRIu64 ":" _TOOL_PREFIX
830 " ompt_event_destroy_lock: wait_id=%" PRIu64 ", codeptr_ra=%p \n",
831 ompt_get_thread_data()->value, wait_id, codeptr_ra);
832 break;
833 case ompt_mutex_nest_lock:
834 printf("%" PRIu64 ":" _TOOL_PREFIX
835 " ompt_event_destroy_nest_lock: wait_id=%" PRIu64
836 ", codeptr_ra=%p \n",
837 ompt_get_thread_data()->value, wait_id, codeptr_ra);
838 break;
839 default:
840 break;
841 }
842}
843
844static void
846 ompt_work_t wstype,
847 ompt_scope_endpoint_t endpoint,
848 ompt_data_t *parallel_data,
849 ompt_data_t *task_data,
850 uint64_t count,
851 const void *codeptr_ra)
852{
853 switch(endpoint)
854 {
855 case ompt_scope_begin:
856 switch(wstype)
857 {
858 case ompt_work_loop:
859 case ompt_work_loop_static:
860 case ompt_work_loop_dynamic:
861 case ompt_work_loop_guided:
862 case ompt_work_loop_other:
863 // TODO: add schedule attribute for the different work_loop types.
864 // e.g., ", schedule=%s", ..., ompt_schedule_values[wstype]
865 printf("%" PRIu64 ":" _TOOL_PREFIX
866 " ompt_event_loop_begin: parallel_id=%" PRIu64
867 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
868 "\n",
869 ompt_get_thread_data()->value, parallel_data->value,
870 task_data->value, codeptr_ra, count);
871 break;
872 case ompt_work_sections:
873 printf("%" PRIu64 ":" _TOOL_PREFIX
874 " ompt_event_sections_begin: parallel_id=%" PRIu64
875 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
876 "\n",
877 ompt_get_thread_data()->value, parallel_data->value,
878 task_data->value, codeptr_ra, count);
879 break;
880 case ompt_work_single_executor:
881 printf("%" PRIu64 ":" _TOOL_PREFIX
882 " ompt_event_single_in_block_begin: parallel_id=%" PRIu64
883 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
884 "\n",
885 ompt_get_thread_data()->value, parallel_data->value,
886 task_data->value, codeptr_ra, count);
887 break;
888 case ompt_work_single_other:
889 printf("%" PRIu64 ":" _TOOL_PREFIX
890 " ompt_event_single_others_begin: parallel_id=%" PRIu64
891 ", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
892 ompt_get_thread_data()->value, parallel_data->value,
893 task_data->value, codeptr_ra, count);
894 break;
895 case ompt_work_workshare:
896 //impl
897 break;
898 case ompt_work_distribute:
899 printf("%" PRIu64 ":" _TOOL_PREFIX
900 " ompt_event_distribute_begin: parallel_id=%" PRIu64
901 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
902 "\n",
903 ompt_get_thread_data()->value, parallel_data->value,
904 task_data->value, codeptr_ra, count);
905 break;
906 case ompt_work_taskloop:
907 //impl
908 printf("%" PRIu64 ":" _TOOL_PREFIX
909 " ompt_event_taskloop_begin: parallel_id=%" PRIu64
910 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
911 "\n",
912 ompt_get_thread_data()->value, parallel_data->value,
913 task_data->value, codeptr_ra, count);
914 break;
915 case ompt_work_scope:
916 printf("%" PRIu64 ":" _TOOL_PREFIX
917 " ompt_event_scope_begin: parallel_id=%" PRIu64
918 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
919 "\n",
920 ompt_get_thread_data()->value, parallel_data->value,
921 task_data->value, codeptr_ra, count);
922 break;
923 }
924 break;
925 case ompt_scope_end:
926 switch(wstype)
927 {
928 case ompt_work_loop:
929 case ompt_work_loop_static:
930 case ompt_work_loop_dynamic:
931 case ompt_work_loop_guided:
932 case ompt_work_loop_other:
933 printf("%" PRIu64 ":" _TOOL_PREFIX
934 " ompt_event_loop_end: parallel_id=%" PRIu64
935 ", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
936 ompt_get_thread_data()->value, parallel_data->value,
937 task_data->value, codeptr_ra, count);
938 break;
939 case ompt_work_sections:
940 printf("%" PRIu64 ":" _TOOL_PREFIX
941 " ompt_event_sections_end: parallel_id=%" PRIu64
942 ", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
943 ompt_get_thread_data()->value, parallel_data->value,
944 task_data->value, codeptr_ra, count);
945 break;
946 case ompt_work_single_executor:
947 printf("%" PRIu64 ":" _TOOL_PREFIX
948 " ompt_event_single_in_block_end: parallel_id=%" PRIu64
949 ", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
950 ompt_get_thread_data()->value, parallel_data->value,
951 task_data->value, codeptr_ra, count);
952 break;
953 case ompt_work_single_other:
954 printf("%" PRIu64 ":" _TOOL_PREFIX
955 " ompt_event_single_others_end: parallel_id=%" PRIu64
956 ", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
957 ompt_get_thread_data()->value, parallel_data->value,
958 task_data->value, codeptr_ra, count);
959 break;
960 case ompt_work_workshare:
961 //impl
962 break;
963 case ompt_work_distribute:
964 printf("%" PRIu64 ":" _TOOL_PREFIX
965 " ompt_event_distribute_end: parallel_id=%" PRIu64
966 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
967 "\n",
968 ompt_get_thread_data()->value, parallel_data->value,
969 task_data->value, codeptr_ra, count);
970 break;
971 case ompt_work_taskloop:
972 //impl
973 printf("%" PRIu64 ":" _TOOL_PREFIX
974 " ompt_event_taskloop_end: parallel_id=%" PRIu64
975 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
976 "\n",
977 ompt_get_thread_data()->value, parallel_data->value,
978 task_data->value, codeptr_ra, count);
979 break;
980 case ompt_work_scope:
981 printf("%" PRIu64 ":" _TOOL_PREFIX
982 " ompt_event_scope_end: parallel_id=%" PRIu64
983 ", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
984 "\n",
985 ompt_get_thread_data()->value, parallel_data->value,
986 task_data->value, codeptr_ra, count);
987 break;
988 }
989 break;
990 case ompt_scope_beginend:
991 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
992 exit(-1);
993 }
994}
995
997 ompt_data_t *parallel_data,
998 ompt_data_t *task_data,
999 ompt_dispatch_t kind,
1000 ompt_data_t instance) {
1001 char *event_name = NULL;
1002 void *codeptr_ra = NULL;
1003 ompt_dispatch_chunk_t *dispatch_chunk = NULL;
1004 switch (kind) {
1005 case ompt_dispatch_section:
1006 event_name = "ompt_event_section_begin";
1007 codeptr_ra = instance.ptr;
1008 break;
1009 case ompt_dispatch_ws_loop_chunk:
1010 event_name = "ompt_event_ws_loop_chunk_begin";
1011 dispatch_chunk = (ompt_dispatch_chunk_t *)instance.ptr;
1012 break;
1013 case ompt_dispatch_taskloop_chunk:
1014 event_name = "ompt_event_taskloop_chunk_begin";
1015 dispatch_chunk = (ompt_dispatch_chunk_t *)instance.ptr;
1016 break;
1017 case ompt_dispatch_distribute_chunk:
1018 event_name = "ompt_event_distribute_chunk_begin";
1019 dispatch_chunk = (ompt_dispatch_chunk_t *)instance.ptr;
1020 break;
1021 default:
1022 event_name = "ompt_ws_loop_iteration_begin";
1023 }
1024 printf("%" PRIu64 ":" _TOOL_PREFIX
1025 " %s: parallel_id=%" PRIu64 ", task_id=%" PRIu64
1026 ", codeptr_ra=%p, chunk_start=%" PRIu64 ", chunk_iterations=%" PRIu64
1027 "\n", ompt_get_thread_data()->value, event_name, parallel_data->value,
1028 task_data->value, codeptr_ra,
1029 dispatch_chunk ? dispatch_chunk->start : 0,
1030 dispatch_chunk ? dispatch_chunk->iterations : 0);
1031}
1032
1033static void on_ompt_callback_masked(ompt_scope_endpoint_t endpoint,
1034 ompt_data_t *parallel_data,
1035 ompt_data_t *task_data,
1036 const void *codeptr_ra) {
1037 switch(endpoint)
1038 {
1039 case ompt_scope_begin:
1040 printf("%" PRIu64 ":" _TOOL_PREFIX
1041 " ompt_event_masked_begin: parallel_id=%" PRIu64
1042 ", task_id=%" PRIu64 ", codeptr_ra=%p\n",
1043 ompt_get_thread_data()->value, parallel_data->value,
1044 task_data->value, codeptr_ra);
1045 break;
1046 case ompt_scope_end:
1047 printf("%" PRIu64 ":" _TOOL_PREFIX
1048 " ompt_event_masked_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64
1049 ", codeptr_ra=%p\n",
1050 ompt_get_thread_data()->value, parallel_data->value,
1051 task_data->value, codeptr_ra);
1052 break;
1053 case ompt_scope_beginend:
1054 printf("ompt_scope_beginend should never be passed to %s\n", __func__);
1055 exit(-1);
1056 }
1057}
1058
1060 ompt_data_t *encountering_task_data,
1061 const ompt_frame_t *encountering_task_frame, ompt_data_t *parallel_data,
1062 uint32_t requested_team_size, int flag, const void *codeptr_ra) {
1063 if(parallel_data->ptr)
1064 printf("0: parallel_data initially not null\n");
1065 parallel_data->value = ompt_get_unique_id();
1066 int invoker = flag & 0xF;
1067 const char *event = (flag & ompt_parallel_team) ? "parallel" : "teams";
1068 const char *size = (flag & ompt_parallel_team) ? "team_size" : "num_teams";
1069 printf("%" PRIu64 ":" _TOOL_PREFIX
1070 " ompt_event_%s_begin: parent_task_id=%" PRIu64
1071 ", parent_task_frame.exit=%p, parent_task_frame.reenter=%p, "
1072 "parallel_id=%" PRIu64 ", requested_%s=%" PRIu32
1073 ", codeptr_ra=%p, invoker=%d\n",
1074 ompt_get_thread_data()->value, event, encountering_task_data->value,
1075 encountering_task_frame->exit_frame.ptr,
1076 encountering_task_frame->enter_frame.ptr, parallel_data->value, size,
1077 requested_team_size, codeptr_ra, invoker);
1078}
1079
1080static void on_ompt_callback_parallel_end(ompt_data_t *parallel_data,
1081 ompt_data_t *encountering_task_data,
1082 int flag, const void *codeptr_ra) {
1083 int invoker = flag & 0xF;
1084 const char *event = (flag & ompt_parallel_team) ? "parallel" : "teams";
1085 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_%s_end: parallel_id=%" PRIu64
1086 ", task_id=%" PRIu64 ", invoker=%d, codeptr_ra=%p\n",
1087 ompt_get_thread_data()->value, event, parallel_data->value,
1088 encountering_task_data->value, invoker, codeptr_ra);
1089}
1090
1091static void
1093 ompt_data_t *encountering_task_data,
1094 const ompt_frame_t *encountering_task_frame,
1095 ompt_data_t* new_task_data,
1096 int type,
1097 int has_dependences,
1098 const void *codeptr_ra)
1099{
1100 if(new_task_data->ptr)
1101 printf("0: new_task_data initially not null\n");
1102 new_task_data->value = ompt_get_unique_id();
1103 char buffer[2048];
1104
1105 format_task_type(type, buffer);
1106
1107 printf(
1108 "%" PRIu64 ":" _TOOL_PREFIX
1109 " ompt_event_task_create: parent_task_id=%" PRIu64
1110 ", parent_task_frame.exit=%p, parent_task_frame.reenter=%p, "
1111 "new_task_id=%" PRIu64
1112 ", codeptr_ra=%p, task_type=%s=%d, has_dependences=%s\n",
1114 encountering_task_data ? encountering_task_data->value : 0,
1115 encountering_task_frame ? encountering_task_frame->exit_frame.ptr : NULL,
1116 encountering_task_frame ? encountering_task_frame->enter_frame.ptr : NULL,
1117 new_task_data->value, codeptr_ra, buffer, type,
1118 has_dependences ? "yes" : "no");
1119}
1120
1121static void
1123 ompt_data_t *first_task_data,
1124 ompt_task_status_t prior_task_status,
1125 ompt_data_t *second_task_data)
1126{
1127 printf("%" PRIu64 ":" _TOOL_PREFIX
1128 " ompt_event_task_schedule: first_task_id=%" PRIu64
1129 ", second_task_id=%" PRIu64 ", prior_task_status=%s=%d\n",
1130 ompt_get_thread_data()->value, first_task_data->value,
1131 (second_task_data ? second_task_data->value : -1),
1132 ompt_task_status_t_values[prior_task_status], prior_task_status);
1133 if (prior_task_status == ompt_task_complete ||
1134 prior_task_status == ompt_task_late_fulfill ||
1135 prior_task_status == ompt_taskwait_complete) {
1136 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_task_end: task_id=%" PRIu64
1137 "\n", ompt_get_thread_data()->value, first_task_data->value);
1138 }
1139}
1140
1141static void
1143 ompt_data_t *task_data,
1144 const ompt_dependence_t *deps,
1145 int ndeps)
1146{
1147 char buffer[2048];
1148 char *progress = buffer;
1149 int i;
1150 for (i = 0; i < ndeps && progress < buffer + 2000; i++) {
1151 if (deps[i].dependence_type == ompt_dependence_type_source ||
1152 deps[i].dependence_type == ompt_dependence_type_sink)
1153 progress +=
1154 sprintf(progress, "(%" PRIu64 ", %s), ", deps[i].variable.value,
1155 ompt_dependence_type_t_values[deps[i].dependence_type]);
1156 else
1157 progress +=
1158 sprintf(progress, "(%p, %s), ", deps[i].variable.ptr,
1159 ompt_dependence_type_t_values[deps[i].dependence_type]);
1160 }
1161 if (ndeps > 0)
1162 progress[-2] = 0;
1163 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_dependences: task_id=%" PRIu64
1164 ", deps=[%s], ndeps=%d\n",
1165 ompt_get_thread_data()->value, task_data->value, buffer, ndeps);
1166}
1167
1168static void
1170 ompt_data_t *first_task_data,
1171 ompt_data_t *second_task_data)
1172{
1173 printf("%" PRIu64 ":" _TOOL_PREFIX
1174 " ompt_event_task_dependence_pair: first_task_id=%" PRIu64
1175 ", second_task_id=%" PRIu64 "\n",
1176 ompt_get_thread_data()->value, first_task_data->value,
1177 second_task_data->value);
1178}
1179
1180static void
1182 ompt_thread_t thread_type,
1183 ompt_data_t *thread_data)
1184{
1185 if(thread_data->ptr)
1186 printf("%s\n", "0: thread_data initially not null");
1187 thread_data->value = ompt_get_unique_id();
1188 printf("%" PRIu64 ":" _TOOL_PREFIX
1189 " ompt_event_thread_begin: thread_type=%s=%d, thread_id=%" PRIu64 "\n",
1191 thread_type, thread_data->value);
1192}
1193
1194static void
1196 ompt_data_t *thread_data)
1197{
1198 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_thread_end: thread_id=%" PRIu64
1199 "\n",
1200 ompt_get_thread_data()->value, thread_data->value);
1201}
1202
1203static int
1205 uint64_t command,
1206 uint64_t modifier,
1207 void *arg,
1208 const void *codeptr_ra)
1209{
1210 ompt_frame_t* omptTaskFrame;
1211 ompt_get_task_info(0, NULL, (ompt_data_t**) NULL, &omptTaskFrame, NULL, NULL);
1212 printf("%" PRIu64 ":" _TOOL_PREFIX " ompt_event_control_tool: command=%" PRIu64
1213 ", modifier=%" PRIu64
1214 ", arg=%p, codeptr_ra=%p, current_task_frame.exit=%p, "
1215 "current_task_frame.reenter=%p \n",
1216 ompt_get_thread_data()->value, command, modifier, arg, codeptr_ra,
1217 omptTaskFrame->exit_frame.ptr, omptTaskFrame->enter_frame.ptr);
1218
1219 // the following would interfere with expected output for OMPT tests, so skip
1220#ifndef _OMPT_TESTS
1221 // print task data
1222 int task_level = 0;
1223 ompt_data_t *task_data;
1224 while (ompt_get_task_info(task_level, NULL, (ompt_data_t **)&task_data, NULL,
1225 NULL, NULL)) {
1226 printf("%" PRIu64 ":" _TOOL_PREFIX " task level %d: task_id=%" PRIu64 "\n",
1227 ompt_get_thread_data()->value, task_level, task_data->value);
1228 task_level++;
1229 }
1230
1231 // print parallel data
1232 int parallel_level = 0;
1233 ompt_data_t *parallel_data;
1234 while (ompt_get_parallel_info(parallel_level, (ompt_data_t **)&parallel_data,
1235 NULL)) {
1236 printf("%" PRIu64 ":" _TOOL_PREFIX " parallel level %d: parallel_id=%" PRIu64
1237 "\n",
1238 ompt_get_thread_data()->value, parallel_level, parallel_data->value);
1239 parallel_level++;
1240 }
1241#endif
1242 return 0; //success
1243}
1244
1245static void on_ompt_callback_error(ompt_severity_t severity,
1246 const char *message, size_t length,
1247 const void *codeptr_ra) {
1248 printf("%" PRIu64 ": ompt_event_runtime_error: severity=%" PRIu32
1249 ", message=%s, length=%" PRIu64 ", codeptr_ra=%p\n",
1250 ompt_get_thread_data()->value, severity, message, (uint64_t)length,
1251 codeptr_ra);
1252}
1253
1255 ompt_function_lookup_t lookup,
1256 int initial_device_num,
1257 ompt_data_t *tool_data)
1258{
1259 ompt_set_callback = (ompt_set_callback_t) lookup("ompt_set_callback");
1260 ompt_get_callback = (ompt_get_callback_t) lookup("ompt_get_callback");
1261 ompt_get_state = (ompt_get_state_t) lookup("ompt_get_state");
1262 ompt_get_task_info = (ompt_get_task_info_t) lookup("ompt_get_task_info");
1263 ompt_get_task_memory = (ompt_get_task_memory_t)lookup("ompt_get_task_memory");
1264 ompt_get_thread_data = (ompt_get_thread_data_t) lookup("ompt_get_thread_data");
1265 ompt_get_parallel_info = (ompt_get_parallel_info_t) lookup("ompt_get_parallel_info");
1266 ompt_get_unique_id = (ompt_get_unique_id_t) lookup("ompt_get_unique_id");
1267 ompt_finalize_tool = (ompt_finalize_tool_t)lookup("ompt_finalize_tool");
1268
1270
1271 ompt_get_num_procs = (ompt_get_num_procs_t) lookup("ompt_get_num_procs");
1272 ompt_get_num_places = (ompt_get_num_places_t) lookup("ompt_get_num_places");
1273 ompt_get_place_proc_ids = (ompt_get_place_proc_ids_t) lookup("ompt_get_place_proc_ids");
1274 ompt_get_place_num = (ompt_get_place_num_t) lookup("ompt_get_place_num");
1275 ompt_get_partition_place_nums = (ompt_get_partition_place_nums_t) lookup("ompt_get_partition_place_nums");
1276 ompt_get_proc_id = (ompt_get_proc_id_t) lookup("ompt_get_proc_id");
1277 ompt_enumerate_states = (ompt_enumerate_states_t) lookup("ompt_enumerate_states");
1278 ompt_enumerate_mutex_impls = (ompt_enumerate_mutex_impls_t) lookup("ompt_enumerate_mutex_impls");
1279
1280 register_ompt_callback(ompt_callback_mutex_acquire);
1281 register_ompt_callback_t(ompt_callback_mutex_acquired, ompt_callback_mutex_t);
1282 register_ompt_callback_t(ompt_callback_mutex_released, ompt_callback_mutex_t);
1283 register_ompt_callback(ompt_callback_nest_lock);
1284 register_ompt_callback(ompt_callback_sync_region);
1285 register_ompt_callback_t(ompt_callback_sync_region_wait, ompt_callback_sync_region_t);
1286 register_ompt_callback_t(ompt_callback_reduction, ompt_callback_sync_region_t);
1287 register_ompt_callback(ompt_callback_control_tool);
1288 register_ompt_callback(ompt_callback_flush);
1289 register_ompt_callback(ompt_callback_cancel);
1290 register_ompt_callback(ompt_callback_implicit_task);
1291 register_ompt_callback_t(ompt_callback_lock_init, ompt_callback_mutex_acquire_t);
1292 register_ompt_callback_t(ompt_callback_lock_destroy, ompt_callback_mutex_t);
1293 register_ompt_callback(ompt_callback_work);
1294 register_ompt_callback(ompt_callback_dispatch);
1295 register_ompt_callback(ompt_callback_masked);
1296 register_ompt_callback(ompt_callback_parallel_begin);
1297 register_ompt_callback(ompt_callback_parallel_end);
1298 register_ompt_callback(ompt_callback_task_create);
1299 register_ompt_callback(ompt_callback_task_schedule);
1300 register_ompt_callback(ompt_callback_dependences);
1301 register_ompt_callback(ompt_callback_task_dependence);
1302 register_ompt_callback(ompt_callback_thread_begin);
1303 register_ompt_callback(ompt_callback_thread_end);
1304 register_ompt_callback(ompt_callback_error);
1305 printf("0: NULL_POINTER=%p\n", (void*)NULL);
1306 return 1; //success
1307}
1308
1309void ompt_finalize(ompt_data_t *tool_data)
1310{
1311 printf("0: ompt_event_runtime_shutdown\n");
1312}
1313
1314#ifdef __cplusplus
1315extern "C" {
1316#endif
1318 unsigned int omp_version,
1319 const char *runtime_version)
1320{
1322 return &ompt_start_tool_result;
1323}
1324#ifdef __cplusplus
1325}
1326#endif
1327#endif // ifndef USE_PRIVATE_TOOL
1328#ifdef _OMPT_TESTS
1329#undef _OMPT_TESTS
1330#endif
static void on_ompt_callback_mutex_released(ompt_mutex_t kind, ompt_wait_id_t wait_id, const void *codeptr_ra)
Definition: callback.h:404
static void on_ompt_callback_implicit_task(ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, unsigned int team_size, unsigned int thread_num, int flags)
Definition: callback.h:726
static const char * ompt_thread_t_values[]
Definition: callback.h:25
static void print_ids(int level)
Definition: callback.h:108
static void on_ompt_callback_parallel_end(ompt_data_t *parallel_data, ompt_data_t *encountering_task_data, int flag, const void *codeptr_ra)
Definition: callback.h:1080
static void on_ompt_callback_flush(ompt_data_t *thread_data, const void *codeptr_ra)
Definition: callback.h:687
static ompt_get_task_info_t ompt_get_task_info
Definition: callback.h:93
static ompt_enumerate_states_t ompt_enumerate_states
Definition: callback.h:105
static void on_ompt_callback_lock_destroy(ompt_mutex_t kind, ompt_wait_id_t wait_id, const void *codeptr_ra)
Definition: callback.h:821
static void on_ompt_callback_task_schedule(ompt_data_t *first_task_data, ompt_task_status_t prior_task_status, ompt_data_t *second_task_data)
Definition: callback.h:1122
static ompt_get_callback_t ompt_get_callback
Definition: callback.h:91
static void format_task_type(int type, char *buffer)
Definition: callback.h:66
static ompt_get_place_proc_ids_t ompt_get_place_proc_ids
Definition: callback.h:101
static void on_ompt_callback_lock_init(ompt_mutex_t kind, unsigned int hint, unsigned int impl, ompt_wait_id_t wait_id, const void *codeptr_ra)
Definition: callback.h:794
static ompt_set_callback_t ompt_set_callback
Definition: callback.h:90
static ompt_get_place_num_t ompt_get_place_num
Definition: callback.h:102
#define register_ompt_callback(name)
Definition: callback.h:289
static void on_ompt_callback_masked(ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra)
Definition: callback.h:1033
static void on_ompt_callback_dependences(ompt_data_t *task_data, const ompt_dependence_t *deps, int ndeps)
Definition: callback.h:1142
static ompt_get_partition_place_nums_t ompt_get_partition_place_nums
Definition: callback.h:103
static void on_ompt_callback_task_create(ompt_data_t *encountering_task_data, const ompt_frame_t *encountering_task_frame, ompt_data_t *new_task_data, int type, int has_dependences, const void *codeptr_ra)
Definition: callback.h:1092
static void on_ompt_callback_error(ompt_severity_t severity, const char *message, size_t length, const void *codeptr_ra)
Definition: callback.h:1245
static void on_ompt_callback_nest_lock(ompt_scope_endpoint_t endpoint, ompt_wait_id_t wait_id, const void *codeptr_ra)
Definition: callback.h:446
int ompt_initialize(ompt_function_lookup_t lookup, int initial_device_num, ompt_data_t *tool_data)
Definition: callback.h:1254
static void on_ompt_callback_mutex_acquired(ompt_mutex_t kind, ompt_wait_id_t wait_id, const void *codeptr_ra)
Definition: callback.h:350
static const char * ompt_dependence_type_t_values[36]
Definition: callback.h:50
static ompt_get_task_memory_t ompt_get_task_memory
Definition: callback.h:94
static int on_ompt_callback_control_tool(uint64_t command, uint64_t modifier, void *arg, const void *codeptr_ra)
Definition: callback.h:1204
static const char * ompt_task_status_t_values[]
Definition: callback.h:29
void ompt_finalize(ompt_data_t *tool_data)
Definition: callback.h:1309
static void on_ompt_callback_task_dependence(ompt_data_t *first_task_data, ompt_data_t *second_task_data)
Definition: callback.h:1169
static void on_ompt_callback_mutex_acquire(ompt_mutex_t kind, unsigned int hint, unsigned int impl, ompt_wait_id_t wait_id, const void *codeptr_ra)
Definition: callback.h:293
#define register_ompt_callback_t(name, type)
Definition: callback.h:282
static void on_ompt_callback_parallel_begin(ompt_data_t *encountering_task_data, const ompt_frame_t *encountering_task_frame, ompt_data_t *parallel_data, uint32_t requested_team_size, int flag, const void *codeptr_ra)
Definition: callback.h:1059
static ompt_get_num_procs_t ompt_get_num_procs
Definition: callback.h:99
static void on_ompt_callback_thread_end(ompt_data_t *thread_data)
Definition: callback.h:1195
static void on_ompt_callback_sync_region(ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra)
Definition: callback.h:472
static void on_ompt_callback_work(ompt_work_t wstype, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, uint64_t count, const void *codeptr_ra)
Definition: callback.h:845
static ompt_finalize_tool_t ompt_finalize_tool
Definition: callback.h:98
static ompt_get_num_places_t ompt_get_num_places
Definition: callback.h:100
static ompt_get_unique_id_t ompt_get_unique_id
Definition: callback.h:97
static ompt_get_state_t ompt_get_state
Definition: callback.h:92
static const char * ompt_cancel_flag_t_values[]
Definition: callback.h:40
#define _TOOL_PREFIX
Definition: callback.h:20
static void on_ompt_callback_thread_begin(ompt_thread_t thread_type, ompt_data_t *thread_data)
Definition: callback.h:1181
static void on_ompt_callback_sync_region_wait(ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra)
Definition: callback.h:566
static void on_ompt_callback_dispatch(ompt_data_t *parallel_data, ompt_data_t *task_data, ompt_dispatch_t kind, ompt_data_t instance)
Definition: callback.h:996
static void on_ompt_callback_reduction(ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra)
Definition: callback.h:658
static ompt_get_parallel_info_t ompt_get_parallel_info
Definition: callback.h:96
static void on_ompt_callback_cancel(ompt_data_t *task_data, int flags, const void *codeptr_ra)
Definition: callback.h:696
static ompt_get_proc_id_t ompt_get_proc_id
Definition: callback.h:104
static ompt_get_thread_data_t ompt_get_thread_data
Definition: callback.h:95
static ompt_enumerate_mutex_impls_t ompt_enumerate_mutex_impls
Definition: callback.h:106
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 * instance
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 count
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 length
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 __itt_event event
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 value
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 size
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 __itt_event ITT_FORMAT __itt_group_mark d void const wchar_t const wchar_t int ITT_FORMAT __itt_group_sync __itt_group_fsync x void const wchar_t int const wchar_t int int ITT_FORMAT __itt_group_sync __itt_group_fsync x void ITT_FORMAT __itt_group_sync __itt_group_fsync p void ITT_FORMAT __itt_group_sync __itt_group_fsync p void size_t ITT_FORMAT lu no args __itt_obj_prop_t __itt_obj_state_t ITT_FORMAT d const char ITT_FORMAT s const char ITT_FORMAT s __itt_frame frame
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 type
#define i
Definition: kmp_stub.cpp:87
struct ompt_start_tool_result_t ompt_start_tool_result_t
static ompt_start_tool_result_t * ompt_start_tool_result
#define ompt_start_tool
volatile int flag