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

895 lines
55 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): Direct Memory Access</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>
<li><a href="../../files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Direct Memory Access<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 Direct Memory Access:</div>
<div class="dynsection">
<center><table><tr><td><img src="../../d9/d16/group__dma__access.png" border="0" alt="" usemap="#d5/d02/d9_2d16_2group____dma____access_map">
<map name="d5/d02/d9_2d16_2group____dma____access_map">
<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,5,172,32"></map></td></tr></table></center>
</div>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Functions which use DMA to transfer Data.
<p>
The operations defined in this section provide simple means to use Direct Memory Access (DMA).<p>
The MPI-standard assumes a distributed memory architecture, where active participation of the sending and the receiving processes is required. But the Cell Broadband Engine is a distributed shared memory architecture which provides a common address space and DMA-Operations enabling processes to write data directly into the memory of an remote process without active participation of the receiving process. DMA is faster than Send-Receive but more complicated to handle, and so there are some functions provided to enable the advantages of DMA and to hide as much complexity as possible. So the user doesn't have to care about the upper-limit of an DMA-transfer and in get-operations the data-size doesn't have to be a multiple of 16-byte. However the data-address should be at least 16-byte aligned and in put-operations the data-size has to be a multiple of 16-byte.<p>
There are two kind of addresses. Local-store addresses are used on the SPUs and are only valid in context of a specific SPU. Effective addresses define a common address-space and are used on the PPU. Functions to translate between those address types are provided.<p>
DMA-operations can be blocking or non-blocking. The status of non-blocking DMA-calls can be requested by using <a class="el" href="../../d7/d62/group__p2p__imm.html#g5ee1f1c1275717d2dc78d6058ff81e9e">MOC_Test</a> and <a class="el" href="../../d7/d62/group__p2p__imm.html#g68043e4a0893fdc25c67f87bae1015a6">MOC_Wait</a>.<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>Every non-blocking DMA 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>PPU-only</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/group__dma__access.html#g3716465d42f20379bbf65002ecd9e448">MOC_Get_data</a> (void *target, uint32_t source, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int dest)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a blocking DMA-get operation. <a href="#g3716465d42f20379bbf65002ecd9e448"></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="../../d9/d16/group__dma__access.html#ge07f4b35da50be472772f9d3a426669e">MOC_Put_data</a> (void *source, uint32_t target, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int src)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a blocking DMA-put operation. <a href="#ge07f4b35da50be472772f9d3a426669e"></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="../../d9/d16/group__dma__access.html#g08f0af30f2e0e6840ec2be5ca93fd14f">MOC_IGet_data</a> (void *target, uint32_t source, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int dest, <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a non-blocking DMA-get operation. <a href="#g08f0af30f2e0e6840ec2be5ca93fd14f"></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="../../d9/d16/group__dma__access.html#g1fd9a141352dd4344e20f1bde778d265">MOC_IPut_data</a> (void *source, uint32_t target, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, int src, <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a non-blocking DMA-put operation. <a href="#g1fd9a141352dd4344e20f1bde778d265"></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="../../d9/d16/group__dma__access.html#g40b39bb7c07bc07d783c85b10f0bf60f">MOC_Translate_EA_to_LS</a> (uint64_t ea, int rank, uint32_t *ls)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Translates an effective-address of a SPU into the corresponding local-store address. <a href="#g40b39bb7c07bc07d783c85b10f0bf60f"></a><br></td></tr>
<tr><td colspan="2"><br><h2>SPU-only</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/group__dma__access.html#g7af2715950a0ab51937a63c38756b85b">MOC_Get_data</a> (void *target, uint64_t source, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a blocking DMA-get operation. <a href="#g7af2715950a0ab51937a63c38756b85b"></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="../../d9/d16/group__dma__access.html#g1baab78008563718380887026cf9444f">MOC_Put_data</a> (void *source, uint64_t target, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a blocking DMA-put operation. <a href="#g1baab78008563718380887026cf9444f"></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="../../d9/d16/group__dma__access.html#g9ff1639ada54f14994b7d199fc2ad984">MOC_IGet_data</a> (void *target, uint64_t source, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a non-blocking DMA-get operation. <a href="#g9ff1639ada54f14994b7d199fc2ad984"></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="../../d9/d16/group__dma__access.html#g3ee8513f7c0ebb782a3b0d17b8135693">MOC_IPut_data</a> (void *source, uint64_t target, int count, <a class="el" href="../../dc/d6e/group__p2p__datatype.html#gb4e45f15c08578bd3fc97c0cca2a509a">MOC_Datatype</a> datatype, <a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper-function for a non-blocking DMA-put operation. <a href="#g3ee8513f7c0ebb782a3b0d17b8135693"></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="../../d9/d16/group__dma__access.html#g1ee1f004fff19c3338f2de9d96471693">MOC_Translate_LS_to_EA</a> (void *ls, uint64_t *ea)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Translates a local-store address of the calling SPU into the corresponding effective-address. <a href="#g1ee1f004fff19c3338f2de9d96471693"></a><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="../../d9/d16/group__dma__access.html#g0ba7b00fbebaabb8b39737a7c13efc67">MOC_Wait_data</a> (<a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Waits till a MOC_IGet_data or IMOC_IPut_data is completed. <a href="#g0ba7b00fbebaabb8b39737a7c13efc67"></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="../../d9/d16/group__dma__access.html#g342d07658aae4252a2e2cd6a8cc185dd">MOC_Test_data</a> (<a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *request, int *flag)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tests if a MOC_IGet_data or IMOC_IPut_data is completed. <a href="#g342d07658aae4252a2e2cd6a8cc185dd"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g7af2715950a0ab51937a63c38756b85b"></a><!-- doxytag: member="moc_dma_spu.h::MOC_Get_data" ref="g7af2715950a0ab51937a63c38756b85b" args="(void *target, uint64_t source, int count, MOC_Datatype datatype)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Get_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&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>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><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a blocking DMA-get operation.
<p>
Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.<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>target</em>&nbsp;</td><td><b>out</b> pointer to buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td><b>in</b> ea-address of data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </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>
<p>Definition at line <a class="el" href="../../dd/dfd/moc__dma-get__spu_8c-source.html#l00009">9</a> of file <a class="el" href="../../dd/dfd/moc__dma-get__spu_8c-source.html">moc_dma-get_spu.c</a>.</p>
<p>References <a class="el" href="../../d7/df2/imoc__dma-get__ppu_8c-source.html#l00009">IMOC_get_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, and <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g53d36c567e4c98e5d258a7857096e7ab" title="Internal wrapper&#45;function for a blocking DMA&#45;get operation." alt="" coords="165,5,277,32"><area shape="rect" href="../../d3/dd3/group__internal__p2p__bmalloc.html#gad8750c7ba3d6da9c137c2c462d2c531" title="void bmalloc_print_nodes() { if (!bmalloc_first_node) printf(&quot;No nodes in list\\n&quot;);..." alt="" coords="325,5,421,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g3716465d42f20379bbf65002ecd9e448"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_Get_data" ref="g3716465d42f20379bbf65002ecd9e448" args="(void *target, uint32_t source, int count, MOC_Datatype datatype, int dest)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Get_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&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>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><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a blocking DMA-get operation.
<p>
Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.<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>target</em>&nbsp;</td><td><b>out</b> pointer to buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td><b>in</b> local-store address of data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td><b>in</b> rank of source spe </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>
<p>Definition at line <a class="el" href="../../dd/d90/moc__dma-get__ppu_8c-source.html#l00009">9</a> of file <a class="el" href="../../dd/d90/moc__dma-get__ppu_8c-source.html">moc_dma-get_ppu.c</a>.</p>
<p>References <a class="el" href="../../d7/df2/imoc__dma-get__ppu_8c-source.html#l00009">IMOC_get_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00095">IMOC_TEST_RANK</a>, and <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g53d36c567e4c98e5d258a7857096e7ab" title="Internal wrapper&#45;function for a blocking DMA&#45;get operation." alt="" coords="165,5,277,32"><area shape="rect" href="../../d3/dd3/group__internal__p2p__bmalloc.html#gad8750c7ba3d6da9c137c2c462d2c531" title="void bmalloc_print_nodes() { if (!bmalloc_first_node) printf(&quot;No nodes in list\\n&quot;);..." alt="" coords="325,5,421,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g9ff1639ada54f14994b7d199fc2ad984"></a><!-- doxytag: member="moc_dma_spu.h::MOC_IGet_data" ref="g9ff1639ada54f14994b7d199fc2ad984" args="(void *target, uint64_t source, int count, MOC_Datatype datatype, MOC_Request *request)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_IGet_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&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>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"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *&nbsp;</td>
<td class="paramname"> <em>request</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a non-blocking DMA-get operation.
<p>
Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.<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>target</em>&nbsp;</td><td><b>out</b> pointer to buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td><b>in</b> ea-address of data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </td></tr>
<tr><td valign="top"></td><td valign="top"><em>request</em>&nbsp;</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>&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>
<p>Definition at line <a class="el" href="../../d5/df4/moc__dma-iget__spu_8c-source.html#l00010">10</a> of file <a class="el" href="../../d5/df4/moc__dma-iget__spu_8c-source.html">moc_dma-iget_spu.c</a>.</p>
<p>References <a class="el" href="../../d7/de1/moc_8h-source.html#l00574">moc_request_struct::dma_data</a>, <a class="el" href="../../d6/df6/imoc__dma-iget__ppu_8c-source.html#l00010">IMOC_iget_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>, <a class="el" href="../../d4/d9b/imoc_8h-source.html#l00025">MOC_REQ_TYPE_DMA</a>, <a class="el" href="../../db/d17/structmoc__request__struct.html#4878ce199375f8a411520c887f908a4f">moc_request_struct::request_data</a>, and <a class="el" href="../../d7/de1/moc_8h-source.html#l00571">moc_request_struct::request_type</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g0c76eeaa08ac299e19dc2758d4142cd9" title="Internal wrapper&#45;function for a non&#45;blocking DMA&#45;get operation." alt="" coords="168,5,283,32"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g29d3bf9879af70f97d63e774a5aa4d33" title="Reserves a tag on the ppu, for communication with a given spu." alt="" coords="331,5,451,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g08f0af30f2e0e6840ec2be5ca93fd14f"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_IGet_data" ref="g08f0af30f2e0e6840ec2be5ca93fd14f" args="(void *target, uint32_t source, int count, MOC_Datatype datatype, int dest, MOC_Request *request)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_IGet_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&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>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"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *&nbsp;</td>
<td class="paramname"> <em>request</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a non-blocking DMA-get operation.
<p>
Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.<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>target</em>&nbsp;</td><td><b>out</b> pointer to buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td><b>in</b> local-store address of data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td><b>in</b> rank of source spe </td></tr>
<tr><td valign="top"></td><td valign="top"><em>request</em>&nbsp;</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>&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>
<p>Definition at line <a class="el" href="../../d8/da3/moc__dma-iget__ppu_8c-source.html#l00011">11</a> of file <a class="el" href="../../d8/da3/moc__dma-iget__ppu_8c-source.html">moc_dma-iget_ppu.c</a>.</p>
<p>References <a class="el" href="../../d7/de1/moc_8h-source.html#l00574">moc_request_struct::dma_data</a>, <a class="el" href="../../d6/df6/imoc__dma-iget__ppu_8c-source.html#l00010">IMOC_iget_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00095">IMOC_TEST_RANK</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>, <a class="el" href="../../d4/d9b/imoc_8h-source.html#l00025">MOC_REQ_TYPE_DMA</a>, <a class="el" href="../../db/d17/structmoc__request__struct.html#4878ce199375f8a411520c887f908a4f">moc_request_struct::request_data</a>, and <a class="el" href="../../d7/de1/moc_8h-source.html#l00571">moc_request_struct::request_type</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g0c76eeaa08ac299e19dc2758d4142cd9" title="Internal wrapper&#45;function for a non&#45;blocking DMA&#45;get operation." alt="" coords="168,5,283,32"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g29d3bf9879af70f97d63e774a5aa4d33" title="Reserves a tag on the ppu, for communication with a given spu." alt="" coords="331,5,451,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g3ee8513f7c0ebb782a3b0d17b8135693"></a><!-- doxytag: member="moc_dma_spu.h::MOC_IPut_data" ref="g3ee8513f7c0ebb782a3b0d17b8135693" args="(void *source, uint64_t target, int count, MOC_Datatype datatype, MOC_Request *request)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_IPut_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&nbsp;</td>
<td class="paramname"> <em>target</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"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *&nbsp;</td>
<td class="paramname"> <em>request</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a non-blocking DMA-put operation.
<p>
Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.<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> pointer to data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td><b>in</b> ea-address of buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </td></tr>
<tr><td valign="top"></td><td valign="top"><em>request</em>&nbsp;</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>&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>
<p>Definition at line <a class="el" href="../../d7/d6a/moc__dma-iput__spu_8c-source.html#l00011">11</a> of file <a class="el" href="../../d7/d6a/moc__dma-iput__spu_8c-source.html">moc_dma-iput_spu.c</a>.</p>
<p>References <a class="el" href="../../d7/de1/moc_8h-source.html#l00574">moc_request_struct::dma_data</a>, <a class="el" href="../../dd/d07/imoc__dma-iput__ppu_8c-source.html#l00019">IMOC_iput_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00067">MOC_ERR_BAD_SIZE</a>, <a class="el" href="../../d4/d9b/imoc_8h-source.html#l00025">MOC_REQ_TYPE_DMA</a>, <a class="el" href="../../db/d17/structmoc__request__struct.html#4878ce199375f8a411520c887f908a4f">moc_request_struct::request_data</a>, and <a class="el" href="../../d7/de1/moc_8h-source.html#l00571">moc_request_struct::request_type</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gc181bb2e3eb058990534c71355af3443" title="Internal wrapper&#45;function for a non&#45;blocking DMA&#45;put operation." alt="" coords="168,5,283,32"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g29d3bf9879af70f97d63e774a5aa4d33" title="Reserves a tag on the ppu, for communication with a given spu." alt="" coords="331,5,451,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g1fd9a141352dd4344e20f1bde778d265"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_IPut_data" ref="g1fd9a141352dd4344e20f1bde778d265" args="(void *source, uint32_t target, int count, MOC_Datatype datatype, int src, MOC_Request *request)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_IPut_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&nbsp;</td>
<td class="paramname"> <em>target</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>src</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> *&nbsp;</td>
<td class="paramname"> <em>request</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a non-blocking DMA-put operation.
<p>
Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.<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> pointer to data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td><b>in</b> local-store address of buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </td></tr>
<tr><td valign="top"></td><td valign="top"><em>src</em>&nbsp;</td><td><b>in</b> rank of source-SPE </td></tr>
<tr><td valign="top"></td><td valign="top"><em>request</em>&nbsp;</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>&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>
<p>Definition at line <a class="el" href="../../dd/dd5/moc__dma-iput__ppu_8c-source.html#l00011">11</a> of file <a class="el" href="../../dd/dd5/moc__dma-iput__ppu_8c-source.html">moc_dma-iput_ppu.c</a>.</p>
<p>References <a class="el" href="../../d7/de1/moc_8h-source.html#l00574">moc_request_struct::dma_data</a>, <a class="el" href="../../dd/d07/imoc__dma-iput__ppu_8c-source.html#l00019">IMOC_iput_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00095">IMOC_TEST_RANK</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00067">MOC_ERR_BAD_SIZE</a>, <a class="el" href="../../d4/d9b/imoc_8h-source.html#l00025">MOC_REQ_TYPE_DMA</a>, <a class="el" href="../../db/d17/structmoc__request__struct.html#4878ce199375f8a411520c887f908a4f">moc_request_struct::request_data</a>, and <a class="el" href="../../d7/de1/moc_8h-source.html#l00571">moc_request_struct::request_type</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gc181bb2e3eb058990534c71355af3443" title="Internal wrapper&#45;function for a non&#45;blocking DMA&#45;put operation." alt="" coords="168,5,283,32"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g29d3bf9879af70f97d63e774a5aa4d33" title="Reserves a tag on the ppu, for communication with a given spu." alt="" coords="331,5,451,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g1baab78008563718380887026cf9444f"></a><!-- doxytag: member="moc_dma_spu.h::MOC_Put_data" ref="g1baab78008563718380887026cf9444f" args="(void *source, uint64_t target, int count, MOC_Datatype datatype)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Put_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&nbsp;</td>
<td class="paramname"> <em>target</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><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a blocking DMA-put operation.
<p>
Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.<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> pointer to data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td><b>in</b> ea-address of buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </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>
<p>Definition at line <a class="el" href="../../d8/dbc/moc__dma-put__spu_8c-source.html#l00008">8</a> of file <a class="el" href="../../d8/dbc/moc__dma-put__spu_8c-source.html">moc_dma-put_spu.c</a>.</p>
<p>References <a class="el" href="../../db/db1/imoc__dma-put__ppu_8c-source.html#l00009">IMOC_put_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>, and <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00067">MOC_ERR_BAD_SIZE</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gb48c58191a7cf4d3e502d1c7a6c0ab9c" title="Internal wrapper&#45;function for a blocking DMA&#45;put operation." alt="" coords="165,5,277,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="ge07f4b35da50be472772f9d3a426669e"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_Put_data" ref="ge07f4b35da50be472772f9d3a426669e" args="(void *source, uint32_t target, int count, MOC_Datatype datatype, int src)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Put_data </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&nbsp;</td>
<td class="paramname"> <em>target</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>src</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wrapper-function for a blocking DMA-put operation.
<p>
Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.<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> pointer to data </td></tr>
<tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td><b>in</b> local-store address of buffer </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td><b>in</b> size of data in byte </td></tr>
<tr><td valign="top"></td><td valign="top"><em>datatype</em>&nbsp;</td><td><b>in</b> Type of Elements </td></tr>
<tr><td valign="top"></td><td valign="top"><em>src</em>&nbsp;</td><td><b>in</b> rank of source-SPE </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>
<p>Definition at line <a class="el" href="../../da/d4a/moc__dma-put__ppu_8c-source.html#l00009">9</a> of file <a class="el" href="../../da/d4a/moc__dma-put__ppu_8c-source.html">moc_dma-put_ppu.c</a>.</p>
<p>References <a class="el" href="../../db/db1/imoc__dma-put__ppu_8c-source.html#l00009">IMOC_put_data()</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00109">IMOC_TEST_BYTECOUNT</a>, <a class="el" href="../../d0/d87/imoc__macros_8h-source.html#l00095">IMOC_TEST_RANK</a>, <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00066">MOC_ERR_BAD_ALIGNMENT</a>, and <a class="el" href="../../d3/d95/moc__error__codes_8h-source.html#l00067">MOC_ERR_BAD_SIZE</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gb48c58191a7cf4d3e502d1c7a6c0ab9c" title="Internal wrapper&#45;function for a blocking DMA&#45;put operation." alt="" coords="165,5,277,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g342d07658aae4252a2e2cd6a8cc185dd"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_Test_data" ref="g342d07658aae4252a2e2cd6a8cc185dd" args="(MOC_Request *request, int *flag)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Test_data </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *&nbsp;</td>
<td class="paramname"> <em>request</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&nbsp;</td>
<td class="paramname"> <em>flag</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 MOC_IGet_data or IMOC_IPut_data is 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>&nbsp;</td><td><b>in</b> request-handle </td></tr>
<tr><td valign="top"></td><td valign="top"><em>flag</em>&nbsp;</td><td><b>out</b> true if operation is completed </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 when success otherwise error-code </dd></dl>
<p>Definition at line <a class="el" href="../../d7/dc5/moc__dma-test__ppu_8c-source.html#l00011">11</a> of file <a class="el" href="../../d7/dc5/moc__dma-test__ppu_8c-source.html">moc_dma-test_ppu.c</a>.</p>
<p>References <a class="el" href="../../d7/de1/moc_8h-source.html#l00574">moc_request_struct::dma_data</a>, <a class="el" href="../../d2/df9/imoc__dma-test__ppu_8c-source.html#l00009">IMOC_test_dma()</a>, and <a class="el" href="../../db/d17/structmoc__request__struct.html#4878ce199375f8a411520c887f908a4f">moc_request_struct::request_data</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gdc3d91a083a9dc3aa539aee4d56616f0" title="Tests if a IMOC_iget_data or IMOC_iput_data is completed." alt="" coords="169,5,284,32"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gf465203c58c5a8066a7ef3ee91b15cec" title="Releases a reserved tag." alt="" coords="333,5,453,32"></map>
</div>
</div>
</div><p>
<a class="anchor" name="g40b39bb7c07bc07d783c85b10f0bf60f"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_Translate_EA_to_LS" ref="g40b39bb7c07bc07d783c85b10f0bf60f" args="(uint64_t ea, int rank, uint32_t *ls)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Translate_EA_to_LS </td>
<td>(</td>
<td class="paramtype">uint64_t&nbsp;</td>
<td class="paramname"> <em>ea</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>rank</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&nbsp;</td>
<td class="paramname"> <em>ls</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Translates an effective-address of a SPU into the corresponding local-store address.
<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>ea</em>&nbsp;</td><td><b>in</b> effective-address </td></tr>
<tr><td valign="top"></td><td valign="top"><em>rank</em>&nbsp;</td><td><b>in</b> rank of SPU </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ls</em>&nbsp;</td><td><b>out</b> local-store address </td></tr>
</table>
</dl>
<p>Definition at line <a class="el" href="../../d4/d65/moc__translate__ea__ls__ppu_8c-source.html#l00004">4</a> of file <a class="el" href="../../d4/d65/moc__translate__ea__ls__ppu_8c-source.html">moc_translate_ea_ls_ppu.c</a>.</p>
<p>References <a class="el" href="../../db/d45/imoc__core__ppu_8h-source.html#l00106">moc_ppu_thread_count</a>, and <a class="el" href="../../db/d45/imoc__core__ppu_8h-source.html#l00123">moc_spu_thread_list</a>.</p>
</div>
</div><p>
<a class="anchor" name="g1ee1f004fff19c3338f2de9d96471693"></a><!-- doxytag: member="moc_dma_spu.h::MOC_Translate_LS_to_EA" ref="g1ee1f004fff19c3338f2de9d96471693" args="(void *ls, uint64_t *ea)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Translate_LS_to_EA </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>ls</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t *&nbsp;</td>
<td class="paramname"> <em>ea</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Translates a local-store address of the calling SPU into the corresponding effective-address.
<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>ls</em>&nbsp;</td><td><b>in</b> local-store address </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ea</em>&nbsp;</td><td><b>out</b> effective-address </td></tr>
</table>
</dl>
<p>Definition at line <a class="el" href="../../d7/d57/moc__translate__ls__ea__spu_8c-source.html#l00004">4</a> of file <a class="el" href="../../d7/d57/moc__translate__ls__ea__spu_8c-source.html">moc_translate_ls_ea_spu.c</a>.</p>
<p>References <a class="el" href="../../db/d45/imoc__core__ppu_8h-source.html#l00052">node_handle</a>.</p>
</div>
</div><p>
<a class="anchor" name="g0ba7b00fbebaabb8b39737a7c13efc67"></a><!-- doxytag: member="moc_dma_ppu.h::MOC_Wait_data" ref="g0ba7b00fbebaabb8b39737a7c13efc67" args="(MOC_Request *request)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MOC_Wait_data </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../db/d17/structmoc__request__struct.html">MOC_Request</a> *&nbsp;</td>
<td class="paramname"> <em>request</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Waits till a MOC_IGet_data or IMOC_IPut_data is 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>&nbsp;</td><td><b>in</b> request-handle </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 when success otherwise error-code </dd></dl>
<p>Definition at line <a class="el" href="../../d4/df9/moc__dma-wait__ppu_8c-source.html#l00011">11</a> of file <a class="el" href="../../d4/df9/moc__dma-wait__ppu_8c-source.html">moc_dma-wait_ppu.c</a>.</p>
<p>References <a class="el" href="../../d7/de1/moc_8h-source.html#l00574">moc_request_struct::dma_data</a>, <a class="el" href="../../d8/da5/imoc__dma-wait__ppu_8c-source.html#l00009">IMOC_wait_dma()</a>, and <a class="el" href="../../db/d17/structmoc__request__struct.html#4878ce199375f8a411520c887f908a4f">moc_request_struct::request_data</a>.</p>
<p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<p><center><img src="../../d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.png" border="0" usemap="#d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph_map" alt=""></center>
<map name="d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph_map">
<area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#g57b89667357146b299f32bd114e0e5ad" title="Waits till a IMOC_iget_data or IMOC_iput_data is completed." alt="" coords="172,5,287,32"><area shape="rect" href="../../d2/de2/group__internal__p2p__dma.html#gf465203c58c5a8066a7ef3ee91b15cec" title="Releases a reserved tag." alt="" coords="336,5,456,32"></map>
</div>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Thu Feb 12 13:51:02 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>