Ejemplo n.º 1
0
// 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();
}
Ejemplo n.º 2
0
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);
}