Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<omp.h>
  4.  
  5. void zadanie3_4() {
  6. int a_shared = 1;
  7. int b_private = 2;
  8. int c_firstprivate = 3;
  9. int e_atomic=5;
  10.  
  11. printf("przed wejsciem do obszaru rownoleglego - nr_threads %d, thread ID %d\n", omp_get_num_threads(), omp_get_thread_num());
  12. printf("\ta_shared \t= %d\n", a_shared);
  13. printf("\tb_private \t= %d\n", b_private);
  14. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  15. printf("\te_atomic \t= %d\n", e_atomic);
  16.  
  17. #pragma omp parallel default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate )
  18. {
  19. int i;
  20. int d_local_private;
  21. d_local_private = a_shared + c_firstprivate;
  22. #pragma omp barrier
  23.  
  24. #pragma omp critical
  25. {
  26. for(i=0;i<10;i++) a_shared ++;
  27. }
  28.  
  29. for(i=0; i<10; i++) c_firstprivate += omp_get_thread_num();
  30. for(i=0;i<10;i++) {
  31. #pragma omp atomic
  32. e_atomic+=omp_get_thread_num();
  33. }
  34.  
  35. #pragma omp barrier
  36. #pragma omp critical
  37. {
  38. printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n", omp_get_num_threads(), omp_get_thread_num());
  39. printf("\ta_shared \t= %d\n", a_shared);
  40. printf("\tb_private \t= %d\n", b_private);
  41. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  42. printf("\td_local_private = %d\n", d_local_private);
  43. printf("\te_atomic \t= %d\n", e_atomic);
  44. }
  45. }
  46.  
  47. printf("po zakonczeniu obszaru rownoleglego:\n");
  48. printf("\ta_shared \t= %d\n", a_shared);
  49. printf("\tb_private \t= %d\n", b_private);
  50. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  51. printf("\te_atomic \t= %d\n", e_atomic);
  52. }
  53. void zadanie5() {
  54. // Ustawiam zmienną środowiskową przed uruchomieniem programu.
  55. // $ set OMP_NUM_THREADS = 33
  56. // lub
  57. // $ export OPM_NUM_THREADS = 33
  58. zadanie3_4();
  59. }
  60. void zadanie8() {
  61. omp_set_num_threads(7);
  62. zadanie3_4();
  63. }
  64. void zadanie9() {
  65. int a_shared = 1;
  66. int b_private = 2;
  67. int c_firstprivate = 3;
  68. int e_atomic=5;
  69.  
  70. printf("przed wejsciem do obszaru rownoleglego - nr_threads %d, thread ID %d\n", omp_get_num_threads(), omp_get_thread_num());
  71. printf("\ta_shared \t= %d\n", a_shared);
  72. printf("\tb_private \t= %d\n", b_private);
  73. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  74. printf("\te_atomic \t= %d\n", e_atomic);
  75.  
  76. #pragma omp parallel num_threads(7) default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate )
  77. {
  78. int i;
  79. int d_local_private;
  80. d_local_private = a_shared + c_firstprivate;
  81. #pragma omp barrier
  82. #pragma omp critical
  83. {
  84. for(i=0;i<10;i++) a_shared ++;
  85. }
  86. for(i=0; i<10; i++) c_firstprivate += omp_get_thread_num();
  87. for(i=0;i<10;i++) {
  88. #pragma omp atomic
  89. e_atomic+=omp_get_thread_num();
  90. }
  91. #pragma omp barrier
  92. #pragma omp critical
  93. {
  94. printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n", omp_get_num_threads(), omp_get_thread_num());
  95. printf("\ta_shared \t= %d\n", a_shared);
  96. printf("\tb_private \t= %d\n", b_private);
  97. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  98. printf("\td_local_private = %d\n", d_local_private);
  99. printf("\te_atomic \t= %d\n", e_atomic);
  100. }
  101. }
  102.  
  103. printf("po zakonczeniu obszaru rownoleglego:\n");
  104. printf("\ta_shared \t= %d\n", a_shared);
  105. printf("\tb_private \t= %d\n", b_private);
  106. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  107. printf("\te_atomic \t= %d\n", e_atomic);
  108.  
  109.  
  110. }
  111. void zadanie10() {
  112. static int f_threadprivate = -1;
  113. #pragma omp threadprivate(f_threadprivate)
  114. #pragma omp parallel num_threads(7)
  115. {
  116. f_threadprivate = omp_get_thread_num();
  117. }
  118. #pragma omp parallel num_threads(7)
  119. {
  120. printf("Watek id: %d, dostal: %d\n",omp_get_thread_num(),f_threadprivate);
  121. }
  122. }
  123.  
  124. void zadanie13_a() {
  125. printf("Static, heap size: 3 \n");
  126. omp_set_num_threads(4);
  127. int i;
  128. #pragma omp parallel for ordered schedule(static, 3)
  129.  
  130. for(i = 0; i < 17; i++){
  131. #pragma omp ordered
  132. printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
  133. }
  134. printf("\n");
  135. }
  136. void zadanie13_b() {
  137. printf("Static, heap size: default \n");
  138. omp_set_num_threads(4);
  139. int i;
  140. #pragma omp parallel for ordered schedule(static)
  141. for(i = 0; i < 17; i++){
  142. #pragma omp ordered
  143. printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
  144. }
  145. printf("\n");
  146. }
  147. void zadanie13_c() {
  148. printf("Dynamic, heap size: 3 \n");
  149. omp_set_num_threads(4);
  150. int i;
  151. #pragma omp parallel for ordered schedule(dynamic, 3)
  152. for(i = 0; i < 17; i++){
  153. #pragma omp ordered
  154. printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
  155. }
  156. printf("\n");
  157. }
  158. void zadanie13_d() {
  159. printf("Dynamic, heap size: default \n");
  160. omp_set_num_threads(4);
  161. int i;
  162. #pragma omp parallel for ordered schedule(dynamic)
  163.  
  164. for(i = 0; i < 17; i++){
  165. #pragma omp ordered
  166. printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
  167. }
  168. printf("\n");
  169. }
  170.  
  171. void zadanie13_e(){
  172. printf("Auto, heap size: default \n");
  173. omp_set_num_threads(4);
  174. int i;
  175. #pragma omp parallel for ordered schedule(auto)
  176.  
  177. for(i = 0; i < 17; i++){
  178. #pragma omp ordered
  179. printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
  180. }
  181. printf("\n");
  182.  
  183. }
  184.  
  185.  
  186. void zadanie13_f(){
  187. printf("Guided, heap size: default \n");
  188. omp_set_num_threads(4);
  189. int i;
  190. #pragma omp parallel for ordered schedule(guided)
  191.  
  192. for(i = 0; i < 17; i++){
  193. #pragma omp ordered
  194. printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
  195. }
  196. printf("\n");
  197.  
  198. }
  199.  
  200. int main(){
  201.  
  202. #ifdef _OPENMP
  203. printf("\nKompilator rozpoznaje dyrektywy OpenMP\n");
  204. #endif
  205.  
  206. //zadanie3_4();
  207. //zadanie5();
  208. //zadanie8();
  209. //zadanie9();
  210. //zadanie10();
  211. zadanie13_a();
  212. zadanie13_b();
  213. zadanie13_c();
  214. zadanie13_d();
  215. //zadanie13_e();
  216. //zadanie13_f();
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement