286 lines
20 KiB
HTML
Executable File
286 lines
20 KiB
HTML
Executable File
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
|
<title>MPI On Cell (Documentation): Send-Receive</title>
|
|
<link href="../../doxygen.css" rel="stylesheet" type="text/css">
|
|
<link href="../../tabs.css" rel="stylesheet" type="text/css">
|
|
</head><body>
|
|
<!-- Generated by Doxygen 1.5.6 -->
|
|
<div class="navigation" id="top">
|
|
<div class="tabs">
|
|
<ul>
|
|
<li><a href="../../main.html"><span>Main Page</span></a></li>
|
|
<li><a href="../../modules.html"><span>Modules</span></a></li>
|
|
<li><a href="../../annotated.html"><span>Data Structures</span></a></li>
|
|
<li><a href="../../files.html"><span>Files</span></a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="contents">
|
|
<h1>Send-Receive<br>
|
|
<small>
|
|
[<a class="el" href="../../d0/d64/group__p2p__main.html">Point-to-Point Communication</a>]</small>
|
|
</h1>
|
|
<p>
|
|
<div class="dynheader">
|
|
Collaboration diagram for Send-Receive:</div>
|
|
<div class="dynsection">
|
|
<center><table><tr><td><img src="../../d2/ded/group__p2p__sendrecv.png" border="0" alt="" usemap="#d1/d97/d2_2ded_2group____p2p____sendrecv_map">
|
|
<map name="d1/d97/d2_2ded_2group____p2p____sendrecv_map">
|
|
<area shape="rect" href="../../d0/d64/group__p2p__main.html" title="Sending and receiving of messages by processes is the basic MPI communication mechanism..." alt="" coords="5,5,200,32"></map></td></tr></table></center>
|
|
</div>
|
|
<hr><a name="_details"></a><h2>Detailed Description</h2>
|
|
The send-receive operations combine in one call the sending of a message to one destination and the receiving of another message, from another process.
|
|
<p>
|
|
A message sent by a send-receive operation can be received by a regular receive operation or probed by a probe operation; a send-receive operation can receive a message sent by a regular send operation.
|
|
<p>
|
|
<table border="0" cellpadding="0" cellspacing="0">
|
|
<tr><td></td></tr>
|
|
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ded/group__p2p__sendrecv.html#g70885aadac98497e169267e74abee516">MOC_Sendrecv</a> (void *sendbuf, int sendcount, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> sendtype, int dest, int sendtag, void *recvbuf, int recvcount, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> recvtype, int source, int recvtag, <a class="el" href="../../d1/dd1/group__comm__mgt.html#g3d2b8a9af65bff5f79d02bda13616767">MOC_Comm</a> comm, <a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> *status)</td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Execute a blocking send and receive operation. <a href="#g70885aadac98497e169267e74abee516"></a><br></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ded/group__p2p__sendrecv.html#g1e5b32eaefd61f863f89778dcbbb70a2">MOC_Sendrecv_replace</a> (void *buf, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int dest, int sendtag, int source, int recvtag, <a class="el" href="../../d1/dd1/group__comm__mgt.html#g3d2b8a9af65bff5f79d02bda13616767">MOC_Comm</a> comm, <a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> *status)</td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Execute a blocking send and receive. <a href="#g1e5b32eaefd61f863f89778dcbbb70a2"></a><br></td></tr>
|
|
</table>
|
|
<hr><h2>Function Documentation</h2>
|
|
<a class="anchor" name="g70885aadac98497e169267e74abee516"></a><!-- doxytag: member="moc.h::MOC_Sendrecv" ref="g70885aadac98497e169267e74abee516" args="(void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, int source, int recvtag, MOC_Comm comm, MOC_Status *status)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int MOC_Sendrecv </td>
|
|
<td>(</td>
|
|
<td class="paramtype">void * </td>
|
|
<td class="paramname"> <em>sendbuf</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>sendcount</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> </td>
|
|
<td class="paramname"> <em>sendtype</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>dest</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>sendtag</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">void * </td>
|
|
<td class="paramname"> <em>recvbuf</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>recvcount</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> </td>
|
|
<td class="paramname"> <em>recvtype</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>source</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>recvtag</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../d1/dd1/group__comm__mgt.html#g3d2b8a9af65bff5f79d02bda13616767">MOC_Comm</a> </td>
|
|
<td class="paramname"> <em>comm</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> * </td>
|
|
<td class="paramname"> <em>status</em></td><td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>
|
|
Execute a blocking send and receive operation.
|
|
<p>
|
|
Both send and receive use the same communicator, but possibly different tags. The send buffer and receive buffers may be disjoint, and may have different lengths and datatypes.<p>
|
|
<dl compact><dt><b>Parameters:</b></dt><dd>
|
|
<table border="0" cellspacing="2" cellpadding="0">
|
|
<tr><td valign="top"></td><td valign="top"><em>sendbuf</em> </td><td><b>in</b> Pointer to buffer where data is stored </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>sendcount</em> </td><td><b>in</b> Number of elements to be send (not equal to actual byte-value) </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>sendtype</em> </td><td><b>in</b> Type of elements to be send </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td><b>in</b> Rank of receiving process </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>sendtag</em> </td><td><b>in</b> Tag of message to be send</td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>recvbuf</em> </td><td><b>inout</b> Buffer into which data should be stored </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>recvcount</em> </td><td><b>in</b> Number of elements in receive buffer (not equal to actual byte-value) </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>recvtype</em> </td><td><b>in</b> Datatype of each receive buffer element </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>source</em> </td><td><b>in</b> Rank of source </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>recvtag</em> </td><td><b>in</b> Tag of message to be received</td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>comm</em> </td><td><b>in</b> Communicator of message </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>status</em> </td><td><b>inout</b> Object holding status-information (has to be allocated by user)</td></tr>
|
|
</table>
|
|
</dl>
|
|
<dl compact><dt><b>Return values:</b></dt><dd>
|
|
<table border="0" cellspacing="2" cellpadding="0">
|
|
<tr><td valign="top"></td><td valign="top"><em>MOC_SUCCESS</em> </td><td>No error; MPI routine completed successfully. </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>error-code </td></tr>
|
|
</table>
|
|
</dl>
|
|
|
|
<p>Definition at line <a class="el" href="../../db/da3/moc__send__recv_8c-source.html#l00003">3</a> of file <a class="el" href="../../db/da3/moc__send__recv_8c-source.html">moc_send_recv.c</a>.</p>
|
|
|
|
<p>References <a class="el" href="../../d8/dbc/moc__recv__ppu_8c-source.html#l00011">MOC_Recv()</a>, and <a class="el" href="../../dd/d4a/moc__send_8c-source.html#l00019">MOC_Send()</a>.</p>
|
|
|
|
<p>
|
|
<div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dynsection">
|
|
<p><center><img src="../../d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.png" border="0" usemap="#d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph_map" alt=""></center>
|
|
<map name="d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph_map">
|
|
<area shape="rect" href="../../d0/d64/group__p2p__main.html#g30c532510cffd36acd1b9b0b3edb3832" title="Performs a blocking standard mode receive operation." alt="" coords="167,81,252,108"><area shape="rect" href="../../d0/d64/group__p2p__main.html#g23e0afbe55bc4c86cb738c3361623a4c" title="Performs a blocking standard mode send operation." alt="" coords="165,157,253,184"><area shape="rect" href="../../d3/dd3/group__internal__p2p__bmalloc.html#gad8750c7ba3d6da9c137c2c462d2c531" title="void bmalloc_print_nodes() { if (!bmalloc_first_node) printf("No nodes in list\\n");..." alt="" coords="529,56,625,83"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g53d36c567e4c98e5d258a7857096e7ab" title="Internal wrapper-function for a blocking DMA-get operation." alt="" coords="304,5,416,32"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g8980da77fa506e9a6d503c8c6eba68e2" title="Get the next valid message-envelope from "source" with specified "tag"..." alt="" coords="303,107,417,133"><area shape="rect" href="../../de/d84/group__p2p__buffered.html#g307bf844e1416c7c021e4a3468209d0b" title="Performs a blocking buffered mode send operation." alt="" coords="312,208,408,235"><area shape="rect" href="../../d5/dc2/group__p2p__synch.html#g46cb2ff2b5a0601165978598932d6120" title="Performs a blocking synchronous mode send operation." alt="" coords="312,157,408,184"><area shape="rect" href="../../d3/dd3/group__internal__p2p__bmalloc.html#g5295b372d853993b2e6cfb6912a0ee41" title="Allocate buffer-space." alt="" coords="524,259,631,285"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g2a948cdecce651ae6cc1b0c0ddb1b750" title="Get next free entry in message-queue (a local copy of the message-queue has to be..." alt="" coords="509,157,645,184"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g409bdbea503611cf04829413d15830df" title="Get free message-ID." alt="" coords="513,208,641,235"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gb48c58191a7cf4d3e502d1c7a6c0ab9c" title="Internal wrapper-function for a blocking DMA-put operation." alt="" coords="521,309,633,336"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g8675f9552168f2dd8926cad5ac00be69" title="Wait till message with message-ID mid has been received." alt="" coords="467,107,688,133"></map>
|
|
</div>
|
|
|
|
</div>
|
|
</div><p>
|
|
<a class="anchor" name="g1e5b32eaefd61f863f89778dcbbb70a2"></a><!-- doxytag: member="moc.h::MOC_Sendrecv_replace" ref="g1e5b32eaefd61f863f89778dcbbb70a2" args="(void *buf, int count, MOC_Datatype datatype, int dest, int sendtag, int source, int recvtag, MOC_Comm comm, MOC_Status *status)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int MOC_Sendrecv_replace </td>
|
|
<td>(</td>
|
|
<td class="paramtype">void * </td>
|
|
<td class="paramname"> <em>buf</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>count</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> </td>
|
|
<td class="paramname"> <em>datatype</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>dest</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>sendtag</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>source</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"> <em>recvtag</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../d1/dd1/group__comm__mgt.html#g3d2b8a9af65bff5f79d02bda13616767">MOC_Comm</a> </td>
|
|
<td class="paramname"> <em>comm</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> * </td>
|
|
<td class="paramname"> <em>status</em></td><td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>
|
|
Execute a blocking send and receive.
|
|
<p>
|
|
The same buffer is used both for the send and for the receive, so that the message sent is replaced by the message received.<p>
|
|
<dl compact><dt><b>Parameters:</b></dt><dd>
|
|
<table border="0" cellspacing="2" cellpadding="0">
|
|
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td><b>inout</b> Pointer to buffer </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>count</em> </td><td><b>in</b> Number of elements (not equal to actual byte-value) </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>datatype</em> </td><td><b>in</b> Type of elements</td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td><b>in</b> Rank of receiving process </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>sendtag</em> </td><td><b>in</b> Tag of message to be send</td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>source</em> </td><td><b>in</b> Rank of source </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>recvtag</em> </td><td><b>in</b> Tag of message to be received</td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>comm</em> </td><td><b>in</b> Communicator of message </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>status</em> </td><td><b>inout</b> Object holding status-information (has to be allocated by user)</td></tr>
|
|
</table>
|
|
</dl>
|
|
<dl compact><dt><b>Return values:</b></dt><dd>
|
|
<table border="0" cellspacing="2" cellpadding="0">
|
|
<tr><td valign="top"></td><td valign="top"><em>MOC_SUCCESS</em> </td><td>No error; MPI routine completed successfully. </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>error-code </td></tr>
|
|
</table>
|
|
</dl>
|
|
|
|
<p>Definition at line <a class="el" href="../../d9/d96/moc__send__recv__replace_8c-source.html#l00003">3</a> of file <a class="el" href="../../d9/d96/moc__send__recv__replace_8c-source.html">moc_send_recv_replace.c</a>.</p>
|
|
|
|
<p>References <a class="el" href="../../d8/dbc/moc__recv__ppu_8c-source.html#l00011">MOC_Recv()</a>, and <a class="el" href="../../dd/d4a/moc__send_8c-source.html#l00019">MOC_Send()</a>.</p>
|
|
|
|
<p>
|
|
<div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dynsection">
|
|
<p><center><img src="../../d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.png" border="0" usemap="#d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph_map" alt=""></center>
|
|
<map name="d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph_map">
|
|
<area shape="rect" href="../../d0/d64/group__p2p__main.html#g30c532510cffd36acd1b9b0b3edb3832" title="Performs a blocking standard mode receive operation." alt="" coords="215,81,300,108"><area shape="rect" href="../../d0/d64/group__p2p__main.html#g23e0afbe55bc4c86cb738c3361623a4c" title="Performs a blocking standard mode send operation." alt="" coords="213,157,301,184"><area shape="rect" href="../../d3/dd3/group__internal__p2p__bmalloc.html#gad8750c7ba3d6da9c137c2c462d2c531" title="void bmalloc_print_nodes() { if (!bmalloc_first_node) printf("No nodes in list\\n");..." alt="" coords="577,56,673,83"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g53d36c567e4c98e5d258a7857096e7ab" title="Internal wrapper-function for a blocking DMA-get operation." alt="" coords="352,5,464,32"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g8980da77fa506e9a6d503c8c6eba68e2" title="Get the next valid message-envelope from "source" with specified "tag"..." alt="" coords="351,107,465,133"><area shape="rect" href="../../de/d84/group__p2p__buffered.html#g307bf844e1416c7c021e4a3468209d0b" title="Performs a blocking buffered mode send operation." alt="" coords="360,208,456,235"><area shape="rect" href="../../d5/dc2/group__p2p__synch.html#g46cb2ff2b5a0601165978598932d6120" title="Performs a blocking synchronous mode send operation." alt="" coords="360,157,456,184"><area shape="rect" href="../../d3/dd3/group__internal__p2p__bmalloc.html#g5295b372d853993b2e6cfb6912a0ee41" title="Allocate buffer-space." alt="" coords="572,259,679,285"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g2a948cdecce651ae6cc1b0c0ddb1b750" title="Get next free entry in message-queue (a local copy of the message-queue has to be..." alt="" coords="557,157,693,184"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g409bdbea503611cf04829413d15830df" title="Get free message-ID." alt="" coords="561,208,689,235"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gb48c58191a7cf4d3e502d1c7a6c0ab9c" title="Internal wrapper-function for a blocking DMA-put operation." alt="" coords="569,309,681,336"><area shape="rect" href="../../d8/d88/group__internal__p2p__main.html#g8675f9552168f2dd8926cad5ac00be69" title="Wait till message with message-ID mid has been received." alt="" coords="515,107,736,133"></map>
|
|
</div>
|
|
|
|
</div>
|
|
</div><p>
|
|
</div>
|
|
<hr size="1"><address style="text-align: right;"><small>Generated on Thu Feb 12 13:50:53 2009 for MPI On Cell (Documentation) by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img src="../../doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
|
|
</body>
|
|
</html>
|