1 #include "kmp_config.h" 2 3 #if USE_ITT_BUILD 4 /* 5 * kmp_itt.cpp -- 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_t err_code = KMP_SYSERRCODE( sys_err ); 109 __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), err_code, __kmp_msg_null ); 110 if (__kmp_generate_warnings == kmp_warnings_off) { 111 __kmp_str_free(&err_code.str); 112 } 113 #else 114 char const * sys_err = va_arg( args, char const * ); 115 kmp_msg_t err_code = KMP_SYSERRMESG( sys_err ); 116 __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), err_code, __kmp_msg_null ); 117 if (__kmp_generate_warnings == kmp_warnings_off) { 118 __kmp_str_free(&err_code.str); 119 } 120 #endif 121 } break; 122 case __itt_error_no_symbol : { 123 char const * library = va_arg( args, char const * ); 124 char const * symbol = va_arg( args, char const * ); 125 KMP_WARNING( IttLookupFailed, symbol, library ); 126 } break; 127 case __itt_error_unknown_group : { 128 char const * var = va_arg( args, char const * ); 129 char const * group = va_arg( args, char const * ); 130 KMP_WARNING( IttUnknownGroup, var, group ); 131 } break; 132 case __itt_error_env_too_long : { 133 char const * var = va_arg( args, char const * ); 134 size_t act_len = va_arg( args, size_t ); 135 size_t max_len = va_arg( args, size_t ); 136 KMP_WARNING( IttEnvVarTooLong, var, (unsigned long) act_len, (unsigned long) max_len ); 137 } break; 138 case __itt_error_cant_read_env : { 139 char const * var = va_arg( args, char const * ); 140 int sys_err = va_arg( args, int ); 141 kmp_msg_t err_code = KMP_ERR( sys_err ); 142 __kmp_msg( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), err_code, __kmp_msg_null ); 143 if (__kmp_generate_warnings == kmp_warnings_off) { 144 __kmp_str_free(&err_code.str); 145 } 146 } break; 147 case __itt_error_system : { 148 char const * func = va_arg( args, char const * ); 149 int sys_err = va_arg( args, int ); 150 kmp_msg_t err_code = KMP_SYSERRCODE( sys_err ); 151 __kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), err_code, __kmp_msg_null ); 152 if (__kmp_generate_warnings == kmp_warnings_off) { 153 __kmp_str_free(&err_code.str); 154 } 155 } break; 156 default : { 157 KMP_WARNING( IttUnknownError, err ); 158 }; 159 }; // switch 160 161 } // __itt_error_handler 162 163 #endif /* USE_ITT_BUILD */ 164