Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <omp.h>
- #include <iostream>
- #include <time.h>
- #include <math.h>
- #define CORES 8
- using namespace std;
- double fun(double x) {
- return 1 / (1 + x * x);
- }
- double MonteCarlo(long long n){
- int inside = 0;
- double x = 0, y = 0;
- for(int i = 0; i < n; i++){
- x=double(rand())/double(RAND_MAX);
- y=double(rand())/double(RAND_MAX);
- if(x*x + y*y <= 1){
- inside++;
- }
- }
- return 4.0 * inside / n;
- }
- int main(int argc, char *argv[]) {
- //Zadanie 4 z równoległym ok 8 sec
- double sum = 0;
- double result[8];
- long long int n = 100000000;
- #pragma omp parallel
- {
- int k = omp_get_thread_num();
- srand(int(time(NULL)) ^ k);
- int inside = 0;
- double x = 0, y = 0;
- for (long i = k; i < n; i += CORES) {
- x = double(rand()) / double(RAND_MAX);
- y = double(rand()) / double(RAND_MAX);
- if (x * x + y * y <= 1) {
- inside++;
- }
- }
- result[k] = inside;
- }
- for (int i = 0; i < CORES; i++) {
- sum += result[i];
- }
- cout << "Result= " << (sum / n) * 4;
- //Zadanie 4 bez równoległego ok 40sec
- //cout<<MonteCarlo(100000000);
- // trzecia wersja ok 7 sec
- //
- // double suma = 0;
- //
- // double a = 0, b = 1;
- // double dx = 0.000000001;
- //
- // long n = (b - a) / dx;
- // double x = 0, w = 0;
- //
- //#pragma omp parallel for reduction(+:suma)
- // for(long i = 0; i < n; i++) {
- // x = a + i * dx;
- // suma += fun(x) * dx;
- // }
- //
- //
- // cout<<"Resutl= "<<suma*4;
- //druga wersja ok 2s
- // double result[8];
- //#pragma omp parallel
- // {
- // int k, threads;
- // k = omp_get_thread_num();
- // threads = omp_get_num_threads();
- //
- // double a = 0, b = 1;
- // double dx = 0.000000001;
- //
- // double n = (b - a) / dx;
- // double x = 0, w = 0;
- //
- // for (long i = k; i < n; i += CORES) {
- // x = a + i * dx;
- // w += fun(x) * dx;
- // }
- //
- // result[k] = w;
- //
- // }
- //
- //
- // double sum = 0.0;
- //
- // for (int i = 0; i < CORES; i++) {
- // sum += result[i];
- // }
- // cout << "Result= " << sum * 4;
- //Pierwsza wersja ok 17 sec
- //
- // double a = 0, b = 1;
- // double dx = 0.000000001;
- //
- // long n = (b - a) / dx;
- // double x = 0, w = 0;
- //
- // for(long i = 0; i < n; i++) {
- // x = a + i * dx;
- // w += fun(x) * dx;
- // }
- //
- // cout<<"Result: "<<w*4;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement