vector<int> v;
#pragma omp parallel for ordered schedule(dynamic, anyChunkSizeGreaterThan1)
for (int i = 0; i < n; ++i){
...
...
...
#pragma omp ordered
v.push_back(i);
}
Это заполняет v упорядоченным списком размера n.
При достижении блока omp ordered все потоки должны дождаться завершения последней нити, связанной с итерацией, но что, если ни один из потоков не был назначен этой конкретной итерацией? Или библиотека OpenMP во время выполнения всегда следит за тем, чтобы наименьшая итерация обрабатывалась каким-то потоком?
Также почему предлагается, чтобы предложение ordered использовалось вместе с dynamic schedule? Повлияет ли static schedule на производительность?