blob: a47ae4680c29535612f89c09d3e422c6ba826d59 [file] [log] [blame]
<!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>mxnet: mxnet::KVStore Class Reference</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">mxnet
</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="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><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 id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- 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>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Macros</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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacemxnet.html">mxnet</a></li><li class="navelem"><a class="el" href="classmxnet_1_1KVStore.html">KVStore</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classmxnet_1_1KVStore-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">mxnet::KVStore Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
</div><!--header-->
<div class="contents">
<p>distributed key-value store
<a href="classmxnet_1_1KVStore.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="kvstore_8h_source.html">kvstore.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for mxnet::KVStore:</div>
<div class="dyncontent">
<div class="center"><img src="classmxnet_1_1KVStore__coll__graph.png" border="0" usemap="#mxnet_1_1KVStore_coll__map" alt="Collaboration graph"/></div>
<map name="mxnet_1_1KVStore_coll__map" id="mxnet_1_1KVStore_coll__map">
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a6e4a76bd57f185349c58a5a658c32a64"><td class="memItemLeft" align="right" valign="top">typedef std::function&lt; void(int, <br class="typebreak"/>
const <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &amp;, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> *)&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a6e4a76bd57f185349c58a5a658c32a64">Updater</a></td></tr>
<tr class="memdesc:a6e4a76bd57f185349c58a5a658c32a64"><td class="mdescLeft">&#160;</td><td class="mdescRight">the prototype of user-defined updater <a href="#a6e4a76bd57f185349c58a5a658c32a64">More...</a><br/></td></tr>
<tr class="separator:a6e4a76bd57f185349c58a5a658c32a64"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50db5cb1a140fb84c8e31def54270ae3"><td class="memItemLeft" align="right" valign="top">typedef std::function&lt; void(int, <br class="typebreak"/>
const std::string &amp;)&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a50db5cb1a140fb84c8e31def54270ae3">Controller</a></td></tr>
<tr class="memdesc:a50db5cb1a140fb84c8e31def54270ae3"><td class="mdescLeft">&#160;</td><td class="mdescRight">the prototype of a server controller <a href="#a50db5cb1a140fb84c8e31def54270ae3">More...</a><br/></td></tr>
<tr class="separator:a50db5cb1a140fb84c8e31def54270ae3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a02e23071eb46464b58f2e2bf5654d6d6"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a02e23071eb46464b58f2e2bf5654d6d6">~KVStore</a> ()</td></tr>
<tr class="memdesc:a02e23071eb46464b58f2e2bf5654d6d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">virtual destructor <a href="#a02e23071eb46464b58f2e2bf5654d6d6">More...</a><br/></td></tr>
<tr class="separator:a02e23071eb46464b58f2e2bf5654d6d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a722b2150dbf50d528fce62307809f949"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a722b2150dbf50d528fce62307809f949">type</a> ()</td></tr>
<tr class="memdesc:a722b2150dbf50d528fce62307809f949"><td class="mdescLeft">&#160;</td><td class="mdescRight">return the type <a href="#a722b2150dbf50d528fce62307809f949">More...</a><br/></td></tr>
<tr class="separator:a722b2150dbf50d528fce62307809f949"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4e56c1f2b90bdd02e2c4e7d2abf6265"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#af4e56c1f2b90bdd02e2c4e7d2abf6265">Init</a> (const std::vector&lt; int &gt; &amp;keys, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;values)=0</td></tr>
<tr class="memdesc:af4e56c1f2b90bdd02e2c4e7d2abf6265"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a list of key-value pair to the store. <a href="#af4e56c1f2b90bdd02e2c4e7d2abf6265">More...</a><br/></td></tr>
<tr class="separator:af4e56c1f2b90bdd02e2c4e7d2abf6265"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a164c3314ba04dadab4fa2a7a74c440d4"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a164c3314ba04dadab4fa2a7a74c440d4">Init</a> (const std::vector&lt; std::string &gt; &amp;str_keys, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;values)=0</td></tr>
<tr class="memdesc:a164c3314ba04dadab4fa2a7a74c440d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a list of key-value pair to the store. <a href="#a164c3314ba04dadab4fa2a7a74c440d4">More...</a><br/></td></tr>
<tr class="separator:a164c3314ba04dadab4fa2a7a74c440d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56a3b6d687700f7c71310cd47ab5a54c"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a56a3b6d687700f7c71310cd47ab5a54c">Push</a> (const std::vector&lt; int &gt; &amp;keys, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;values, int priority=0)=0</td></tr>
<tr class="memdesc:a56a3b6d687700f7c71310cd47ab5a54c"><td class="mdescLeft">&#160;</td><td class="mdescRight">push a list of key-value pairs into the store <a href="#a56a3b6d687700f7c71310cd47ab5a54c">More...</a><br/></td></tr>
<tr class="separator:a56a3b6d687700f7c71310cd47ab5a54c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2a9cf32a8da809bb4ae4abf40159c96"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#aa2a9cf32a8da809bb4ae4abf40159c96">Push</a> (const std::vector&lt; std::string &gt; &amp;str_keys, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;values, int priority=0)=0</td></tr>
<tr class="memdesc:aa2a9cf32a8da809bb4ae4abf40159c96"><td class="mdescLeft">&#160;</td><td class="mdescRight">push a list of key-value pairs into the store <a href="#aa2a9cf32a8da809bb4ae4abf40159c96">More...</a><br/></td></tr>
<tr class="separator:aa2a9cf32a8da809bb4ae4abf40159c96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98e041793c133337cecc441e441ed721"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a98e041793c133337cecc441e441ed721">Pull</a> (const std::vector&lt; int &gt; &amp;keys, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> * &gt; &amp;values, int priority=0)=0</td></tr>
<tr class="memdesc:a98e041793c133337cecc441e441ed721"><td class="mdescLeft">&#160;</td><td class="mdescRight">pull a list of key-value pairs from the store <a href="#a98e041793c133337cecc441e441ed721">More...</a><br/></td></tr>
<tr class="separator:a98e041793c133337cecc441e441ed721"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a473e95dbf4618e34ba2e519944ece2b4"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a473e95dbf4618e34ba2e519944ece2b4">Pull</a> (const std::vector&lt; std::string &gt; &amp;str_keys, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> * &gt; &amp;values, int priority=0)=0</td></tr>
<tr class="memdesc:a473e95dbf4618e34ba2e519944ece2b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">pull a list of key-value pairs from the store <a href="#a473e95dbf4618e34ba2e519944ece2b4">More...</a><br/></td></tr>
<tr class="separator:a473e95dbf4618e34ba2e519944ece2b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a352ef7eae04211eca1ed47401a6d15d5"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a352ef7eae04211eca1ed47401a6d15d5">set_updater</a> (const <a class="el" href="classmxnet_1_1KVStore.html#a6e4a76bd57f185349c58a5a658c32a64">Updater</a> &amp;updater)</td></tr>
<tr class="memdesc:a352ef7eae04211eca1ed47401a6d15d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">set an updater <a href="#a352ef7eae04211eca1ed47401a6d15d5">More...</a><br/></td></tr>
<tr class="separator:a352ef7eae04211eca1ed47401a6d15d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa87753d90fc7e75234229834ea23abb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#afa87753d90fc7e75234229834ea23abb">set_barrier_before_exit</a> (const bool barrier_before_exit)</td></tr>
<tr class="separator:afa87753d90fc7e75234229834ea23abb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a262ef45340106fdb5c2a296c3cb711b1"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a262ef45340106fdb5c2a296c3cb711b1">get_rank</a> () const </td></tr>
<tr class="separator:a262ef45340106fdb5c2a296c3cb711b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1fd19b2a123b6069b35e1e8b7fad9dc3"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a1fd19b2a123b6069b35e1e8b7fad9dc3">get_group_size</a> () const </td></tr>
<tr class="separator:a1fd19b2a123b6069b35e1e8b7fad9dc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5c48df3aade761a547a1dc6f7b8702d"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#af5c48df3aade761a547a1dc6f7b8702d">get_num_dead_node</a> (int node_id, int timeout=60) const </td></tr>
<tr class="separator:af5c48df3aade761a547a1dc6f7b8702d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f9275fb7a11589fae1dcc5a8a3354ac"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a4f9275fb7a11589fae1dcc5a8a3354ac">Barrier</a> ()</td></tr>
<tr class="memdesc:a4f9275fb7a11589fae1dcc5a8a3354ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">global barrier among all worker machines <a href="#a4f9275fb7a11589fae1dcc5a8a3354ac">More...</a><br/></td></tr>
<tr class="separator:a4f9275fb7a11589fae1dcc5a8a3354ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ff4ca05f3c519ebbc2e46264e8b63dd"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a4ff4ca05f3c519ebbc2e46264e8b63dd">SendCommandToServers</a> (int cmd_id, const std::string &amp;cmd_body)</td></tr>
<tr class="memdesc:a4ff4ca05f3c519ebbc2e46264e8b63dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Send a command to all server nodes. <a href="#a4ff4ca05f3c519ebbc2e46264e8b63dd">More...</a><br/></td></tr>
<tr class="separator:a4ff4ca05f3c519ebbc2e46264e8b63dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae137ab8b5407060529c18a8084946d0b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#ae137ab8b5407060529c18a8084946d0b">RunServer</a> (const <a class="el" href="classmxnet_1_1KVStore.html#a50db5cb1a140fb84c8e31def54270ae3">Controller</a> &amp;controller)</td></tr>
<tr class="memdesc:ae137ab8b5407060529c18a8084946d0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run as server (or scheduler) <a href="#ae137ab8b5407060529c18a8084946d0b">More...</a><br/></td></tr>
<tr class="separator:ae137ab8b5407060529c18a8084946d0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a6d54b075d3b43577f8339b25000a0c82"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmxnet_1_1KVStore.html">KVStore</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a6d54b075d3b43577f8339b25000a0c82">Create</a> (const char *<a class="el" href="classmxnet_1_1KVStore.html#a722b2150dbf50d528fce62307809f949">type</a>=&quot;local&quot;)</td></tr>
<tr class="memdesc:a6d54b075d3b43577f8339b25000a0c82"><td class="mdescLeft">&#160;</td><td class="mdescRight">Factory function to create a new <a class="el" href="classmxnet_1_1KVStore.html" title="distributed key-value store ">KVStore</a>. <a href="#a6d54b075d3b43577f8339b25000a0c82">More...</a><br/></td></tr>
<tr class="separator:a6d54b075d3b43577f8339b25000a0c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d919a7a4c9495e9a569c8d733d6325f"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a5d919a7a4c9495e9a569c8d733d6325f">InitPSEnv</a> (const std::unordered_map&lt; std::string, std::string &gt; &amp;envs)</td></tr>
<tr class="memdesc:a5d919a7a4c9495e9a569c8d733d6325f"><td class="mdescLeft">&#160;</td><td class="mdescRight">initalize ps-lite environment variables <a href="#a5d919a7a4c9495e9a569c8d733d6325f">More...</a><br/></td></tr>
<tr class="separator:a5d919a7a4c9495e9a569c8d733d6325f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab216fb292fa77e843e95f474fa671a20"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#ab216fb292fa77e843e95f474fa671a20">IsWorkerNode</a> ()</td></tr>
<tr class="separator:ab216fb292fa77e843e95f474fa671a20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a101178924ce1d635b0c8c2a5bce0ceaf"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a101178924ce1d635b0c8c2a5bce0ceaf">IsServerNode</a> ()</td></tr>
<tr class="separator:a101178924ce1d635b0c8c2a5bce0ceaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41113b9dfeab6c705ba064cc3f010fb4"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a41113b9dfeab6c705ba064cc3f010fb4">IsSchedulerNode</a> ()</td></tr>
<tr class="separator:a41113b9dfeab6c705ba064cc3f010fb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a01befb768a81a8e7a366708240ee6d06"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmxnet_1_1KVStore.html#a6e4a76bd57f185349c58a5a658c32a64">Updater</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a01befb768a81a8e7a366708240ee6d06">updater_</a></td></tr>
<tr class="memdesc:a01befb768a81a8e7a366708240ee6d06"><td class="mdescLeft">&#160;</td><td class="mdescRight">the user-defined updater <a href="#a01befb768a81a8e7a366708240ee6d06">More...</a><br/></td></tr>
<tr class="separator:a01befb768a81a8e7a366708240ee6d06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1023ca677c6e87ccc7d92c4df48bd40"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#ad1023ca677c6e87ccc7d92c4df48bd40">type_</a></td></tr>
<tr class="memdesc:ad1023ca677c6e87ccc7d92c4df48bd40"><td class="mdescLeft">&#160;</td><td class="mdescRight">the kvstore type <a href="#ad1023ca677c6e87ccc7d92c4df48bd40">More...</a><br/></td></tr>
<tr class="separator:ad1023ca677c6e87ccc7d92c4df48bd40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a265215cd3de11dd36d9e79330a535615"><td class="memItemLeft" align="right" valign="top">std::atomic&lt; bool &gt;<br class="typebreak"/>
barrier_before_exit_&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1KVStore.html#a265215cd3de11dd36d9e79330a535615">true</a></td></tr>
<tr class="memdesc:a265215cd3de11dd36d9e79330a535615"><td class="mdescLeft">&#160;</td><td class="mdescRight">whether to do barrier when finalize <a href="#a265215cd3de11dd36d9e79330a535615">More...</a><br/></td></tr>
<tr class="separator:a265215cd3de11dd36d9e79330a535615"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>distributed key-value store </p>
<p>A distributed key-value store for data synchronization over multiple devices/machines. It support user-defined updater. </p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a class="anchor" id="a50db5cb1a140fb84c8e31def54270ae3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef std::function&lt;void(int, const std::string&amp;)&gt; <a class="el" href="classmxnet_1_1KVStore.html#a50db5cb1a140fb84c8e31def54270ae3">mxnet::KVStore::Controller</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>the prototype of a server controller </p>
</div>
</div>
<a class="anchor" id="a6e4a76bd57f185349c58a5a658c32a64"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef std::function&lt;void(int, const <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a>&amp;, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a>*)&gt; <a class="el" href="classmxnet_1_1KVStore.html#a6e4a76bd57f185349c58a5a658c32a64">mxnet::KVStore::Updater</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>the prototype of user-defined updater </p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a02e23071eb46464b58f2e2bf5654d6d6"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual mxnet::KVStore::~KVStore </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>virtual destructor </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a4f9275fb7a11589fae1dcc5a8a3354ac"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Barrier </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>global barrier among all worker machines </p>
<p>But note that, this functions only blocks the main thread of workers until all of them are reached this point. It doesn't guarantee that all operations issued before are actually finished, such as <a class="el" href="classmxnet_1_1KVStore.html#a56a3b6d687700f7c71310cd47ab5a54c">Push</a> and <a class="el" href="classmxnet_1_1KVStore.html#a98e041793c133337cecc441e441ed721">Pull</a>. </p>
</div>
</div>
<a class="anchor" id="a6d54b075d3b43577f8339b25000a0c82"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="classmxnet_1_1KVStore.html">KVStore</a>* mxnet::KVStore::Create </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>type</em> = <code>&quot;local&quot;</code></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Factory function to create a new <a class="el" href="classmxnet_1_1KVStore.html" title="distributed key-value store ">KVStore</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">type</td><td>The type of the kvstore,<ul>
<li>'local' or 'local_update_cpu' or 'local_allreduce_cpu' multi-devices on a single machine. can be also</li>
<li>'device' or 'local_allreduce_device' : same to local but use gpus for kv allreduce</li>
<li>'dist_*' : multi-machines </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a new created <a class="el" href="classmxnet_1_1KVStore.html" title="distributed key-value store ">KVStore</a>. </dd></dl>
</div>
</div>
<a class="anchor" id="a1fd19b2a123b6069b35e1e8b7fad9dc3"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int mxnet::KVStore::get_group_size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>The number of worker nodes </dd></dl>
</div>
</div>
<a class="anchor" id="af5c48df3aade761a547a1dc6f7b8702d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int mxnet::KVStore::get_num_dead_node </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>node_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout</em> = <code>60</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>the number of dead node(s) specified by {node_id} </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">node_id</td><td>can be a node group or a single node </td></tr>
<tr><td class="paramname">timeout</td><td>a node fails to send heartbeart in {timeout} seconds will be presumed as 'dead'</td></tr>
</table>
</dd>
</dl>
<p>Always return 0 when type == "local" </p>
</div>
</div>
<a class="anchor" id="a262ef45340106fdb5c2a296c3cb711b1"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int mxnet::KVStore::get_rank </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>The rank of this node in its group, which is in [0, GroupSize).</dd></dl>
<p>Always return 0 when type == "local" </p>
</div>
</div>
<a class="anchor" id="af4e56c1f2b90bdd02e2c4e7d2abf6265"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Init </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>keys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>values</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize a list of key-value pair to the store. </p>
<p>One must initalize the key before <a class="el" href="classmxnet_1_1KVStore.html#a56a3b6d687700f7c71310cd47ab5a54c">Push</a> and <a class="el" href="classmxnet_1_1KVStore.html#a98e041793c133337cecc441e441ed721">Pull</a>, and a key should be only initialized once</p>
<p>It returns after data have been initialized successfully.</p>
<p>For multiple workers, all workers must call <a class="el" href="classmxnet_1_1KVStore.html#af4e56c1f2b90bdd02e2c4e7d2abf6265">Init</a>. But only worker 0 (<a class="el" href="classmxnet_1_1KVStore.html#a262ef45340106fdb5c2a296c3cb711b1">get_rank()</a> == 0)'s values are used for initialization. So others' values can be empty (but not keys). This function blocks until all workers are finished. That means, any worker can push and pull on the keys now.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">keys</td><td>a list of unique keys </td></tr>
<tr><td class="paramname">values</td><td>a list of values </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a164c3314ba04dadab4fa2a7a74c440d4"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Init </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
<td class="paramname"><em>str_keys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>values</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize a list of key-value pair to the store. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">keys</td><td>a list of unique keys in string format </td></tr>
<tr><td class="paramname">values</td><td>a list of values </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a5d919a7a4c9495e9a569c8d733d6325f"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void mxnet::KVStore::InitPSEnv </td>
<td>(</td>
<td class="paramtype">const std::unordered_map&lt; std::string, std::string &gt; &amp;&#160;</td>
<td class="paramname"><em>envs</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>initalize ps-lite environment variables </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">envs</td><td>key-value environment variables </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a41113b9dfeab6c705ba064cc3f010fb4"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool mxnet::KVStore::IsSchedulerNode </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>whether or not this process is a scheduler node.</dd></dl>
<p>Always returns false when type == "local" </p>
</div>
</div>
<a class="anchor" id="a101178924ce1d635b0c8c2a5bce0ceaf"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool mxnet::KVStore::IsServerNode </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>whether or not this process is a server node.</dd></dl>
<p>Always returns false when type == "local" </p>
</div>
</div>
<a class="anchor" id="ab216fb292fa77e843e95f474fa671a20"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool mxnet::KVStore::IsWorkerNode </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>whether or not this process is a worker node.</dd></dl>
<p>Always returns true when type == "local" </p>
</div>
</div>
<a class="anchor" id="a98e041793c133337cecc441e441ed721"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Pull </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>keys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>values</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>priority</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>pull a list of key-value pairs from the store </p>
<p>One must call <a class="el" href="classmxnet_1_1KVStore.html#af4e56c1f2b90bdd02e2c4e7d2abf6265" title="Initialize a list of key-value pair to the store. ">Init()</a> on <em>key</em> before. And <em>value</em> should be pre-allocated</p>
<p>This function returns after adding a pull operator to the engine. Any following operator requiring reading value will be blocked until the actual pull is finished. One can wait the pull is finished by</p>
<ul>
<li>when type == "local" <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; v : values) v.WaitToRead()</div>
</div><!-- fragment --></li>
<li>when type == "dist" <div class="fragment"><div class="line">Wait(keys);</div>
</div><!-- fragment --></li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">keys</td><td>the list of keys </td></tr>
<tr><td class="paramname">values</td><td>the list of buffers for the pulled data, they should be preallocated </td></tr>
<tr><td class="paramname">priority</td><td>Priority of the action. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a473e95dbf4618e34ba2e519944ece2b4"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Pull </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
<td class="paramname"><em>str_keys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>values</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>priority</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>pull a list of key-value pairs from the store </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">keys</td><td>the list of keys in string format </td></tr>
<tr><td class="paramname">values</td><td>the list of buffers for the pulled data, they should be preallocated </td></tr>
<tr><td class="paramname">priority</td><td>Priority of the action. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a56a3b6d687700f7c71310cd47ab5a54c"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Push </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>keys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>values</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>priority</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>push a list of key-value pairs into the store </p>
<p>If a key appears mulitple times in <em>keys</em>, then the according values will be aggregated (summed) before pushing.</p>
<p>The (aggregated) values are merged into the store one by one</p>
<div class="fragment"><div class="line">updater(key, value, &amp;value_in_store);</div>
</div><!-- fragment --><p>One can set a user-defined updater by <a class="el" href="classmxnet_1_1KVStore.html#a352ef7eae04211eca1ed47401a6d15d5">set_updater</a>. The default updater is Assign.</p>
<p>This function returns after adding a push operator to the engine. Any following operator requiring writing value will be blocked until the actual push is finished. One can wait the push is finished by</p>
<ul>
<li>when type == "local" <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; v : values) v.WaitToWrite()</div>
</div><!-- fragment --></li>
<li>when type == "dist" <div class="fragment"><div class="line">Wait(keys);</div>
</div><!-- fragment --></li>
</ul>
<p>One must call <a class="el" href="classmxnet_1_1KVStore.html#af4e56c1f2b90bdd02e2c4e7d2abf6265" title="Initialize a list of key-value pair to the store. ">Init()</a> on every key before. And the value <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> should be always has the same shape as being inited.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">keys</td><td>the list of keys </td></tr>
<tr><td class="paramname">values</td><td>the list of values </td></tr>
<tr><td class="paramname">priority</td><td>Priority of the action. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="aa2a9cf32a8da809bb4ae4abf40159c96"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::Push </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
<td class="paramname"><em>str_keys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>values</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>priority</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>push a list of key-value pairs into the store </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">keys</td><td>the list of keys in string format </td></tr>
<tr><td class="paramname">values</td><td>the list of values </td></tr>
<tr><td class="paramname">priority</td><td>Priority of the action. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ae137ab8b5407060529c18a8084946d0b"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::RunServer </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classmxnet_1_1KVStore.html#a50db5cb1a140fb84c8e31def54270ae3">Controller</a> &amp;&#160;</td>
<td class="paramname"><em>controller</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Run as server (or scheduler) </p>
<p>The behavior of a server: </p>
<div class="fragment"><div class="line"><span class="keywordflow">while</span>(receive(x)) {</div>
<div class="line"> <span class="keywordflow">if</span> (IsCommand(x)) controller(x)</div>
<div class="line"> else if (IsKeyValue(x)) updater(x)</div>
<div class="line">}</div>
</div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">controller</td><td>the user-defined server controller </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a4ff4ca05f3c519ebbc2e46264e8b63dd"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::SendCommandToServers </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>cmd_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>cmd_body</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Send a command to all server nodes. </p>
<p>Send a command to all server nodes, which will make each server node run <em>controller</em> </p>
<p>This function returns after the command has been executed in all server nodes</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cmd_id</td><td>the head of the command </td></tr>
<tr><td class="paramname">cmd_body</td><td>the body of the command </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="afa87753d90fc7e75234229834ea23abb"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void mxnet::KVStore::set_barrier_before_exit </td>
<td>(</td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>barrier_before_exit</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a352ef7eae04211eca1ed47401a6d15d5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::KVStore::set_updater </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classmxnet_1_1KVStore.html#a6e4a76bd57f185349c58a5a658c32a64">Updater</a> &amp;&#160;</td>
<td class="paramname"><em>updater</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>set an updater </p>
<p>Given a key, assume <em>x</em> is the received (pushed) value and <em>y</em> is the value stored on the store node. The store updates <em>y</em> by <code>h(x, &amp;y)</code>. The default <em>h</em> is ASSIGN, namely <code>*y = x</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">updater</td><td>user-defined updater, default is assign </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a722b2150dbf50d528fce62307809f949"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::string&amp; mxnet::KVStore::type </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>return the type </p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="a265215cd3de11dd36d9e79330a535615"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::atomic&lt;bool&gt; barrier_before_exit_ mxnet::KVStore::true</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>whether to do barrier when finalize </p>
</div>
</div>
<a class="anchor" id="ad1023ca677c6e87ccc7d92c4df48bd40"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string mxnet::KVStore::type_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>the kvstore type </p>
</div>
</div>
<a class="anchor" id="a01befb768a81a8e7a366708240ee6d06"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classmxnet_1_1KVStore.html#a6e4a76bd57f185349c58a5a658c32a64">Updater</a> mxnet::KVStore::updater_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>the user-defined updater </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/mxnet/<a class="el" href="kvstore_8h_source.html">kvstore.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Aug 6 2017 07:14:31 for mxnet 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>