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

llvm-svn: 272945
This commit is contained in:
Jonathan Peyton 2016-06-16 20:11:51 +00:00
parent 216d0a1674
commit 4ba3b0cda9
3 changed files with 18 additions and 8 deletions

View File

@ -32,6 +32,9 @@
__itt_domain* __kmp_itt_imbalance_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]; kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
__itt_domain * metadata_domain = NULL; __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_version.h"
#include "kmp_i18n.h" #include "kmp_i18n.h"

View File

@ -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 __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS]; extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
extern __itt_domain * metadata_domain; 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 #else

View File

@ -315,20 +315,21 @@ __kmp_itt_metadata_imbalance( int gtid, kmp_uint64 begin, kmp_uint64 end, kmp_ui
if( metadata_domain == NULL) { if( metadata_domain == NULL) {
__itt_suppress_push(__itt_suppress_memory_errors); __itt_suppress_push(__itt_suppress_memory_errors);
metadata_domain = __itt_domain_create( "OMP Metadata" ); 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(); __itt_suppress_pop();
} }
__kmp_release_bootstrap_lock( & metadata_lock ); __kmp_release_bootstrap_lock( & metadata_lock );
} }
__itt_string_handle * string_handle = __itt_string_handle_create( "omp_metadata_imbalance");
kmp_uint64 imbalance_data[ 4 ]; kmp_uint64 imbalance_data[ 4 ];
imbalance_data[ 0 ] = begin; imbalance_data[ 0 ] = begin;
imbalance_data[ 1 ] = end; imbalance_data[ 1 ] = end;
imbalance_data[ 2 ] = imbalance; imbalance_data[ 2 ] = imbalance;
imbalance_data[ 3 ] = reduction; 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 #endif
} // __kmp_itt_metadata_imbalance } // __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) { if( metadata_domain == NULL) {
__itt_suppress_push(__itt_suppress_memory_errors); __itt_suppress_push(__itt_suppress_memory_errors);
metadata_domain = __itt_domain_create( "OMP Metadata" ); 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(); __itt_suppress_pop();
} }
__kmp_release_bootstrap_lock( & metadata_lock ); __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;;" // Parse line and column from psource string: ";file;func;line;col;;"
char * s_line; char * s_line;
char * s_col; 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[ 3 ] = iterations;
loop_data[ 4 ] = chunk; 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 #endif
} // __kmp_itt_metadata_loop } // __kmp_itt_metadata_loop
@ -387,12 +389,14 @@ __kmp_itt_metadata_single( ident_t * loc ) {
if( metadata_domain == NULL) { if( metadata_domain == NULL) {
__itt_suppress_push(__itt_suppress_memory_errors); __itt_suppress_push(__itt_suppress_memory_errors);
metadata_domain = __itt_domain_create( "OMP Metadata" ); 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(); __itt_suppress_pop();
} }
__kmp_release_bootstrap_lock( & metadata_lock ); __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_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
kmp_uint64 single_data[ 2 ]; kmp_uint64 single_data[ 2 ];
single_data[ 0 ] = str_loc.line; single_data[ 0 ] = str_loc.line;
@ -400,7 +404,7 @@ __kmp_itt_metadata_single( ident_t * loc ) {
__kmp_str_loc_free( &str_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 #endif
} // __kmp_itt_metadata_single } // __kmp_itt_metadata_single