An Introduction to MPI Parallel Programming with the Message Passing Interface Prof S. Ramachandram.

Slides:



Advertisements
Similar presentations
1 An Introduction to MPI Parallel Programming with the Message Passing Interface William Gropp Ewing Lusk Argonne National Laboratory.
Advertisements

MPI Message Passing Interface
Tutorial on MPI Experimental Environment for ECE5610/CSC
MPI Fundamentals—A Quick Overview Shantanu Dutt ECE Dept., UIC.
Introduction MPI Mengxia Zhu Fall An Introduction to MPI Parallel Programming with the Message Passing Interface.
Introduction to MPI. What is Message Passing Interface (MPI)?  Portable standard for communication  Processes can communicate through messages.  Each.
A Message Passing Standard for MPP and Workstations Communications of the ACM, July 1996 J.J. Dongarra, S.W. Otto, M. Snir, and D.W. Walker.
CS 240A: Models of parallel programming: Distributed memory and MPI.
Message-Passing Programming and MPI CS 524 – High-Performance Computing.
Distributed Memory Programming with MPI. What is MPI? Message Passing Interface (MPI) is an industry standard message passing system designed to be both.
S an D IEGO S UPERCOMPUTER C ENTER N ATIONAL P ARTNERSHIP FOR A DVANCED C OMPUTATIONAL I NFRASTRUCTURE Message Passing Interface (MPI) Part I NPACI Parallel.
1 Message Passing Programming (MPI). 2 What is MPI? A message-passing library specification extended message-passing model not a language or compiler.
EECC756 - Shaaban #1 lec # 7 Spring Message Passing Interface (MPI) MPI, the Message Passing Interface, is a library, and a software standard.
1 Tuesday, October 10, 2006 To err is human, and to blame it on a computer is even more so. -Robert Orben.
Parallel Programming Using Basic MPI Presented by Timothy H. Kaiser, Ph.D. San Diego Supercomputer Center Presented by Timothy H. Kaiser, Ph.D. San Diego.
1 An Introduction to MPI Parallel Programming with the Message Passing Interface Originally by William Gropp and Ewing Lusk Adapted by Anda Iamnitchi.
1 An Introduction to MPI Parallel Programming with the Message Passing Interface William Gropp Ewing Lusk Argonne National Laboratory Presenter: Mike Slavik.
Lecture 11 –Parallelism on Supercomputers Parallelism on Supercomputers and the Message Passing Interface (MPI) Parallel Computing CIS 410/510 Department.
CS6235 L17: Design Review and 6-Function MPI. L17: DRs and MPI 2 CS6235 Administrative Organick Lecture: TONIGHT -David Shaw, “Watching Proteins Dance:
1 Copyright © 2010, Elsevier Inc. All rights Reserved Chapter 3 Distributed Memory Programming with MPI An Introduction to Parallel Programming Peter Pacheco.
2.1 Message-Passing Computing ITCS 4/5145 Parallel Computing, UNC-Charlotte, B. Wilkinson, Jan 17, 2012.
1 CSC 591C Lecture 2 Message Passing Using MPI (Foster Chapter 8)
1 MPI: Message-Passing Interface Chapter 2. 2 MPI - (Message Passing Interface) Message passing library standard (MPI) is developed by group of academics.
Part I MPI from scratch. Part I By: Camilo A. SilvaBIOinformatics Summer 2008 PIRE :: REU :: Cyberbridges.
Parallel Computing A task is broken down into tasks, performed by separate workers or processes Processes interact by exchanging information What do we.
CS 484. Message Passing Based on multi-processor Set of independent processors Connected via some communication net All communication between processes.
Parallel Programming with MPI Prof. Sivarama Dandamudi School of Computer Science Carleton University.
Message Passing Programming with MPI Introduction to MPI Basic MPI functions Most of the MPI materials are obtained from William Gropp and Rusty Lusk’s.
CS 838: Pervasive Parallelism Introduction to MPI Copyright 2005 Mark D. Hill University of Wisconsin-Madison Slides are derived from an online tutorial.
Message Passing Programming Model AMANO, Hideharu Textbook pp. 140-147.
Summary of MPI commands Luis Basurto. Large scale systems Shared Memory systems – Memory is shared among processors Distributed memory systems – Each.
Message Passing Interface (MPI) 1 Amit Majumdar Scientific Computing Applications Group San Diego Supercomputer Center Tim Kaiser (now at Colorado School.
MPI Introduction to MPI Commands. Basics – Send and Receive MPI is a message passing environment. The processors’ method of sharing information is NOT.
1 The Message-Passing Model l A process is (traditionally) a program counter and address space. l Processes may have multiple threads (program counters.
Distributed-Memory (Message-Passing) Paradigm FDI 2004 Track M Day 2 – Morning Session #1 C. J. Ribbens.
Parallel Programming with MPI By, Santosh K Jena..
Slides for Parallel Programming Techniques & Applications Using Networked Workstations & Parallel Computers 2nd Edition, by B. Wilkinson & M. Allen, ©
CSCI-455/522 Introduction to High Performance Computing Lecture 4.
1 Message Passing Models CEG 4131 Computer Architecture III Miodrag Bolic.
Chapter 4 Message-Passing Programming. The Message-Passing Model.
CS4230 CS4230 Parallel Programming Lecture 13: Introduction to Message Passing Mary Hall October 23, /23/2012.
1 Introduction to Parallel Programming with Single and Multiple GPUs Frank Mueller
Introduction to MPI Nischint Rajmohan 5 November 2007.
Programming distributed memory systems: Message Passing Interface (MPI) Distributed memory systems: multiple processing units working on one task (e.g.
1 PDS Lectures 6 & 7 An Introduction to MPI Originally by William Gropp and Ewing Lusk Argonne National Laboratory Adapted by Anda Iamnitchi.
CSE 160 – Lecture 16 MPI Concepts, Topology and Synchronization.
3/12/2013Computer Engg, IIT(BHU)1 MPI-1. MESSAGE PASSING INTERFACE A message passing library specification Extended message-passing model Not a language.
Message Passing Interface Using resources from
1 Advanced MPI William D. Gropp Rusty Lusk and Rajeev Thakur Mathematics and Computer Science Division Argonne National Laboratory.
MPI-Message Passing Interface. What is MPI?  MPI is a specification for the developers and users of message passing libraries. By itself, it is NOT a.
Lecture 3 Point-to-Point Communications Dr. Muhammad Hanif Durad Department of Computer and Information Sciences Pakistan Institute Engineering and Applied.
MPI: Message Passing Interface An Introduction S. Lakshmivarahan School of Computer Science.
Outline Background Basics of MPI message passing
Introduction to parallel computing concepts and technics
Introduction to MPI.
MPI Message Passing Interface
CS4961 Parallel Programming Lecture 18: Introduction to Message Passing Mary Hall November 2, /02/2010 CS4961.
CS 584.
CS4961 Parallel Programming Lecture 16: Introduction to Message Passing Mary Hall November 3, /03/2011 CS4961.
MPI-Message Passing Interface
Lecture 14: Inter-process Communication
MPI: Message Passing Interface
Introduction to parallelism and the Message Passing Interface
Hardware Environment VIA cluster - 8 nodes Blade Server – 5 nodes
Spring’19 Recitation: Introduction to MPI
Distributed Memory Programming with Message-Passing
MPI Message Passing Interface
CS 584 Lecture 8 Assignment?.
Programming Parallel Computers
Presentation transcript:

An Introduction to MPI Parallel Programming with the Message Passing Interface Prof S. Ramachandram

Outline 1.Motivation 2.Software Environments 3.Flynn’s taxonomy 4.Types of Parallel Computing Models 5.Types of Memory Organization 6.Cooperative Operations for Communication 7.MPI basics

Motivation  Large models require a lot of CPU time  Examples:  Large state space  High number of agents 3.Structural estimations 4. Large scale simulations

Motivation  Remedies: Work harder -Use a fast computer (e.g. Pentium Xeon 4GHz) Work smarter- use faster algorithms Take help-use cluster/grid/cloud computing  Require software environment for parallel programming

Software Environments  There are three major software environments which are used for parallel programming:  MPI (Message Passing Interface)  OpenMP  PVM (Parallel Virtual Machine)  Used as an additional library to a computing language:  Typically used with Fortran or C  Also used with Java, MATLAB, R (less popular)

Flynn ’ s Taxonomy

Types of Parallel Computing Models  Data Parallel - the same instructions are carried out simultaneously on multiple data items (SIMD)  Task Parallel - different instructions on different data (MIMD)  SPMD (single program, multiple data) not synchronized at individual operation level  SPMD is equivalent to MIMD since each MIMD program can be made SPMD (similarly for SIMD, but not in practical sense.) Message passing (and MPI) is for MIMD/SPMD parallelism.

Types of Memory Organization Distributed Memory Shared Memory Distributed Shared Memory

Distributed Memory

Shared Memory (HP Super Dome)

Distributed Shared Memory

Type of Memory-Implications  Shared Memory: Nodes share the same memory space Variables have same value in all nodes (e.g. dual core processor)  Distributed Memory: Nodes have independent memory space Variables have different values in different nodes (e.g. computers connected by ethernet)

Cooperative Operations for Communication  The message-passing approach makes the exchange of data cooperative.  Data is explicitly sent by one process and received by another.  An advantage is that any change in the receiving process’s memory is made with the receiver’s explicit participation.  Communication and synchronization are combined. Process 0 Process 1 Send(data) Receive(data)

One-Sided Operations for Communication  One-sided operations between processes include remote memory reads and writes  Only one process needs to explicitly participate.  An advantage is that communication and synchronization are decoupled  One-sided operations are part of MPI-2. Process 0 Process 1 Put(data) (memory) Get(data)

What is MPI?  A message-passing library specification extended message-passing model not a language or compiler specification not a specific implementation or product  For parallel computers, clusters, and heterogeneous networks  Full-featured  Designed to provide access to advanced parallel hardware for end users library writers tool developers

Why Use MPI?  MPI provides a powerful, efficient, and portable way to express parallel programs  MPI was explicitly designed to enable libraries…  … which may eliminate the need for many users to learn (much of) MPI

A Minimal MPI Program (C) #include "mpi.h" #include int main( int argc, char *argv[] ) { MPI_Init( &argc, &argv ); printf( "Hello, world!\n" ); MPI_Finalize(); return 0; }

A Minimal MPI Program (Fortran) program main use MPI integer ierr call MPI_INIT( ierr ) print *, 'Hello, world!' call MPI_FINALIZE( ierr ) end

MPI Library  MPI Library: Designed for distributed-memory environment Routines enable different nodes to send and receive data each other Have to write exactly what each node does  Scalability: Code doesn’t depend on the number of nodes Speed usually increases as the number of nodes increases  Portability: Very standardized MPI code can be used on any cluster (with MPI installed)

Philosophy of // programming  You only write one code, and this code runs simultaneously in all the nodes (i.e. processors)  In the code: Each node is assigned an id = 0, 1, …, Nproc–1 Explicitly tell which node does which job Assign jobs to different nodes by referring to id  MPI is a distributed-memory environment: Remember what data each node owns Tell the nodes to transfer data among them

Notes on C and Fortran  C and Fortran bindings correspond closely  In C: mpi.h must be #included MPI functions return error codes or MPI_SUCCESS  In Fortran: mpif.h must be included, or use MPI module (MPI-2) All MPI calls are to subroutines, with a place for the return code in the last argument.  C++ bindings, and Fortran-90 issues, are part of MPI-2.

Error Handling  By default, an error causes all processes to abort.  The user can cause routines to return (with an error code) instead. In C++, exceptions are thrown (MPI-2)  A user can also write and install custom error handlers.  Libraries might want to handle errors differently from applications.

Running MPI Programs  The MPI-1 Standard does not specify how to run an MPI program, just as the Fortran standard does not specify how to run a Fortran program.  In general, starting an MPI program is dependent on the implementation of MPI you are using, and might require various scripts, program arguments, and/or environment variables.  mpiexec is part of MPI-2, as a recommendation, but not a requirement You can use mpiexec for MPICH and mpirun for SGI’s MPI in this class

Finding Out About the Environment  Two important questions that arise early in a parallel program are: How many processes are participating in this computation? Which one am I?  MPI provides functions to answer these questions: MPI_Comm_size reports the number of processes. MPI_Comm_rank reports the rank, a number between 0 and size-1, identifying the calling process

Better Hello (C) #include "mpi.h" #include int main( int argc, char *argv[] ) { int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); printf( "I am %d of %d\n", rank, size ); MPI_Finalize(); return 0; }

MPI Tags  Messages are sent with an accompanying user-defined integer tag, to assist the receiving process in identifying the message.  Messages can be screened at the receiving end by specifying a specific tag, or not screened by specifying MPI_ANY_TAG as the tag in a receive.  Some non-MPI message-passing systems have called tags “message types”. MPI calls them tags to avoid confusion with datatypes.

MPI Basic (Blocking) Send MPI_SEND (start, count, datatype, dest, tag, comm)  The message buffer is described by ( start, count, datatype ).  The target process is specified by dest, which is the rank of the target process in the communicator specified by comm.  When this function returns, the data has been delivered to the system and the buffer can be reused. The message may not have been received by the target process.

MPI Basic (Blocking) Receive MPI_RECV(start, count, datatype, source, tag, comm, status)  Waits until a matching (on source and tag ) message is received from the system, and the buffer can be used.  source is rank in communicator specified by comm, or MPI_ANY_SOURCE.  status contains further information  Receiving fewer than count occurrences of datatype is OK, but receiving more is an error.

Retrieving Further Information  Status is a data structure allocated in the user’s program.  In C: int recvd_tag, recvd_from, recvd_count; MPI_Status status; MPI_Recv(..., MPI_ANY_SOURCE, MPI_ANY_TAG,..., &status ) recvd_tag = status.MPI_TAG; recvd_from = status.MPI_SOURCE; MPI_Get_count( &status, datatype, &recvd_count );  In Fortran: integer recvd_tag, recvd_from, recvd_count integer status(MPI_STATUS_SIZE) call MPI_RECV(..., MPI_ANY_SOURCE, MPI_ANY_TAG,.. status, ierr) tag_recvd = status(MPI_TAG) recvd_from = status(MPI_SOURCE) call MPI_GET_COUNT(status, datatype, recvd_count, ierr)

Simple Fortran Example - 1 program main use MPI integer rank, size, to, from, tag, count, i, ierr integer src, dest integer st_source, st_tag, st_count integer status(MPI_STATUS_SIZE) double precision data(10) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, rank, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, size, ierr ) print *, 'Process ', rank, ' of ', size, ' is alive' dest = size - 1 src = 0

Simple Fortran Example - 2 if (rank.eq. 0) then do 10, i=1, 10 data(i) = i 10 continue call MPI_SEND( data, 10, MPI_DOUBLE_PRECISION, + dest, 2001, MPI_COMM_WORLD, ierr) else if (rank.eq. dest) then tag = MPI_ANY_TAG source = MPI_ANY_SOURCE call MPI_RECV( data, 10, MPI_DOUBLE_PRECISION, + source, tag, MPI_COMM_WORLD, + status, ierr)

Simple Fortran Example - 3 call MPI_GET_COUNT( status, MPI_DOUBLE_PRECISION, st_count, ierr ) st_source = status( MPI_SOURCE ) st_tag = status( MPI_TAG ) print *, 'status info: source = ', st_source, + ' tag = ', st_tag, 'count = ', st_count endif call MPI_FINALIZE( ierr ) end

Why Datatypes?  Since all data is labeled by type, an MPI implementation can support communication between processes on machines with very different memory representations and lengths of elementary datatypes (heterogeneous communication).  Specifying application-oriented layout of data in memory reduces memory-to-memory copies in the implementation allows the use of special hardware (scatter/gather) when available

Tags and Contexts  Separation of messages used to be accomplished by use of tags, but this requires libraries to be aware of tags used by other libraries. this can be defeated by use of “wild card” tags.  Contexts are different from tags no wild cards allowed allocated dynamically by the system when a library sets up a communicator for its own use.  User-defined tags still provided in MPI for user convenience in organizing application  Use MPI_Comm_split to create new communicators

MPI is Simple  Many parallel programs can be written using just these six functions, only two of which are non-trivial: MPI_INIT MPI_FINALIZE MPI_COMM_SIZE MPI_COMM_RANK MPI_SEND MPI_RECV  Point-to-point (send/recv) isn’t the only way...

Introduction to Collective Operations in MPI  Collective operations are called by all processes in a communicator.  MPI_BCAST distributes data from one process (the root) to all others in a communicator.  MPI_REDUCE combines data from all processes in communicator and returns it to one process.  In many numerical algorithms, SEND/RECEIVE can be replaced by BCAST/REDUCE, improving both simplicity and efficiency.

Example: PI in Fortran - 1 program main use MPI double precision PI25DT parameter (PI25DT = d0) double precision mypi, pi, h, sum, x, f, a integer n, myid, numprocs, i, ierr c function to integrate f(a) = 4.d0 / (1.d0 + a*a) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) 10 if ( myid.eq. 0 ) then write(6,98) 98 format('Enter the number of intervals: (0 quits)') read(5,99) n 99 format(i10) endif

Example: PI in Fortran - 2 call MPI_BCAST( n, 1, MPI_INTEGER, 0, + MPI_COMM_WORLD, ierr) c check for quit signal if ( n.le. 0 ) goto 30 c calculate the interval size h = 1.0d0/n sum = 0.0d0 do 20 i = myid+1, n, numprocs x = h * (dble(i) - 0.5d0) sum = sum + f(x) 20 continue mypi = h * sum c collect all the partial sums call MPI_REDUCE( mypi, pi, 1, MPI_DOUBLE_PRECISION, + MPI_SUM, 0, MPI_COMM_WORLD,ierr)

Example: PI in Fortran - 3 c node 0 prints the answer if (myid.eq. 0) then write(6, 97) pi, abs(pi - PI25DT) 97 format(' pi is approximately: ', F18.16, + ' Error is: ', F18.16) endif goto call MPI_FINALIZE(ierr) end

Example: PI in C -1 #include "mpi.h" #include int main(int argc, char *argv[]) { int done = 0, n, myid, numprocs, i, rc; double PI25DT = ; double mypi, pi, h, sum, x, a; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); while (!done) { if (myid == 0) { printf("Enter the number of intervals: (0 quits) "); scanf("%d",&n); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) break;

Example: PI in C - 2 h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h * ((double)i - 0.5); sum += 4.0 / (1.0 + x*x); } mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT)); } MPI_Finalize(); return 0; }

Alternative set of 6 Functions for Simplified MPI MPI_INIT MPI_FINALIZE MPI_COMM_SIZE MPI_COMM_RANK MPI_BCAST MPI_REDUCE  What else is needed (and why)?

Toward a Portable MPI Environment  MPICH is a high-performance portable implementation of MPI (1).  It runs on MPP's, clusters, and heterogeneous networks of workstations.  In a wide variety of environments, one can do: configure make mpicc -mpitrace myprog.c mpirun -np 10 myprog upshot myprog.log to build, compile, run, and analyze performance.

Extending the Message-Passing Interface  Dynamic Process Management Dynamic process startup Dynamic establishment of connections  One-sided communication Put/get Other operations  Parallel I/O  Other MPI-2 features Generalized requests Bindings for C++/ Fortran-90; interlanguage issues

When to use MPI  Portability and Performance  Irregular Data Structures  Building Tools for Others Libraries  Need to Manage memory on a per processor basis

When not to use MPI  Regular computation matches HPF But see PETSc/HPF comparison (ICASE 97-72)ICASE  Solution (e.g., library) already exists  Require Fault Tolerance Sockets  Distributed Computing CORBA, DCOM, etc.

Summary  The parallel computing community has cooperated on the development of a standard for message-passing libraries.  There are many implementations, on nearly all platforms.  MPI subsets are easy to learn and use.  Lots of MPI material is available.

MPI Sources  The Standard itself: at All MPI official releases, in both postscript and HTML  Books: Using MPI: Portable Parallel Programming with the Message- Passing Interface, by Gropp, Lusk, and Skjellum, MIT Press, MPI: The Complete Reference, by Snir, Otto, Huss-Lederman, Walker, and Dongarra, MIT Press, Designing and Building Parallel Programs, by Ian Foster, Addison- Wesley, Parallel Programming with MPI, by Peter Pacheco, Morgan- Kaufmann, MPI: The Complete Reference Vol 1 and 2,MIT Press, 1998(Fall).  Other information on Web: at pointers to lots of stuff, including other talks and tutorials, a FAQ, other MPI pages