[Openmp-commits] [PATCH] D21309: Fix for large overhead in OpenMP runtime with itt notifications on region/barrier name composing

Jonathan Peyton via Openmp-commits openmp-commits at lists.llvm.org
Mon Jun 13 14:15:17 PDT 2016


jlpeyton created this revision.
jlpeyton added reviewers: tlwilmar, omalyshe, hbae.
jlpeyton added a subscriber: openmp-commits.
jlpeyton set the repository for this revision to rL LLVM.

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

Repository:
  rL LLVM

http://reviews.llvm.org/D21309

Files:
  runtime/src/kmp_itt.inl

Index: runtime/src/kmp_itt.inl
===================================================================
--- runtime/src/kmp_itt.inl
+++ runtime/src/kmp_itt.inl
@@ -348,17 +348,31 @@
     }
 
     __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 ];
-    loop_data[ 0 ] = str_loc.line;
-    loop_data[ 1 ] = str_loc.col;
+    loop_data[ 0 ] = atoi(s_line + 1); // read line
+    loop_data[ 1 ] = atoi(s_col + 1);  // read column
     loop_data[ 2 ] = sched_type;
     loop_data[ 3 ] = iterations;
     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);
 #endif
 } // __kmp_itt_metadata_loop


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21309.60601.patch
Type: text/x-patch
Size: 1416 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20160613/60f0c442/attachment.bin>


More information about the Openmp-commits mailing list