OpenMP

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.4 kB
3
Indexable
Never
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include <math.h>


void prime_number_table_print(int n, int * tablica) {
    printf("Primes numbers: ");
    for (int i=2; i<n; i++) {
        if(tablica[i] == 0) printf("%d ",i);
    }
    printf("\n");
}


void prime_generator(int n, int*tablica) {
    int q = 0, i = 2, j = 2;

    #pragma omp parallel private(j)
    {
        #pragma omp for
        for (i=2; i<n; i++){
            //#pragma omp critical
            q = (int) sqrt(i);
            for(j=2; j<=q; j++){
                if(i%j == 0) tablica[i] = 1;
            }
        }
    }
        
}


int main(int argc, char* argv[])
{
    int * tablica = NULL;
    int n;
    clock_t ppstart,ppstop;
	double pswtime, pewtime;

	if (argc > 1)  n = atoi(argv[1]);

    tablica = (int *) malloc(n*sizeof(int));
    for(int i=0; i<n; i++) {
        tablica[i] = 0;
    }

    pswtime = omp_get_wtime();
	ppstart = clock();

    prime_generator(n, tablica);

    ppstop = clock();
	pewtime = omp_get_wtime();

    prime_number_table_print(n, tablica);

    printf("Czas procesorów przetwarzania równoleglego  %f sekund \n", ((double)(ppstop - ppstart)/CLOCKS_PER_SEC));
	printf("Czas trwania obliczen rownoleglych - wallclock %f sekund \n", pewtime-pswtime);

    free(tablica);
	return 0;
}