Specyfikacja OpenMP 4.0 została sfinalizowana i opublikowana kilka dni temu here. Nadal ustala, że pętle równoległego może mieć postać kanoniczną (§2.6, str.51)
for (
startowe wyrażenie;
testowy wyrażenie;
przyrostowo lista_wyrażeń_sortowania)
strukturze blok
Standard pozwala na pojemnikach zapewniających iteratory o dostępie swobodnym być stosowany we wszystkich wyrażeń, np
#pragma omp parallel for
for (it = v.begin(); it < v.end(); it++)
{
...
}
Jeśli nadal nalegać na użyciu cukru składniowej C++ 11, a jeśli trzeba, (względnie) dużo czasu, aby przetworzyć każdy element stl_container
, wówczas można użyć pojedynczy producent wielozadaniowych wzoru:
#pragma omp parallel
{
#pragma omp single
{
for (auto x : stl_container)
{
#pragma omp task
{
// Do something with x, e.g.
compute(x);
}
}
}
}
Zadanie powoduje pewien narzut, więc nie byłoby sensu używać tego wzorca, jeśli compute(x);
zajmuje bardzo mało czasu.
+ Dobre pytanie. Też chcesz to wiedzieć. – lulyon