LLVM OpenMP* Runtime Library
kmp_itt.c
1 #if USE_ITT_BUILD
2 /*
3  * kmp_itt.c -- ITT Notify interface.
4  */
5 
6 
7 //===----------------------------------------------------------------------===//
8 //
9 // The LLVM Compiler Infrastructure
10 //
11 // This file is dual licensed under the MIT and the University of Illinois Open
12 // Source Licenses. See LICENSE.txt for details.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 
17 #include "kmp_itt.h"
18 
19 #if KMP_DEBUG
20  #include "kmp_itt.inl"
21 #endif
22 
23 
24 #if USE_ITT_NOTIFY
25 
26  kmp_int32 __kmp_barrier_domain_count;
27  kmp_int32 __kmp_region_domain_count;
28  __itt_domain* __kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
29  __itt_domain* __kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
30  __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
31  kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
32  __itt_domain * metadata_domain = NULL;
33 
34  #include "kmp_version.h"
35  #include "kmp_i18n.h"
36  #include "kmp_str.h"
37 
38  KMP_BUILD_ASSERT( sizeof( kmp_itt_mark_t ) == sizeof( __itt_mark_type ) );
39 
40  /*
41  Previously used warnings:
42 
43  KMP_WARNING( IttAllNotifDisabled );
44  KMP_WARNING( IttObjNotifDisabled );
45  KMP_WARNING( IttMarkNotifDisabled );
46  KMP_WARNING( IttUnloadLibFailed, libittnotify );
47  */
48 
49 
50  kmp_int32 __kmp_itt_prepare_delay = 0;
51  kmp_bootstrap_lock_t __kmp_itt_debug_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_itt_debug_lock );
52 
53 #endif // USE_ITT_NOTIFY
54 
55 void __kmp_itt_initialize() {
56 
57  // ITTNotify library is loaded and initialized at first call to any ittnotify function,
58  // so we do not need to explicitly load it any more.
59  // Jusr report OMP RTL version to ITTNotify.
60 
61  #if USE_ITT_NOTIFY
62  // Report OpenMP RTL version.
63  kmp_str_buf_t buf;
64  __itt_mark_type version;
65  __kmp_str_buf_init( & buf );
66  __kmp_str_buf_print(
67  & buf,
68  "OMP RTL Version %d.%d.%d",
69  __kmp_version_major,
70  __kmp_version_minor,
71  __kmp_version_build
72  );
73  if ( __itt_api_version_ptr != NULL ) {
74  __kmp_str_buf_print( & buf, ":%s", __itt_api_version() );
75  }; // if
76  version = __itt_mark_create( buf.str );
77  __itt_mark( version, NULL );
78  __kmp_str_buf_free( & buf );
79  #endif
80 
81 } // __kmp_itt_initialize
82 
83 
84 void __kmp_itt_destroy() {
85  #if USE_ITT_NOTIFY
86  __kmp_itt_fini_ittlib();
87  #endif
88 } // __kmp_itt_destroy
89 
90 
91 extern "C"
92 void
93 __itt_error_handler(
94  __itt_error_code err,
95  va_list args
96 ) {
97 
98  switch ( err ) {
99  case __itt_error_no_module : {
100  char const * library = va_arg( args, char const * );
101  #if KMP_OS_WINDOWS
102  int sys_err = va_arg( args, int );
103  __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
104  #else
105  char const * sys_err = va_arg( args, char const * );
106  __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRMESG( sys_err ), __kmp_msg_null );
107  #endif
108  } break;
109  case __itt_error_no_symbol : {
110  char const * library = va_arg( args, char const * );
111  char const * symbol = va_arg( args, char const * );
112  KMP_WARNING( IttLookupFailed, symbol, library );
113  } break;
114  case __itt_error_unknown_group : {
115  char const * var = va_arg( args, char const * );
116  char const * group = va_arg( args, char const * );
117  KMP_WARNING( IttUnknownGroup, var, group );
118  } break;
119  case __itt_error_env_too_long : {
120  char const * var = va_arg( args, char const * );
121  size_t act_len = va_arg( args, size_t );
122  size_t max_len = va_arg( args, size_t );
123  KMP_WARNING( IttEnvVarTooLong, var, (unsigned long) act_len, (unsigned long) max_len );
124  } break;
125  case __itt_error_cant_read_env : {
126  char const * var = va_arg( args, char const * );
127  int sys_err = va_arg( args, int );
128  __kmp_msg( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), KMP_ERR( sys_err ), __kmp_msg_null );
129  } break;
130  case __itt_error_system : {
131  char const * func = va_arg( args, char const * );
132  int sys_err = va_arg( args, int );
133  __kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
134  } break;
135  default : {
136  KMP_WARNING( IttUnknownError, err );
137  };
138  }; // switch
139 
140 } // __itt_error_handler
141 
142 #endif /* USE_ITT_BUILD */