SlideShare a Scribd company logo
2a.1
Message-Passing Computing
More MPI routines:
Collective routines
Synchronous routines
Non-blocking routines
ITCS 4/5145 Parallel Computing, UNC-Charlotte, B. Wilkinson, 2009.
2a.2
Collective message-passing routines
Have routines that send message(s) to a group
of processes or receive message(s) from a
group of processes
Higher efficiency than separate point-to-point
routines although routines not absolutely
necessary.
2a.3
Collective Communication
Involves set of processes, defined by an intra-communicator.
Message tags not present. Principal collective operations:
• MPI_Bcast() - Broadcast from root to all other processes
• MPI_Gather() - Gather values for group of processes
• MPI_Scatter() - Scatters buffer in parts to group of processes
• MPI_Alltoall() - Sends data from all processes to all processes
• MPI_Reduce() - Combine values on all processes to single value
• MPI_Reduce_scatter() - Combine values and scatter results
• MPI_Scan()- Compute prefix reductions of data on processes
• MPI_Barrier() - A means of synchronizing processes by stopping
each one until they all have reached a specific “barrier” call.
MPI broadcast operation
2a.4
Sending same message to all processes in communicator.
Multicast - sending same message to defined group of
processes.
MPI_Bcast parameters
2a.5
Basic MPI scatter operation
2a.6
Sending each element of an array in root process to a
separate process. Contents of ith location of array sent to ith
process.
MPI scatter parameters
2a.7
• Simplest scatter would be as illustrated
which one element of an array is sent to
different processes.
• Extension provided in the MPI_Scatter()
routine is to send a fixed number of
contiguous elements to each process.
2a.8
Scattering contiguous groups of
elements to each process
2a.9
Example
In the following code, size of send buffer is given by 100 *
<number of processes> and 100 contiguous elements are
send to each process:
main (int argc, char *argv[]) {
int size, *sendbuf, recvbuf[100]; /* for each process */
MPI_Init(&argc, &argv); /* initialize MPI */
MPI_Comm_size(MPI_COMM_WORLD, &size);
sendbuf = (int *)malloc(size*100*sizeof(int));
.
MPI_Scatter(sendbuf,100,MPI_INT,recvbuf,100,MPI_INT,0,
MPI_COMM_WORLD);
.
MPI_Finalize(); /* terminate MPI */
}
2a.10
Gather
2.11
Having one process collect individual values
from set of processes.
Gather parameters
2a.12
2a.13
Gather Example
To gather items from group of processes into process 0, using
dynamically allocated memory in root process:
int data[10]; /*data to be gathered from
processes*/
MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */
if (myrank == 0) {
MPI_Comm_size(MPI_COMM_WORLD, &grp_size); /*find group
size*/
buf = (int *)malloc(grp_size*10*sizeof (int)); /*alloc.
mem*/
}
MPI_Gather(data,10,MPI_INT,buf,grp_size*10,MPI_INT,0,MPI_COMM_
WORLD) ;
…
MPI_Gather() gathers from all processes, including root.
2a.14
Reduce
Gather operation combined with specified arithmetic/logical
operation.
Example: Values could be gathered and then added together by
root:
Reduce parameters
2a.15
2a.16
Reduce - operations
MPI_Reduce(*sendbuf,*recvbuf,count,datatype,op,root,comm)
Parameters:
*sendbuf send buffer address
*recvbuf receive buffer address
count number of send buffer elements
datatype data type of send elements
op reduce operation.
Several operations, including
MPI_MAX Maximum
MPI_MIN Minimum
MPI_SUM Sum
MPI_PROD Product
root root process rank for result
comm communicator
2a.17
Sample MPI program with
collective routines
#include “mpi.h”
#include <stdio.h>
#include <math.h>
#define MAXSIZE 1000
void main(int argc, char *argv) {
int myid, numprocs, data[MAXSIZE], i, x, low, high, myresult, result;
char fn[255];
char *fp;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
if (myid == 0) { /* Open input file and initialize data */
strcpy(fn,getenv(“HOME”));
strcat(fn,”/MPI/rand_data.txt”);
if ((fp = fopen(fn,”r”)) == NULL) {
printf(“Can’t open the input file: %snn”, fn);
exit(1);
}
for(i = 0; i < MAXSIZE; i++) fscanf(fp,”%d”, &data[i]);
}
MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD); /* broadcast data */
x = n/nproc; /* Add my portion Of data */
low = myid * x;
high = low + x;
for(i = low; i < high; i++)
myresult += data[i];
printf(“I got %d from %dn”, myresult, myid); /* Compute global sum */
MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (myid == 0) printf(“The sum is %d.n”, result);
MPI_Finalize();
}
Collective routines
General features
• Performed on a group of processes, identified by a
communicator
• Substitute for a sequence of point-to-point calls
• Communications are locally blocking
• Synchronization is not guaranteed (implementation
dependent)
• Some routines use a root process to originate or receive all
data
• Data amounts must exactly match
• Many variations to basic categories
• No message tags are needed
2a.18
2a.19
Barrier
Block process until all processes have called it.
Synchronous operation.
MPI_Barrier(comm)
Communicator
2a.20
Synchronous Message Passing
Routines that return when message transfer completed.
Synchronous send routine
• Waits until complete message can be accepted by the
receiving process before sending the message.
In MPI, MPI_SSend() routine.
Synchronous receive routine
• Waits until the message it is expecting arrives.
In MPI, actually the regular MPI_recv() routine.
2a.21
Synchronous Message Passing
Synchronous message-passing routines intrinsically
perform two actions:
• They transfer data and
• They synchronize processes.
2a.22
Synchronous Ssend() and recv() using 3-way
protocol
Process 1 Process 2
Ssend();
recv();
Suspend
Time
process
Acknowledgment
MessageBoth processes
continue
(a) When send() occurs before recv()
Process 1 Process 2
recv();
Ssend();
Suspend
Time
process
Acknowledgment
MessageBoth processes
continue
(b) When recv() occurs before send()
Request to send
Request to send
2a.23
Parameters of synchronous send
(same as blocking send)
MPI_Ssend(buf, count, datatype, dest, tag, comm)
Address of
Number of items
Datatype of
Rank of destination
Message tag
Communicator
send buffer
to send
each item
process
2a.24
Asynchronous Message Passing
• Routines that do not wait for actions to complete before
returning. Usually require local storage for messages.
• More than one version depending upon the actual
semantics for returning.
• In general, they do not synchronize processes but allow
processes to move forward sooner.
• Must be used with care.
2a.25
MPI Definitions of Blocking and Non-
Blocking
• Blocking - return after their local actions complete, though
the message transfer may not have been completed.
Sometimes called locally blocking.
• Non-blocking - return immediately (asynchronous)
Non-blocking assumes that data storage used for transfer
not modified by subsequent statements prior to being
used for transfer, and it is left to the programmer to
ensure this.
Blocking/non-blocking terms may have different
interpretations in other systems.
2a.26
MPI Nonblocking Routines
• Non-blocking send - MPI_Isend() - will return
“immediately” even before source location is
safe to be altered.
• Non-blocking receive - MPI_Irecv() - will
return even if no message to accept.
2a.27
Nonblocking Routine Formats
MPI_Isend(buf,count,datatype,dest,tag,comm,request)
MPI_Irecv(buf,count,datatype,source,tag,comm, request)
Completion detected by MPI_Wait() and MPI_Test().
MPI_Wait() waits until operation completed and returns then.
MPI_Test() returns with flag set indicating whether operation completed
at that time.
Need to know whether particular operation completed.
Determined by accessing request parameter.
2a.28
Example
To send an integer x from process 0 to process 1
and allow process 0 to continue:
MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */
if (myrank == 0) {
int x;
MPI_Isend(&x,1,MPI_INT, 1, msgtag, MPI_COMM_WORLD, req1);
compute();
MPI_Wait(req1, status);
} else if (myrank == 1) {
int x;
MPI_Recv(&x,1,MPI_INT,0,msgtag, MPI_COMM_WORLD, status);
}
2a.29
How message-passing routines return
before message transfer completed
Process 1 Process 2
send();
recv();
Message buffer
Read
message buffer
Continue
process
Time
Message buffer needed between source and
destination to hold message:
2a.30
Asynchronous (blocking) routines
changing to synchronous routines
• Message buffers only of finite length
• A point could be reached when send routine held
up because all available buffer space exhausted.
• Then, send routine will wait until storage becomes
re-available - i.e. routine will behave as a
synchronous routine.
2a.31
Next topic
• Parallel Algorithms
Other MPI features will be introduced as we
need them.

More Related Content

What's hot (20)

PDF
MPI Tutorial
Dhanashree Prasad
 
PPTX
Multiprocessing -Interprocessing communication and process sunchronization,se...
Neena R Krishna
 
PPT
process management
Ashish Kumar
 
PPT
Chapter 6 pc
Hanif Durad
 
PPT
Inter process communication
Gift Kaliza
 
PDF
4th European Lisp Symposium: Jobim: an Actors Library for the Clojure Program...
Antonio Garrote Hernández
 
PDF
3 process management
Dr. Loganathan R
 
PPTX
MPI message passing interface
Mohit Raghuvanshi
 
PPTX
(Slides) Task scheduling algorithm for multicore processor system for minimiz...
Naoki Shibata
 
PPT
Inter process communication
Mohd Tousif
 
PDF
4838281 operating-system-scheduling-on-multicore-architectures
Islam Samir
 
PDF
Move Message Passing Interface Applications to the Next Level
Intel® Software
 
PDF
Sara Afshar: Scheduling and Resource Sharing in Multiprocessor Real-Time Systems
knowdiff
 
PDF
Linux kernel development ch4
huangachou
 
PDF
MPI Presentation
Tayfun Sen
 
PPT
Processes and Thread OS_Tanenbaum_3e
Le Gia Hoang
 
PDF
Ch5 process synchronization
Welly Dian Astika
 
PPTX
Chapter 6 synchronization
Alagappa Government Arts College, Karaikudi
 
PDF
1844 1849
Editor IJARCET
 
MPI Tutorial
Dhanashree Prasad
 
Multiprocessing -Interprocessing communication and process sunchronization,se...
Neena R Krishna
 
process management
Ashish Kumar
 
Chapter 6 pc
Hanif Durad
 
Inter process communication
Gift Kaliza
 
4th European Lisp Symposium: Jobim: an Actors Library for the Clojure Program...
Antonio Garrote Hernández
 
3 process management
Dr. Loganathan R
 
MPI message passing interface
Mohit Raghuvanshi
 
(Slides) Task scheduling algorithm for multicore processor system for minimiz...
Naoki Shibata
 
Inter process communication
Mohd Tousif
 
4838281 operating-system-scheduling-on-multicore-architectures
Islam Samir
 
Move Message Passing Interface Applications to the Next Level
Intel® Software
 
Sara Afshar: Scheduling and Resource Sharing in Multiprocessor Real-Time Systems
knowdiff
 
Linux kernel development ch4
huangachou
 
MPI Presentation
Tayfun Sen
 
Processes and Thread OS_Tanenbaum_3e
Le Gia Hoang
 
Ch5 process synchronization
Welly Dian Astika
 
1844 1849
Editor IJARCET
 

Viewers also liked (20)

KEY
Using MPI
Kazuki Ohta
 
PPTX
Introduction to Parallel Programming
UNIST
 
PPSX
병렬처리와 성능향상
shaderx
 
PPT
MPI Introduction
Rohit Banga
 
PDF
Parallel programming using MPI
Majong DevJfu
 
PDF
Mpi
Bertha Vega
 
PPTX
December 2012 announcements
Centreville Baptist Church
 
PPTX
February 2013 announcements
Centreville Baptist Church
 
PPTX
Announcements for Feb 19 2012
Centreville Baptist Church
 
PPTX
November 2012 announcements
Centreville Baptist Church
 
PPTX
Himti uin jakarta
Azka Faridy
 
PPTX
September 2012 announcements
Centreville Baptist Church
 
PPTX
Announcements for june 2013
Centreville Baptist Church
 
PPTX
September 2012 announcements
Centreville Baptist Church
 
PPT
第3回twitter研究会「閉会の挨拶」
Tomohiro Nishitani
 
PPTX
Announcements for june 2014
Centreville Baptist Church
 
PPTX
Announcements for june 2013
Centreville Baptist Church
 
PPTX
November 2012 announcements
Centreville Baptist Church
 
PDF
Exposed_ The Secret Life of Roots _ United States Botanic Garden
jerry_d_glover
 
PPTX
Announcements for june 2013
Centreville Baptist Church
 
Using MPI
Kazuki Ohta
 
Introduction to Parallel Programming
UNIST
 
병렬처리와 성능향상
shaderx
 
MPI Introduction
Rohit Banga
 
Parallel programming using MPI
Majong DevJfu
 
December 2012 announcements
Centreville Baptist Church
 
February 2013 announcements
Centreville Baptist Church
 
Announcements for Feb 19 2012
Centreville Baptist Church
 
November 2012 announcements
Centreville Baptist Church
 
Himti uin jakarta
Azka Faridy
 
September 2012 announcements
Centreville Baptist Church
 
Announcements for june 2013
Centreville Baptist Church
 
September 2012 announcements
Centreville Baptist Church
 
第3回twitter研究会「閉会の挨拶」
Tomohiro Nishitani
 
Announcements for june 2014
Centreville Baptist Church
 
Announcements for june 2013
Centreville Baptist Church
 
November 2012 announcements
Centreville Baptist Church
 
Exposed_ The Secret Life of Roots _ United States Botanic Garden
jerry_d_glover
 
Announcements for june 2013
Centreville Baptist Church
 
Ad

Similar to Open MPI 2 (20)

PPTX
Programming using MPI and OpenMP
Divya Tiwari
 
PDF
Lecture 3_Processes in Operating Systems.pdf
jamesLau66
 
PPT
Chapter 3 - Processes
Wayne Jones Jnr
 
PPT
Open MPI
Anshul Sharma
 
PPTX
3 processes
ari9_dutta
 
PPT
Process
Sachin MK
 
PPT
OSCh4
Joe Christensen
 
PPT
Ch4 OS
C.U
 
PDF
iTop VPN Latest Version 2025 Crack Free Download
lr74xqnvuf
 
PPTX
VSO ConvertXto HD Free CRACKS Download .
dshut956
 
PDF
Wondershare Filmora Crack 2025 For Windows Free
abbaskanju3
 
PDF
Wondershare Filmora Crack Free Download
zqeevcqb3t
 
PDF
Minitool Partition Wizard Crack Free Download
v3r2eptd2q
 
PPTX
Nickelodeon All Star Brawl 2 v1.13 Free Download
michaelsatle759
 
PDF
LDPlayer 9.1.20 Latest Crack Free Download
5ls1bnl9iv
 
PDF
Latest FL Studio Crack 24 Free Serial Key [2025]
abbaskanju3
 
PPTX
Mini Airways v0.11.3 TENOKE Free Download
elonbuda
 
PPTX
Replay Media Catcher Free CRACK Download
borikhni
 
PDF
Tenorshare 4uKey Crack Fre e Download
oyv9tzurtx
 
Programming using MPI and OpenMP
Divya Tiwari
 
Lecture 3_Processes in Operating Systems.pdf
jamesLau66
 
Chapter 3 - Processes
Wayne Jones Jnr
 
Open MPI
Anshul Sharma
 
3 processes
ari9_dutta
 
Process
Sachin MK
 
Ch4 OS
C.U
 
iTop VPN Latest Version 2025 Crack Free Download
lr74xqnvuf
 
VSO ConvertXto HD Free CRACKS Download .
dshut956
 
Wondershare Filmora Crack 2025 For Windows Free
abbaskanju3
 
Wondershare Filmora Crack Free Download
zqeevcqb3t
 
Minitool Partition Wizard Crack Free Download
v3r2eptd2q
 
Nickelodeon All Star Brawl 2 v1.13 Free Download
michaelsatle759
 
LDPlayer 9.1.20 Latest Crack Free Download
5ls1bnl9iv
 
Latest FL Studio Crack 24 Free Serial Key [2025]
abbaskanju3
 
Mini Airways v0.11.3 TENOKE Free Download
elonbuda
 
Replay Media Catcher Free CRACK Download
borikhni
 
Tenorshare 4uKey Crack Fre e Download
oyv9tzurtx
 
Ad

More from Anshul Sharma (11)

PPTX
Understanding concurrency
Anshul Sharma
 
PPT
Interm codegen
Anshul Sharma
 
PPT
Programming using Open Mp
Anshul Sharma
 
PPT
Paralle programming 2
Anshul Sharma
 
PPT
Parallel programming
Anshul Sharma
 
PPT
Cuda 3
Anshul Sharma
 
PPT
Cuda 2
Anshul Sharma
 
PPT
Cuda intro
Anshul Sharma
 
ODP
Intoduction to Linux
Anshul Sharma
 
Understanding concurrency
Anshul Sharma
 
Interm codegen
Anshul Sharma
 
Programming using Open Mp
Anshul Sharma
 
Paralle programming 2
Anshul Sharma
 
Parallel programming
Anshul Sharma
 
Cuda intro
Anshul Sharma
 
Intoduction to Linux
Anshul Sharma
 

Recently uploaded (20)

PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 

Open MPI 2

  • 1. 2a.1 Message-Passing Computing More MPI routines: Collective routines Synchronous routines Non-blocking routines ITCS 4/5145 Parallel Computing, UNC-Charlotte, B. Wilkinson, 2009.
  • 2. 2a.2 Collective message-passing routines Have routines that send message(s) to a group of processes or receive message(s) from a group of processes Higher efficiency than separate point-to-point routines although routines not absolutely necessary.
  • 3. 2a.3 Collective Communication Involves set of processes, defined by an intra-communicator. Message tags not present. Principal collective operations: • MPI_Bcast() - Broadcast from root to all other processes • MPI_Gather() - Gather values for group of processes • MPI_Scatter() - Scatters buffer in parts to group of processes • MPI_Alltoall() - Sends data from all processes to all processes • MPI_Reduce() - Combine values on all processes to single value • MPI_Reduce_scatter() - Combine values and scatter results • MPI_Scan()- Compute prefix reductions of data on processes • MPI_Barrier() - A means of synchronizing processes by stopping each one until they all have reached a specific “barrier” call.
  • 4. MPI broadcast operation 2a.4 Sending same message to all processes in communicator. Multicast - sending same message to defined group of processes.
  • 6. Basic MPI scatter operation 2a.6 Sending each element of an array in root process to a separate process. Contents of ith location of array sent to ith process.
  • 8. • Simplest scatter would be as illustrated which one element of an array is sent to different processes. • Extension provided in the MPI_Scatter() routine is to send a fixed number of contiguous elements to each process. 2a.8
  • 9. Scattering contiguous groups of elements to each process 2a.9
  • 10. Example In the following code, size of send buffer is given by 100 * <number of processes> and 100 contiguous elements are send to each process: main (int argc, char *argv[]) { int size, *sendbuf, recvbuf[100]; /* for each process */ MPI_Init(&argc, &argv); /* initialize MPI */ MPI_Comm_size(MPI_COMM_WORLD, &size); sendbuf = (int *)malloc(size*100*sizeof(int)); . MPI_Scatter(sendbuf,100,MPI_INT,recvbuf,100,MPI_INT,0, MPI_COMM_WORLD); . MPI_Finalize(); /* terminate MPI */ } 2a.10
  • 11. Gather 2.11 Having one process collect individual values from set of processes.
  • 13. 2a.13 Gather Example To gather items from group of processes into process 0, using dynamically allocated memory in root process: int data[10]; /*data to be gathered from processes*/ MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { MPI_Comm_size(MPI_COMM_WORLD, &grp_size); /*find group size*/ buf = (int *)malloc(grp_size*10*sizeof (int)); /*alloc. mem*/ } MPI_Gather(data,10,MPI_INT,buf,grp_size*10,MPI_INT,0,MPI_COMM_ WORLD) ; … MPI_Gather() gathers from all processes, including root.
  • 14. 2a.14 Reduce Gather operation combined with specified arithmetic/logical operation. Example: Values could be gathered and then added together by root:
  • 16. 2a.16 Reduce - operations MPI_Reduce(*sendbuf,*recvbuf,count,datatype,op,root,comm) Parameters: *sendbuf send buffer address *recvbuf receive buffer address count number of send buffer elements datatype data type of send elements op reduce operation. Several operations, including MPI_MAX Maximum MPI_MIN Minimum MPI_SUM Sum MPI_PROD Product root root process rank for result comm communicator
  • 17. 2a.17 Sample MPI program with collective routines #include “mpi.h” #include <stdio.h> #include <math.h> #define MAXSIZE 1000 void main(int argc, char *argv) { int myid, numprocs, data[MAXSIZE], i, x, low, high, myresult, result; char fn[255]; char *fp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if (myid == 0) { /* Open input file and initialize data */ strcpy(fn,getenv(“HOME”)); strcat(fn,”/MPI/rand_data.txt”); if ((fp = fopen(fn,”r”)) == NULL) { printf(“Can’t open the input file: %snn”, fn); exit(1); } for(i = 0; i < MAXSIZE; i++) fscanf(fp,”%d”, &data[i]); } MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD); /* broadcast data */ x = n/nproc; /* Add my portion Of data */ low = myid * x; high = low + x; for(i = low; i < high; i++) myresult += data[i]; printf(“I got %d from %dn”, myresult, myid); /* Compute global sum */ MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf(“The sum is %d.n”, result); MPI_Finalize(); }
  • 18. Collective routines General features • Performed on a group of processes, identified by a communicator • Substitute for a sequence of point-to-point calls • Communications are locally blocking • Synchronization is not guaranteed (implementation dependent) • Some routines use a root process to originate or receive all data • Data amounts must exactly match • Many variations to basic categories • No message tags are needed 2a.18
  • 19. 2a.19 Barrier Block process until all processes have called it. Synchronous operation. MPI_Barrier(comm) Communicator
  • 20. 2a.20 Synchronous Message Passing Routines that return when message transfer completed. Synchronous send routine • Waits until complete message can be accepted by the receiving process before sending the message. In MPI, MPI_SSend() routine. Synchronous receive routine • Waits until the message it is expecting arrives. In MPI, actually the regular MPI_recv() routine.
  • 21. 2a.21 Synchronous Message Passing Synchronous message-passing routines intrinsically perform two actions: • They transfer data and • They synchronize processes.
  • 22. 2a.22 Synchronous Ssend() and recv() using 3-way protocol Process 1 Process 2 Ssend(); recv(); Suspend Time process Acknowledgment MessageBoth processes continue (a) When send() occurs before recv() Process 1 Process 2 recv(); Ssend(); Suspend Time process Acknowledgment MessageBoth processes continue (b) When recv() occurs before send() Request to send Request to send
  • 23. 2a.23 Parameters of synchronous send (same as blocking send) MPI_Ssend(buf, count, datatype, dest, tag, comm) Address of Number of items Datatype of Rank of destination Message tag Communicator send buffer to send each item process
  • 24. 2a.24 Asynchronous Message Passing • Routines that do not wait for actions to complete before returning. Usually require local storage for messages. • More than one version depending upon the actual semantics for returning. • In general, they do not synchronize processes but allow processes to move forward sooner. • Must be used with care.
  • 25. 2a.25 MPI Definitions of Blocking and Non- Blocking • Blocking - return after their local actions complete, though the message transfer may not have been completed. Sometimes called locally blocking. • Non-blocking - return immediately (asynchronous) Non-blocking assumes that data storage used for transfer not modified by subsequent statements prior to being used for transfer, and it is left to the programmer to ensure this. Blocking/non-blocking terms may have different interpretations in other systems.
  • 26. 2a.26 MPI Nonblocking Routines • Non-blocking send - MPI_Isend() - will return “immediately” even before source location is safe to be altered. • Non-blocking receive - MPI_Irecv() - will return even if no message to accept.
  • 27. 2a.27 Nonblocking Routine Formats MPI_Isend(buf,count,datatype,dest,tag,comm,request) MPI_Irecv(buf,count,datatype,source,tag,comm, request) Completion detected by MPI_Wait() and MPI_Test(). MPI_Wait() waits until operation completed and returns then. MPI_Test() returns with flag set indicating whether operation completed at that time. Need to know whether particular operation completed. Determined by accessing request parameter.
  • 28. 2a.28 Example To send an integer x from process 0 to process 1 and allow process 0 to continue: MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { int x; MPI_Isend(&x,1,MPI_INT, 1, msgtag, MPI_COMM_WORLD, req1); compute(); MPI_Wait(req1, status); } else if (myrank == 1) { int x; MPI_Recv(&x,1,MPI_INT,0,msgtag, MPI_COMM_WORLD, status); }
  • 29. 2a.29 How message-passing routines return before message transfer completed Process 1 Process 2 send(); recv(); Message buffer Read message buffer Continue process Time Message buffer needed between source and destination to hold message:
  • 30. 2a.30 Asynchronous (blocking) routines changing to synchronous routines • Message buffers only of finite length • A point could be reached when send routine held up because all available buffer space exhausted. • Then, send routine will wait until storage becomes re-available - i.e. routine will behave as a synchronous routine.
  • 31. 2a.31 Next topic • Parallel Algorithms Other MPI features will be introduced as we need them.