brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 36b45f7 Raw
135 lines · c
1/*2 * ompt-internal.h - header of OMPT internal data structures3 */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-exception10//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 120 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##_callback28 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_macro36} 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_macro45} 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.target                                                   \54           ? ompt_task_target                                                  \55           : (info->td_flags.tasktype ? ompt_task_explicit                     \56                                      : ompt_task_implicit)) |                 \57      (info->td_flags.merged_if0 ? ompt_task_mergeable : 0x0)58 59typedef struct {60  ompt_frame_t frame;61  ompt_data_t task_data;62  struct kmp_taskdata *scheduling_parent;63  int thread_num;64  ompt_dispatch_chunk_t dispatch_chunk;65} ompt_task_info_t;66 67typedef struct {68  ompt_data_t parallel_data;69  void *master_return_address;70} ompt_team_info_t;71 72typedef struct ompt_lw_taskteam_s {73  ompt_team_info_t ompt_team_info;74  ompt_task_info_t ompt_task_info;75  int heap;76  struct ompt_lw_taskteam_s *parent;77} ompt_lw_taskteam_t;78 79typedef struct {80  ompt_data_t thread_data;81  ompt_data_t task_data; /* stored here from implicit barrier-begin until82                            implicit-task-end */83  ompt_data_t target_task_data; /* required by target support */84  void *return_address; /* stored here on entry of runtime */85  ompt_state_t state;86  ompt_wait_id_t wait_id;87  int ompt_task_yielded;88  int parallel_flags; // information for the last parallel region invoked89  void *idle_frame;90} ompt_thread_info_t;91 92extern ompt_callbacks_internal_t ompt_callbacks;93 94#if OMPT_SUPPORT && OMPT_OPTIONAL95#if USE_FAST_MEMORY96#define KMP_OMPT_DEPS_ALLOC __kmp_fast_allocate97#define KMP_OMPT_DEPS_FREE __kmp_fast_free98#else99#define KMP_OMPT_DEPS_ALLOC __kmp_thread_malloc100#define KMP_OMPT_DEPS_FREE __kmp_thread_free101#endif102#endif /* OMPT_SUPPORT && OMPT_OPTIONAL */103 104#ifdef __cplusplus105extern "C" {106#endif107 108void ompt_pre_init(void);109void ompt_post_init(void);110void ompt_fini(void);111 112#define OMPT_GET_RETURN_ADDRESS(level)                                         \113  __builtin_extract_return_addr(__builtin_return_address(level))114#define OMPT_GET_FRAME_ADDRESS(level) __builtin_frame_address(level)115#define OMPT_FRAME_FLAGS_APP (ompt_frame_application | ompt_frame_cfa)116#define OMPT_FRAME_FLAGS_RUNTIME (ompt_frame_runtime | ompt_frame_cfa)117 118int __kmp_control_tool(uint64_t command, uint64_t modifier, void *arg);119 120extern ompt_callbacks_active_t ompt_enabled;121 122#if KMP_OS_WINDOWS123#define UNLIKELY(x) (x)124#define OMPT_NOINLINE __declspec(noinline)125#else126#define UNLIKELY(x) __builtin_expect(!!(x), 0)127#define OMPT_NOINLINE __attribute__((noinline))128#endif129 130#ifdef __cplusplus131}132#endif133 134#endif135