Hi,
I tried to implement untied OpenMP tasks that yield when a modeled idle time due to synchronization is encountered. The code is available at stack overflow: https://stackoverflow.com/questions/47658571/how-to-yield-resume-openmp-untied-tasks-correctly
It turns out that icc 18.0.1 supports yielding for non-master threads, icc 17.0.4 did not. However, tasks still seem to be tied, since the allocated thread always resumes its suspended tasks. There is no task migration! Furthermore, I noticed that tied tasks, i.e. when you remove the "untied" option from the code, do not yield at all, but I think they should.
Actually, I would expect the "tied" code to behave exactly like the given "untied" one does with the present compiler. The expected "untied" behavior cannot be achieved.
Are there any restrictions in the OpenMP runtime? Where are they documented? Or is this a bug?
Best regards
Georg Geiser