C++ 使用OpenMP的并行迭代合并排序问题

C++ 使用OpenMP的并行迭代合并排序问题,c++,openmp,mergesort,C++,Openmp,Mergesort,我需要使用OpenMP并行化迭代合并排序(不使用递归) 它的优秀代码如下: 但是在使用pragma parallel for之后,结果数组不再排序 // Iteratively sort array A[low..high] using temporary array void mergesort(int A[], int temp[], int low, int high) { int m, i; // divide the array into blocks of size

我需要使用OpenMP并行化迭代合并排序(不使用递归)

它的优秀代码如下:

但是在使用pragma parallel for之后,结果数组不再排序

// Iteratively sort array A[low..high] using temporary array
void mergesort(int A[], int temp[], int low, int high)
{
    int m, i;
    // divide the array into blocks of size m
    // m = [1, 2, 4, 8, 16...]
    for (m = 1; m <= high - low; m = 2*m)
    {
        // for m = 1, i = 0, 2, 4, 6, 8
        // for m = 2, i = 0, 4, 8
        // for m = 4, i = 0, 8
        // ...
        #pragma omp parallel for private (i)
        for (i = low; i < high; i += 2*m)
        {
            int from = i;
            int mid = i + m - 1;
            int to = min(i + 2*m - 1, high);

            merge(A, temp, from, mid, to);
        }
    }
}
//使用临时数组对数组[low..high]进行迭代排序
无效合并排序(整数A[],整数温度[],整数低,整数高)
{
int m,i;
//将数组分成大小为m的块
//m=[1,2,4,8,16…]
对于(m=1;ma[i+1])
{

如果没有
#pragma omp
,数组是否正确排序?循环变量定义应该是for循环的一部分(
for(int i=low;
),那么就不需要
private(i)OMP指令上的
merge
的实现是什么?包含这些细节的问题。数组在没有
#pragma OMP
的情况下是否正确排序?循环变量定义应该是for循环的一部分(
for(int i=low;
),那么您就不需要
private(i)
在OMP指令上。合并的实施方式是什么?包括这些细节的问题。
void check(int A[])
{
    int i;
    for (i = 0; i < N - 1; i++)
    {
        if (A[i] > A[i + 1])
        {
            cout << "Array is not sorted" << endl;
            return;
        }
    }
    cout << "Array is sorted" << endl;
}