[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