Files
2017-10-26 19:57:24 +02:00

370 lines
22 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): Point-to-Point Communication</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&nbsp;Page</span></a></li>
<li><a href="../../modules.html"><span>Modules</span></a></li>
<li><a href="../../annotated.html"><span>Data&nbsp;Structures</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Point-to-Point Communication<br>
<small>
[<a class="el" href="../../d3/d9e/group__end__user.html">End-User Documentation</a>]</small>
</h1>
<p>
<div class="dynheader">
Collaboration diagram for Point-to-Point Communication:</div>
<div class="dynsection">
<center><table><tr><td><img src="../../d0/d64/group__p2p__main.png" border="0" alt="" usemap="#da/d52/d0_2d64_2group____p2p____main_map">
<map name="da/d52/d0_2d64_2group____p2p____main_map">
<area shape="rect" href="../../d2/ded/group__p2p__sendrecv.html" title="The send&#45;receive operations combine in one call the sending of a message to one destination..." alt="" coords="511,5,609,32"><area shape="rect" href="../../da/df0/group__p2p__status.html" title="Receiving operations return a status&#45;object holding information about the message..." alt="" coords="509,56,611,83"><area shape="rect" href="../../d5/dc2/group__p2p__synch.html" title="Direct blocking sending of messages without any intermediate buffer." alt="" coords="464,107,656,133"><area shape="rect" href="../../dc/d6e/group__p2p__datatype.html" title="Datatypes supported by MOC." alt="" coords="520,157,600,184"><area shape="rect" href="../../de/d84/group__p2p__buffered.html" title="Blocking sending of messages with the use of an intermediate buffer." alt="" coords="479,208,641,235"><area shape="rect" href="../../d7/d62/group__p2p__imm.html" title="Non&#45;blocking sending and receiving messages." alt="" coords="464,259,656,285"><area shape="rect" href="../../d3/d9e/group__end__user.html" title="This section describes the public API provided by the MOC&#45;library." alt="" coords="7,132,172,159"></map></td></tr></table></center>
</div>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Sending and receiving of messages by processes is the basic MPI communication mechanism.
<p>
The basic point-to-point communication operations are send and receive.<p>
<a class="el" href="../../d0/d64/group__p2p__main.html#g23e0afbe55bc4c86cb738c3361623a4c">MOC_Send</a> uses either buffered or synchronous send depending on the message-size (Short messages are transmitted using buffered send and long messages are transmitted using synchronous send).<p>
<a class="el" href="../../d0/d64/group__p2p__main.html#g30c532510cffd36acd1b9b0b3edb3832">MOC_Recv</a> receives all messages irrespective wether buffered or synchronous communication is used.<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>Because there are separate message-queues for each remote process and no distinct global ordering of messages, there may be some situation where a message from a process may never be received. This may occur when MOC_Recv, MOC_Probe and MOC_IProbe are used with MOC_ANY_SOURCE, because then there is the possibility that new messages are received before a specific message from a process with a higher rank than the other senders. This may also occur with lower possibility when using MOC_ANY_TAG between messages from the same sender but with other tags. </dd></dl>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Modules</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/df0/group__p2p__status.html">Return Status</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Receiving operations return a status-object holding information about the message. <br></td></tr>
<p>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d6e/group__p2p__datatype.html">Datatypes</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Datatypes supported by MOC. <br></td></tr>
<p>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/dc2/group__p2p__synch.html">Synchronous Communication</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Direct blocking sending of messages without any intermediate buffer. <br></td></tr>
<p>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d84/group__p2p__buffered.html">Buffered Communication</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Blocking sending of messages with the use of an intermediate buffer. <br></td></tr>
<p>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ded/group__p2p__sendrecv.html">Send-Receive</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">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. <br></td></tr>
<p>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d62/group__p2p__imm.html">Non-Blocking Communication</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Non-blocking sending and receiving messages. <br></td></tr>
<p>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1efd7c092411ed106006e6a75a1de78b"></a><!-- doxytag: member="p2p_main::MOC_SEND_TRESHOLD" ref="g1efd7c092411ed106006e6a75a1de78b" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d64/group__p2p__main.html#g1efd7c092411ed106006e6a75a1de78b">MOC_SEND_TRESHOLD</a>&nbsp;&nbsp;&nbsp;4096</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicates, at which message-size <a class="el" href="../../d0/d64/group__p2p__main.html#g23e0afbe55bc4c86cb738c3361623a4c">MOC_Send</a> switches to synchronous send. <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d64/group__p2p__main.html#g23e0afbe55bc4c86cb738c3361623a4c">MOC_Send</a> (void *buf, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int dest, int tag, <a class="el" href="../../d1/dd1/group__comm__mgt.html#g3d2b8a9af65bff5f79d02bda13616767">MOC_Comm</a> comm)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a blocking standard mode send operation. <a href="#g23e0afbe55bc4c86cb738c3361623a4c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d64/group__p2p__main.html#g30c532510cffd36acd1b9b0b3edb3832">MOC_Recv</a> (void *buf, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int source, int tag, <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">&nbsp;</td><td class="mdescRight">Performs a blocking standard mode receive operation. <a href="#g30c532510cffd36acd1b9b0b3edb3832"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d64/group__p2p__main.html#g39ceb4e6f08da2cd3dac3e93bb6e3ee1">MOC_Probe</a> (int source, int tag, <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">&nbsp;</td><td class="mdescRight">Waits till a message is received and returns information without actually receiving the message. <a href="#g39ceb4e6f08da2cd3dac3e93bb6e3ee1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d64/group__p2p__main.html#g0bc7e537cd866537357a01a12a115a84">MOC_Iprobe</a> (int source, int tag, <a class="el" href="../../d1/dd1/group__comm__mgt.html#g3d2b8a9af65bff5f79d02bda13616767">MOC_Comm</a> comm, int *flag, <a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> *status)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tests if a message is available and returns information without actually receiving the message. <a href="#g0bc7e537cd866537357a01a12a115a84"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g0bc7e537cd866537357a01a12a115a84"></a><!-- doxytag: member="moc.h::MOC_Iprobe" ref="g0bc7e537cd866537357a01a12a115a84" args="(int source, int tag, MOC_Comm comm, int *flag, MOC_Status *status)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Iprobe </td>
<td>(</td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>tag</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>&nbsp;</td>
<td class="paramname"> <em>comm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&nbsp;</td>
<td class="paramname"> <em>flag</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> *&nbsp;</td>
<td class="paramname"> <em>status</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Tests if a message is available and returns information without actually receiving the message.
<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>source</em>&nbsp;</td><td><b>in</b> source of message </td></tr>
<tr><td valign="top"></td><td valign="top"><em>tag</em>&nbsp;</td><td><b>in</b> message-tag </td></tr>
<tr><td valign="top"></td><td valign="top"><em>comm</em>&nbsp;</td><td><b>in</b> communicator </td></tr>
<tr><td valign="top"></td><td valign="top"><em>flag</em>&nbsp;</td><td><b>out</b> boolean value telling if a message is available </td></tr>
<tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</td><td><b>out</b> status-object holding information about message </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>&nbsp;</td><td>No error; MPI routine completed successfully. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>...</em>&nbsp;</td><td>error-code </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="g39ceb4e6f08da2cd3dac3e93bb6e3ee1"></a><!-- doxytag: member="moc.h::MOC_Probe" ref="g39ceb4e6f08da2cd3dac3e93bb6e3ee1" args="(int source, int tag, MOC_Comm comm, MOC_Status *status)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Probe </td>
<td>(</td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>tag</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>&nbsp;</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> *&nbsp;</td>
<td class="paramname"> <em>status</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Waits till a message is received and returns information without actually receiving the message.
<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>source</em>&nbsp;</td><td><b>in</b> source of message </td></tr>
<tr><td valign="top"></td><td valign="top"><em>tag</em>&nbsp;</td><td><b>in</b> message-tag </td></tr>
<tr><td valign="top"></td><td valign="top"><em>comm</em>&nbsp;</td><td><b>in</b> communicator </td></tr>
<tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</td><td><b>out</b> status-object holding information about message </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>&nbsp;</td><td>No error; MPI routine completed successfully. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>...</em>&nbsp;</td><td>error-code </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="g30c532510cffd36acd1b9b0b3edb3832"></a><!-- doxytag: member="moc.h::MOC_Recv" ref="g30c532510cffd36acd1b9b0b3edb3832" args="(void *buf, int count, MOC_Datatype datatype, int source, int tag, MOC_Comm comm, MOC_Status *status)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Recv </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</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>&nbsp;</td>
<td class="paramname"> <em>datatype</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>tag</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>&nbsp;</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> *&nbsp;</td>
<td class="paramname"> <em>status</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Performs a blocking standard mode receive operation.
<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>This routine blocks until the message is received.</dd></dl>
<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>&nbsp;</td><td><b>inout</b> Buffer into which data should be stored </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</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>datatype</em>&nbsp;</td><td><b>in</b> Datatype of each receive buffer element </td></tr>
<tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td><b>in</b> Rank of source </td></tr>
<tr><td valign="top"></td><td valign="top"><em>tag</em>&nbsp;</td><td><b>in</b> Tag of message </td></tr>
<tr><td valign="top"></td><td valign="top"><em>comm</em>&nbsp;</td><td><b>in</b> Communicator of message </td></tr>
<tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</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>&nbsp;</td><td>No error; MPI routine completed successfully. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>...</em>&nbsp;</td><td>error-code </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="g23e0afbe55bc4c86cb738c3361623a4c"></a><!-- doxytag: member="moc.h::MOC_Send" ref="g23e0afbe55bc4c86cb738c3361623a4c" args="(void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Send </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</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>&nbsp;</td>
<td class="paramname"> <em>datatype</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>dest</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>tag</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>&nbsp;</td>
<td class="paramname"> <em>comm</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Performs a blocking standard mode send operation.
<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>This routine may block until the message is received.</dd></dl>
<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>&nbsp;</td><td><b>in</b> Pointer to buffer where data is stored </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</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>datatype</em>&nbsp;</td><td><b>in</b> Type of elements to be send </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td><b>in</b> Rank of receiving process </td></tr>
<tr><td valign="top"></td><td valign="top"><em>tag</em>&nbsp;</td><td><b>in</b> Tag of message </td></tr>
<tr><td valign="top"></td><td valign="top"><em>comm</em>&nbsp;</td><td><b>in</b> communicator of message </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>&nbsp;</td><td>No error; MPI routine completed successfully. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>...</em>&nbsp;</td><td>error-code </td></tr>
</table>
</dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Thu Feb 12 13:48:19 2009 for MPI On Cell (Documentation) by&nbsp;
<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>