使用OpenMP提高quickSort的速度

时间:2016-11-21 23:44:14

标签: c performance parallel-processing openmp quicksort

我使用以下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以执行时间减少的方式并行化此代码。

提前谢谢

0 个答案:

没有答案