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?
Vous devez utiliser des tâches au lieu de sections imbriquées. – Zulan