22
MPI and OpenMP Programming for Parallel Matrix Multiplication myson @ postech.ac.kr CSE700-PL @ POSTECH Programming Language Laboratory – p.1/22

MPI and OpenMP Programming for Parallel Matrix Multiplication

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MPI and OpenMP Programming for Parallel Matrix Multiplication

MPI and OpenMPProgramming

for Parallel Matrix Multiplication

myson @ postech.ac.kr

CSE700-PL @ POSTECH

Programming Language Laboratory – p.1/22

Page 2: MPI and OpenMP Programming for Parallel Matrix Multiplication

Outline

MPIBroadcasting

Data grouping

Topology (Grid)

OpenMPScheduling

Summary

Programming Language Laboratory – p.2/22

Page 3: MPI and OpenMP Programming for Parallel Matrix Multiplication

MPI

Programming Language Laboratory – p.3/22

Page 4: MPI and OpenMP Programming for Parallel Matrix Multiplication

Send and Recv

if (my_rank != 0){MPI_Recv (..., 0, ...);

}else{ /* my_rank == 0 */for (dest = 0; dest < n + 1; dest++)MPI_Send (..., dest, ...);

}

Programming Language Laboratory – p.4/22

Page 5: MPI and OpenMP Programming for Parallel Matrix Multiplication

Broadcasting

BCast(..., 0,...);

Programming Language Laboratory – p.5/22

Page 6: MPI and OpenMP Programming for Parallel Matrix Multiplication

Data Grouping

count parameter

Derived datatype

Pack/ Unpack

Programming Language Laboratory – p.6/22

Page 7: MPI and OpenMP Programming for Parallel Matrix Multiplication

Data Grouping - 1

count parameter

Programming Language Laboratory – p.7/22

Page 8: MPI and OpenMP Programming for Parallel Matrix Multiplication

Data Grouping - 1 (cont.)

count parameter (cont.)

ex) in the assignment1

float messages[3];

messages[0] = a;messages[1] = b;messages[2] = (float) n;...MPI_Send(messages, 3, MPI_FLOAT, . . .);

=⇒ Poor programming style!!!

Programming Language Laboratory – p.8/22

Page 9: MPI and OpenMP Programming for Parallel Matrix Multiplication

Data Grouping - 1 (cont.)

count parameter (cont.)

ex) in the assignment1

typedef struct{float a;float b;int n;

} INDATA_T

INDATA_T indata;...MPI_Send(indata, 1, INDATA_T???, . . .);

=⇒We need a new type for MPI!!!Programming Language Laboratory – p.9/22

Page 10: MPI and OpenMP Programming for Parallel Matrix Multiplication

Data Grouping - 2

Derived datatypeMPI_Type_structMPI_Type_struct(. . ., &new_mpi_t);

MPI_Type_commitMPI_Type_commit(&new_mpi_t);

ex)

MPI_Send(indata, 1, new_mpi_t, . . .);

Programming Language Laboratory – p.10/22

Page 11: MPI and OpenMP Programming for Parallel Matrix Multiplication

Data Grouping - 3

Pack/ Unpack

char buffer[100];int position = 0;

MPI_Pack (&a, 1, MPI_FLOAT, buffer, 100,&position, MPI_COMM_WORLD);

Programming Language Laboratory – p.11/22

Page 12: MPI and OpenMP Programming for Parallel Matrix Multiplication

Communicator and Group

Programming Language Laboratory – p.12/22

Page 13: MPI and OpenMP Programming for Parallel Matrix Multiplication

Topology

Graph

Cartesian (or Grid)

Programming Language Laboratory – p.13/22

Page 14: MPI and OpenMP Programming for Parallel Matrix Multiplication

Topology (cont.)

Creating a grid

MPI_Comm grid_comm;int coordinates[2];

MPI_Cart_create (MPI_COMM_WORLD, . . .,&grid_comm);

MPI_Comm_rank (grid_comm, &my_grid_rank);MPI_Cart_coords (grid_comm, my_grid_rank,

2, coordinate);

ex) The coordnate of P3 : (0, 0)

ex) The coordnate of P7 : (2, 1)

Programming Language Laboratory – p.14/22

Page 15: MPI and OpenMP Programming for Parallel Matrix Multiplication

Topology (cont.)

Partitioning a grid

...int free_coords[2];MPI_Comm row_comm;

free_coords[0] = 0;free_coords[1] = 1;

MPI_Cart_sub (grid_comm, free_coords,&row_comm);

Programming Language Laboratory – p.15/22

Page 16: MPI and OpenMP Programming for Parallel Matrix Multiplication

OpenMP

Programming Language Laboratory – p.16/22

Page 17: MPI and OpenMP Programming for Parallel Matrix Multiplication

Scheduling

Static

Dynamic

Guided

Runtime

int i, n;float z[n], a, x[n], y;

#pragma omp parallel forschedule(type [,chunk])private(i) shared(n, z, x, y, a)

for (i = 0; i < n; i++)z[i] = a * x[i] + y;

Programming Language Laboratory – p.17/22

Page 18: MPI and OpenMP Programming for Parallel Matrix Multiplication

Scheduling (cont.)

StaticSimple static - schedule(static)

The number of iterations : nThe number of processes : pThe size of each chunk = n / pIf n % p != 0, ...?

Interleaved - schedule(static, chunk)The size of each chunk = chunk

Programming Language Laboratory – p.18/22

Page 19: MPI and OpenMP Programming for Parallel Matrix Multiplication

Scheduling (cont.)

DynamicDefault chunk size : 1Similar to interleaved scheduling

GuidedThe size of each successive chunk decreasesexponentiallyDefault chunk size : 1

Programming Language Laboratory – p.19/22

Page 20: MPI and OpenMP Programming for Parallel Matrix Multiplication

Scheduling (cont.)

RuntimeNo chunk specificationBased on the environment variable

ex)

setenv OMP_SCHEDULE “dynamic, 3”

Programming Language Laboratory – p.20/22

Page 21: MPI and OpenMP Programming for Parallel Matrix Multiplication

Summary

MPIBroadcastingData groupingcount parameterDerived datatypePack/ unpack

Topology (Grid)

OpenMPScheduling

StaticDynamicGuidedRuntime

Programming Language Laboratory – p.21/22

Page 22: MPI and OpenMP Programming for Parallel Matrix Multiplication

End

Any Questions. . . ?Programming Language Laboratory – p.22/22