>

COSC330/530 Parallel and Distributed Computing

Lecture 17 - Matrix Multiplication using Fox's Algorithm

Dr. Mitchell Welch


Reading


Summary


Matrix Revision


Matrix Revision


center-aligned image


Matrix Revision


center-aligned image


Matrix Revision


center-aligned image
center-aligned image


Matrix Revision


center-aligned image

where


center-aligned image


Matrix Revision


center-aligned image


Matrix Revision


center-aligned image


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


Matrix Multiplication on a Torus


alt text
alt text


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


alt text


Matrix Multiplication on a Torus


alt text


The Torus MPI Implementation


The Torus MPI Implementation


The Torus MPI Implementation


The Torus MPI Implementation


The Torus MPI Implementation


The Torus MPI Implementation

To create our grid communicator we execute:

  MPI_Comm grid;                    //The resulting Communicator
  int dim = 2;                      //The number of Dimensions
  int dims[dim] = { m , m };        //The size of each Dimension
  int wrap[dim] = { 1 , 1};         //Wraparound?
  int optimize = 1;                 //Optimize?

  MPI_Cart_create(MPI_COMM_WORLD, dim, dims, wrap, optimize, &grid);


The Torus MPI Implementation


int grid_rank; MPI_Comm_rank(grid, &grid_rank);

// dim == 2 int coords[dim]; MPI_Cart_coords(grid, grid_rank, dim, coords);

The Torus MPI Implementation


// dim == 2 MPI_Comm row; int direction[dim] = { 0, 1 }; MPI_Cart_sub(grid, direction, &row);

// dim == 2 MPI_Comm col; int direction[dim] = { 1, 0 }; MPI_Cart_sub(grid, direction, &col);

The Torus MPI Implementation


Summary


Reading