Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.66 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <omp.h>
  5.  
  6. #define WYMIAR 13
  7.  
  8. main ()
  9. {
  10. double a[WYMIAR][WYMIAR];
  11. int n,i,j;
  12.  
  13. for(i=0;i<WYMIAR;i++) for(j=0;j<WYMIAR;j++) a[i][j]=1.02*i+1.01*j;
  14.  
  15. n=WYMIAR;
  16.  
  17. double suma=0.0;
  18. for(i=0;i<WYMIAR;i++) {
  19. for(j=0;j<WYMIAR;j++) {
  20. suma += a[i][j];
  21. }
  22. }
  23.  
  24. printf("Suma wyrazów tablicy: %lf\n", suma);
  25.  
  26. omp_set_nested(1);
  27. int number_of_threads = 3;
  28. omp_set_num_threads(number_of_threads);
  29. double suma_p;
  30. int id;
  31.  
  32. double suma_parallel=0.0;
  33. printf("\n Wierszowo zewnetrznie \n");
  34.  
  35. //#pragma omp parallel for ordered schedule(static, 3) private(j) reduction(+ : suma_p)
  36. //#pragma omp parallel for ordered schedule(static) private(j) reduction(+ : suma_p)
  37. //#pragma omp parallel for ordered schedule(dynamic, 2) private(j) reduction(+ : suma_p)
  38. #pragma omp parallel for ordered schedule(dynamic) private(j) reduction(+ : suma_p)
  39.  
  40. for(i=0;i<WYMIAR;i++) {
  41. int id_w = omp_get_thread_num();
  42. // ...
  43. for(j=0;j<WYMIAR;j++) {
  44. suma_parallel += a[i][j];
  45. #pragma omp ordered
  46. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  47. }
  48. // ...
  49. printf("\n");
  50. }
  51.  
  52. printf("Suma: %lf\n", suma_parallel);
  53.  
  54. printf( "\nWierszowo wewnetrznie\n" );
  55. suma_p = 0.0;
  56. double *tab_sum = malloc(sizeof *tab_sum * number_of_threads);
  57. for ( i = 0; i < number_of_threads; i++ )//tablica do sumowania
  58. tab_sum[i] = 0.0;
  59.  
  60. int k;
  61.  
  62. for ( i = 0; i < WYMIAR; i++ )
  63. {
  64. id = omp_get_thread_num();
  65.  
  66. //#pragma omp parallel for ordered schedule(static, 3) firstprivate(i) num_threads(3)
  67. //#pragma omp parallel for ordered schedule(static) firstprivate(i) num_threads(3)
  68. //#pragma omp parallel for ordered schedule(dynamic, 2) firstprivate(i) num_threads(3)
  69. #pragma omp parallel for ordered schedule(dynamic) firstprivate(i) num_threads(3)
  70. for ( j = 0; j < WYMIAR; j++ )
  71. {
  72. tab_sum[omp_get_thread_num()] += a[i][j];
  73. #pragma omp ordered
  74. printf("(%2d,%2d)-W(%1d,%1d)", i, j, id, omp_get_thread_num() );
  75. }
  76. printf("\n");
  77. }
  78.  
  79. for ( k = 0; k < number_of_threads; k++ )
  80. suma_p += tab_sum[k];
  81.  
  82. printf( "SUMA_P = %lf\n", suma_p );
  83.  
  84. printf( "\nKolumnowo wewnetrznie\n" );
  85. suma_p = 0.0;
  86. for ( j = 0; j < WYMIAR; j++ )
  87. {
  88. id = omp_get_thread_num();
  89. //#pragma omp parallel for ordered schedule(static, 3) firstprivate(j) reduction(+ : suma_p)
  90. //#pragma omp parallel for ordered schedule(static) firstprivate(j) reduction(+ : suma_p)
  91. //#pragma omp parallel for ordered schedule(dynamic, 2) firstprivate(j) reduction(+ : suma_p)
  92. #pragma omp parallel for ordered schedule(dynamic) firstprivate(j) reduction(+ : suma_p)
  93. for ( i = 0; i < WYMIAR; i++ )
  94. {
  95. suma_p += a[i][j];
  96. #pragma omp ordered
  97. printf("(%2d,%2d)-W(%1d,%1d)", i, j, id, omp_get_thread_num() );
  98. }
  99. printf("\n");
  100. }
  101. printf( "SUMA_P = %lf\n", suma_p );
  102.  
  103.  
  104.  
  105. printf( "\nKolumnowo zewnetrznie\n" );
  106. suma_p = 0.0;
  107. double suma_k = 0.0;
  108.  
  109. //#pragma omp parallel for ordered schedule(static, 3) private(i, suma_p)
  110. //#pragma omp parallel for ordered schedule(static) private(i, suma_p)
  111. //#pragma omp parallel for ordered schedule(dynamic, 2) private(i, suma_p)
  112. #pragma omp parallel for ordered schedule(dynamic) private(i, suma_p)
  113. for ( j = 0; j < WYMIAR; j++ )
  114. {
  115. suma_p = 0.0;
  116. id = omp_get_thread_num();
  117. for ( i = 0; i < WYMIAR; i++ )
  118. {
  119. suma_p += a[i][j];
  120. #pragma omp ordered
  121. printf("(%2d,%2d)-W(%1d,%1d)", i, j, id, omp_get_thread_num() );
  122. }
  123.  
  124. #pragma omp critical
  125. {
  126. suma_k += suma_p;
  127. }
  128. printf("\n");
  129. }
  130. printf( "SUMA_P = %lf\n", suma_k );
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement