Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <time.h>
- #include <conio.h>
- #include <omp.h>
- long long num_steps = 1000000000;
- double step;
- void rozwiazanie_z_tablica() {
- clock_t start, stop;
- double pi, sum;
- int i;
- step = 1./(double)num_steps;
- start = clock();
- #pragma omp parallel
- {
- double x = 0;
- volatile double tab[100];
- int id = omp_get_thread_num();
- #pragma omp for
- for (i=0; i<num_steps; i++)
- {
- x = (i + .5)*step;
- tab[id] += 4.0/(1.+ x*x);
- }
- #pragma omp atomic
- sum += tab[id];
- }
- pi = sum*step;
- stop = clock();
- printf("\nROZWIAZANIE ZE ZMIENNA LOKALNA: \n");
- printf("Wartosc liczby PI wynosi %15.12f\n",pi);
- printf("Czas przetwarzania wynosi %f sekund\n",((double)(stop - start)/1000.0));
- }
- void rozwiazanie_ze_zmienna_lokalna() {
- clock_t start, stop;
- double pi, sum=0.0;
- int i;
- step = 1./(double)num_steps;
- start = clock();
- #pragma omp parallel
- {
- double x = 0, suml = 0.0;
- #pragma omp for
- for (i=0; i<num_steps; i++)
- {
- x = (i + .5)*step;
- suml += 4.0/(1.+ x*x);
- }
- #pragma omp atomic
- sum += suml;
- }
- pi = sum*step;
- stop = clock();
- printf("\nROZWIAZANIE ZE ZMIENNA LOKALNA: \n");
- printf("Wartosc liczby PI wynosi %15.12f\n",pi);
- printf("Czas przetwarzania wynosi %f sekund\n",((double)(stop - start)/1000.0));
- }
- void rozwiazanie_z_redukcja() {
- clock_t start, stop;
- double pi, sum=0.0;
- int i;
- step = 1./(double)num_steps;
- start = clock();
- #pragma omp parallel for reduction(+:sum)
- for (i=0; i<num_steps; i++)
- {
- double x = 0;
- x = (i + .5)*step;
- sum = sum + 4.0/(1.+ x*x);
- }
- pi = sum*step;
- stop = clock();
- printf("\nROZWIAZANIE Z REDUKCJA: \n");
- printf("Wartosc liczby PI wynosi %15.12f\n",pi);
- printf("Czas przetwarzania wynosi %f sekund\n",((double)(stop - start)/1000.0));
- }
- void rozwiazanie_z_atomic() {
- clock_t start, stop;
- double pi, sum=0.0;
- int i;
- step = 1./(double)num_steps;
- start = clock();
- #pragma omp parallel
- {
- double x = 0;
- for (i=0; i<num_steps; i++)
- {
- x = (i + .5)*step;
- #pragma omp atomic
- sum += sum + 4.0/(1.+ x*x);
- }
- }
- pi = sum*step;
- stop = clock();
- printf("\nROZWIAZANIE Z DYREKTYWA ATOMIC: \n");
- printf("Wartosc liczby PI wynosi %15.12f\n",pi);
- printf("Czas przetwarzania wynosi %f sekund\n",((double)(stop - start)/1000.0));
- }
- void rozwiazanie_sekwencyjne() {
- clock_t start, stop;
- double x=0, pi, sum=0.0;
- int i;
- step = 1./(double)num_steps;
- start = clock();
- for (i=0; i<num_steps; i++)
- {
- x = (i + .5)*step;
- sum = sum + 4.0/(1.+ x*x);
- }
- pi = sum*step;
- stop = clock();
- printf("ROZWIAZANIE SEKWENCYJNE: \n");
- printf("Wartosc liczby PI wynosi %15.12f\n",pi);
- printf("Czas przetwarzania wynosi %f sekund\n",((double)(stop - start)/1000.0));
- }
- int main(int argc, char* argv[])
- {
- //rozwiazanie_sekwencyjne();
- //rozwiazanie_z_atomic();
- //rozwiazanie_z_redukcja();
- //rozwiazanie_ze_zmienna_lokalna();
- rozwiazanie_z_tablica;
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement