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