#include #include #include long long num_steps = 10000000; double step; int main(int argc, char* argv[]) { clock_t start, stop; volatile double x; double pi, sum = 0.0, tab[50]; int i, j; step = 1. / (double)num_steps; omp_set_num_threads(4); for (j = 0; j < 39; j++) //do mierzenia czasu dostępu do pamięci i długości lini { sum = 0; start = clock(); #pragma omp parallel { int id = omp_get_thread_num(); tab[j+id] = 0; #pragma omp for schedule(dynamic, 10000) for (i = 0; i < num_steps; i++) { x = (i + .5)*step; tab[j+id] += 4.0 / (1. + x*x); } #pragma atomic sum += tab[j+id]; } pi = sum*step; stop = clock(); printf("Wartosc liczby PI wynosi %15.12f\n", pi); printf("Czas przetwarzania iteraccji %d wynosi %f sekund\n", j, ((double)(stop - start) / 1000.0)); } return 0; }