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