Die OpenMP 4.0-Spezifikation wurde vor einigen Tagen fertiggestellt und veröffentlicht here. Er beauftragt immer noch, dass parallele Schleifen in der kanonischen Form (§2.6, S.51) sein sollen:
for (
init-expr;
Test expr;
incr-expr)
structured-Block
der Standard ermöglicht Container, die Random-Access-Iteratoren bieten in alle Ausdrücke verwendet werden, zB:
#pragma omp parallel for
for (it = v.begin(); it < v.end(); it++)
{
...
}
Wenn Sie immer noch darauf bestehen, die C++ 11 syntaktischer Zucker zur Verwendung, und wenn es eine (vergleichsweise) viel Zeit in Anspruch nimmt jedes Element stl_container
zu verarbeiten, dann könnten Sie den Single-Produzent Tasking-Muster verwenden:
#pragma omp parallel
{
#pragma omp single
{
for (auto x : stl_container)
{
#pragma omp task
{
// Do something with x, e.g.
compute(x);
}
}
}
}
induziert Tasking gewisse Overhead, so würde es keinen Sinn machen, dieses Muster zu verwenden, wenn compute(x);
sehr wenig Zeit in Anspruch nimmt.
+ Gute Frage. Willst du das auch wissen. – lulyon