2017-06-17 1 views
1

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?

+0

Sie sollten Tasks anstelle von verschachtelten Abschnitten verwenden. – Zulan

Antwort

1

Sie sollten dies mit OpenMP-Aufgaben tun (nicht Abschnitte und verschachtelte Parallelität), gerade weil Ihre Frage unmöglich zu beantworten ist!

+0

Danke, ich stimme zu, aber ich musste dies für eine Aufgabe tun. Es war viel einfacher mit Aufgaben, aber ich versuchte auch zu verstehen, wie Abschnitte funktionieren. –

Verwandte Themen