有什么办法可以延迟在openmp上创建每个线程的时间吗?

时间:2019-03-26 17:01:33

标签: c openmp

我试图并行化代码以使用openmp获得第一个“ n”素数,但是我意识到我重复得到了相同的数。我试图将变量设为私有,但是问题是每个线程都以相同的数字开头,所以我不知道是否有任何方法可以延迟线程,因此每个线程都以不同的数字开头。这是我设法执行的代码:

    #include <stdio.h>
    #include <omp.h>


    void qs(int lista[],int limite_izq,int limite_der)
    {
        int izq,der,temporal,pivote;

        izq=limite_izq;
        der = limite_der;
        pivote = lista[(izq+der)/2];

        do{
            while(lista[izq]<pivote && izq<limite_der)izq++;
            while(pivote<lista[der] && der > limite_izq)der--;
            if(izq <=der)
            {
                temporal= lista[izq];
                lista[izq]=lista[der];
                lista[der]=temporal;
                izq++;
                der--;
            }
        }while(izq<=der);
        if(limite_izq<der){qs(lista,limite_izq,der);}
        if(limite_der>izq){qs(lista,izq,limite_der);}
    }

    void quicksort(int lista[],int n)
    {
        qs(lista,0,n-1);
    }


    int main() {
        int n_total_primes = 10, n = n_total_primes;
        int i=3;
        int aux = 0;
        int vector[n_total_primes];

        double t1 = omp_get_wtime();


        omp_set_num_threads(4);
        #pragma omp parallel for
        for (n = 1; n < n_total_primes; n++) {
            for (aux = 2; aux < i; aux++) {
                if (i % aux == 0) {
                    aux = i;
                }
            }

            if (i == aux) {
                vector[n] = i;
                n++;
            }
            i++;
            n--;
        }

        vector[0] = 2;
        double t2 = omp_get_wtime();
        printf("Total time: %lf\n", t2-t1);

        quicksort(vector,n_total_primes);

        for ( i = 0 ; i < n_total_primes ; i++ )
            printf("%d\n",vector[i]);

        printf("\nnum_primes=%d, last prime: %d\n", n_total_primes, vector[n_total_primes-1]);
        return 0;
    }

0 个答案:

没有答案