Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://drive.google.com/drive/folders/1GK3t7PBsRFQp01ApEmk1wb6Scrw_CFA4?usp=sharing
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <ctime>
- #include <cmath>
- #include <ppl.h>
- #include <deque>
- #include <list>
- using namespace std;
- #define N 200
- #define EPS 1e-9
- double fun(double x)
- {
- double ans = 0;
- for (int k = 1; k <= max(20, int(20 * fabs(x))); ++k)
- for (int j = 1; j <= max(20, int(20 * fabs(x))); ++j)
- {
- double x_2 = x * x;
- ans += x_2 * (k + j) / (x_2 + k * k * k + j * j * j) * cos(k * x) * sin(j * x);
- }
- return ans;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- //-------------------------------//
- // ВЕКТОР //
- //-------------------------------//
- vector<double> vec1(N), vec2(N);
- for (int i = 0; i < N; ++i)
- vec1[i] = vec2[i] = 100 * cos(i + 1);
- auto t_start = clock();
- auto vec_it1 = transform(vec1.begin(), vec1.end(), vec1.begin(), fun);
- auto t_end = clock();
- double time1 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
- cout << "Последовательная реализация (вектор): " << time1 << "\n";
- t_start = clock();
- auto vec_it2 = concurrency::parallel_transform(vec2.begin(), vec2.end(), vec2.begin(), fun);
- t_end = clock();
- double time2 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
- cout << "Параллельная реализация (вектор): " << time2 << "\n";
- cout << "Разница во времени (вектор): " << time1 / time2 << "\n";
- //-------------------------------//
- // ДЕК //
- //-------------------------------//
- deque<double> deq1, deq2;
- for (int i = 0; i < N; ++i)
- {
- deq1.push_back(100 * cos(i + 1));
- deq2.push_back(100 * cos(i + 1));
- }
- t_start = clock();
- auto deq_it1 = transform(deq1.begin(), deq1.end(), deq1.begin(), fun);
- t_end = clock();
- time1 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
- cout << "Последовательная реализация (дек): " << time1 << "\n";
- t_start = clock();
- auto deq_it2 = concurrency::parallel_transform(deq2.begin(), deq2.end(), deq2.begin(), fun);
- t_end = clock();
- time2 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
- cout << "Параллельная реализация (дек): " << time2 << "\n";
- cout << "Разница во времени (дек): " << time1 / time2 << "\n";
- //-------------------------------//
- // ЛИСТ //
- //-------------------------------//
- list<double> l1, l2;
- for (int i = 0; i < N; ++i)
- {
- l1.push_back(100 * cos(i + 1));
- l2.push_back(100 * cos(i + 1));
- }
- t_start = clock();
- auto deq_l1 = transform(l1.begin(), l1.end(), l1.begin(), fun);
- t_end = clock();
- time1 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
- cout << "Последовательная реализация (лист): " << time1 << "\n";
- t_start = clock();
- auto deq_l2 = concurrency::parallel_transform(l2.begin(), l2.end(), l2.begin(), fun);
- t_end = clock();
- time2 = 1.0 * (t_end - t_start) / CLOCKS_PER_SEC;
- cout << "Параллельная реализация (лист): " << time2 << "\n";
- cout << "Разница во времени (лист): " << time1 / time2 << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement