我使用以下C代码实现了快速排序算法:
#include <stdio.h>
#include <omp.h>
#include <time.h>
int partition(int v[], int esq, int dir){
int i, pos=esq,tmp;
//#pragma omp parallel for schedule(guided)
for(i=esq+1; i<=dir; i++){
if(v[i]<v[esq]){
pos++;
tmp=v[i];
v[i]=v[pos];
v[pos]=tmp;
}
}
//swap
tmp=v[esq];
v[esq]=v[pos];
v[pos]=tmp;
return pos;
}
void quickSort(int v[], int esq, int dir){
int pos;
if(esq<dir){
pos=partition(v,esq,dir);
//#pragma omp task
quickSort(v,esq,pos-1);
//#pragma omp task
quickSort(v,pos+1,dir);
//#pragma omp taskwait
}
}
int main(){
int N,i;
scanf("%d",&N); //number of elements
int v[N];
for(i=0;i<N;i++) v[i]=rand() % 5000; //generate an array of random numbers
double time=omp_get_wtime();
//#pragma omp parallel
//#pragma omp single
quickSort(v,0,N-1);
double total=omp_get_wtime()-time;
printf("Time \t %.8f",total);
return 0;
}
为了并行化代码,我使用了注释行,但问题是,我没有减少执行时间,而是增加了(加速时间低于1)。
我需要一些帮助来使用OpenMP以执行时间减少的方式并行化此代码。
提前谢谢