Files
rocm-systems/projects/hip/docs/RuntimeAPI/html/group__PeerToPeer.html
T
Maneesh Gupta 8f3bb9f4f7 Update doxygen documentation
[ROCm/hip commit: 26c6f9f861]
2016-04-19 22:44:58 +05:30

346 righe
21 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>HIP: Heterogenous-computing Interface for Portability: Device Memory Access</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">HIP: Heterogenous-computing Interface for Portability
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Device Memory Access<div class="ingroups"><a class="el" href="group__API.html">HIP API</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga0a1c9ccd775758d9d7d5b5a1f525b719"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__PeerToPeer.html#ga0a1c9ccd775758d9d7d5b5a1f525b719">hipDeviceCanAccessPeer</a> (int *canAccessPeer, int deviceId, int peerDeviceId)</td></tr>
<tr class="memdesc:ga0a1c9ccd775758d9d7d5b5a1f525b719"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if a device can access a peer's memory. <a href="#ga0a1c9ccd775758d9d7d5b5a1f525b719">More...</a><br/></td></tr>
<tr class="separator:ga0a1c9ccd775758d9d7d5b5a1f525b719"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0caca59034134d7a7bb893cc1caa653e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__PeerToPeer.html#ga0caca59034134d7a7bb893cc1caa653e">hipDeviceEnablePeerAccess</a> (int peerDeviceId, unsigned int flags)</td></tr>
<tr class="memdesc:ga0caca59034134d7a7bb893cc1caa653e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable direct access from current device's virtual address space to memory allocations physically located on a peer device. <a href="#ga0caca59034134d7a7bb893cc1caa653e">More...</a><br/></td></tr>
<tr class="separator:ga0caca59034134d7a7bb893cc1caa653e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga85030c72824fb60aaddc7374ab60481b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__PeerToPeer.html#ga85030c72824fb60aaddc7374ab60481b">hipDeviceDisablePeerAccess</a> (int peerDeviceId)</td></tr>
<tr class="memdesc:ga85030c72824fb60aaddc7374ab60481b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable direct access from current device's virtual address space to memory allocations physically located on a peer device. <a href="#ga85030c72824fb60aaddc7374ab60481b">More...</a><br/></td></tr>
<tr class="separator:ga85030c72824fb60aaddc7374ab60481b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5512f45e25c08052667c8ffe7162333b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__PeerToPeer.html#ga5512f45e25c08052667c8ffe7162333b">hipMemcpyPeer</a> (void *dst, int dstDeviceId, const void *src, int srcDeviceId, size_t sizeBytes)</td></tr>
<tr class="memdesc:ga5512f45e25c08052667c8ffe7162333b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies memory from one device to memory on another device. <a href="#ga5512f45e25c08052667c8ffe7162333b">More...</a><br/></td></tr>
<tr class="separator:ga5512f45e25c08052667c8ffe7162333b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga216f951370c931d22e80c089ab724ed9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__PeerToPeer.html#ga216f951370c931d22e80c089ab724ed9">hipMemcpyPeerAsync</a> (void *dst, int dstDevice, const void *src, int srcDevice, size_t sizeBytes, hipStream_t stream)</td></tr>
<tr class="memdesc:ga216f951370c931d22e80c089ab724ed9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies memory from one device to memory on another device. <a href="#ga216f951370c931d22e80c089ab724ed9">More...</a><br/></td></tr>
<tr class="separator:ga216f951370c931d22e80c089ab724ed9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>----------------------------------------------------------------------------------------------&mdash; </h2>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga0a1c9ccd775758d9d7d5b5a1f525b719"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a> hipDeviceCanAccessPeer </td>
<td>(</td>
<td class="paramtype">int *&#160;</td>
<td class="paramname"><em>canAccessPeer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>deviceId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>peerDeviceId</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Determine if a device can access a peer's memory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">canAccessPeer</td><td>returns true if specified devices are peers. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">device</td><td></td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">peerDevice</td><td>Returns "1" in <code>canAccessPeer</code> if the specified <code>device</code> is capable of directly accessing memory physically located on peerDevice , or "0" if not.</td></tr>
</table>
</dd>
</dl>
<p>Returns "0" in <code>canAccessPeer</code> if deviceId == peerDeviceId, and both are valid devices : a device is not a peer of itself.</p>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594aadfbdb847b149723c684ebd764556063" title="Successful completion. ">hipSuccess</a>, </dd>
<dd>
<a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a07ab9b704ea693c1781a52741c60cd0d" title="DeviceID must be in range 0...#compute-devices. ">hipErrorInvalidDevice</a> if deviceId or peerDeviceId are not valid devices</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>HCC returns 0 in *canAccessPeer ; Need to update this function when RT supports P2P </dd></dl>
</div>
</div>
<a class="anchor" id="ga85030c72824fb60aaddc7374ab60481b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a> hipDeviceDisablePeerAccess </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>peerDeviceId</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Disable direct access from current device's virtual address space to memory allocations physically located on a peer device. </p>
<p>Returns hipErrorPeerAccessNotEnabled if direct access to memory on peerDevice has not yet been enabled from the current device.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">peerDeviceId</td><td>Returns <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594aadfbdb847b149723c684ebd764556063" title="Successful completion. ">hipSuccess</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a2ee0bf2e64840f253e4a1b12bbaf2d09" title="Peer access was never enabled from the current device. ">hipErrorPeerAccessNotEnabled</a> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga0caca59034134d7a7bb893cc1caa653e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a> hipDeviceEnablePeerAccess </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>peerDeviceId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>flags</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Enable direct access from current device's virtual address space to memory allocations physically located on a peer device. </p>
<p>Memory which already allocated on peer device will be mapped into the address space of the current device. In addition, all future memory allocations on peerDeviceId will be mapped into the address space of the current device when the memory is allocated. The peer memory remains accessible from the current device until a call to hipDeviceDisablePeerAccess or hipDeviceReset.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">peerDeviceId</td><td></td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Returns <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594aadfbdb847b149723c684ebd764556063" title="Successful completion. ">hipSuccess</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a07ab9b704ea693c1781a52741c60cd0d" title="DeviceID must be in range 0...#compute-devices. ">hipErrorInvalidDevice</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a1e8215fe1108a508bad3944bce7b4d83" title="One or more of the parameters passed to the API call is NULL or not in an acceptable range...">hipErrorInvalidValue</a>, </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a5399c146f91246f8b77abcd4ea30e7ac" title="Peer access was already enabled from the current device. ">hipErrorPeerAccessAlreadyEnabled</a> if peer access is already enabled for this device. </dd></dl>
</div>
</div>
<a class="anchor" id="ga5512f45e25c08052667c8ffe7162333b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a> hipMemcpyPeer </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>dst</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dstDeviceId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>src</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>srcDeviceId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>sizeBytes</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Copies memory from one device to memory on another device. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>- Destination device pointer. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">dstDeviceId</td><td>- Destination device </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>- Source device pointer </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">srcDeviceId</td><td>- Source device </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">sizeBytes</td><td>- Size of memory copy in bytes</td></tr>
</table>
</dd>
</dl>
<p>Returns <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594aadfbdb847b149723c684ebd764556063" title="Successful completion. ">hipSuccess</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a1e8215fe1108a508bad3944bce7b4d83" title="One or more of the parameters passed to the API call is NULL or not in an acceptable range...">hipErrorInvalidValue</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a07ab9b704ea693c1781a52741c60cd0d" title="DeviceID must be in range 0...#compute-devices. ">hipErrorInvalidDevice</a> </p>
</div>
</div>
<a class="anchor" id="ga216f951370c931d22e80c089ab724ed9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__GlobalDefs.html#gadf5010f6e140a53ecbdf949e73e87594">hipError_t</a> hipMemcpyPeerAsync </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>dst</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dstDevice</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>src</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>srcDevice</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>sizeBytes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">hipStream_t&#160;</td>
<td class="paramname"><em>stream</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Copies memory from one device to memory on another device. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>- Destination device pointer. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">dstDevice</td><td>- Destination device </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>- Source device pointer </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">srcDevice</td><td>- Source device </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">sizeBytes</td><td>- Size of memory copy in bytes </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">stream</td><td>- Stream identifier</td></tr>
</table>
</dd>
</dl>
<p>Returns <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594aadfbdb847b149723c684ebd764556063" title="Successful completion. ">hipSuccess</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a1e8215fe1108a508bad3944bce7b4d83" title="One or more of the parameters passed to the API call is NULL or not in an acceptable range...">hipErrorInvalidValue</a>, <a class="el" href="group__GlobalDefs.html#ggadf5010f6e140a53ecbdf949e73e87594a07ab9b704ea693c1781a52741c60cd0d" title="DeviceID must be in range 0...#compute-devices. ">hipErrorInvalidDevice</a></p>
<dl class="bug"><dt><b><a class="el" href="bug.html#_bug000003">Bug:</a></b></dt><dd>This function uses a synchronous copy </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Apr 19 2016 22:44:02 for HIP: Heterogenous-computing Interface for Portability by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>