Exemplo n.º 1
0
Arquivo: fox.c Projeto: The-coders/fox
int main(int argc, char *argv[]) {
    struct grid_info grid;

    MPI_Init(&argc, &argv);

    grid_setup(&grid);
    grid_info_print(&grid);

    /* lado de una submatriz */
    int n = 4;
    int local_n = n / grid.ppside;

    char A_filename[50], B_filename[50];
    sprintf(A_filename, "data_localn2_side2/A_localn2_row%d_col%d", grid.my_row, grid.my_col);
    sprintf(B_filename, "data_localn2_side2/B_localn2_row%d_col%d", grid.my_row, grid.my_col);

    matrix_type **local_A, **local_B, **local_C;
    local_A = matrix_new_from_file(local_n, local_n, A_filename);
    local_B = matrix_new_from_file(local_n, local_n, B_filename);
    local_C = matrix_new(local_n, local_n);

    Fox(&grid, local_n, local_A, local_B, local_C);

    printf("A%d%d =\n", grid.my_row, grid.my_col);
    matrix_print(stdout, local_A, local_n, local_n);
    printf("B%d%d =\n", grid.my_row, grid.my_col);
    matrix_print(stdout, local_B, local_n, local_n);
    printf("C%d%d =\n", grid.my_row, grid.my_col);
    matrix_print(stdout, local_C, local_n, local_n);

    MPI_Finalize();
    return 0;
}
Exemplo n.º 2
0
int main(int argc, char* argv[]) {
    int              p;
    int              my_rank;
    GRID_INFO_T      grid;
    LOCAL_MATRIX_T*  local_A;
    LOCAL_MATRIX_T*  local_B;
    LOCAL_MATRIX_T*  local_C;
    int              n;
    int              n_bar;
    double starttime, endtime;
    
    srand(time(NULL));
    starttime = MPI_Wtime();
    
    void Setup_grid(GRID_INFO_T*  grid);
    void Fox(int n, GRID_INFO_T* grid, LOCAL_MATRIX_T* local_A,
             LOCAL_MATRIX_T* local_B, LOCAL_MATRIX_T* local_C);
    
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
    
    
    /* Need to change the below. Want random matrices.*/
    Setup_grid(&grid);
    if (my_rank == 0) {
        //printf("What's the order of the matrices?\n");
        n = atoi(argv[1]);
    }
    
    MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
    n_bar = n/grid.q;
    
    local_A = Local_matrix_allocate(n_bar);
    Order(local_A) = n_bar;
    Read_matrix("Generating and distributing A...", local_A, &grid, n);
    Print_matrix("Matrix A:", local_A, &grid, n);
    
    local_B = Local_matrix_allocate(n_bar);
    Order(local_B) = n_bar;
    Read_matrix("Generating and distributing B...", local_B, &grid, n);
    Print_matrix("Matrix B:", local_B, &grid, n);
    
    
    Build_matrix_type(local_A);
    temp_mat = Local_matrix_allocate(n_bar);
    
    local_C = Local_matrix_allocate(n_bar);
    Order(local_C) = n_bar;
    Fox(n, &grid, local_A, local_B, local_C);
    
    endtime   = MPI_Wtime();
    
    Print_matrix("The product is", local_C, &grid, n);
    
    if(my_rank == 0)
        printf("The time it took was %f\n", endtime - starttime);
    
    
    Free_local_matrix(&local_A);
    Free_local_matrix(&local_B);
    Free_local_matrix(&local_C);
    
    MPI_Type_free(&local_matrix_mpi_t);
    
    MPI_Finalize();
    return 0;
}  /* main */