blob: 44929efc68a2e60c78ad8b3d897cfce7f58a8fa1 [file] [log] [blame]
Andrey Churbanove5f44922015-04-29 16:22:07 +00001#ifndef __OMPT_INTERNAL_H__
2#define __OMPT_INTERNAL_H__
3
Andrey Churbanove5f44922015-04-29 16:22:07 +00004#include "ompt-event-specific.h"
Jonathan Peyton30419822017-05-12 18:01:32 +00005#include "ompt.h"
Andrey Churbanove5f44922015-04-29 16:22:07 +00006
7#define OMPT_VERSION 1
8
9#define _OMP_EXTERN extern "C"
10
Jonathan Peyton30419822017-05-12 18:01:32 +000011#define OMPT_INVOKER(x) \
Jonathan Peyton3fdf3292015-07-21 18:03:30 +000012 ((x == fork_context_gnu) ? ompt_invoker_program : ompt_invoker_runtime)
Andrey Churbanove5f44922015-04-29 16:22:07 +000013
Jonathan Peyton30419822017-05-12 18:01:32 +000014#define ompt_callback(e) e##_callback
Andrey Churbanove5f44922015-04-29 16:22:07 +000015
16typedef struct ompt_callbacks_s {
Jonathan Peyton30419822017-05-12 18:01:32 +000017#define ompt_event_macro(event, callback, eventid) \
18 callback ompt_callback(event);
Andrey Churbanove5f44922015-04-29 16:22:07 +000019
Jonathan Peyton30419822017-05-12 18:01:32 +000020 FOREACH_OMPT_EVENT(ompt_event_macro)
Andrey Churbanove5f44922015-04-29 16:22:07 +000021
22#undef ompt_event_macro
23} ompt_callbacks_t;
24
Andrey Churbanove5f44922015-04-29 16:22:07 +000025typedef struct {
Jonathan Peyton30419822017-05-12 18:01:32 +000026 ompt_frame_t frame;
27 void *function;
28 ompt_task_id_t task_id;
Jonas Hahnfeld39b68622016-01-28 10:39:52 +000029#if OMP_40_ENABLED
Jonathan Peyton30419822017-05-12 18:01:32 +000030 int ndeps;
31 ompt_task_dependence_t *deps;
Jonas Hahnfeld39b68622016-01-28 10:39:52 +000032#endif /* OMP_40_ENABLED */
Andrey Churbanove5f44922015-04-29 16:22:07 +000033} ompt_task_info_t;
34
Andrey Churbanove5f44922015-04-29 16:22:07 +000035typedef struct {
Jonathan Peyton30419822017-05-12 18:01:32 +000036 ompt_parallel_id_t parallel_id;
37 void *microtask;
Andrey Churbanove5f44922015-04-29 16:22:07 +000038} ompt_team_info_t;
39
Andrey Churbanove5f44922015-04-29 16:22:07 +000040typedef struct ompt_lw_taskteam_s {
Jonathan Peyton30419822017-05-12 18:01:32 +000041 ompt_team_info_t ompt_team_info;
42 ompt_task_info_t ompt_task_info;
43 struct ompt_lw_taskteam_s *parent;
Andrey Churbanove5f44922015-04-29 16:22:07 +000044} ompt_lw_taskteam_t;
45
Andrey Churbanove5f44922015-04-29 16:22:07 +000046typedef struct ompt_parallel_info_s {
Jonathan Peyton30419822017-05-12 18:01:32 +000047 ompt_task_id_t parent_task_id; /* id of parent task */
48 ompt_parallel_id_t parallel_id; /* id of parallel region */
49 ompt_frame_t *parent_task_frame; /* frame data of parent task */
50 void *parallel_function; /* pointer to outlined function */
Andrey Churbanove5f44922015-04-29 16:22:07 +000051} ompt_parallel_info_t;
52
Andrey Churbanove5f44922015-04-29 16:22:07 +000053typedef struct {
Jonathan Peyton30419822017-05-12 18:01:32 +000054 ompt_state_t state;
55 ompt_wait_id_t wait_id;
56 void *idle_frame;
Andrey Churbanove5f44922015-04-29 16:22:07 +000057} ompt_thread_info_t;
58
Andrey Churbanove5f44922015-04-29 16:22:07 +000059extern ompt_callbacks_t ompt_callbacks;
60
Jonas Hahnfeld39b68622016-01-28 10:39:52 +000061#if OMP_40_ENABLED && OMPT_SUPPORT && OMPT_TRACE
62#if USE_FAST_MEMORY
Jonathan Peyton30419822017-05-12 18:01:32 +000063#define KMP_OMPT_DEPS_ALLOC __kmp_fast_allocate
64#define KMP_OMPT_DEPS_FREE __kmp_fast_free
65#else
66#define KMP_OMPT_DEPS_ALLOC __kmp_thread_malloc
67#define KMP_OMPT_DEPS_FREE __kmp_thread_free
68#endif
Jonas Hahnfeld39b68622016-01-28 10:39:52 +000069#endif /* OMP_40_ENABLED && OMPT_SUPPORT && OMPT_TRACE */
70
Andrey Churbanove5f44922015-04-29 16:22:07 +000071#ifdef __cplusplus
72extern "C" {
73#endif
74
Jonathan Peyton82a13bf2015-09-21 18:01:02 +000075void ompt_pre_init(void);
76void ompt_post_init(void);
Andrey Churbanove5f44922015-04-29 16:22:07 +000077void ompt_fini(void);
78
Jonathan Peytonb68a85d2015-09-21 18:11:22 +000079extern int ompt_enabled;
80
Andrey Churbanove5f44922015-04-29 16:22:07 +000081#ifdef __cplusplus
82};
83#endif
84
85#endif