While an implementation of OpenMP is allowed to insert implicit switching points in a task region (i.e., #pragma omp task), I as the developer can make use of the standard’s explicit task yielding if need be (i.e., #pragma omp taskyield). My question is whether the Clang v5.0.0 implementation employs such implicit task yielding, or is it necessary for me to do so explicitly?
(adding omp-dev; cfe-dev isn’t the right place for this, so please don’t copy on subsequent replies)
OpenMP taskyield is useless, by design. It can be a no-op and there is no way to guarantee that OpenMP tasks make concurrent progress. https://github.com/mpi-forum/mpi-issues/issues/75 has some context. The OpenMP committee has been discussing this a bunch recently but one proposed solution was to deprecate taskyield rather than fix it.
I encourage you to discuss your requirements with vendors who supply you with hardware and/or compilers, since those companies have representatives in the OpenMP language committee.