Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.37 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. //  omp_lock_t writelock;
  10. //  omp_init_lock(&writelock);
  11.   omp_set_num_threads(5);
  12. #endif
  13.  
  14.   int liczba_watkow;
  15.  
  16.   int a_shared = 1;
  17.   int b_private = 2;
  18.   int c_firstprivate = 3;
  19.   int e_atomic=5;
  20.  
  21.   static int f_threadprivate;
  22.  
  23.  
  24.   printf("przed wejsciem do obszaru rownoleglego -  nr_threads %d, thread ID %d\n",
  25.      omp_get_num_threads(), omp_get_thread_num());
  26.   printf("\ta_shared \t= %d\n", a_shared);
  27.   printf("\tb_private \t= %d\n", b_private);
  28.   printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  29.   printf("\te_atomic \t= %d\n", e_atomic);
  30.    
  31.  
  32. #pragma omp parallel default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate)
  33.   {
  34.     int i;
  35.     int d_local_private;
  36. #pragma threadprivate(f_threadprivate)
  37.     f_threadprivate = omp_get_thread_num();
  38.  
  39. #pragma omp critrical
  40. {
  41.     d_local_private = a_shared + c_firstprivate;
  42.  
  43. }
  44.  
  45. #pragma omp barrier
  46. #pragma omp critical
  47. {
  48. // omp_set_lock(&writelock);
  49.     for(i=0;i<10;i++){
  50.       a_shared ++;
  51.     }
  52. // omp_set_lock(&writelock);
  53. }
  54.  
  55.     for(i=0;i<10;i++){
  56.       c_firstprivate += omp_get_thread_num();
  57.     }
  58.  
  59.     for(i=0;i<10;i++){
  60. #pragma omp atomic
  61.       e_atomic+=omp_get_thread_num();
  62.     }
  63.  
  64. #pragma omp barrier
  65. #pragma omp critical
  66.     {
  67.  
  68. //#pragma threadprivate(f_threadprivate)
  69.      printf("\nf_threadprivate: %d", f_threadprivate);
  70.      
  71.  
  72.       printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n",
  73.          omp_get_num_threads(), omp_get_thread_num());
  74.      
  75.       printf("\ta_shared \t= %d\n", a_shared);
  76.       printf("\tb_private \t= %d\n", b_private);
  77.       printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  78.       printf("\td_local_private = %d\n", d_local_private);
  79.       printf("\te_atomic \t= %d\n", e_atomic);
  80.      
  81.     }
  82.    
  83.     //#pragma omp single
  84. /* #pragma omp master */
  85. /*         { */
  86.    
  87. /*           printf("\ninside single: nr_threads %d, thread ID %d\n", */
  88. /*           omp_get_num_threads(), omp_get_thread_num()); */
  89. /*           /\* Get environment information *\/ */
  90. /*           int procs = omp_get_num_procs(); */
  91. /*           int nthreads = omp_get_num_threads(); */
  92. /*           int maxt = omp_get_max_threads(); */
  93. /*           int inpar = omp_in_parallel(); */
  94. /*           int dynamic = omp_get_dynamic(); */
  95. /*           int nested = omp_get_nested(); */
  96.    
  97. /*           /\* Print environment information *\/ */
  98. /*           printf("Number of processors = %d\n", procs); */
  99. /*           printf("Number of threads = %d\n", nthreads); */
  100. /*           printf("Max threads = %d\n", maxt); */
  101. /*           printf("In parallel? = %d\n", inpar); */
  102. /*           printf("Dynamic threads enabled? = %d\n", dynamic); */
  103. /*           printf("Nested parallelism supported? = %d\n", nested); */
  104. /*         } */
  105.    
  106.   }
  107.  
  108. //#pragma omp parallel num_threads(7)
  109. //{
  110.  
  111. //    f_threadprivate = omp_get_thread_num();
  112. //      printf("\nf_threadprivate: %d", f_threadprivate);
  113. //}
  114.  
  115.   printf("po zakonczeniu obszaru rownoleglego:\n");
  116.   printf("\ta_shared \t= %d\n", a_shared);
  117.   printf("\tb_private \t= %d\n", b_private);
  118.   printf("\tc_firstprivate \t= %d\n", c_firstprivate);
  119.   printf("\te_atomic \t= %d\n", e_atomic);
  120. //  omp_set_lock(&writelock);
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement