Advertisement
Tvor0zhok

ParProg2 (2)

Sep 27th, 2023
631
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. // https://drive.google.com/drive/folders/1GK3t7PBsRFQp01ApEmk1wb6Scrw_CFA4?usp=sharing
  2.  
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <vector>
  6. #include <ctime>
  7. #include <cmath>
  8. #include <ppl.h>
  9. #include <deque>
  10. #include <list>
  11. using namespace std;
  12.  
  13. #define N 200
  14. #define EPS 1e-9
  15.  
  16. double fun(double x)
  17. {
  18.     double ans = 0;
  19.  
  20.     for (int k = 1; k <= max(20, int(20 * fabs(x))); ++k)
  21.         for (int j = 1; j <= max(20, int(20 * fabs(x))); ++j)
  22.         {
  23.             double x_2 = x * x;
  24.  
  25.             ans += x_2 * (k + j) / (x_2 + k * k * k + j * j * j) * cos(k * x) * sin(j * x);
  26.         }
  27.  
  28.     return ans;
  29. }
  30.  
  31. int main()
  32. {
  33.     setlocale(LC_ALL, "Russian");
  34.  
  35.     //-------------------------------//
  36.     //            ВЕКТОР             //
  37.     //-------------------------------//
  38.  
  39.     vector<double> vec1(N), vec2(N);
  40.  
  41.     for (int i = 0; i < N; ++i)
  42.         vec1[i] = vec2[i] = 100 * cos(i + 1);
  43.  
  44.     auto t_start = clock();
  45.  
  46.     auto vec_it1 = transform(vec1.begin(), vec1.end(), vec1.begin(), fun);
  47.  
  48.     auto t_end = clock();
  49.  
  50.     double time1 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
  51.  
  52.     cout << "Последовательная реализация (вектор): " << time1 << "\n";
  53.  
  54.     t_start = clock();
  55.  
  56.     auto vec_it2 = concurrency::parallel_transform(vec2.begin(), vec2.end(), vec2.begin(), fun);
  57.  
  58.     t_end = clock();
  59.  
  60.     double time2 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
  61.  
  62.     cout << "Параллельная реализация (вектор): " << time2 << "\n";
  63.  
  64.     cout << "Разница во времени (вектор): " << time1 / time2 << "\n";
  65.  
  66.     //-------------------------------//
  67.     //              ДЕК              //
  68.     //-------------------------------//
  69.  
  70.     deque<double> deq1, deq2;
  71.  
  72.     for (int i = 0; i < N; ++i)
  73.     {
  74.         deq1.push_back(100 * cos(i + 1));
  75.         deq2.push_back(100 * cos(i + 1));
  76.     }
  77.  
  78.     t_start = clock();
  79.  
  80.     auto deq_it1 = transform(deq1.begin(), deq1.end(), deq1.begin(), fun);
  81.  
  82.     t_end = clock();
  83.  
  84.     time1 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
  85.  
  86.     cout << "Последовательная реализация (дек): " << time1 << "\n";
  87.  
  88.     t_start = clock();
  89.  
  90.     auto deq_it2 = concurrency::parallel_transform(deq2.begin(), deq2.end(), deq2.begin(), fun);
  91.  
  92.     t_end = clock();
  93.  
  94.     time2 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
  95.  
  96.     cout << "Параллельная реализация (дек): " << time2 << "\n";
  97.  
  98.     cout << "Разница во времени (дек): " << time1 / time2 << "\n";
  99.  
  100.     //-------------------------------//
  101.     //              ЛИСТ             //
  102.     //-------------------------------//
  103.  
  104.     list<double> l1, l2;
  105.  
  106.     for (int i = 0; i < N; ++i)
  107.     {
  108.         l1.push_back(100 * cos(i + 1));
  109.         l2.push_back(100 * cos(i + 1));
  110.     }
  111.  
  112.     t_start = clock();
  113.  
  114.     auto deq_l1 = transform(l1.begin(), l1.end(), l1.begin(), fun);
  115.  
  116.     t_end = clock();
  117.  
  118.     time1 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
  119.  
  120.     cout << "Последовательная реализация (лист): " << time1 << "\n";
  121.  
  122.     t_start = clock();
  123.  
  124.     auto deq_l2 = concurrency::parallel_transform(l2.begin(), l2.end(), l2.begin(), fun);
  125.  
  126.     t_end = clock();
  127.  
  128.     time2 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
  129.  
  130.     cout << "Параллельная реализация (лист): " << time2 << "\n";
  131.  
  132.     cout << "Разница во времени (лист): " << time1 / time2 << "\n";
  133.  
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement