[Openmp-commits] [PATCH] D13494: [OMPT] Initialize task fields only if needed
Jonas Hahnfeld via Openmp-commits
openmp-commits at lists.llvm.org
Wed Oct 7 00:05:48 PDT 2015
Hahnfeld created this revision.
Hahnfeld added reviewers: jmellorcrummey, jlpeyton, AndreyChurbanov, hfinkel.
Hahnfeld added subscribers: tcramer, openmp-commits.
Because `__kmp_task_init_ompt` is called for every initial task in each thread and always generated task ids, this was a big performance issue on bigger systems even without any tool attached.
After changing the initialization interface to `ompt_tool`, we can now rely on already knowing whether a tool is attached and OMPT is enabled at this point.
http://reviews.llvm.org/D13494
Files:
runtime/src/kmp.h
runtime/src/kmp_tasking.c
Index: runtime/src/kmp_tasking.c
===================================================================
--- runtime/src/kmp_tasking.c
+++ runtime/src/kmp_tasking.c
@@ -749,18 +749,18 @@
#if OMPT_SUPPORT
//----------------------------------------------------------------------------------------------------
// __kmp_task_init_ompt:
-// Initialize OMPT fields maintained by a task. Since the serial task is initialized before
-// ompt_initialize is called, at the point the serial task is initialized we don't know whether
-// OMPT will be used or not when the serial task is initialized. This function provides the support
-// needed to initialize OMPT for the serial task after the fact.
+// Initialize OMPT fields maintained by a task. This will only be called after
+// ompt_tool, so we already know whether ompt is enabled or not.
-void
-__kmp_task_init_ompt( kmp_taskdata_t * task, int tid )
+static inline void
+__kmp_task_init_ompt( kmp_taskdata_t * task, int tid, void * function )
{
- task->ompt_task_info.task_id = __ompt_task_id_new(tid);
- task->ompt_task_info.function = NULL;
- task->ompt_task_info.frame.exit_runtime_frame = NULL;
- task->ompt_task_info.frame.reenter_runtime_frame = NULL;
+ if (ompt_enabled) {
+ task->ompt_task_info.task_id = __ompt_task_id_new(tid);
+ task->ompt_task_info.function = function;
+ task->ompt_task_info.frame.exit_runtime_frame = NULL;
+ task->ompt_task_info.frame.reenter_runtime_frame = NULL;
+ }
}
#endif
@@ -826,7 +826,7 @@
}
#if OMPT_SUPPORT
- __kmp_task_init_ompt(task, tid);
+ __kmp_task_init_ompt(task, tid, NULL);
#endif
KF_TRACE(10, ("__kmp_init_implicit_task(exit): T#:%d team=%p task=%p\n",
@@ -1031,12 +1031,7 @@
gtid, taskdata, taskdata->td_parent) );
#if OMPT_SUPPORT
- if (ompt_enabled) {
- taskdata->ompt_task_info.task_id = __ompt_task_id_new(gtid);
- taskdata->ompt_task_info.function = (void*) task_entry;
- taskdata->ompt_task_info.frame.exit_runtime_frame = NULL;
- taskdata->ompt_task_info.frame.reenter_runtime_frame = NULL;
- }
+ __kmp_task_init_ompt(taskdata, gtid, (void*) task_entry);
#endif
return task;
Index: runtime/src/kmp.h
===================================================================
--- runtime/src/kmp.h
+++ runtime/src/kmp.h
@@ -3148,9 +3148,6 @@
extern kmp_task_t* __kmp_task_alloc( ident_t *loc_ref, kmp_int32 gtid,
kmp_tasking_flags_t *flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
kmp_routine_entry_t task_entry );
-#if OMPT_SUPPORT
-extern void __kmp_task_init_ompt( kmp_taskdata_t * task, int tid );
-#endif
extern void __kmp_init_implicit_task( ident_t *loc_ref, kmp_info_t *this_thr,
kmp_team_t *team, int tid, int set_curr_task );
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13494.36705.patch
Type: text/x-patch
Size: 2827 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20151007/2ed6d1ac/attachment.bin>
More information about the Openmp-commits
mailing list