2017-11-25 3 views
0

Das ist, was ich bis jetzt habe, funktioniert die regelmäßige merge sort perfekt aber ich bin nicht sicher, ob was ich für die parallele merge sortierung mit dem openMP richtig gemacht habe oder nicht . Ziel ist es, die Merge-Sortierung zu optimieren, indem man openMP darin integriert und Daten aus einer Klasse von Anwendungen verwendet. Für die Daten nahm ich an, dass ich es Threads machen würde, da die Verwendung von mehreren Threads es zum Besseren optimieren sollte. Irgendwelche Tipps, wo ich die Threads hier umsetzen sollte oder Tipps?Wie merge merge sort zu parallel merge sort

void mergeSort(int arr[], int start, int end) 
{ 
    if(start < end) 
    { 
     int middle = (start + end)/2; 
     /* sort left half */ 
     mergeSort(arr, start, middle); 
     /* sort right half */ 
     mergeSort(arr, middle + 1, end); 
     /* merge the two halves */ 
     merge(arr, start, end); 
    } 
} 

void mergesort_parallel_omp(int a[], int start, int end)//parallelized version 
{          
    int threads = 2; 
    if(start < end) 
    { 
     int middle = (start + end)/2; 
     omp_set_nested(1);        ///// 
     omp_set_num_threads(threads); 
     #pragma omp parallel sections 
     { 
      #pragma omp section 
       mergesort_parallel_omp(a, start, middle); 
      #pragma omp section 
       mergesort_parallel_omp(a, middle + 1, end); 
     } 
     merge(a, start, end); 
    } 
} 
+0

Mögliche Duplikate von [Parallel Merge-Sort in OpenMP] (https://stackoverflow.com/questions/13811114/parallel- merge-sort-in-openmp) – Zulan

Antwort

0

Siehe this Dokumentation, müssen Sie omp_set_nested verwenden, wie in dem Link angezeigt. Um Parallelität zu haben, deklarieren Sie, wo Sie es getan haben #pragma omp parallel sections und vergessen Sie auch nicht zu setzen OMP_NUM_THREADS

+0

Also setze "omp_set_nested()" über "#pragma omp parallele Abschnitte" und wo sollte omp_ num_threads() gesetzt werden? – user6088127

+0

Der Link scheint schrecklich veraltet zu sein und mit irrelevanten proprietären Erweiterungen versehen zu sein. Bitte verwenden Sie stattdessen die [offizielle Spezifikation] (http://www.openmp.org/specifications/). Neben der Frage ist eine klare und leicht zu finden, https://stackoverflow.com/questions/13811114/parallel-merge-sort-in-openmp – Zulan