Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <omp.h>
- #include <vector>
- #include <cmath>
- using namespace std;
- const int N = 200000000;
- const double step = 1 / N;
- const double a = 0;
- const double b = 4 * 3.14159265359;
- double func(double x) {
- return sin(x);
- }
- double get_area(double left) {
- return (func(left + step) - func(left)) * step;
- }
- double get_integral(double a, double b, int points, int num_threads) {
- double integral = 0;
- #pragma omp parallel num_threads(num_threads) reduction(+:integral)
- {
- #pragma omp for
- for (long long j = 0; j < N; ++j)
- integral = get_area(a + (b - a) * j * 1. / N);
- }
- return integral;
- }
- double get_time(double start_time) {
- return omp_get_wtime() - start_time;
- }
- int main() {
- double integral = 0;
- cout << "Function f(x) = sin x, interval [0; 4*pi].\n\n";
- double time = 0;
- vector <double> diff(8);
- double start_time = omp_get_wtime();
- get_integral(a, b, N, 1);
- diff[0] = get_time(start_time);
- cout << 1 << " threads, integral = " << integral << ", time: " << get_time(start_time) <<
- ", speed up : " << diff[0] / get_time(start_time) << endl;
- for (int i = 2; i <= 8; ++i) {
- start_time = omp_get_wtime();
- integral = get_integral(a, b, N, i);
- cout << i << " threads, integral = " << integral << ", time: " << get_time(start_time) <<
- ", speed up : " << diff[0] / get_time(start_time) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement