Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 4cbdcd9d authored by Jonathan Peyton's avatar Jonathan Peyton
Browse files

Fix large overhead with itt notifications on region/barrier name composing

Currently, there is a big overhead in reporting of loop metadata through
ittnotify.  The pair of functions: __kmp_str_loc_init/__kmp_str_loc_free are
replaced with strchr/atoi calls.  Thus, a lot of time consuming actions are
skipped - many memory allocations/deallocations, heavy string duplication, etc.
The loop metadata only needs line and column info from the source string, so no
allocations and string splitting actually needed.

Patch by Andrey Churbanov

Differential Revision: http://reviews.llvm.org/D21309


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@272698 91177308-0d34-0410-b5e6-96231b3b80d8
parent 0951fde9
No related branches found
No related tags found
No related merge requests found
...@@ -348,17 +348,31 @@ __kmp_itt_metadata_loop( ident_t * loc, kmp_uint64 sched_type, kmp_uint64 iterat ...@@ -348,17 +348,31 @@ __kmp_itt_metadata_loop( ident_t * loc, kmp_uint64 sched_type, kmp_uint64 iterat
} }
__itt_string_handle * string_handle = __itt_string_handle_create( "omp_metadata_loop"); __itt_string_handle * string_handle = __itt_string_handle_create( "omp_metadata_loop");
kmp_str_loc_t str_loc = __kmp_str_loc_init( loc->psource, 1 );
// Parse line and column from psource string: ";file;func;line;col;;"
char * s_line;
char * s_col;
KMP_DEBUG_ASSERT(loc->psource);
#ifdef __cplusplus
s_line = strchr((char*)loc->psource, ';');
#else
s_line = strchr(loc->psource, ';');
#endif
KMP_DEBUG_ASSERT(s_line);
s_line = strchr(s_line + 1, ';'); // 2-nd semicolon
KMP_DEBUG_ASSERT(s_line);
s_line = strchr(s_line + 1, ';'); // 3-rd semicolon
KMP_DEBUG_ASSERT(s_line);
s_col = strchr(s_line + 1, ';'); // 4-th semicolon
KMP_DEBUG_ASSERT(s_col);
kmp_uint64 loop_data[ 5 ]; kmp_uint64 loop_data[ 5 ];
loop_data[ 0 ] = str_loc.line; loop_data[ 0 ] = atoi(s_line + 1); // read line
loop_data[ 1 ] = str_loc.col; loop_data[ 1 ] = atoi(s_col + 1); // read column
loop_data[ 2 ] = sched_type; loop_data[ 2 ] = sched_type;
loop_data[ 3 ] = iterations; loop_data[ 3 ] = iterations;
loop_data[ 4 ] = chunk; loop_data[ 4 ] = chunk;
__kmp_str_loc_free( &str_loc );
__itt_metadata_add(metadata_domain, __itt_null, string_handle, __itt_metadata_u64, 5, loop_data); __itt_metadata_add(metadata_domain, __itt_null, string_handle, __itt_metadata_u64, 5, loop_data);
#endif #endif
} // __kmp_itt_metadata_loop } // __kmp_itt_metadata_loop
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment