Advertisement
Neveles

© 2020 Neveles. All rights reserved.

Apr 28th, 2020
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <omp.h>
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <conio.h>
  5. #include <stdio.h>
  6.  
  7. using namespace std;
  8.  
  9. void func()
  10. {
  11.   for (int i = 0; i < 500000; i++)
  12.   {
  13.     rand();
  14.   }
  15. }
  16.  
  17. int main()
  18. {
  19.   omp_set_num_threads(3);
  20.  
  21. #pragma omp parallel for
  22.   for (int i = 0; i < 100; i++)
  23.   {
  24.     cout << i;
  25.     func();
  26.   }
  27.  
  28. #pragma omp parallel
  29.   {
  30. #pragma omp sections nowait
  31.     {
  32.       cout << endl << "Stroka" << omp_get_num_threads() << endl;
  33. #pragma omp section
  34.       for (int i = 0; i < 5; i++)
  35.       {
  36.         cout << 1;
  37.         func();
  38.       }
  39. #pragma omp section
  40.       for (int i = 0; i < 5; i++)
  41.       {
  42.         cout << 2;
  43.         func();
  44.       }
  45.     } //закрытие секции новайт
  46. #pragma omp barrier //код завершенной секции завершил параллельную работу
  47.     for (int i = 0; i < 10; i++)
  48.     {
  49.       cout << 3;
  50.       func();
  51.     }
  52.   }
  53.  
  54.   cout << "\n\n\n";
  55.  
  56. #pragma omp parallel num_threads(3)
  57.   {
  58. #pragma omp single  //всегда выполняется в самом 1 потоке
  59.  
  60.     // Only a single thread can read the input.
  61.     cout << omp_get_thread_num() << " first single " << endl;
  62.  
  63.     // Multiple threads in the team compute the results.
  64.     cout << omp_get_thread_num() << " main " << endl;
  65.  
  66. #pragma omp single
  67.  
  68.     //Only a single thread can write the output.
  69.     cout << omp_get_thread_num() << " sec single " << endl;
  70.   }
  71.  
  72.   int a[5], i;
  73.  
  74. #pragma omp parallel num_threads(3)
  75.   {
  76.     // Perform some computation.
  77. #pragma omp for
  78.     for (i = 0; i < 5; i++) a[i] = i * i;
  79.  
  80.     // Print intermediate results.
  81. #pragma omp master
  82.     for (i = 0; i < 5; i++) printf_s("a[%d] = %d\n", i, a[i]);
  83.  
  84.     // Wait.
  85. #pragma omp barrier
  86.  
  87. // Continue with the computation.
  88. #pragma omp for
  89.     for (i = 0; i < 5; i++) a[i] += i;
  90.   }
  91.  
  92.   cout << "\n\n\n";
  93.  
  94.   //    omp_init_lock(&my_lock);
  95.   //
  96.   //#pragma omp parallel num_threads(4)
  97.   //    {
  98.   //      int tid = omp_get_thread_num();
  99.   //      int i, j;
  100.   //     /* omp_set_lock(&my_lock);*/
  101.   //      for (i = 0; i < 5; ++i) {
  102.   //        omp_set_lock(&my_lock);
  103.   //        omp_test_lock(&my_lock);
  104.   //        printf_s("Thread %d - starting locked region\n", tid);
  105.   //        printf_s("Thread %d - ending locked region\n", tid);
  106.   //        omp_unset_lock(&my_lock);
  107.   //      }
  108.   //      omp_unset_lock(&my_lock);
  109.   //    }
  110.   //    omp_destroy_lock(&my_lock);
  111.   //  
  112.   // cout << endl << endl << endl;
  113.   // omp_init_lock(&my_lock);
  114.   //#pragma omp parallel num_threads(4)
  115.   //    {
  116.   //      int tid = omp_get_thread_num();
  117.   //      int i, j;  
  118.   //      omp_set_lock(&my_lock);
  119.   //      for (i = 0; i < 5; ++i)
  120.   //      {
  121.   //        omp_test_lock(&my_lock);
  122.   //        printf_s("Thread %d - starting locked region\n", tid);
  123.   //        printf_s("Thread %d - ending locked region\n", tid);
  124.   //        omp_unset_lock(&my_lock);
  125.   //      }
  126.   //    }
  127.   //
  128.   //    omp_destroy_lock(&my_lock);
  129.  
  130.   omp_lock_t my_lock;
  131.   omp_init_lock(&my_lock);
  132.  
  133. #pragma omp parallel num_threads(4)
  134.   {
  135.     int tid = omp_get_thread_num();
  136.     int i, j;
  137.     omp_set_lock(&my_lock);
  138.     for (i = 0; i < 5; ++i)
  139.     {
  140.       printf_s("Thread %d - starting locked region\n", tid);
  141.       printf_s("Thread %d - ending locked region\n", tid);
  142.       omp_unset_lock(&my_lock);
  143.     }
  144.   }
  145.  
  146.   omp_destroy_lock(&my_lock);
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement