pborawski

omp sections liczenie pi

Nov 19th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <omp.h>
  5. #include <math.h>
  6. #define  ILEITERACJI 30000000
  7.  
  8. double piWallis(int ileIteracji);
  9. double piLajkonik(int ileIteracji);
  10.  
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14.     double pi1 = 2.0, pi2 = 0.0;
  15.     double start1, stop1;
  16.     double stop0, start0;
  17.     //*****************************************************************************
  18.     printf("Bez OpenMP\n\n");
  19.  
  20.     start0 = time(NULL);
  21.     start1 = omp_get_wtime();
  22.  
  23.     pi1 = piWallis(ILEITERACJI);
  24.     pi2 = piLajkonik(ILEITERACJI);
  25.  
  26.     stop0 = time(NULL);
  27.     stop1 = omp_get_wtime();
  28.  
  29.     printf("Metoda Willisa: %f\n", pi1);
  30.     printf("Metoda Laibnitz'a: %f\n", pi2);
  31.  
  32.     printf("Czas dla f. time() : %f\n", stop0 - start0);
  33.     printf("Czas dla f. omp_get_wtime() : %f\n\n", stop1 - start1);
  34.     //******************************************************************************
  35.  
  36.     pi1 = 0.0, pi2 = 0.0;
  37.     printf("Wraz z OpenMP\n\n");
  38.  
  39.     start0 = time(NULL);
  40.     start1 = omp_get_wtime();
  41.  
  42.     #pragma omp parallel sections
  43.     {
  44.  
  45.         #pragma omp section
  46.         {
  47.  
  48.             pi1 = piWallis(ILEITERACJI);
  49.             printf("Metoda Willisa: %f\n", pi1);
  50.             printf("Obliczenia wykonal watek %d\n",omp_get_thread_num());
  51.         }
  52.         #pragma omp section
  53.         {
  54.             pi2 = piLajkonik(ILEITERACJI);
  55.             printf("Metoda Laibnitz'a: %f\n", pi2);
  56.             printf("Obliczenia wykonal watek %d\n",omp_get_thread_num());
  57.         }
  58.  
  59.     }
  60.     stop0 = time(NULL);
  61.     stop1 = omp_get_wtime();
  62.  
  63.     printf("Czas dla f. time() : %f\n", stop0 - start0);
  64.     printf("Czas dla f. omp_get_wtime() : %f\n\n", stop1 - start1);
  65.  
  66.     return 0;
  67. }
  68.  
  69. double piWallis(int ileIteracji)
  70. {
  71.     int i;
  72.     double wynik = 1.0;
  73.  
  74.     for(i = 1; i < ileIteracji; i++)
  75.     {
  76.         wynik *= ( (2.0 * i)*(2.0 * i) ) / ( ( 2.0 * i - 1.0 )*( 2.0 * i + 1.0) );
  77.     }
  78.     return (2.0 * wynik);
  79. }
  80.  
  81. double piLajkonik(int ileIteracji)
  82. {
  83.     int i;
  84.     double wynik = 0;
  85.     for(i = 0; i < ileIteracji; i++)
  86.     {
  87.         wynik += pow( -1, i ) / ( 2 * i + 1);
  88.     }
  89.     return 4 * wynik;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment