// Solve linear system with jacobi method void jacobi(int iter) { init_local_pres(); distribute_diverg(); // // Jacobi iterations for (int k = 0; k < iter; k++) { jacobi_iteration(); exchange_borders(); // Rearrange the pointers after each iteration float *temp_ptr = local_pres0; local_pres0 = local_pres; local_pres = temp_ptr; } gather_pres(); }
int main(int argc, char** argv){ timestamp_type time1, time2; if (argc != 3) { printf("USAGE: ./jacobi-omp.o <Number of points (N)> <Num Iter>\n"); abort(); } int N = atoi(argv[1]); int numIter = atoi(argv[2]); double* u_k = (double*) malloc(N*sizeof(double)); get_timestamp(&time1); //Initialize u_k int i; for (i=0; i<N; i++) { u_k[i] = 0.0; } int nthreads; #pragma omp parallel { nthreads = omp_get_num_threads(); int tid = omp_get_thread_num(); printf("(%d) starting jacobi iteration. \n", tid); #pragma omp barrier jacobi_iteration(u_k, N, nthreads, numIter); } get_timestamp(&time2); double elapsed = timestamp_diff_in_seconds(time1,time2); printf("Time elapsed is %f seconds.\n", elapsed); // print_solution(u_k, N); free(u_k); }