[Openmp-commits] [PATCH] D14456: Fixes and improvements to tasking in barriers
Jonathan Peyton via Openmp-commits
openmp-commits at lists.llvm.org
Fri Nov 6 11:17:47 PST 2015
jlpeyton created this revision.
jlpeyton added reviewers: tlwilmar, AndreyChurbanov, hfinkel.
jlpeyton added a subscriber: openmp-commits.
jlpeyton set the repository for this revision to rL LLVM.
1. When the number of threads in a team increases, new threads need to have all their barrier struct fields initialized. We were missing the `parent_bar` and team fields.
2. For non-forkjoin barriers, we now do the `__kmp_task_team_setup` before
the gather. The setup now sets up the task_team that all the threads
will switch to after the barrier, but it needs to be done before other
threads do the switch.
3. Remove an unneeded assignment of `tt_found_tasks` in task team free function.
Repository:
rL LLVM
http://reviews.llvm.org/D14456
Files:
runtime/src/kmp_barrier.cpp
runtime/src/kmp_tasking.c
Index: runtime/src/kmp_tasking.c
===================================================================
--- runtime/src/kmp_tasking.c
+++ runtime/src/kmp_tasking.c
@@ -2378,7 +2378,6 @@
KMP_DEBUG_ASSERT( task_team -> tt.tt_next == NULL );
task_team -> tt.tt_next = __kmp_free_task_teams;
- TCW_4(task_team -> tt.tt_found_tasks, FALSE);
TCW_PTR(__kmp_free_task_teams, task_team);
__kmp_release_bootstrap_lock( & __kmp_task_team_lock );
Index: runtime/src/kmp_barrier.cpp
===================================================================
--- runtime/src/kmp_barrier.cpp
+++ runtime/src/kmp_barrier.cpp
@@ -706,6 +706,8 @@
thr_bar->offset = 7-(tid-thr_bar->parent_tid-1);
thr_bar->old_tid = tid;
thr_bar->wait_flag = KMP_BARRIER_NOT_WAITING;
+ thr_bar->team = team;
+ thr_bar->parent_bar = &team->t.t_threads[thr_bar->parent_tid]->th.th_bar[bt].bb;
}
if (uninitialized || team_changed || tid_changed) {
thr_bar->team = team;
@@ -1122,6 +1124,10 @@
//KMP_DEBUG_ASSERT( is_split == TRUE ); // #C69956
this_thr->th.th_local.reduce_data = reduce_data;
}
+
+ if (KMP_MASTER_TID(tid) && __kmp_tasking_mode != tskm_immediate_exec)
+ __kmp_task_team_setup(this_thr, team, 0); // use 0 to only setup the current team if nthreads > 1
+
switch (__kmp_barrier_gather_pattern[bt]) {
case bp_hyper_bar: {
KMP_ASSERT(__kmp_barrier_gather_branch_bits[bt]); // don't set branch bits to 0; use linear
@@ -1153,7 +1159,6 @@
if (__kmp_tasking_mode != tskm_immediate_exec) {
__kmp_task_team_wait(this_thr, team
USE_ITT_BUILD_ARG(itt_sync_obj) );
- __kmp_task_team_setup(this_thr, team, 0); // use 0 to only setup the current team if nthreads > 1
}
#if USE_DEBUGGER
// Let the debugger know: All threads are arrived and starting leaving the barrier.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14456.39568.patch
Type: text/x-patch
Size: 2006 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20151106/f6601025/attachment.bin>
More information about the Openmp-commits
mailing list