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