📄 mpi31.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> ICPSEP Content
ICPSEP Content
ICPSEP Content
</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.0Gold (X11; I; SunOS 5.4 sun4m) [Netscape]">
</HEAD>
<BODY BGCOLOR="#F0F8FF">
<TABLE WIDTH="100%" >
<TR>
<TD align=left><FONT SIZE=+2>第三章 点对点通信</FONT> </TD>
<TD align=right><A HREF="mpi282.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi282.htm"><IMG SRC="backward.gif" tppabs="http://arch.cs.pku.edu.cn/image/backward.gif" ALT="BACKWARD" HEIGHT=32 WIDTH=32 ></A><A HREF="mpi321.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi321.htm"><IMG SRC="forward.gif" tppabs="http://arch.cs.pku.edu.cn/image/forward.gif" ALT="FORWARD" HEIGHT=32 WIDTH=32></A>
</TD>
</TR>
</TABLE>
<P>
<HR WIDTH="100%"></P>
<P><FONT SIZE=+2>3.1 介绍 </FONT></P>
<P>
<HR WIDTH="100%"></P>
<P>由进程完成的消息的发送和接收是基本的MPI通信机制。基本的点对点通信操作是send
和receive 。他们的用法在下面例子中解释。</P>
<P>#include "mpi.h" <BR>
main( argc, argv )<BR>
int argc; <BR>
char **argv;<BR>
{</P>
<UL>
<P>char message[20]; <BR>
int myrank; <BR>
MPI_Init( &argc, &argv ); <BR>
MPI_Comm_rank( MPI_COMM_WORLD, &myrank ); <BR>
if (myrank == 0) /* 对 0 进程的程序 */<BR>
{ </P>
</UL>
<UL>
<UL>
<P>strcpy(message,"Hello, there");<BR>
MPI_Send(message, strlen(message), MPI_CHAR, 1, 99,MPI_COMM_WORLD); </P>
</UL>
<P>}<BR>
else /* 对 1 进程的程序 */<BR>
{</P>
<UL>
<P>MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
printf("received :%s:", message);</P>
</UL>
<P>}<BR>
MPI_Finalize();</P>
</UL>
<P>}</P>
<P>在这个例子中, 进程0 (myrank = 0)使用发送操作MPI_SEND给进程1 发送消息。这个操作在发送存储器中指定一个缓存,消息数据取自这个缓存。在上例中,这个发送缓存是在进程0
中包含变量message 的存储空间。发送缓存的位置、尺寸和类型由发送操作的前三个参数指定。被发送的消息将包含这个变量的13个符号。另外,发送操作把消息和一个信封联系起来。这个信封指定消息的目的地,并包含由receive操作为选择一个特定消息而使用的识别信息。发送操作的后三个参数为所发送的消息指定信封。
</P>
<P>进程1 用接收操作MPI_RECV接收这个信号。将被接收的消息按着其信封的值被选择,
消息数据被存入接收缓存。在上面的例子中,接收缓存是由进程1 的存储器中包含串message的存储空间。接收操作的前三个参数指定接收缓存的位置、尺寸和类型。之后的三个参数用于选择将来的消息。最后的参数用于返回所接收消息的信息。
</P>
<P>下一节描述阻塞发送和接收操作。我们讨论发送、接收、阻塞通信语义、类型匹配要求、在异构环境中类型匹配,和更一般的通信模式。非阻塞通信在下一部分,然后类通道结构和发送-接收操作。其次,我们考虑一般的数据类型,它我们能有效地转换异构的和非连续的数据。最后,我们以消息的显示打包和解包调用结束本章。</P>
<P>
<HR WIDTH="100%"></P>
<TABLE WIDTH="100%" >
<TR>
<TD align=left>Copyright: NPACT </TD>
<TD align=right><A HREF="mpi282.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi282.htm"><IMG SRC="backward.gif" tppabs="http://arch.cs.pku.edu.cn/image/backward.gif" ALT="BACKWARD" HEIGHT=32 WIDTH=32></A><A HREF="mpi321.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi321.htm"><IMG SRC="forward.gif" tppabs="http://arch.cs.pku.edu.cn/image/forward.gif" ALT="FORWARD" HEIGHT=32 WIDTH=32></A>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -