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 
36  #include "kmp_version.h"
37  #include "kmp_i18n.h"
38  #include "kmp_str.h"
39 
40  KMP_BUILD_ASSERT( sizeof( kmp_itt_mark_t ) == sizeof( __itt_mark_type ) );
41 
42  /*
43  Previously used warnings:
44 
45  KMP_WARNING( IttAllNotifDisabled );
46  KMP_WARNING( IttObjNotifDisabled );
47  KMP_WARNING( IttMarkNotifDisabled );
48  KMP_WARNING( IttUnloadLibFailed, libittnotify );
49  */
50 
51 
52  kmp_int32 __kmp_itt_prepare_delay = 0;
53  kmp_bootstrap_lock_t __kmp_itt_debug_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_itt_debug_lock );
54 
55 #endif // USE_ITT_NOTIFY
56 
57 void __kmp_itt_initialize() {
58 
59  // ITTNotify library is loaded and initialized at first call to any ittnotify function,
60  // so we do not need to explicitly load it any more.
61  // Jusr report OMP RTL version to ITTNotify.
62 
63  #if USE_ITT_NOTIFY
64  // Report OpenMP RTL version.
65  kmp_str_buf_t buf;
66  __itt_mark_type version;
67  __kmp_str_buf_init( & buf );
68  __kmp_str_buf_print(
69  & buf,
70  "OMP RTL Version %d.%d.%d",
71  __kmp_version_major,
72  __kmp_version_minor,
73  __kmp_version_build
74  );
75  if ( __itt_api_version_ptr != NULL ) {
76  __kmp_str_buf_print( & buf, ":%s", __itt_api_version() );
77  }; // if
78  version = __itt_mark_create( buf.str );
79  __itt_mark( version, NULL );
80  __kmp_str_buf_free( & buf );
81  #endif
82 
83 } // __kmp_itt_initialize
84 
85 
86 void __kmp_itt_destroy() {
87  #if USE_ITT_NOTIFY
88  __kmp_itt_fini_ittlib();
89  #endif
90 } // __kmp_itt_destroy
91 
92 
93 extern "C"
94 void
95 __itt_error_handler(
96  __itt_error_code err,
97  va_list args
98 ) {
99 
100  switch ( err ) {
101  case __itt_error_no_module : {
102  char const * library = va_arg( args, char const * );
103  #if KMP_OS_WINDOWS
104  int sys_err = va_arg( args, int );
105  __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
106  #else
107  char const * sys_err = va_arg( args, char const * );
108  __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRMESG( sys_err ), __kmp_msg_null );
109  #endif
110  } break;
111  case __itt_error_no_symbol : {
112  char const * library = va_arg( args, char const * );
113  char const * symbol = va_arg( args, char const * );
114  KMP_WARNING( IttLookupFailed, symbol, library );
115  } break;
116  case __itt_error_unknown_group : {
117  char const * var = va_arg( args, char const * );
118  char const * group = va_arg( args, char const * );
119  KMP_WARNING( IttUnknownGroup, var, group );
120  } break;
121  case __itt_error_env_too_long : {
122  char const * var = va_arg( args, char const * );
123  size_t act_len = va_arg( args, size_t );
124  size_t max_len = va_arg( args, size_t );
125  KMP_WARNING( IttEnvVarTooLong, var, (unsigned long) act_len, (unsigned long) max_len );
126  } break;
127  case __itt_error_cant_read_env : {
128  char const * var = va_arg( args, char const * );
129  int sys_err = va_arg( args, int );
130  __kmp_msg( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), KMP_ERR( sys_err ), __kmp_msg_null );
131  } break;
132  case __itt_error_system : {
133  char const * func = va_arg( args, char const * );
134  int sys_err = va_arg( args, int );
135  __kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
136  } break;
137  default : {
138  KMP_WARNING( IttUnknownError, err );
139  };
140  }; // switch
141 
142 } // __itt_error_handler
143 
144 #endif /* USE_ITT_BUILD */