C++ 使用OpenMP的并行迭代合并排序问题
我需要使用OpenMP并行化迭代合并排序(不使用递归) 它的优秀代码如下: 但是在使用pragma parallel for之后,结果数组不再排序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
// 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;
}