diff --git a/A1/integral b/A1/integral index c4049dd..72036b2 100755 Binary files a/A1/integral and b/A1/integral differ diff --git a/A1/integral.c b/A1/integral.c index 7c3e962..4aa8ea2 100755 --- a/A1/integral.c +++ b/A1/integral.c @@ -1,67 +1,73 @@ /* ============================================================================ Filename : integral.c Author : Your names goes here SCIPER : Your SCIPER numbers ============================================================================ */ #include #include #include "utility.h" #include "function.c" double integrate (int num_threads, int samples, int a, int b, double (*f)(double)); int main (int argc, const char *argv[]) { int num_threads, num_samples, a, b; double integral; if (argc != 5) { printf("Invalid input! Usage: ./integral \n"); return 1; } else { num_threads = atoi(argv[1]); num_samples = atoi(argv[2]); a = atoi(argv[3]); b = atoi(argv[4]); } set_clock(); /* You can use your self-defined funtions by replacing identity_f. */ integral = integrate (num_threads, num_samples, a, b, identity_f); printf("- Using %d threads: integral on [%d,%d] = %.15g computed in %.4gs.\n", num_threads, a, b, integral, elapsed_time()); return 0; } double integrate (int num_threads, int samples, int a, int b, double (*f)(double)) { double integral; /* Your code goes here */ omp_set_num_threads(num_threads); + double * integrals = malloc(sizeof(double) * num_threads); + int tid; - integral = 0; - #pragma omp parallel private(tid) shared(integral, num_threads) + #pragma omp parallel private(tid) shared(num_threads) { tid = omp_get_thread_num(); rand_gen gen = init_rand(); + integrals[tid] = 0; + for(int i = tid; i