Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://drive.google.com/drive/folders/1GK3t7PBsRFQp01ApEmk1wb6Scrw_CFA4?usp=sharing
- #define _USE_MATH_DEFINES
- #include <locale.h>
- #include <time.h>
- #include <vector>
- #include <ppl.h>
- #include <concurrent_vector.h>
- #include <concurrent_queue.h>
- #include <iostream>
- #include <cmath>
- #include <queue>
- #define N1 400
- #define N2 50
- #define EPS 1e-9
- double fun(double x, double y)
- {
- double ans = 0;
- for (int k = 1; k <= N2; k++)
- for (int j = 1; j <= N2; j++)
- ans += cos(k * x) * sin(j * y) / (1 + k * k * k + j * j * j) / sqrt(1 + k + j);
- return ans;
- }
- struct Point
- {
- double x, y, f;
- Point(double _x, double _y, double _f)
- {
- x = _x; y = _y; f = _f;
- }
- };
- int main()
- {
- setlocale(LC_ALL, "Russian");
- std::vector<Point> Pts;
- double h = 2.0 * M_PI / N1; double Time = clock();
- for (int k = 0; k < N1; k++)
- for (int j = 0; j < N1; j++) {
- double x = h * k; double y = h * j; double f = fun(x, y);
- if (f >= 0) Pts.push_back(Point(x, y, f));
- }
- Time = (clock() - Time) / CLOCKS_PER_SEC;
- std::cout << "(Вектор, Посл. реализация) Вычисления завершены. Размер контейнера: "
- << Pts.size() << std::endl << "Время: " << Time << " сек." << std::endl;
- Pts.clear();
- concurrency::concurrent_vector<Point> CPts;
- double Time1 = clock();
- concurrency::parallel_for(0, N1,
- [&CPts, h](int k) {
- for (int j = 0; j < N1; j++) {
- double x = h * k; double y = h * j; double f = fun(x, y);
- if (f >= 0) CPts.push_back(Point(x, y, f));
- }});
- Time1 = (clock() - Time1) / CLOCKS_PER_SEC;
- std::cout << "(Вектор, Парал. реализация) Вычисления завершены. Размер контейнера: " <<
- CPts.size() << std::endl
- << "Время : " << Time1 << " сек." << std::endl;
- CPts.clear();
- double k = Time / Time1;
- std::cout << "Ускорение: " << k << "\n";
- std::queue<Point> Pts_queue;
- h = 2.0 * M_PI / N1;
- Time = clock();
- for (int k = 0; k < N1; k++)
- for (int j = 0; j < N1; j++) {
- double x = h * k; double y = h * j; double f = fun(x, y);
- if (f >= 0)
- Pts_queue.push(Point(x, y, f));
- }
- Time = (clock() - Time) / CLOCKS_PER_SEC;
- std::cout << "(Очередь, Посл. реализация) Вычисления завершены. Размер контейнера: "
- << Pts_queue.size() << std::endl << "Время : " << Time << " сек." << std::endl;
- concurrency::concurrent_queue<Point> CPts_queue;
- Time1 = clock();
- concurrency::parallel_for(0, N1,
- [&CPts_queue, h](int k) {
- for (int j = 0; j < N1; j++) {
- double x = h * k;
- double y = h * j;
- double f = fun(x, y);
- if (f >= 0)
- CPts_queue.push(Point(x, y, f));
- }});
- Time1 = (clock() - Time1) / CLOCKS_PER_SEC;
- std::cout << "(Очерель, Парал. реализация) Вычисления завершены. Размер контейнера: " <<
- CPts_queue.unsafe_size() << std::endl << "Время : " << Time1 << " сек." << std::endl;
- k = Time / Time1;
- std::cout << "Ускорение: " << k << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement