繁体   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