C++ 使用openMP将快速排序转换为并行快速排序

C++ 使用openMP将快速排序转换为并行快速排序,c++,multithreading,sorting,parallel-processing,openmp,C++,Multithreading,Sorting,Parallel Processing,Openmp,我正在尝试使用openMp将快速排序转换为并行快速排序,但我不确定我是否在正确的轨道上。我使用的常规快速排序很好,但我不确定它是并行版本。我想让并行版本使用大约4个线程,这样它将比非并行版本执行得更快。关于在哪里实现线程有什么建议吗 void quickSort(int arr[], int low, int high) { int pi; if (low < high) { //pi is partitioning index, arr[p] is

我正在尝试使用openMp将快速排序转换为并行快速排序,但我不确定我是否在正确的轨道上。我使用的常规快速排序很好,但我不确定它是并行版本。我想让并行版本使用大约4个线程,这样它将比非并行版本执行得更快。关于在哪里实现线程有什么建议吗

void quickSort(int arr[], int low, int high)
{
    int pi;
    if (low < high)
    {
        //pi is partitioning index, arr[p] is now at right place 
        pi = partition(arr, low, high);
        // Separately sort elements before partition and after partition
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

void quickSort_parallel_omp(int arr[], int low, int high)
{
    int pi;
    if (low < high)
    { 
        pi = partition(arr, low, high);
        omp_set_nested(1);
        #pragma omp parallel sections num_threads(Nthreads)
        {           //Nthreads is declared in the main as int Nthreads = 4
            #pragma omp section
            quickSort_parallel_omp(arr, low, pi - 1);
            #pragma omp section
            quickSort_parallel_omp(arr, pi + 1, high);
        }
    }
}
void快速排序(int-arr[],int-low,int-high)
{
int-pi;
如果(低<高)
{
//pi是分区索引,arr[p]现在位于正确的位置
pi=分区(arr、低、高);
//在分区前和分区后分别对元素进行排序
快速排序(arr、低、pi-1);
快速排序(arr、pi+1、高);
}
}
无效快速排序\u并行\u omp(整数arr[],整数低,整数高)
{
int-pi;
如果(低<高)
{ 
pi=分区(arr、低、高);
omp_集合_嵌套(1);
#pragma omp并行段数线程(n个线程)
{//Nthreads在main中声明为int Nthreads=4
#pragma-omp段
快速排序(arr,低,pi-1);
#pragma-omp段
快速排序(arr,pi+1,高);
}
}
}

编辑:我的问题不是重复的,我的问题正在与之进行比较,请求帮助修复其不正确的输出。我的输出很好,我在问我还应该在并行排序中实现什么,以使其比非并行快速排序更快地执行

关于
[openmp]quicksort
以及通过您喜爱的搜索引擎轻松访问的大量资源,有很多问题。你到底在哪里挣扎?我唯一的建议是:使用任务。我知道我已经看了很多例子有一段时间了,我只是想让别人知道我如何设置我的任务以及我应该在哪里放置线程等等。你应该听从祖兰的建议。因为这无疑是一个教你一些东西的练习,你应该阅读已有的信息。他还给了您一个关键提示:使用Tasks可能的副本,您可以在ompSCR基准源代码中找到quicksort的迭代版本。