338 lines
18 KiB
HTML
Executable File
338 lines
18 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): Non-Blocking 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 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>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="contents">
|
|
<h1>Non-Blocking Communication<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 Non-Blocking Communication:</div>
|
|
<div class="dynsection">
|
|
<center><table><tr><td><img src="../../d7/d62/group__p2p__imm.png" border="0" alt="" usemap="#d7/df4/d7_2d62_2group____p2p____imm_map">
|
|
<map name="d7/df4/d7_2d62_2group____p2p____imm_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>
|
|
Non-blocking sending and receiving messages.
|
|
<p>
|
|
Because of restrictions of the Cell Broadband Engine non-blocking communication can only be provided with a lot of limitations. In fact the only operation where non-blocking communication make sense is synchronous send.<p>
|
|
<a class="el" href="../../d7/d62/group__p2p__imm.html#gd88773e68570adfad9f99159c69502af">MOC_ISend</a> uses blocking buffered send or non-blocking synchronous send according to the message size.<p>
|
|
<dl class="note" compact><dt><b>Note:</b></dt><dd>Every non-blocking communication operation has to be finished using <a class="el" href="../../d7/d62/group__p2p__imm.html#g5ee1f1c1275717d2dc78d6058ff81e9e">MOC_Test</a> or <a class="el" href="../../d7/d62/group__p2p__imm.html#g68043e4a0893fdc25c67f87bae1015a6">MOC_Wait</a>, otherwise resources are no freed and some data are not copied correctly. </dd></dl>
|
|
|
|
<p>
|
|
<table border="0" cellpadding="0" cellspacing="0">
|
|
<tr><td></td></tr>
|
|
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d17/structmoc__request__struct.html">moc_request_struct</a></td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Communication-Request (Handle). <a href="../../db/d17/structmoc__request__struct.html#_details">More...</a><br></td></tr>
|
|
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="../../db/d17/structmoc__request__struct.html">moc_request_struct</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d62/group__p2p__imm.html#g5a99fbe071639c65a7111884c29f4d31">MOC_Request</a></td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Communication-Request (Handle). <a href="#g5a99fbe071639c65a7111884c29f4d31"></a><br></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="../../d7/d62/group__p2p__imm.html#gd88773e68570adfad9f99159c69502af">MOC_ISend</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, <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a non-blocking standard mode send operation. <a href="#gd88773e68570adfad9f99159c69502af"></a><br></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d62/group__p2p__imm.html#gc148ff9b9bee69164139425a7df53697">MOC_ISsend</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, <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a non-blocking synchronous mode send operation. <a href="#gc148ff9b9bee69164139425a7df53697"></a><br></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d62/group__p2p__imm.html#g5ee1f1c1275717d2dc78d6058ff81e9e">MOC_Test</a> (<a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request, int *flag, <a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> *status)</td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Tests, if a non-blocking communication has been completed. <a href="#g5ee1f1c1275717d2dc78d6058ff81e9e"></a><br></td></tr>
|
|
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d62/group__p2p__imm.html#g68043e4a0893fdc25c67f87bae1015a6">MOC_Wait</a> (<a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request, <a class="el" href="../../dd/d7a/structMOC__Status__struct.html">MOC_Status</a> *status)</td></tr>
|
|
|
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Wait till a non-blocking communication has been completed. <a href="#g68043e4a0893fdc25c67f87bae1015a6"></a><br></td></tr>
|
|
</table>
|
|
<hr><h2>Typedef Documentation</h2>
|
|
<a class="anchor" name="g5a99fbe071639c65a7111884c29f4d31"></a><!-- doxytag: member="moc.h::MOC_Request" ref="g5a99fbe071639c65a7111884c29f4d31" args="" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">typedef struct <a class="el" href="../../db/d17/structmoc__request__struct.html">moc_request_struct</a> <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> </td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>
|
|
Communication-Request (Handle).
|
|
<p>
|
|
< Communication-Request (Handle)
|
|
</div>
|
|
</div><p>
|
|
<hr><h2>Function Documentation</h2>
|
|
<a class="anchor" name="gd88773e68570adfad9f99159c69502af"></a><!-- doxytag: member="moc.h::MOC_ISend" ref="gd88773e68570adfad9f99159c69502af" args="(void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int MOC_ISend </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>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> </td>
|
|
<td class="paramname"> <em>comm</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> * </td>
|
|
<td class="paramname"> <em>request</em></td><td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>
|
|
Performs a non-blocking standard mode send operation.
|
|
<p>
|
|
<dl class="note" compact><dt><b>Note:</b></dt><dd>This routine returns as soon as possible.</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> </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> </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> </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>tag</em> </td><td><b>in</b> Tag of message </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>request</em> </td><td><b>out</b> communication request (handle) </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>
|
|
|
|
</div>
|
|
</div><p>
|
|
<a class="anchor" name="gc148ff9b9bee69164139425a7df53697"></a><!-- doxytag: member="moc.h::MOC_ISsend" ref="gc148ff9b9bee69164139425a7df53697" args="(void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int MOC_ISsend </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>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> </td>
|
|
<td class="paramname"> <em>comm</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> * </td>
|
|
<td class="paramname"> <em>request</em></td><td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>
|
|
Performs a non-blocking synchronous mode send operation.
|
|
<p>
|
|
<dl class="note" compact><dt><b>Note:</b></dt><dd>This routine returns as soon as possible (After the message-envelope has been written into the receiver's message-queue).</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> </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> </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> </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>tag</em> </td><td><b>in</b> Tag of message </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>request</em> </td><td><b>out</b> communication request (handle) </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>
|
|
|
|
</div>
|
|
</div><p>
|
|
<a class="anchor" name="g5ee1f1c1275717d2dc78d6058ff81e9e"></a><!-- doxytag: member="moc.h::MOC_Test" ref="g5ee1f1c1275717d2dc78d6058ff81e9e" args="(MOC_Request *request, int *flag, MOC_Status *status)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int MOC_Test </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> * </td>
|
|
<td class="paramname"> <em>request</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int * </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> * </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>
|
|
Tests, if a non-blocking communication has been completed.
|
|
<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>request</em> </td><td><b>in</b> Communication-Request (Handle) </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>flag</em> </td><td><b>out</b> true, if communication-request has been completed </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>status</em> </td><td><b>out</b> Object holding status-information </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>
|
|
|
|
</div>
|
|
</div><p>
|
|
<a class="anchor" name="g68043e4a0893fdc25c67f87bae1015a6"></a><!-- doxytag: member="moc.h::MOC_Wait" ref="g68043e4a0893fdc25c67f87bae1015a6" args="(MOC_Request *request, MOC_Status *status)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int MOC_Wait </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> * </td>
|
|
<td class="paramname"> <em>request</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>
|
|
Wait till a non-blocking communication has been completed.
|
|
<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>request</em> </td><td><b>in</b> Communication-Request (Handle) </td></tr>
|
|
<tr><td valign="top"></td><td valign="top"><em>status</em> </td><td><b>out</b> Object holding status-information </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>
|
|
|
|
</div>
|
|
</div><p>
|
|
</div>
|
|
<hr size="1"><address style="text-align: right;"><small>Generated on Thu Feb 12 13:48:21 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>
|