From 7ffaa1b0a44a24924728d820798bc95a7e54a832 Mon Sep 17 00:00:00 2001 From: Jonathan Peyton <jonathan.l.peyton@intel.com> Date: Thu, 16 Jun 2016 20:11:51 +0000 Subject: [PATCH] Reduce perf impact of redundant ittnotify calls 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 git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@272945 91177308-0d34-0410-b5e6-96231b3b80d8 --- runtime/src/kmp_itt.c | 3 +++ runtime/src/kmp_itt.h | 3 +++ runtime/src/kmp_itt.inl | 20 ++++++++++++-------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/runtime/src/kmp_itt.c b/runtime/src/kmp_itt.c index 486d635..f09a03f 100644 --- a/runtime/src/kmp_itt.c +++ b/runtime/src/kmp_itt.c @@ -32,6 +32,9 @@ __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" diff --git a/runtime/src/kmp_itt.h b/runtime/src/kmp_itt.h index 96a9595..286023d 100644 --- a/runtime/src/kmp_itt.h +++ b/runtime/src/kmp_itt.h @@ -264,6 +264,9 @@ __kmp_inline void __kmp_itt_stack_callee_leave(__itt_caller); extern __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS]; extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS]; extern __itt_domain * metadata_domain; + extern __itt_string_handle * string_handle_imbl; + extern __itt_string_handle * string_handle_loop; + extern __itt_string_handle * string_handle_sngl; #else diff --git a/runtime/src/kmp_itt.inl b/runtime/src/kmp_itt.inl index 8b9ff6f..fbf8490 100644 --- a/runtime/src/kmp_itt.inl +++ b/runtime/src/kmp_itt.inl @@ -315,20 +315,21 @@ __kmp_itt_metadata_imbalance( int gtid, kmp_uint64 begin, kmp_uint64 end, kmp_ui if( metadata_domain == NULL) { __itt_suppress_push(__itt_suppress_memory_errors); metadata_domain = __itt_domain_create( "OMP Metadata" ); + string_handle_imbl = __itt_string_handle_create( "omp_metadata_imbalance"); + string_handle_loop = __itt_string_handle_create( "omp_metadata_loop"); + string_handle_sngl = __itt_string_handle_create( "omp_metadata_single"); __itt_suppress_pop(); } __kmp_release_bootstrap_lock( & metadata_lock ); } - __itt_string_handle * string_handle = __itt_string_handle_create( "omp_metadata_imbalance"); - kmp_uint64 imbalance_data[ 4 ]; imbalance_data[ 0 ] = begin; imbalance_data[ 1 ] = end; imbalance_data[ 2 ] = imbalance; imbalance_data[ 3 ] = reduction; - __itt_metadata_add(metadata_domain, __itt_null, string_handle, __itt_metadata_u64, 4, imbalance_data); + __itt_metadata_add(metadata_domain, __itt_null, string_handle_imbl, __itt_metadata_u64, 4, imbalance_data); #endif } // __kmp_itt_metadata_imbalance @@ -342,13 +343,14 @@ __kmp_itt_metadata_loop( ident_t * loc, kmp_uint64 sched_type, kmp_uint64 iterat if( metadata_domain == NULL) { __itt_suppress_push(__itt_suppress_memory_errors); metadata_domain = __itt_domain_create( "OMP Metadata" ); + string_handle_imbl = __itt_string_handle_create( "omp_metadata_imbalance"); + string_handle_loop = __itt_string_handle_create( "omp_metadata_loop"); + string_handle_sngl = __itt_string_handle_create( "omp_metadata_single"); __itt_suppress_pop(); } __kmp_release_bootstrap_lock( & metadata_lock ); } - __itt_string_handle * string_handle = __itt_string_handle_create( "omp_metadata_loop"); - // Parse line and column from psource string: ";file;func;line;col;;" char * s_line; char * s_col; @@ -373,7 +375,7 @@ __kmp_itt_metadata_loop( ident_t * loc, kmp_uint64 sched_type, kmp_uint64 iterat loop_data[ 3 ] = iterations; loop_data[ 4 ] = chunk; - __itt_metadata_add(metadata_domain, __itt_null, string_handle, __itt_metadata_u64, 5, loop_data); + __itt_metadata_add(metadata_domain, __itt_null, string_handle_loop, __itt_metadata_u64, 5, loop_data); #endif } // __kmp_itt_metadata_loop @@ -387,12 +389,14 @@ __kmp_itt_metadata_single( ident_t * loc ) { if( metadata_domain == NULL) { __itt_suppress_push(__itt_suppress_memory_errors); metadata_domain = __itt_domain_create( "OMP Metadata" ); + string_handle_imbl = __itt_string_handle_create( "omp_metadata_imbalance"); + string_handle_loop = __itt_string_handle_create( "omp_metadata_loop"); + string_handle_sngl = __itt_string_handle_create( "omp_metadata_single"); __itt_suppress_pop(); } __kmp_release_bootstrap_lock( & metadata_lock ); } - __itt_string_handle * string_handle = __itt_string_handle_create( "omp_metadata_single"); kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 ); kmp_uint64 single_data[ 2 ]; single_data[ 0 ] = str_loc.line; @@ -400,7 +404,7 @@ __kmp_itt_metadata_single( ident_t * loc ) { __kmp_str_loc_free( &str_loc ); - __itt_metadata_add(metadata_domain, __itt_null, string_handle, __itt_metadata_u64, 2, single_data); + __itt_metadata_add(metadata_domain, __itt_null, string_handle_sngl, __itt_metadata_u64, 2, single_data); #endif } // __kmp_itt_metadata_single -- GitLab