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; }
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 */