这是迄今为止我所知道的常规合并排序完美工作,但我不确定我为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);
}
}
[Parallel Merge-Sort in OpenMP]的可能重复(https://stackoverflow.com/questions/13811114/parallel- merge-sort-in-openmp) – Zulan