如何将合并排序转换为并行合并排序
这是迄今为止我所知道的常规合并排序完美工作,但我不确定我为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);
}
}
参考this文档,则需要使用omp_set_nested如图所示的链接。为了有平行性,在你已经完成的地方声明#pragma omp parallel sections
并且也不要忘记设置OMP_NUM_THREADS
因此,在“#pragma omp parallel sections”上面加上“omp_set_nested()”,omp_ num_threads()应该设置在哪里? – user6088127
该链接看起来非常过时,并且被无关专有扩展加入。请改用[官方说明](http://www.openmp.org/specifications/)。除了这个问题是一个明确和容易找到重复https://*.com/questions/13811114/parallel-merge-sort-in-openmp – Zulan
[Parallel Merge-Sort in OpenMP]的可能重复(https://*.com/questions/13811114/parallel- merge-sort-in-openmp) – Zulan