Ich habe ein konkretes Beispiel, aber ich bin auch an einer allgemeineren Antwort interessiert. Angesichts den folgenden Code, und einen ausgeglichenen Binärbaum:Was ist der optimale Wert für omp_set_max_active_levels in OpenMP?
void mainTraverse(tree *node) {
omp_set_nested(1);
omp_set_max_active_levels(4);
recurseTraverse(node);
}
void recurseTraverse(tree *node)
{
if (node == NULL)
return;
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
recurseTraverse(node->left);
#pragma omp section
recurseTraverse(node->right);
}
}
// lengthy per-node computation here
}
Gemäß der OpenMP Spezifikation:
Die omp_set_max_active_levels Routine begrenzt die Anzahl der verschachtelten aktiver parallel Regionen.
Aber was genau bedeutet das? Ist 4 der optimale Wert für set_max_active_levels? Wie viele Threads wird dieser Code erstellen?
Sie sollten Tasks anstelle von verschachtelten Abschnitten verwenden. – Zulan