2017-06-17 1 views
1

J'ai un exemple spécifique, mais je suis également intéressé par une réponse plus générale. Étant donné le code suivant, et un arbre binaire équilibré:Quelle est la valeur optimale pour omp_set_max_active_levels dans 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 
} 

Selon la spécification OpenMP:

Les omp_set_max_active_levels limites de routine le nombre de régions parallèles imbriquées actives.

Mais qu'est-ce que cela signifie exactement? 4 est la valeur optimale pour set_max_active_levels? Combien de threads ce code va-t-il créer?

+0

Vous devez utiliser des tâches au lieu de sections imbriquées. – Zulan

Répondre

1

Vous devriez le faire avec les tâches OpenMP, (pas les sections et le parallélisme imbriqué), précisément parce que votre question est impossible à répondre!

+0

Merci, je suis d'accord mais j'ai dû le faire pour une mission. C'était beaucoup plus facile avec les tâches mais j'essayais aussi de comprendre comment les sections fonctionnent. –