【发布时间】:2017-11-25 17:39:20
【问题描述】:
这就是我目前所拥有的,常规合并排序可以完美运行,但我不确定我为使用 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);
}
}
【问题讨论】: