diff --git a/A1/pi b/A1/pi index b4c8f78..baa9022 100755 Binary files a/A1/pi and b/A1/pi differ diff --git a/A1/pi.c b/A1/pi.c index 87020ab..5fb10fc 100755 --- a/A1/pi.c +++ b/A1/pi.c @@ -1,81 +1,80 @@ /* ============================================================================ Filename : pi.c Author : Your names goes here SCIPER : Your SCIPER numbers ============================================================================ */ #include #include #include "utility.h" double calculate_pi (int num_threads, int samples); int main (int argc, const char *argv[]) { int num_threads, num_samples; double pi; if (argc != 3) { printf("Invalid input! Usage: ./pi \n"); return 1; } else { num_threads = atoi(argv[1]); num_samples = atoi(argv[2]); } set_clock(); pi = calculate_pi (num_threads, num_samples); printf("- Using %d threads: pi = %.15g computed in %.4gs.\n", num_threads, pi, elapsed_time()); return 0; } double calculate_pi (int num_threads, int samples) { double pi; /* Your code goes here */ omp_set_num_threads(num_threads); int * sums = malloc(sizeof(int) * num_threads); - - for (int i = 0; i < num_threads; ++i) - sums[i] = 0; int tid; //int shared_sample = samples / num_threads; #pragma omp parallel private(tid) shared(num_threads) { tid = omp_get_thread_num(); rand_gen gen = init_rand(); + + sums[tid] = 0; for(int i = tid; i< samples; i+=num_threads) { double x = next_rand(gen); double y = next_rand(gen); if (x*x + y*y <= 1) { //#pragma omp atomic //sum++; sums[tid]++; - printf("Inside: (%f, %f), ID: %d\n", x, y, tid); + //printf("Inside: (%f, %f), ID: %d\n", x, y, tid); } } } int sum = 0; for (int i = 0; i < num_threads; ++i) sum += sums[i]; free(sums); pi = 4.0*(double)sum/(double)samples; - printf("Total empiric sum: %d", sum); + //printf("Total empiric sum: %d", sum); return pi; }