summaryrefslogtreecommitdiffstats
path: root/openmp/runtime/src/kmp_itt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/runtime/src/kmp_itt.cpp')
-rw-r--r--openmp/runtime/src/kmp_itt.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/openmp/runtime/src/kmp_itt.cpp b/openmp/runtime/src/kmp_itt.cpp
new file mode 100644
index 00000000000..3eb548604a1
--- /dev/null
+++ b/openmp/runtime/src/kmp_itt.cpp
@@ -0,0 +1,163 @@
+#include "kmp_config.h"
+
+#if USE_ITT_BUILD
+/*
+ * kmp_itt.c -- ITT Notify interface.
+ */
+
+
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.txt for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "kmp_itt.h"
+
+#if KMP_DEBUG
+ #include "kmp_itt.inl"
+#endif
+
+
+#if USE_ITT_NOTIFY
+
+ kmp_int32 __kmp_barrier_domain_count;
+ kmp_int32 __kmp_region_domain_count;
+ __itt_domain* __kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
+ __itt_domain* __kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
+ __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
+ kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
+ __itt_domain * metadata_domain = NULL;
+ __itt_string_handle * string_handle_imbl = NULL;
+ __itt_string_handle * string_handle_loop = NULL;
+ __itt_string_handle * string_handle_sngl = NULL;
+
+ #include "kmp_version.h"
+ #include "kmp_i18n.h"
+ #include "kmp_str.h"
+
+ KMP_BUILD_ASSERT( sizeof( kmp_itt_mark_t ) == sizeof( __itt_mark_type ) );
+
+ /*
+ Previously used warnings:
+
+ KMP_WARNING( IttAllNotifDisabled );
+ KMP_WARNING( IttObjNotifDisabled );
+ KMP_WARNING( IttMarkNotifDisabled );
+ KMP_WARNING( IttUnloadLibFailed, libittnotify );
+ */
+
+
+ kmp_int32 __kmp_itt_prepare_delay = 0;
+ kmp_bootstrap_lock_t __kmp_itt_debug_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_itt_debug_lock );
+
+#endif // USE_ITT_NOTIFY
+
+void __kmp_itt_initialize() {
+
+ // ITTNotify library is loaded and initialized at first call to any ittnotify function,
+ // so we do not need to explicitly load it any more.
+ // Jusr report OMP RTL version to ITTNotify.
+
+ #if USE_ITT_NOTIFY
+ // Report OpenMP RTL version.
+ kmp_str_buf_t buf;
+ __itt_mark_type version;
+ __kmp_str_buf_init( & buf );
+ __kmp_str_buf_print(
+ & buf,
+ "OMP RTL Version %d.%d.%d",
+ __kmp_version_major,
+ __kmp_version_minor,
+ __kmp_version_build
+ );
+ if ( __itt_api_version_ptr != NULL ) {
+ __kmp_str_buf_print( & buf, ":%s", __itt_api_version() );
+ }; // if
+ version = __itt_mark_create( buf.str );
+ __itt_mark( version, NULL );
+ __kmp_str_buf_free( & buf );
+ #endif
+
+} // __kmp_itt_initialize
+
+
+void __kmp_itt_destroy() {
+ #if USE_ITT_NOTIFY
+ __kmp_itt_fini_ittlib();
+ #endif
+} // __kmp_itt_destroy
+
+
+extern "C"
+void
+__itt_error_handler(
+ __itt_error_code err,
+ va_list args
+) {
+
+ switch ( err ) {
+ case __itt_error_no_module : {
+ char const * library = va_arg( args, char const * );
+#if KMP_OS_WINDOWS
+ int sys_err = va_arg( args, int );
+ kmp_msg_t err_code = KMP_SYSERRCODE( sys_err );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), err_code, __kmp_msg_null );
+ if (__kmp_generate_warnings == kmp_warnings_off) {
+ __kmp_str_free(&err_code.str);
+ }
+#else
+ char const * sys_err = va_arg( args, char const * );
+ kmp_msg_t err_code = KMP_SYSERRMESG( sys_err );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), err_code, __kmp_msg_null );
+ if (__kmp_generate_warnings == kmp_warnings_off) {
+ __kmp_str_free(&err_code.str);
+ }
+#endif
+ } break;
+ case __itt_error_no_symbol : {
+ char const * library = va_arg( args, char const * );
+ char const * symbol = va_arg( args, char const * );
+ KMP_WARNING( IttLookupFailed, symbol, library );
+ } break;
+ case __itt_error_unknown_group : {
+ char const * var = va_arg( args, char const * );
+ char const * group = va_arg( args, char const * );
+ KMP_WARNING( IttUnknownGroup, var, group );
+ } break;
+ case __itt_error_env_too_long : {
+ char const * var = va_arg( args, char const * );
+ size_t act_len = va_arg( args, size_t );
+ size_t max_len = va_arg( args, size_t );
+ KMP_WARNING( IttEnvVarTooLong, var, (unsigned long) act_len, (unsigned long) max_len );
+ } break;
+ case __itt_error_cant_read_env : {
+ char const * var = va_arg( args, char const * );
+ int sys_err = va_arg( args, int );
+ kmp_msg_t err_code = KMP_ERR( sys_err );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), err_code, __kmp_msg_null );
+ if (__kmp_generate_warnings == kmp_warnings_off) {
+ __kmp_str_free(&err_code.str);
+ }
+ } break;
+ case __itt_error_system : {
+ char const * func = va_arg( args, char const * );
+ int sys_err = va_arg( args, int );
+ kmp_msg_t err_code = KMP_SYSERRCODE( sys_err );
+ __kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), err_code, __kmp_msg_null );
+ if (__kmp_generate_warnings == kmp_warnings_off) {
+ __kmp_str_free(&err_code.str);
+ }
+ } break;
+ default : {
+ KMP_WARNING( IttUnknownError, err );
+ };
+ }; // switch
+
+} // __itt_error_handler
+
+#endif /* USE_ITT_BUILD */
OpenPOWER on IntegriCloud