Improved performance of ittnotify calls by request from ittnotify owner: calls to __itt_string_handle_create made unique (it was called multiple times). Patch by Andrey Churbanov Differential Revision: http://reviews.llvm.org/D21353 llvm-svn: 272945
148 lines
4.8 KiB
C
148 lines
4.8 KiB
C
#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( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
|
|
#else
|
|
char const * sys_err = va_arg( args, char const * );
|
|
__kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), KMP_SYSERRMESG( sys_err ), __kmp_msg_null );
|
|
#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( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), KMP_ERR( sys_err ), __kmp_msg_null );
|
|
} break;
|
|
case __itt_error_system : {
|
|
char const * func = va_arg( args, char const * );
|
|
int sys_err = va_arg( args, int );
|
|
__kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), KMP_SYSERRCODE( sys_err ), __kmp_msg_null );
|
|
} break;
|
|
default : {
|
|
KMP_WARNING( IttUnknownError, err );
|
|
};
|
|
}; // switch
|
|
|
|
} // __itt_error_handler
|
|
|
|
#endif /* USE_ITT_BUILD */
|