En parallèle de Fusion-Tri en OpenMP

J'ai vu un algorithme parallèle de fusion de tri dans une cette papier. C'est le code:

void mergesort_parallel_omp (int a[], int size, int temp[], int threads) 
{  
    if ( threads == 1)       { mergesort_serial(a, size, temp); }
    else if (threads > 1) 
    {
         #pragma omp parallel sections
         {
          #pragma omp section
             mergesort_parallel_omp(a, size/2, temp, threads/2);
          #pragma omp section
             mergesort_parallel_omp(a + size/2, size - size/2, temp + size/2, threads - threads/2);
         }
merge(a, size, temp); 
    } //threads > 1
}

Je l'exécute sur un multicœur. Ce qui se passe, c'est que dans les feuilles de l'arbre, 2 threads s'exécutent en parallèle. Après, ils ont fini leur travail 2 autres threads de début et ainsi de suite. Même si nous avons la liberté de cœurs pour tous les nœuds feuilles.

Je pense que la raison est ce OpenMP code ne crée pas de parallèle régions à l'intérieur des régions parallèles. Suis-je la corriger?

OriginalL'auteur towi_parallelism | 2012-12-10