OpenMP: obtenez le nombre total de threads en cours d'exécution

J'ai besoin de savoir le nombre total de threads que ma demande a engendré par OpenMP. Malheureusement, la omp_get_num_threads() fonction ne pas travailler ici, car il ne donne le nombre de threads dans l'équipe actuelle.

Cependant, mon code s'exécute de manière récursive (diviser pour régner, en gros) et je tiens à frayer de nouveaux threads tant qu'il y a encore ralenti processeurs, mais pas plus.

Est-il un moyen de contourner les limitations de omp_get_num_threads et obtenir le total nombre de threads en cours d'exécution?

Si plus de détails, voici un pseudo-code que les modèles de mon flux de travail de très près:

function divide_and_conquer(Job job, int total_num_threads):
  if job.is_leaf(): # Recurrence base case.
    job.process()
    return

  left, right = job.divide()

  current_num_threads = omp_get_num_threads()
  if current_num_threads < total_num_threads: # (1)
    #pragma omp parallel num_threads(2)
      #pragma omp section
        divide_and_conquer(left, total_num_threads)
      #pragma omp section
        divide_and_conquer(right, total_num_threads)

  else:
    divide_and_conquer(left, total_num_threads)
    divide_and_conquer(right, total_num_threads)

  job = merge(left, right)

Si j'appelle ce code avec un total_num_threads valeur de 4, le conditionnel annoté avec (1) sera toujours évaluer à true (car chaque thread équipe contiendra au plus deux fils) et donc le code sera toujours apparaître deux nouveaux threads, peu importe combien de fils sont déjà en cours d'exécution à un niveau supérieur.

Je suis à la recherche d'un indépendant de la plate- moyen de déterminer le nombre total de threads en cours d'exécution dans ma demande.

source d'informationauteur Konrad Rudolph