Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.70 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<omp.h>
  4.  int f_threadprivate=10;
  5. int main(){
  6.  
  7. #ifdef   _OPENMP
  8.   printf("\nKompilator rozpoznaje dyrektywy OpenMP\n");
  9. #endif
  10.  
  11.   int liczba_watkow;
  12.  
  13.   int a_shared = 1;
  14.   int b_private = 2;
  15.   int c_firstprivate = 3;
  16.   int e_atomic=5;
  17.   //omp_set_num_threads(5);
  18.     //ustawienie zmiennej środowiskowej w terminalu wpisać
  19.     //export OMP_NUM_THREADS=33
  20.     //po tym odpalić make i program !!!!!!!!!!!!!!!!!!!
  21.  
  22.   printf("przed wejsciem do obszaru rownoleglego -  nr_threads %d, thread ID %d\n",
  23.      omp_get_num_threads(), omp_get_thread_num());
  24.   printf("\ta_shared \t= %d\n", a_shared);
  25.   printf("\tb_private \t= %d\n", b_private);
  26.   printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  27.   printf("\te_atomic \t= %d\n", e_atomic);
  28.    
  29. #pragma omp threadprivate(f_threadprivate)
  30. {
  31.  
  32. #pragma omp parallel default(none) num_threads(7) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate )
  33.   {
  34.     int i;
  35.     int d_local_private;
  36.     d_local_private = a_shared + c_firstprivate;
  37.    
  38. //bariera bo WAR--------------------------------------------------------
  39. #pragma omp barrier
  40.     for(i=0;i<10;i++){
  41. //operacja atomowa------------------------------------------------------
  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.     for(i=0;i<10;i++){
  51.  
  52. //RAW-----------------------------------------------------------------
  53. #pragma omp atomic
  54.       e_atomic+=omp_get_thread_num();
  55.     }
  56.  
  57. //RAW----------------------CRITICAL-----------------------------------
  58. #pragma omp barrier
  59.  
  60.  
  61. #pragma omp critical    
  62.     {
  63.      
  64.       printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n",
  65.          omp_get_num_threads(), omp_get_thread_num());
  66.       f_threadprivate=omp_get_thread_num();
  67.       printf("\ta_shared \t= %d\n", a_shared);
  68.       printf("\tb_private \t= %d\n", b_private);
  69.       printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  70.       printf("\td_local_private = %d\n", d_local_private);
  71.       printf("\te_atomic \t= %d\n", e_atomic);
  72.      
  73.     }
  74. }
  75.     //#pragma omp single
  76. /* #pragma omp master */
  77. /*         { */
  78.    
  79. /*           printf("\ninside single: nr_threads %d, thread ID %d\n", */
  80. /*           omp_get_num_threads(), omp_get_thread_num()); */
  81. /*           /\* Get environment information *\/ */
  82. /*           int procs = omp_get_num_procs(); */
  83. /*           int nthreads = omp_get_num_threads(); */
  84. /*           int maxt = omp_get_max_threads(); */
  85. /*           int inpar = omp_in_parallel(); */
  86. /*           int dynamic = omp_get_dynamic(); */
  87. /*           int nested = omp_get_nested(); */
  88.    
  89. /*           /\* Print environment information *\/ */
  90. /*           printf("Number of processors = %d\n", procs); */
  91. /*           printf("Number of threads = %d\n", nthreads); */
  92. /*           printf("Max threads = %d\n", maxt); */
  93. /*           printf("In parallel? = %d\n", inpar); */
  94. /*           printf("Dynamic threads enabled? = %d\n", dynamic); */
  95. /*           printf("Nested parallelism supported? = %d\n", nested); */
  96.    
  97. /*         } */
  98.    
  99.   }
  100.  
  101.   printf("po zakonczeniu obszaru rownoleglego:\n");
  102.   printf("\ta_shared \t= %d\n", a_shared);
  103.   printf("\tb_private \t= %d\n", b_private);
  104.   printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  105.   printf("\te_atomic \t= %d\n", e_atomic);
  106.  
  107. #pragma omp threadprivate(f_threadprivate)
  108. {
  109.     #pragma omp parallel default(none) num_threads(6)
  110.     #pragma omp critical
  111.     {
  112.         printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n",omp_get_num_threads(), omp_get_thread_num());
  113.         printf("\nf_threadprivate %d\n",f_threadprivate);          
  114.     }
  115.  
  116. }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement