Advertisement
Guest User

Untitled

a guest
Nov 1st, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <omp.h>
  4. #include <sys/time.h>
  5.  
  6. int main(int argc, char *argv[]){
  7.     if(argc>1){
  8.         if(atoi(argv[1])>1){
  9.             int n, n2, i, somma=0;
  10.             long elapsed;
  11.             struct timeval t0, t1;
  12.             n=atoi(argv[1]);
  13.             int dati[n];
  14.             srand(time(NULL));
  15.             #pragma omp parallel for private(i) shared(dati)
  16.             for(i=0; i<n; i++)
  17.                 #pragma omp critical
  18.                 {
  19.                     dati[i]=rand()%10;
  20.                 }
  21.             gettimeofday(&t0, NULL);
  22.             #pragma omp parallel for private(i) shared(somma) schedule(static)
  23.             for(i=0; i<n; i++){
  24.                 #pragma omp critical
  25.                 {
  26.                     somma=somma+dati[i];
  27.                 }
  28.             }
  29.             gettimeofday(&t1, NULL);
  30.             elapsed = (t1.tv_sec-t0.tv_sec)/1000 + t1.tv_usec-t0.tv_usec;
  31.             printf("Somma totale con static: %d\nTempo totale con static: %ld\n", somma, elapsed);
  32.             somma=0;
  33.             gettimeofday(&t0, NULL);
  34.             #pragma omp parallel for private(i) shared(somma) schedule(dynamic)
  35.             for(i=0; i<n; i++){
  36.                 #pragma omp critical
  37.                 {
  38.                     somma=somma+dati[i];
  39.                 }
  40.             }
  41.             gettimeofday(&t1, NULL);
  42.             elapsed = (t1.tv_sec-t0.tv_sec)/1000 + t1.tv_usec-t0.tv_usec;
  43.             printf("Somma totale con dynamic: %d\nTempo totale con dynamic: %ld\n", somma, elapsed);
  44.             somma=0;
  45.             #pragma omp parallel for private(i) shared(somma) schedule(guided)
  46.             for(i=0; i<n; i++){
  47.                 #pragma omp critical
  48.                 {
  49.                     somma=somma+dati[i];
  50.                 }
  51.         }
  52.             gettimeofday(&t1, NULL);
  53.             elapsed = (t1.tv_sec-t0.tv_sec)/1000 + t1.tv_usec-t0.tv_usec;
  54.             printf("Somma totale con guided: %d\nTempo totale con guided: %ld\n", somma, elapsed);
  55.         }else
  56.             puts("E' possibile fare la somma con almeno due numeri");
  57.     }else
  58.         puts("Non ci sono abbastanza argomenti");
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement