[Openmp-commits] [openmp] r272570 - Exclude untied tasks from task stealing constraint

Jonathan Peyton via Openmp-commits openmp-commits at lists.llvm.org
Mon Jun 13 10:51:59 PDT 2016


Author: jlpeyton
Date: Mon Jun 13 12:51:59 2016
New Revision: 272570

URL: http://llvm.org/viewvc/llvm-project?rev=272570&view=rev
Log:
Exclude untied tasks from task stealing constraint

If either current_task or new_task is untied then skip task scheduling
constraint checks, because untied tasks are not affected by the task
scheduling constraints.

Differential Revision: http://reviews.llvm.org/D21196

Modified:
    openmp/trunk/runtime/src/kmp_tasking.c

Modified: openmp/trunk/runtime/src/kmp_tasking.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_tasking.c?rev=272570&r1=272569&r2=272570&view=diff
==============================================================================
--- openmp/trunk/runtime/src/kmp_tasking.c (original)
+++ openmp/trunk/runtime/src/kmp_tasking.c Mon Jun 13 12:51:59 2016
@@ -1644,7 +1644,7 @@ __kmp_remove_my_task( kmp_info_t * threa
     tail = ( thread_data -> td.td_deque_tail - 1 ) & TASK_DEQUE_MASK(thread_data->td);  // Wrap index.
     taskdata = thread_data -> td.td_deque[ tail ];
 
-    if (is_constrained) {
+    if (is_constrained && (taskdata->td_flags.tiedness == TASK_TIED)) {
         // we need to check if the candidate obeys task scheduling constraint:
         // only child of current task can be scheduled
         kmp_taskdata_t * current = thread->th.th_current_task;
@@ -1751,7 +1751,7 @@ __kmp_steal_task( kmp_info_t *victim, km
             parent = parent->td_parent;  // check generation up to the level of the current task
             KMP_DEBUG_ASSERT(parent != NULL);
         }
-        if ( parent != current ) {
+        if ( parent != current && (taskdata->td_flags.tiedness == TASK_TIED) ) { // untied is always allowed to be stolen
             // If the tail task is not a child, then no other childs can appear in the deque (?).
             __kmp_release_bootstrap_lock( & victim_td -> td.td_deque_lock );
             KA_TRACE(10, ("__kmp_steal_task(exit #2): T#%d could not steal from T#%d: task_team=%p "




More information about the Openmp-commits mailing list