/*-------------------------------------------------------------------*/ int main(void) { double* A = NULL; double* x = NULL; double* y = NULL; int m, n; Get_dims(&m, &n); A = malloc(m*n*sizeof(double)); x = malloc(n*sizeof(double)); y = malloc(m*sizeof(double)); if (A == NULL || x == NULL || y == NULL) { fprintf(stderr, "Can't allocate storage\n"); exit(-1); } Read_matrix("A", A, m, n); # ifdef DEBUG Print_matrix("A", A, m, n); # endif Read_vector("x", x, n); # ifdef DEBUG Print_vector("x", x, n); # endif Mat_vect_mult(A, x, y, m, n); Print_vector("y", y, m); free(A); free(x); free(y); return 0; } /* main */
/*-------------------------------------------------------------------*/ 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(int argc, char *argv[]) { double* A = NULL; double* x = NULL; double* y = NULL; long long int size; int m, n; n= atoi(argv[1]); m= n; size=m*n*sizeof(double); A = malloc(size); x = malloc(n*sizeof(double)); y = malloc(m*sizeof(double)); Read_matrix("A", A, m, n); Read_vector("x", x, n); gettimeofday(&start_time, NULL); Mat_vect_mult(A, x, y, m, n); gettimeofday(&end_time, NULL); print_times(); free(A); free(x); free(y); 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 */