Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 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. printf("Petla z reduction dla static, liczba porcji 3\n");
  28. double suma_parallel=0.0;
  29. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  30. // ...
  31. for(i=0;i<WYMIAR;i++) {
  32. int id_w = omp_get_thread_num();
  33. // ...
  34. #pragma omp for schedule(static,3) reduction(+:suma_parallel) private(j)
  35. for(j=0;j<WYMIAR;j++) {
  36. suma_parallel += a[i][j];
  37. // ...
  38. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  39. }
  40. // ...
  41. printf("\n");
  42. }
  43.  
  44. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  45.  
  46. printf("Petla z reduction dla static, liczba porcji default\n");
  47. suma_parallel=0.0;
  48. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  49. // ...
  50. for(i=0;i<WYMIAR;i++) {
  51. int id_w = omp_get_thread_num();
  52. // ...
  53. #pragma omp for schedule(static) reduction(+:suma_parallel) private(j)
  54. for(j=0;j<WYMIAR;j++) {
  55. suma_parallel += a[i][j];
  56. // ...
  57. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  58. }
  59. // ...
  60. printf("\n");
  61. }
  62.  
  63. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  64. printf("Petla z reduction dla dynamic, liczba porcji 3\n");
  65. suma_parallel=0.0;
  66. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  67. // ...
  68. for(i=0;i<WYMIAR;i++) {
  69. int id_w = omp_get_thread_num();
  70. // ...
  71. #pragma omp for schedule(dynamic,2) reduction(+:suma_parallel) private(j)
  72. for(j=0;j<WYMIAR;j++) {
  73. suma_parallel += a[i][j];
  74. // ...
  75. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  76. }
  77. }
  78.  
  79. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  80. printf("Petla z reduction dla dynamic, liczba porcji default\n");
  81. suma_parallel=0.0;
  82. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  83. // ...
  84. for(i=0;i<WYMIAR;i++) {
  85. int id_w = omp_get_thread_num();
  86. // ...
  87. #pragma omp for schedule(dynamic) reduction(+:suma_parallel) private(j)
  88. for(j=0;j<WYMIAR;j++) {
  89. suma_parallel += a[i][j];
  90. // ...
  91. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  92. }
  93. // ...
  94. printf("\n");
  95. }
  96.  
  97. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  98.  
  99. //punkt 2
  100. printf("Punkt 2, (static,3)\n");
  101. suma_parallel=0.0;
  102. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  103. {
  104. double *tab;
  105. #pragma omp single copyprivate(tab)
  106. {
  107. tab = malloc(sizeof(double) * omp_get_num_threads());
  108. }
  109. // ...
  110. for(i=0;i<WYMIAR;i++) {
  111. int id_w = omp_get_thread_num();
  112. // ...
  113. #pragma omp for schedule(static,3) private(j) ordered
  114. for(j=0;j<WYMIAR;j++) {
  115. suma_parallel += a[i][j];
  116. // ...
  117. #pragma omp ordered
  118. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  119. }
  120. }
  121. #pragma omp single
  122. {
  123. int a;
  124. for(a=0;a<omp_get_num_threads();++a){
  125. suma_parallel += tab[a];
  126. }
  127. }
  128. }
  129. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  130. printf("Punkt 2, (static,default)\n");
  131. suma_parallel=0.0;
  132. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  133. {
  134. double *tab;
  135. #pragma omp single copyprivate(tab)
  136. {
  137. tab = malloc(sizeof(double) * omp_get_num_threads());
  138. }
  139. // ...
  140. for(i=0;i<WYMIAR;i++) {
  141. int id_w = omp_get_thread_num();
  142. // ...
  143. #pragma omp for schedule(static) private(j) ordered
  144. for(j=0;j<WYMIAR;j++) {
  145. suma_parallel += a[i][j];
  146. // ...
  147. #pragma omp ordered
  148. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  149. }
  150. }
  151. #pragma omp single
  152. {
  153. int a;
  154. for(a=0;a<omp_get_num_threads();++a){
  155. suma_parallel += tab[a];
  156. }
  157. }
  158. }
  159. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  160.  
  161. printf("Punkt 2, (dynamic,2)\n");
  162. suma_parallel=0.0;
  163. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  164. {
  165. double *tab;
  166. #pragma omp single copyprivate(tab)
  167. {
  168. tab = malloc(sizeof(double) * omp_get_num_threads());
  169. }
  170. // ...
  171. for(i=0;i<WYMIAR;i++) {
  172. int id_w = omp_get_thread_num();
  173. // ...
  174. #pragma omp for schedule(dynamic,2) private(j) ordered
  175. for(j=0;j<WYMIAR;j++) {
  176. suma_parallel += a[i][j];
  177. // ...
  178. #pragma omp ordered
  179. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  180. }
  181. }
  182. #pragma omp single
  183. {
  184. int a;
  185. for(a=0;a<omp_get_num_threads();++a){
  186. suma_parallel += tab[a];
  187. }
  188. }
  189. }
  190. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  191.  
  192. printf("Punkt 2, (dynamic,default)\n");
  193. suma_parallel=0.0;
  194. #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
  195. {
  196. double *tab;
  197. #pragma omp single copyprivate(tab)
  198. {
  199. tab = malloc(sizeof(double) * omp_get_num_threads());
  200. }
  201. // ...
  202. for(i=0;i<WYMIAR;i++) {
  203. int id_w = omp_get_thread_num();
  204. // ...
  205. #pragma omp for schedule(dynamic) private(j) ordered
  206. for(j=0;j<WYMIAR;j++) {
  207. suma_parallel += a[i][j];
  208. // ...
  209. #pragma omp ordered
  210. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  211. }
  212. // ...
  213. printf("\n");
  214. }
  215. #pragma omp single
  216. {
  217. int a;
  218. for(a=0;a<omp_get_num_threads();++a){
  219. suma_parallel += tab[a];
  220. }
  221. }
  222. }
  223. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  224.  
  225. printf("Punkt 3, (static,3)\n");
  226. suma_parallel=0.0;
  227. #pragma omp parallel default(none) shared(suma_parallel, a) private(j)
  228. {
  229. double *tab;
  230. #pragma omp single copyprivate(tab)
  231. {
  232. tab = malloc(sizeof(double) * omp_get_num_threads());
  233. }
  234. // ...
  235. for(i=0;i<WYMIAR;i++) {
  236. int id_w = omp_get_thread_num();
  237. // ...
  238. double private_sum = 0.;
  239. #pragma omp for schedule(static,3) private(i) ordered
  240. for(j=0;j<WYMIAR;j++) {
  241. private_sum += a[i][j];
  242. #pragma omp ordered
  243. // ...
  244. printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
  245. }
  246. #pragma omp critical
  247. {
  248. suma_parallel += a[i][j];
  249. }
  250. // ...
  251. printf("\n");
  252. }
  253. }
  254. printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement