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