/*-------------------------------------------------------------------*/ int main(int argc, char **argv) { double* local_A; double* local_B; double* local_C; int m, local_m, n, local_n; int my_rank, comm_sz; MPI_Comm comm; double start, finish, loc_elapsed, elapsed; MPI_Init(&argc, &argv); comm = MPI_COMM_WORLD; MPI_Comm_size(comm, &comm_sz); MPI_Comm_rank(comm, &my_rank); n=atoi(argv[1]); m=n; local_m = m/comm_sz; local_n = n/comm_sz; /*Get_dims(&m, &local_m, &n, &local_n, my_rank, comm_sz, comm);*/ Allocate_arrays(&local_A, &local_B, &local_C, local_m, n, local_n, comm); // Read_matrix("A", local_A, m, local_m, n, my_rank, comm); srandom(my_rank); Generate_matrix(local_A, local_m, n); Generate_matrix(local_B, local_m, n); # ifdef DEBUG Print_matrix("A", local_A, m, local_m, n, my_rank, comm); Print_matrix("B", local_B, m, local_m, n, my_rank, comm); # endif // Read_vector("x", local_x, n, local_n, my_rank, comm); /*Generate_vector(local_x, local_n);*/ # ifdef DEBUG /*Print_vector("x", local_x, n, local_n, my_rank, comm);*/ # endif MPI_Barrier(comm); for(i = 0; i < 100; i++) { start = MPI_Wtime(); Mat_vect_mult(local_A, local_B, local_C, local_m, n, local_n, comm); finish = MPI_Wtime(); loc_elapsed = finish-start; MPI_Reduce(&loc_elapsed, &elapsed, 1, MPI_DOUBLE, MPI_MAX, 0, comm); if (my_rank == 0) printf("Elapsed time = %e\n", elapsed); } # ifdef DEBUG Print_matrix("C", local_C, m, local_m, n, my_rank, comm); # endif free(local_A); free(local_B); free(local_C); MPI_Finalize(); return 0; } /* main */
/*-------------------------------------------------------------------*/ int main(void) { double* local_A; double* local_x; double* local_y; int m, local_m, n, local_n; int my_rank, comm_sz; MPI_Comm comm; double start, finish, loc_elapsed, elapsed; MPI_Init(NULL, NULL); comm = MPI_COMM_WORLD; MPI_Comm_size(comm, &comm_sz); MPI_Comm_rank(comm, &my_rank); Get_dims(&m, &local_m, &n, &local_n, my_rank, comm_sz, comm); Allocate_arrays(&local_A, &local_x, &local_y, local_m, n, local_n, comm); // Read_matrix("A", local_A, m, local_m, n, my_rank, comm); srandom(my_rank); Generate_matrix(local_A, local_m, n); # ifdef DEBUG Print_matrix("A", local_A, m, local_m, n, my_rank, comm); # endif // Read_vector("x", local_x, n, local_n, my_rank, comm); Generate_vector(local_x, local_n); # ifdef DEBUG Print_vector("x", local_x, n, local_n, my_rank, comm); # endif MPI_Barrier(comm); start = MPI_Wtime(); Mat_vect_mult(local_A, local_x, local_y, local_m, n, local_n, comm); finish = MPI_Wtime(); loc_elapsed = finish-start; MPI_Reduce(&loc_elapsed, &elapsed, 1, MPI_DOUBLE, MPI_MAX, 0, comm); # ifdef DEBUG Print_vector("y", local_y, m, local_m, my_rank, comm); # endif if (my_rank == 0) printf("Elapsed time = %e\n", elapsed); free(local_A); free(local_x); free(local_y); MPI_Finalize(); return 0; } /* main */