[OMPT] Overhaul OMPT initialization interface
The OMPT specification has changed. This revision brings the LLVM OpenMP
implementation up to date.
Technical overview of changes:
Previously, a public weak symbol ompt_initialize was called after the OpenMP
runtime is initialized. The new interface calls a global weak symbol ompt_tool
prior to initialization. If a tool is present, ompt_tool returns a pointer to
a function that matches the signature for ompt_initialize. After OpenMP is
initialized the function pointer is called to initialize a tool.
Knowing that OMPT will be enabled before initialization allows OMPT support to
be initialized as part of initialization instead of back patching
initialization of OMPT support after the fact.
Post OpenMP initialization support has been generalized moves from
ompt-specific.c into ompt-general.c, since the OMPT initialization logic is no
longer implementation specific.
Patch by John Mellor-Crummey
Differential Revision: http://reviews.llvm.org/D12998
llvm-svn: 248187
diff --git a/openmp/runtime/src/kmp_runtime.c b/openmp/runtime/src/kmp_runtime.c
index 22fc3a17..e02f505 100644
--- a/openmp/runtime/src/kmp_runtime.c
+++ b/openmp/runtime/src/kmp_runtime.c
@@ -6386,6 +6386,10 @@
KMP_DEBUG_ASSERT( sizeof( kmp_uint64 ) == 8 );
KMP_DEBUG_ASSERT( sizeof( kmp_intptr_t ) == sizeof( void * ) );
+#if OMPT_SUPPORT
+ ompt_pre_init();
+#endif
+
__kmp_validate_locks();
/* Initialize internal memory allocator */
@@ -6623,12 +6627,13 @@
}
#endif // OMP_40_ENABLED
+#if OMPT_SUPPORT
+ ompt_post_init();
+#endif
+
KMP_MB();
KA_TRACE( 10, ("__kmp_do_serial_initialize: exit\n" ) );
-#if OMPT_SUPPORT
- ompt_init();
-#endif
}
void
@@ -6773,9 +6778,6 @@
}
__kmp_do_middle_initialize();
__kmp_release_bootstrap_lock( &__kmp_initz_lock );
-#if OMPT_SUPPORT
- ompt_init();
-#endif
}
void
@@ -6783,7 +6785,7 @@
{
int gtid = __kmp_entry_gtid(); // this might be a new root
- /* syncronize parallel initialization (for sibling) */
+ /* synchronize parallel initialization (for sibling) */
if( TCR_4(__kmp_init_parallel) ) return;
__kmp_acquire_bootstrap_lock( &__kmp_initz_lock );
if( TCR_4(__kmp_init_parallel) ) { __kmp_release_bootstrap_lock( &__kmp_initz_lock ); return; }
@@ -6845,9 +6847,6 @@
KA_TRACE( 10, ("__kmp_parallel_initialize: exit\n" ) );
__kmp_release_bootstrap_lock( &__kmp_initz_lock );
-#if OMPT_SUPPORT
- ompt_init();
-#endif
}