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
на производительность?