[Openmp-dev] Using taskyield to emulate a background service

Joseph Schuchart via Openmp-dev openmp-dev at lists.llvm.org
Wed Jul 15 02:33:57 PDT 2020


Dear devs,

I am trying to emulate recurring service calls in OpenMP (similar to 
what OmpSs-2 offers) in order to progress outstanding MPI operations. My 
attempt is to have one task executed by some thread that invokes the 
progress service and calls taskyield to participate in the execution of 
tasks generated by any of the other threads. The task's code is similar 
to this snippet:

   #pragma omp task shared(do_progress)
   {
     while(do_progress) {
       call_progress();
       #pragma omp taskyield
       }
     }
   }

The variable `do_progress` is a volatile flag that is unset by another 
thread once progress is not needed anymore.

What I found is that the thread executing this service task does not 
participating in the execution of available tasks from the other 
threads. In other words, the yield does nothing. However, if I set 
KMP_TASK_STEALING_CONSTRAINT=0 then the thread does participate in the 
execution of tasks. All tasks are tied (because of issues with untied 
tasks).

Can someone tell me why taskyield does not steal tasks by default? Is 
that related to the the fact that all tasks are tied?

Many thanks!

Cheers
Joseph

-- 
Dipl.-Inf. Joseph Schuchart
High Performance Computing Center Stuttgart (HLRS)
Nobelstr. 19
D-70569 Stuttgart

Tel.: +49(0)711-68565890
Fax: +49(0)711-6856832
E-Mail: schuchart at hlrs.de


More information about the Openmp-dev mailing list