Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <omp.h>
  4.  
  5. int main()
  6. {
  7.  
  8. #ifdef _OPENMP
  9. printf("\nKompilator rozpoznaje dyrektywy OpenMP\n");
  10. #endif
  11.  
  12. int liczba_watkow = 5;
  13.  
  14. int a_shared = 1;
  15. int b_private = 2;
  16. int c_firstprivate = 3;
  17. int e_atomic = 5;
  18.  
  19. static int f_threadprivate;
  20.  
  21. omp_set_num_threads(liczba_watkow);
  22.  
  23. printf("przed wejsciem do obszaru rownoleglego - nr_threads %d, thread ID %d\n",
  24. omp_get_num_threads(), omp_get_thread_num());
  25. printf("\ta_shared \t= %d\n", a_shared);
  26. printf("\tb_private \t= %d\n", b_private);
  27. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  28. printf("\te_atomic \t= %d\n", e_atomic);
  29. #pragma omp threadprivate(f_threadprivate)
  30. #pragma omp parallel default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate) num_threads(7)
  31. {
  32. int i;
  33. int d_local_private;
  34. d_local_private = a_shared + c_firstprivate;
  35.  
  36. f_threadprivate = omp_get_thread_num();
  37. #pragma omp barrier
  38. #pragma omp critical
  39. for (i = 0; i < 10; i++)
  40. {
  41. a_shared++;
  42. }
  43.  
  44. for (i = 0; i < 10; i++)
  45. {
  46. c_firstprivate += omp_get_thread_num();
  47. }
  48.  
  49. for (i = 0; i < 10; i++)
  50. {
  51. #pragma omp atomic
  52. e_atomic += omp_get_thread_num();
  53. }
  54. #pragma omp barrier
  55. #pragma omp critical
  56. {
  57.  
  58. printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n",
  59. omp_get_num_threads(), omp_get_thread_num());
  60.  
  61. printf("\ta_shared \t= %d\n", a_shared);
  62. printf("\tb_private \t= %d\n", b_private);
  63. printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  64. printf("\td_local_private = %d\n", d_local_private);
  65. printf("\te_atomic \t= %d\n", e_atomic);
  66. }
  67.  
  68. //#pragma omp single
  69. /* #pragma omp master */
  70. /* { */
  71.  
  72. /* printf("\ninside single: nr_threads %d, thread ID %d\n", */
  73. /* omp_get_num_threads(), omp_get_thread_num()); */
  74. /* /\* Get environment information *\/ */
  75. /* int procs = omp_get_num_procs(); */
  76. /* int nthreads = omp_get_num_threads(); */
  77. /* int maxt = omp_get_max_threads(); */
  78. /* int inpar = omp_in_parallel(); */
  79. /* int dynamic = omp_get_dynamic(); */
  80. /* int nested = omp_get_nested(); */
  81.  
  82. /* /\* Print environment information *\/ */
  83. /* printf("Number of processors = %d\n", procs); */
  84. /* printf("Number of threads = %d\n", nthreads); */
  85. /* printf("Max threads = %d\n", maxt); */
  86. /* printf("In parallel? = %d\n", inpar); */
  87. /* printf("Dynamic threads enabled? = %d\n", dynamic); */
  88. /* printf("Nested parallelism supported? = %d\n", nested); */
  89.  
  90. /* } */
  91. }
  92.  
  93.  
  94. printf("po zakonczeniu obszaru rownoleglego:\n");
  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("\te_atomic \t= %d\n", e_atomic);
  99.  
  100. #pragma omp parallel num_threads(7)
  101. {
  102. printf("\nf_threadprivate \t= %d\n", f_threadprivate);
  103. }
  104. }
  105.  
  106. FIRST PRIVATE PRIVATE LAST PRIVATRE
  107. DLACZEGO NIE BEZ SEKCJI - PRZY ODCZYCIE NIE TRZEBA
  108. CZEKAMY Z
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement