1345153Sdim/* 2345153Sdim * ompt-internal.h - header of OMPT internal data structures 3345153Sdim */ 4345153Sdim 5345153Sdim//===----------------------------------------------------------------------===// 6345153Sdim// 7353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 8353358Sdim// See https://llvm.org/LICENSE.txt for license information. 9353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 10345153Sdim// 11345153Sdim//===----------------------------------------------------------------------===// 12345153Sdim 13345153Sdim#ifndef __OMPT_INTERNAL_H__ 14345153Sdim#define __OMPT_INTERNAL_H__ 15345153Sdim 16345153Sdim#include "ompt-event-specific.h" 17345153Sdim#include "omp-tools.h" 18345153Sdim 19345153Sdim#define OMPT_VERSION 1 20345153Sdim 21345153Sdim#define _OMP_EXTERN extern "C" 22345153Sdim 23345153Sdim#define OMPT_INVOKER(x) \ 24345153Sdim ((x == fork_context_gnu) ? ompt_parallel_invoker_program \ 25345153Sdim : ompt_parallel_invoker_runtime) 26345153Sdim 27345153Sdim#define ompt_callback(e) e##_callback 28345153Sdim 29345153Sdimtypedef struct ompt_callbacks_internal_s { 30345153Sdim#define ompt_event_macro(event, callback, eventid) \ 31345153Sdim callback ompt_callback(event); 32345153Sdim 33345153Sdim FOREACH_OMPT_EVENT(ompt_event_macro) 34345153Sdim 35345153Sdim#undef ompt_event_macro 36345153Sdim} ompt_callbacks_internal_t; 37345153Sdim 38345153Sdimtypedef struct ompt_callbacks_active_s { 39345153Sdim unsigned int enabled : 1; 40345153Sdim#define ompt_event_macro(event, callback, eventid) unsigned int event : 1; 41345153Sdim 42345153Sdim FOREACH_OMPT_EVENT(ompt_event_macro) 43345153Sdim 44345153Sdim#undef ompt_event_macro 45345153Sdim} ompt_callbacks_active_t; 46345153Sdim 47345153Sdim#define TASK_TYPE_DETAILS_FORMAT(info) \ 48345153Sdim ((info->td_flags.task_serial || info->td_flags.tasking_ser) \ 49345153Sdim ? ompt_task_undeferred \ 50345153Sdim : 0x0) | \ 51345153Sdim ((!(info->td_flags.tiedness)) ? ompt_task_untied : 0x0) | \ 52345153Sdim (info->td_flags.final ? ompt_task_final : 0x0) | \ 53345153Sdim (info->td_flags.merged_if0 ? ompt_task_mergeable : 0x0) 54345153Sdim 55345153Sdimtypedef struct { 56345153Sdim ompt_frame_t frame; 57345153Sdim ompt_data_t task_data; 58345153Sdim struct kmp_taskdata *scheduling_parent; 59345153Sdim int thread_num; 60345153Sdim int ndeps; 61345153Sdim ompt_dependence_t *deps; 62345153Sdim} ompt_task_info_t; 63345153Sdim 64345153Sdimtypedef struct { 65345153Sdim ompt_data_t parallel_data; 66345153Sdim void *master_return_address; 67345153Sdim} ompt_team_info_t; 68345153Sdim 69345153Sdimtypedef struct ompt_lw_taskteam_s { 70345153Sdim ompt_team_info_t ompt_team_info; 71345153Sdim ompt_task_info_t ompt_task_info; 72345153Sdim int heap; 73345153Sdim struct ompt_lw_taskteam_s *parent; 74345153Sdim} ompt_lw_taskteam_t; 75345153Sdim 76345153Sdimtypedef struct { 77345153Sdim ompt_data_t thread_data; 78345153Sdim ompt_data_t task_data; /* stored here from implicit barrier-begin until 79345153Sdim implicit-task-end */ 80345153Sdim void *return_address; /* stored here on entry of runtime */ 81345153Sdim ompt_state_t state; 82345153Sdim ompt_wait_id_t wait_id; 83345153Sdim int ompt_task_yielded; 84360784Sdim int parallel_flags; // information for the last parallel region invoked 85345153Sdim void *idle_frame; 86345153Sdim} ompt_thread_info_t; 87345153Sdim 88345153Sdimextern ompt_callbacks_internal_t ompt_callbacks; 89345153Sdim 90353358Sdim#if OMPT_SUPPORT && OMPT_OPTIONAL 91345153Sdim#if USE_FAST_MEMORY 92345153Sdim#define KMP_OMPT_DEPS_ALLOC __kmp_fast_allocate 93345153Sdim#define KMP_OMPT_DEPS_FREE __kmp_fast_free 94345153Sdim#else 95345153Sdim#define KMP_OMPT_DEPS_ALLOC __kmp_thread_malloc 96345153Sdim#define KMP_OMPT_DEPS_FREE __kmp_thread_free 97345153Sdim#endif 98353358Sdim#endif /* OMPT_SUPPORT && OMPT_OPTIONAL */ 99345153Sdim 100345153Sdim#ifdef __cplusplus 101345153Sdimextern "C" { 102345153Sdim#endif 103345153Sdim 104345153Sdimvoid ompt_pre_init(void); 105345153Sdimvoid ompt_post_init(void); 106345153Sdimvoid ompt_fini(void); 107345153Sdim 108345153Sdim#define OMPT_GET_RETURN_ADDRESS(level) __builtin_return_address(level) 109345153Sdim#define OMPT_GET_FRAME_ADDRESS(level) __builtin_frame_address(level) 110345153Sdim 111345153Sdimint __kmp_control_tool(uint64_t command, uint64_t modifier, void *arg); 112345153Sdim 113345153Sdimextern ompt_callbacks_active_t ompt_enabled; 114345153Sdim 115345153Sdim#if KMP_OS_WINDOWS 116345153Sdim#define UNLIKELY(x) (x) 117345153Sdim#define OMPT_NOINLINE __declspec(noinline) 118345153Sdim#else 119345153Sdim#define UNLIKELY(x) __builtin_expect(!!(x), 0) 120345153Sdim#define OMPT_NOINLINE __attribute__((noinline)) 121345153Sdim#endif 122345153Sdim 123345153Sdim#ifdef __cplusplus 124345153Sdim}; 125345153Sdim#endif 126345153Sdim 127345153Sdim#endif 128