簡體   English   中英

如何將合並排序轉換為並行合並排序

[英]How to convert merge sort to parallel merge sort

到目前為止,這是我所擁有的,常規合並排序可以完美地工作,但是我不確定我對與openMP進行的並行合並排序所做的操作是否正確。 目標是通過將openMP合並到合並排序中並使用從一類應用程序中獲取的數據來優化合並排序。 對於我認為的數據,我將其設為線程,因為使用多個線程應該對其進行優化。 關於在此處應在何處實現線程或技巧的任何建議?

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);
    }  
}

請參考文檔 ,您需要使用鏈接中所示的omp_set_nested。 要具有並行性,請在完成#pragma omp parallel sections位置聲明它,並且不要忘記設置OMP_NUM_THREADS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM