forked from OSchip/llvm-project
[OpenMP][OMPD]Code movement required for OMPD
These changes don't come under OMPD guard as it is a movement of existing code to capture parallel behavior correctly. "Runtime Entry Points for OMPD" like "ompd_bp_parallel_begin" and "ompd_bp_parallel_begin" should be placed at the correct execution point for the debugging tool to access proper handles/data. Without the below changes, in certain cases, debugging tool will pick the wrong parallel and task handle. Reviewed By: @hbae Differential Revision: https://reviews.llvm.org/D100366
This commit is contained in:
parent
d1883bc322
commit
589519b9ab
|
@ -578,9 +578,6 @@ void __kmpc_end_serialized_parallel(ident_t *loc, kmp_int32 global_tid) {
|
|||
__kmp_free(top);
|
||||
}
|
||||
|
||||
// if( serial_team -> t.t_serialized > 1 )
|
||||
serial_team->t.t_level--;
|
||||
|
||||
/* pop dispatch buffers stack */
|
||||
KMP_DEBUG_ASSERT(serial_team->t.t_dispatch->th_disp_buffer);
|
||||
{
|
||||
|
@ -605,6 +602,7 @@ void __kmpc_end_serialized_parallel(ident_t *loc, kmp_int32 global_tid) {
|
|||
}
|
||||
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
|
||||
|
||||
__kmp_pop_current_task_from_thread(this_thr);
|
||||
#if OMPD_SUPPORT
|
||||
if (ompd_state & OMPD_ENABLE_BP)
|
||||
ompd_bp_parallel_end();
|
||||
|
@ -623,8 +621,6 @@ void __kmpc_end_serialized_parallel(ident_t *loc, kmp_int32 global_tid) {
|
|||
this_thr->th.th_dispatch =
|
||||
&this_thr->th.th_team->t.t_dispatch[serial_team->t.t_master_tid];
|
||||
|
||||
__kmp_pop_current_task_from_thread(this_thr);
|
||||
|
||||
KMP_ASSERT(this_thr->th.th_current_task->td_flags.executing == 0);
|
||||
this_thr->th.th_current_task->td_flags.executing = 1;
|
||||
|
||||
|
@ -645,6 +641,7 @@ void __kmpc_end_serialized_parallel(ident_t *loc, kmp_int32 global_tid) {
|
|||
}
|
||||
}
|
||||
|
||||
serial_team->t.t_level--;
|
||||
if (__kmp_env_consistency_check)
|
||||
__kmp_pop_parallel(global_tid, NULL);
|
||||
#if OMPT_SUPPORT
|
||||
|
|
|
@ -283,10 +283,6 @@ void __ompt_lw_taskteam_link(ompt_lw_taskteam_t *lwt, kmp_info_t *thr,
|
|||
link_lwt->ompt_team_info = *OMPT_CUR_TEAM_INFO(thr);
|
||||
*OMPT_CUR_TEAM_INFO(thr) = tmp_team;
|
||||
|
||||
ompt_task_info_t tmp_task = lwt->ompt_task_info;
|
||||
link_lwt->ompt_task_info = *OMPT_CUR_TASK_INFO(thr);
|
||||
*OMPT_CUR_TASK_INFO(thr) = tmp_task;
|
||||
|
||||
// link the taskteam into the list of taskteams:
|
||||
ompt_lw_taskteam_t *my_parent =
|
||||
thr->th.th_team->t.ompt_serialized_team_info;
|
||||
|
@ -297,6 +293,10 @@ void __ompt_lw_taskteam_link(ompt_lw_taskteam_t *lwt, kmp_info_t *thr,
|
|||
ompd_bp_parallel_begin();
|
||||
}
|
||||
#endif
|
||||
|
||||
ompt_task_info_t tmp_task = lwt->ompt_task_info;
|
||||
link_lwt->ompt_task_info = *OMPT_CUR_TASK_INFO(thr);
|
||||
*OMPT_CUR_TASK_INFO(thr) = tmp_task;
|
||||
} else {
|
||||
// this is the first serialized team, so we just store the values in the
|
||||
// team and drop the taskteam-object
|
||||
|
@ -313,6 +313,9 @@ void __ompt_lw_taskteam_link(ompt_lw_taskteam_t *lwt, kmp_info_t *thr,
|
|||
void __ompt_lw_taskteam_unlink(kmp_info_t *thr) {
|
||||
ompt_lw_taskteam_t *lwtask = thr->th.th_team->t.ompt_serialized_team_info;
|
||||
if (lwtask) {
|
||||
ompt_task_info_t tmp_task = lwtask->ompt_task_info;
|
||||
lwtask->ompt_task_info = *OMPT_CUR_TASK_INFO(thr);
|
||||
*OMPT_CUR_TASK_INFO(thr) = tmp_task;
|
||||
#if OMPD_SUPPORT
|
||||
if (ompd_state & OMPD_ENABLE_BP) {
|
||||
ompd_bp_parallel_end();
|
||||
|
@ -324,10 +327,6 @@ void __ompt_lw_taskteam_unlink(kmp_info_t *thr) {
|
|||
lwtask->ompt_team_info = *OMPT_CUR_TEAM_INFO(thr);
|
||||
*OMPT_CUR_TEAM_INFO(thr) = tmp_team;
|
||||
|
||||
ompt_task_info_t tmp_task = lwtask->ompt_task_info;
|
||||
lwtask->ompt_task_info = *OMPT_CUR_TASK_INFO(thr);
|
||||
*OMPT_CUR_TASK_INFO(thr) = tmp_task;
|
||||
|
||||
if (lwtask->heap) {
|
||||
__kmp_free(lwtask);
|
||||
lwtask = NULL;
|
||||
|
|
Loading…
Reference in New Issue