Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<omp.h>
  4.  
  5. int main(){
  6.  
  7. #ifdef _OPENMP
  8. printf("\nKompilator rozpoznaje dyrektywy OpenMP\n");
  9. #endif
  10.  
  11. int liczba_watkow = 33;
  12. //omp_set_num_threads(liczba_watkow);
  13.  
  14. int a_shared = 1;
  15. int b_private = 2;
  16. int c_firstprivate = 3;
  17. int e_atomic = 5;
  18. static int f_threadprivate;
  19.  
  20. printf("przed wejsciem do obszaru rownoleglego - nr_threads %d, thread ID %d\n",
  21. omp_get_num_threads(), omp_get_thread_num());
  22. printf("\ta_shared \t= %d\n", a_shared);
  23. printf("\tb_private \t= %d\n", b_private);
  24. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  25. printf("\te_atomic \t= %d\n", e_atomic);
  26.  
  27.  
  28. // pkt 10)
  29.  
  30. #pragma omp threadprivate(f_threadprivate)
  31. #pragma omp parallel default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate) num_threads(7)
  32. {
  33. int i;
  34. int d_local_private;
  35. d_local_private = a_shared + c_firstprivate;
  36.  
  37. //nadanie prywatnej wartosci zmiennej f_threadprivate
  38. f_threadprivate = omp_get_thread_num();
  39.  
  40. #pragma omp barrier
  41. for (i = 0; i < 10; i++){
  42. #pragma omp atomic
  43. a_shared ++;
  44. }
  45.  
  46. for ( i = 0; i < 10; i++){
  47. c_firstprivate += omp_get_thread_num();
  48. }
  49.  
  50.  
  51. for ( i = 0; i < 10; i++){
  52. #pragma omp atomic
  53. e_atomic += omp_get_thread_num();
  54. }
  55.  
  56. #pragma omp barrier
  57. #pragma omp critical
  58. {
  59.  
  60. printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n",
  61. omp_get_num_threads(), omp_get_thread_num());
  62.  
  63. printf("\ta_shared \t= %d\n", a_shared);
  64. printf("\tb_private \t= %d\n", b_private);
  65. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  66. printf("\td_local_private = %d\n", d_local_private);
  67. printf("\te_atomic \t= %d\n", e_atomic);
  68.  
  69. }
  70. }
  71.  
  72. printf("\npo zakonczeniu obszaru rownoleglego:\n");
  73. printf("\ta_shared \t= %d\n", a_shared);
  74. printf("\tb_private \t= %d\n", b_private);
  75. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  76. printf("\te_atomic \t= %d\n", e_atomic);
  77. printf("\n");
  78.  
  79. // pkt 11. - wydrukowanie wartosci f_threadprivate w drugim obszarze rownoleglym
  80. #pragma omp parallel num_threads(7)
  81. {
  82. // pomyłka - printf("\tf_firstprivate \t= %d\n", f_threadprivate);
  83. printf("\tf_threadprivate \t= %d\n", f_threadprivate);
  84.  
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement