blob: 1ce6163c620220a6c3e302bfa542daa6cb85fbf9 [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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: /work/mxnet/include/mxnet/base.h Source File</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/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></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 id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mxnet
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</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="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_1143c7affb9ebd026cb6818dd282def7.html">mxnet</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">base.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="include_2mxnet_2base_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * KIND, either express or implied. See the License for the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * under the License.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifndef MXNET_BASE_H_</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define MXNET_BASE_H_</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html">dmlc/base.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2io_8h.html">dmlc/io.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="type__traits_8h.html">dmlc/type_traits.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="parameter_8h.html">dmlc/parameter.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="tensor_8h.html">mshadow/tensor.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// nnvm headers for symbolic construction.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="op_8h.html">nnvm/op.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="symbolic_8h.html">nnvm/symbolic.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="libinfo_8h.html">libinfo.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="include_2mxnet_2tuple_8h.html">tuple.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#if DMLC_USE_CXX11 &amp;&amp; defined(__GNUC__) &amp;&amp; !defined(__clang_version__)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#if __GNUC__ == 4 &amp;&amp; __GNUC_MINOR__ &lt; 8</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#error &quot;Currently we need g++ 4.8 or higher to fully support c++11 features&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define override</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#define final</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#ifdef MXNET_EXPORTS</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#define MXNET_API __declspec(dllexport)</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#define MXNET_API __declspec(dllimport)</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#a91a09948aaaffa1eb64508db79009a05"> 62</a></span>&#160;<span class="preprocessor">#define MXNET_API</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#ifndef MXNET_PREDICT_ONLY</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#a966330f8fb9e6e7bd65ab3603beb49db"> 69</a></span>&#160;<span class="preprocessor">#define MXNET_PREDICT_ONLY 0</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#aee5302444d57230419d0cd77bf72770d"> 73</a></span>&#160;<span class="preprocessor">#define MXNET_MAJOR 1</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#aea13dab0ddd61ec142feb0b6759c6acf"> 75</a></span>&#160;<span class="preprocessor">#define MXNET_MINOR 9</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#a76b95738a0fa0478cd508f324d2ac49d"> 77</a></span>&#160;<span class="preprocessor">#define MXNET_PATCH 1</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#a18d0da52a992a3360eaa481b43094e80"> 79</a></span>&#160;<span class="preprocessor">#define MXNET_VERSION (MXNET_MAJOR*10000 + MXNET_MINOR*100 + MXNET_PATCH)</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#a4a85852d8252d23300a8364d48a1c8ea"> 81</a></span>&#160;<span class="preprocessor">#define MXNET_MAKE_VERSION(major, minor, patch) ((major)*10000 + (minor)*100 + patch)</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="include_2mxnet_2base_8h.html#ae34be2bf889657a1452b87fd36f034c3"> 85</a></span>&#160;<span class="preprocessor">#define PROFILER_MESSAGE_FUNCNAME (__FUNCTION__)</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacemxnet.html">mxnet</a> {</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a850af9d76d9d4beaeb5234c1434973e3"> 90</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="structmshadow_1_1cpu.html">mshadow::cpu</a> <a class="code" href="namespacemxnet.html#a850af9d76d9d4beaeb5234c1434973e3">cpu</a>;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a31ef33571a4f6ba8847eeee1f4907141"> 92</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="structmshadow_1_1gpu.html">mshadow::gpu</a> <a class="code" href="namespacemxnet.html#a31ef33571a4f6ba8847eeee1f4907141">gpu</a>;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef"> 94</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespacemshadow.html#adcbc2e1131386fccb1474b0bdf045926">mshadow::index_t</a> <a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4"> 96</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespacemshadow.html#a10a73dbdb4a2b833495c2315b6da69ce">mshadow::default_real_t</a> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ac2fb286fd7ddfbc7af1456f6c7a7ee52"> 98</a></span>&#160;<span class="keyword">using</span> <a class="code" href="classnnvm_1_1Op.html">Op</a> = <a class="code" href="namespacemxnet.html#ac2fb286fd7ddfbc7af1456f6c7a7ee52">nnvm::Op</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html"> 101</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structmxnet_1_1Context.html">Context</a> {</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e"> 103</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e">DeviceType</a> {</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140"> 104</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140">kCPU</a> = <a class="code" href="structmshadow_1_1cpu.html#a57f74b500825e21c0c246ad5b4e5016b">cpu::kDevMask</a>,</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf"> 105</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf">kGPU</a> = <a class="code" href="structmshadow_1_1gpu.html#a15467f39ddeed96fa259efda7c988f05">gpu::kDevMask</a>,</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34"> 106</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34">kCPUPinned</a> = 3,</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78"> 107</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78">kCPUShared</a> = 5,</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; };</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3"> 110</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e">DeviceType</a> <a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9"> 112</a></span>&#160; int32_t <a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a290642a21363bef82bcb32cf7f98b884"> 114</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html#a290642a21363bef82bcb32cf7f98b884">Context</a>() : dev_type(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140">kCPU</a>), dev_id(0) {}</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a41f5317543ececa2d0feeea1093e219c"> 119</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e">DeviceType</a> <a class="code" href="structmxnet_1_1Context.html#a41f5317543ececa2d0feeea1093e219c">dev_mask</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (dev_type == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34">kCPUPinned</a> || dev_type == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78">kCPUShared</a>) <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140">kCPU</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#af2514ea43328d921a74423b7670a3fad"> 126</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="structmxnet_1_1Context.html#af2514ea43328d921a74423b7670a3fad">real_dev_id</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (dev_type == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34">kCPUPinned</a> || dev_type == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf">kGPU</a>) <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#afd07473e20810635cb3fffc216d76494">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> &amp;b) <span class="keyword">const</span>;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a8b8d414a429c12ab55cfa9ed13539393"> 141</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#a8b8d414a429c12ab55cfa9ed13539393">operator==</a>(<span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> &amp;b)<span class="keyword"> const </span>{</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> dev_type == b.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> &amp;&amp; dev_id == b.<a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a7e84dc72147472e72b50e8545780fd1e"> 149</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#a7e84dc72147472e72b50e8545780fd1e">operator!=</a>(<span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> &amp;b)<span class="keyword"> const </span>{</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == b);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a9ea910ddb7e15d51320806b1666bf6c5"> 156</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="structmxnet_1_1Context.html#a9ea910ddb7e15d51320806b1666bf6c5">Save</a>(<a class="code" href="classdmlc_1_1Stream.html">dmlc::Stream</a> *strm)<span class="keyword"> const </span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; strm-&gt;<a class="code" href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">Write</a>(&amp;dev_type, <span class="keyword">sizeof</span>(dev_type));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; strm-&gt;<a class="code" href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">Write</a>(&amp;dev_id, <span class="keyword">sizeof</span>(dev_id));</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a882305327a53b9b9a82f5802b4b013e3"> 165</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#a882305327a53b9b9a82f5802b4b013e3">Load</a>(<a class="code" href="classdmlc_1_1Stream.html">dmlc::Stream</a> *strm) {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (strm-&gt;<a class="code" href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">Read</a>(&amp;dev_type, <span class="keyword">sizeof</span>(dev_type)) != <span class="keyword">sizeof</span>(<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (strm-&gt;<a class="code" href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">Read</a>(&amp;dev_id, <span class="keyword">sizeof</span>(int32_t)) != <span class="keyword">sizeof</span>(int32_t)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a7433936d1daf38f7dced0de49fbe6a4b"> 171</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> int32_t <a class="code" href="structmxnet_1_1Context.html#a7433936d1daf38f7dced0de49fbe6a4b">kMaxDevType</a> = 6;</div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="structmxnet_1_1Context.html#a958219ae412395685ef1d82af0dbbe67"> 173</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> int32_t <a class="code" href="structmxnet_1_1Context.html#a958219ae412395685ef1d82af0dbbe67">kMaxDevID</a> = 16;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">Create</a>(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e">DeviceType</a> dev_type, int32_t dev_id = -1);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a4bb231d70623fde216de51589347e513">CPU</a>(int32_t dev_id = 0);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a39d1a2b59bce135da127475995a58671">GPU</a>(int32_t dev_id = -1);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> int32_t <a class="code" href="structmxnet_1_1Context.html#adde995df8e2b9871151921a932788cd2">GetGPUCount</a>();</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#ab50bb4c3439d200f5e82702cec587aef">GPUDriverPresent</a>();</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> int32_t <a class="code" href="structmxnet_1_1Context.html#a8368603622d6af4609fe78f572387b59">GetGPUStreamsPerWorker</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structmxnet_1_1Context.html#a7e1512621b22a14035f740703d3eb006">GetGPUMemoryInformation</a>(<span class="keywordtype">int</span> dev, uint64_t *free, uint64_t *total);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a420d4e662a5129b202507f42c991391c">CPUPinned</a>(int32_t dev_id = -1);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a8e090b1fcc96b682512bcc22fc521f80">CPUShared</a>(int32_t dev_id = 0);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a4b7e2c87496a90b6b0ed06eab61956c4">FromString</a>(<span class="keyword">const</span> std::string&amp; str);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> CudaLibChecks();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDNN</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> CuDNNLibChecks();</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;};</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html"> 241</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1GPUAuxStream.html">GPUAuxStream</a> {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html#aaf171cedf3d88ab52b94df5fdaa391bf"> 247</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1GPUAuxStream.html#aaf171cedf3d88ab52b94df5fdaa391bf">GPUAuxStream</a>(<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a> *primary_stream) :</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; primary_stream_(primary_stream),</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; aux_stream_(primary_stream),</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; gpu_stream_sync_event_(nullptr) {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="structmxnet_1_1Context.html#a8368603622d6af4609fe78f572387b59">Context::GetGPUStreamsPerWorker</a>() &gt;= 2) {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// Create auxiliary stream on the same device with the same properties as the primary stream</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">bool</span> primary_has_blas_handle =</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; primary_stream-&gt;<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html#a19575a11766ad1de72a5d174300e79a6">blas_handle_ownership_</a> == <a class="code" href="structmshadow_1_1Stream.html">mshadow::Stream&lt;gpu&gt;::OwnHandle</a>;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordtype">bool</span> primary_has_dnn_handle =</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; primary_stream-&gt;<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html#a5a71ddbac6b9e29728b13a384ca6af98">dnn_handle_ownership_</a> == <a class="code" href="structmshadow_1_1Stream.html">mshadow::Stream&lt;gpu&gt;::OwnHandle</a>;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; aux_stream_ = <a class="code" href="namespacemshadow.html#a89b0009770915378c66bc9647040776d">mshadow::NewStream&lt;gpu&gt;</a>(primary_has_blas_handle,</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; primary_has_dnn_handle,</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; primary_stream-&gt;<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html#a08409eff15849ff7abec6efe8019e396">dev_id</a>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="3rdparty_2mshadow_2mshadow_2base_8h.html#a8f433b4dd005a854eec58178ffd3d4bd">MSHADOW_CUDA_CALL</a>(cudaEventCreateWithFlags(&amp;gpu_stream_sync_event_, cudaEventDisableTiming));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html#af47783e8d21ce90a42e1f4fc74b01119"> 264</a></span>&#160; <a class="code" href="classmxnet_1_1GPUAuxStream.html#af47783e8d21ce90a42e1f4fc74b01119">~GPUAuxStream</a>() {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// If the aux_stream_ == primary_stream_, then we created no new streams to destroy.</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (aux_stream_ != primary_stream_) {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="3rdparty_2mshadow_2mshadow_2base_8h.html#a144171091678fc9f3cbc8a9612db899d">MSHADOW_CATCH_ERROR</a>(<a class="code" href="namespacemshadow.html#a5d8687821fd6ecf8e271b996df51415c">mshadow::DeleteStream&lt;gpu&gt;</a>(aux_stream_));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="3rdparty_2mshadow_2mshadow_2base_8h.html#a144171091678fc9f3cbc8a9612db899d">MSHADOW_CATCH_ERROR</a>(cudaEventDestroy(gpu_stream_sync_event_));</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html#a2add80e8e23386df1646434630f405f4"> 274</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1GPUAuxStream.html#a2add80e8e23386df1646434630f405f4">PreAuxStreamUseSync</a>() {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// If the aux_stream_ == primary_stream_, then no synchronization is necessary.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (aux_stream_ != primary_stream_)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; StreamSync(primary_stream_, aux_stream_, gpu_stream_sync_event_);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html#a3f103abfadfb2f6d637430b2d92cce7b"> 282</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1GPUAuxStream.html#a3f103abfadfb2f6d637430b2d92cce7b">PostAuxStreamUseSync</a>() {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// If the aux_stream_ == primary_stream_, then no synchronization is necessary.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (aux_stream_ != primary_stream_)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; StreamSync(aux_stream_, primary_stream_, gpu_stream_sync_event_);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html#adb9e0d791fdc2370b946e95007385bb0"> 288</a></span>&#160; <a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a> *<a class="code" href="classmxnet_1_1GPUAuxStream.html#adb9e0d791fdc2370b946e95007385bb0">GetStream</a>() { <span class="keywordflow">return</span> aux_stream_; }</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classmxnet_1_1GPUAuxStream.html#a6976536b11894e584f72678213aba993"> 295</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1GPUAuxStream.html#a6976536b11894e584f72678213aba993">StreamSync</a>(<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a> *s1, <a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a> *s2, cudaEvent_t event) {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="3rdparty_2mshadow_2mshadow_2base_8h.html#a8f433b4dd005a854eec58178ffd3d4bd">MSHADOW_CUDA_CALL</a>(cudaEventRecord(event, s1-&gt;<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html#a07e51e51721e2561c26dd93bbd03da18">stream_</a>));</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="3rdparty_2mshadow_2mshadow_2base_8h.html#a8f433b4dd005a854eec58178ffd3d4bd">MSHADOW_CUDA_CALL</a>(cudaStreamWaitEvent(s2-&gt;<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html#a07e51e51721e2561c26dd93bbd03da18">stream_</a>, event, 0));</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a> *primary_stream_;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a> *aux_stream_;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; cudaEvent_t gpu_stream_sync_event_;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;};</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classmxnet_1_1SyncedGPUAuxStream.html"> 314</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a> {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classmxnet_1_1SyncedGPUAuxStream.html#aea10f57259cf765e22e48d3b58777f78"> 320</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html#aea10f57259cf765e22e48d3b58777f78">SyncedGPUAuxStream</a>(<a class="code" href="classmxnet_1_1GPUAuxStream.html">GPUAuxStream</a> *gpu_aux_stream) : gpu_aux_stream_(gpu_aux_stream) {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; gpu_aux_stream_-&gt;PreAuxStreamUseSync();</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classmxnet_1_1SyncedGPUAuxStream.html#a5cb6f54e19a02b05d94daf4454a4d032"> 324</a></span>&#160; <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html#a5cb6f54e19a02b05d94daf4454a4d032">~SyncedGPUAuxStream</a>() {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; gpu_aux_stream_-&gt;PostAuxStreamUseSync();</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>(<a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>&amp; operator=(<a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="classmxnet_1_1SyncedGPUAuxStream.html#a0638a0d262d28d7719dfe23b603a6d2f"> 336</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt;gpu&gt;</a>* <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html#a0638a0d262d28d7719dfe23b603a6d2f">GetStream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> gpu_aux_stream_-&gt;<a class="code" href="structmshadow_1_1Stream_3_01gpu_01_4.html#a714d3b2fc16db0a400e18147cc678e21">GetStream</a>();</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classmxnet_1_1GPUAuxStream.html">GPUAuxStream</a> *gpu_aux_stream_;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;};</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="preprocessor">#endif // MXNET_USE_CUDA</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html"> 349</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structmxnet_1_1RunContext.html">RunContext</a> {</div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#ace5970ed7c25ccc98ffd0dcf35fd3c88"> 351</a></span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1RunContext.html#ace5970ed7c25ccc98ffd0dcf35fd3c88">ctx</a>;</div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#a5c4294a44199f4056915e32a7f70fe0e"> 355</a></span>&#160; <span class="keywordtype">void</span> *<a class="code" href="structmxnet_1_1RunContext.html#a5c4294a44199f4056915e32a7f70fe0e">stream</a>;</div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#aefb2816ee8261ff91c733073da897611"> 359</a></span>&#160; <span class="keywordtype">void</span> *<a class="code" href="structmxnet_1_1RunContext.html#aefb2816ee8261ff91c733073da897611">aux_stream</a>;</div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#a6c1bcba3d060cd16330f447792956928"> 363</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1RunContext.html#a6c1bcba3d060cd16330f447792956928">is_bulk</a>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> xpu&gt;</div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#a9901db00632774aef42081ceda0d23f1"> 370</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmshadow_1_1Stream.html">mshadow::Stream&lt;xpu&gt;</a>* <a class="code" href="structmxnet_1_1RunContext.html#a9901db00632774aef42081ceda0d23f1">get_stream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="structmshadow_1_1Stream.html">mshadow::Stream&lt;xpu&gt;</a>*<span class="keyword">&gt;</span>(stream);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#a5591cfe410da5ab004c4733a8a2fb0c7"> 378</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a> <a class="code" href="structmxnet_1_1RunContext.html#a5591cfe410da5ab004c4733a8a2fb0c7">get_gpu_aux_stream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1SyncedGPUAuxStream.html">SyncedGPUAuxStream</a>(static_cast&lt;GPUAuxStream*&gt;(aux_stream));</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="structmxnet_1_1RunContext.html#a323fa88ecd7bfb7d5f7d9ca727101d3e"> 383</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">Context</a>&amp; <a class="code" href="structmxnet_1_1RunContext.html#a323fa88ecd7bfb7d5f7d9ca727101d3e">get_ctx</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> ctx;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;};</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;} <span class="comment">// namespace mxnet</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacemxnet.html">mxnet</a> {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment">// implementing Context</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#afd07473e20810635cb3fffc216d76494">Context::operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> &amp;b)<span class="keyword"> const </span>{</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> == b.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>) {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a> &lt; b.<a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> &lt; b.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;}</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">Context::Create</a>(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e">DeviceType</a> <a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>, int32_t <a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> ctx;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; ctx.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> = <a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; ctx.<a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a> = dev_id &lt; 0 ? 0 : <a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span> (dev_type &amp; <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf">kGPU</a>) {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; CudaLibChecks();</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDNN</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; CuDNNLibChecks();</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (dev_id &lt; 0) {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; CHECK_EQ(cudaGetDevice(&amp;ctx.<a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>), cudaSuccess);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; LOG(FATAL) &lt;&lt; <span class="stringliteral">&quot;Please compile with CUDA enabled for cuda features&quot;</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">return</span> ctx;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;}</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a4bb231d70623fde216de51589347e513">Context::CPU</a>(int32_t dev_id) {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">Create</a>(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140">kCPU</a>, dev_id);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;}</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a420d4e662a5129b202507f42c991391c">Context::CPUPinned</a>(int32_t dev_id) {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">Create</a>(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34">kCPUPinned</a>, dev_id);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;}</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a8e090b1fcc96b682512bcc22fc521f80">Context::CPUShared</a>(int32_t dev_id) {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">Create</a>(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78">kCPUShared</a>, dev_id);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;}</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;<span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a39d1a2b59bce135da127475995a58671">Context::GPU</a>(int32_t dev_id) {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">Create</a>(<a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf">kGPU</a>, dev_id);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;}</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1Context.html#ab50bb4c3439d200f5e82702cec587aef">Context::GPUDriverPresent</a>() {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordtype">int</span> cuda_driver_version = 0;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; CHECK_EQ(cudaDriverGetVersion(&amp;cuda_driver_version), cudaSuccess);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">return</span> cuda_driver_version &gt; 0;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;}</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="keyword">inline</span> int32_t <a class="code" href="structmxnet_1_1Context.html#adde995df8e2b9871151921a932788cd2">Context::GetGPUCount</a>() {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="structmxnet_1_1Context.html#ab50bb4c3439d200f5e82702cec587aef">GPUDriverPresent</a>()) {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; int32_t count;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; cudaError_t e = cudaGetDeviceCount(&amp;count);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="comment">// TODO(junwu): Remove e == cudaErrorInsufficientDriver</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// This is skipped for working around wheel build system with older CUDA driver.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span> (e == cudaErrorNoDevice || e == cudaErrorInsufficientDriver) {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; CHECK_EQ(e, cudaSuccess) &lt;&lt; <span class="stringliteral">&quot; CUDA: &quot;</span> &lt;&lt; cudaGetErrorString(e);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span> count;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;}</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="keyword">inline</span> int32_t <a class="code" href="structmxnet_1_1Context.html#a8368603622d6af4609fe78f572387b59">Context::GetGPUStreamsPerWorker</a>() {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// The default number of streams available if the user has not set MXNET_GPU_WORKER_NSTREAMS.</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keyword">const</span> int32_t default_num_streams = 1;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// The get_aux_stream() interface can supply one additional stream beyond the standard one.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">static</span> int32_t num_streams =</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; dmlc::GetEnv(<span class="stringliteral">&quot;MXNET_GPU_WORKER_NSTREAMS&quot;</span>, default_num_streams) &gt;= 2 ? 2 : 1;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> num_streams;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;}</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="structmxnet_1_1Context.html#a7e1512621b22a14035f740703d3eb006">Context::GetGPUMemoryInformation</a>(<span class="keywordtype">int</span> dev, uint64_t *free_mem,</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; uint64_t *total_mem) {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="preprocessor">#if MXNET_USE_CUDA</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordtype">size_t</span> memF, memT;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; cudaError_t e;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordtype">int</span> curDevice;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; e = cudaGetDevice(&amp;curDevice);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; CHECK_EQ(e, cudaSuccess) &lt;&lt; <span class="stringliteral">&quot; CUDA: &quot;</span> &lt;&lt; cudaGetErrorString(e);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; e = cudaSetDevice(dev);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; CHECK_EQ(e, cudaSuccess) &lt;&lt; <span class="stringliteral">&quot; CUDA: &quot;</span> &lt;&lt; cudaGetErrorString(e);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; e = cudaMemGetInfo(&amp;memF, &amp;memT);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; CHECK_EQ(e, cudaSuccess) &lt;&lt; <span class="stringliteral">&quot; CUDA: &quot;</span> &lt;&lt; cudaGetErrorString(e);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; e = cudaSetDevice(curDevice);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; CHECK_EQ(e, cudaSuccess) &lt;&lt; <span class="stringliteral">&quot; CUDA: &quot;</span> &lt;&lt; cudaGetErrorString(e);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; *free_mem = <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(memF);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; *total_mem = <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(memT);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; LOG(FATAL)</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; &lt;&lt; <span class="stringliteral">&quot;This call is only supported for MXNet built with CUDA support.&quot;</span>;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="structmxnet_1_1Context.html#a4b7e2c87496a90b6b0ed06eab61956c4">Context::FromString</a>(<span class="keyword">const</span> std::string&amp; str) {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> ret;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">try</span> {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keyword">const</span> std::string::size_type l = str.find(<span class="charliteral">&#39;(&#39;</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; CHECK_NE(l, std::string::npos);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> std::string::size_type r = str.find(<span class="charliteral">&#39;)&#39;</span>);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; CHECK_EQ(r, str.length()-1);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">const</span> std::string type = str.substr(0, l);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordtype">int</span> <span class="keywordtype">id</span> = std::stoi(str.substr(l+1, r-l-1));</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;cpu&quot;</span>) {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; ret = <a class="code" href="structmxnet_1_1Context.html#a4bb231d70623fde216de51589347e513">CPU</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;gpu&quot;</span>) {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; ret = <a class="code" href="structmxnet_1_1Context.html#a39d1a2b59bce135da127475995a58671">GPU</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;cpu_pinned&quot;</span>) {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; ret = <a class="code" href="structmxnet_1_1Context.html#a420d4e662a5129b202507f42c991391c">CPUPinned</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;cpu_shared&quot;</span>) {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; ret = <a class="code" href="structmxnet_1_1Context.html#a8e090b1fcc96b682512bcc22fc521f80">CPUShared</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; LOG(FATAL) &lt;&lt; <span class="stringliteral">&quot;Invalid context string &quot;</span> &lt;&lt; str;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; } <span class="keywordflow">catch</span> (...) {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; LOG(FATAL) &lt;&lt; <span class="stringliteral">&quot;Invalid context string &quot;</span> &lt;&lt; str;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;}</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="keyword">inline</span> std::ostream&amp; <a class="code" href="namespacedmlc.html#acf31f99192b5ed0d5d77398d58023912">operator&lt;&lt;</a>(std::ostream &amp;out, <span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> &amp;ctx) {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span> (ctx.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140">Context::kCPU</a>) {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; out &lt;&lt; <span class="stringliteral">&quot;cpu(&quot;</span>;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ctx.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf">Context::kGPU</a>) {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; out &lt;&lt; <span class="stringliteral">&quot;gpu(&quot;</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ctx.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34">Context::kCPUPinned</a>) {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; out &lt;&lt; <span class="stringliteral">&quot;cpu_pinned(&quot;</span>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ctx.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a> == <a class="code" href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78">Context::kCPUShared</a>) {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; out &lt;&lt; <span class="stringliteral">&quot;cpu_shared(&quot;</span>;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; out &lt;&lt; <span class="stringliteral">&quot;unknown(&quot;</span>;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; out &lt;&lt; ctx.<a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a> &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> out;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;}</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="comment">// describe op registration point</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor">#define STRINGIZE_DETAIL(x) #x</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="preprocessor">#define STRINGIZE(x) STRINGIZE_DETAIL(x)</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="preprocessor">#define MXNET_DESCRIBE(...) describe(__VA_ARGS__ &quot;\n\nFrom:&quot; __FILE__ &quot;:&quot; STRINGIZE(__LINE__))</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="preprocessor">#define ADD_FILELINE &quot;\n\nDefined in &quot; __FILE__ &quot;:L&quot; STRINGIZE(__LINE__)</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="preprocessor">#if MXNET_USE_MKLDNN == 1 || MXNET_USE_INTGEMM == 1</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;constexpr <span class="keywordtype">size_t</span> kMKLDNNAlign = 64;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;} <span class="comment">// namespace mxnet</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacestd.html">std</a> {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;mxnet::<a class="code" href="structmxnet_1_1Context.html">Context</a>&gt; {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordtype">size_t</span> operator()(<span class="keyword">const</span> <a class="code" href="structmxnet_1_1Context.html">mxnet::Context</a>&amp; ctx)<span class="keyword"> const </span>{</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordtype">size_t</span> res = 0;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; res = <a class="code" href="namespacedmlc.html#a8620a9c7572cd3aab1ed3135b7a8e137">dmlc::HashCombine</a>(res, static_cast&lt;size_t&gt;(ctx.<a class="code" href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">dev_type</a>));</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; res = <a class="code" href="namespacedmlc.html#a8620a9c7572cd3aab1ed3135b7a8e137">dmlc::HashCombine</a>(res, static_cast&lt;size_t&gt;(ctx.<a class="code" href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">dev_id</a>));</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;};</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="preprocessor">#if __cplusplus &lt; 201402L &amp;&amp; !defined(_MSC_VER)</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span>... Args&gt;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="keyword">inline</span> std::unique_ptr&lt;T&gt; make_unique(Args&amp;&amp;... args) {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">return</span> std::unique_ptr&lt;T&gt;(<span class="keyword">new</span> T(std::forward&lt;Args&gt;(args)...));</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;}</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;} <span class="comment">// namespace std</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="tensor__blob_8h.html">./tensor_blob.h</a>&quot;</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="preprocessor">#endif // MXNET_BASE_H_</span></div><div class="ttc" id="structmxnet_1_1Context_html_a958219ae412395685ef1d82af0dbbe67"><div class="ttname"><a href="structmxnet_1_1Context.html#a958219ae412395685ef1d82af0dbbe67">mxnet::Context::kMaxDevID</a></div><div class="ttdeci">static const int32_t kMaxDevID</div><div class="ttdoc">the maximal device index </div><div class="ttdef"><b>Definition:</b> base.h:173</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_a6c1bcba3d060cd16330f447792956928"><div class="ttname"><a href="structmxnet_1_1RunContext.html#a6c1bcba3d060cd16330f447792956928">mxnet::RunContext::is_bulk</a></div><div class="ttdeci">bool is_bulk</div><div class="ttdoc">indicator of whether this execution is run in bulk mode </div><div class="ttdef"><b>Definition:</b> base.h:363</div></div>
<div class="ttc" id="structmshadow_1_1Stream_3_01gpu_01_4_html_a714d3b2fc16db0a400e18147cc678e21"><div class="ttname"><a href="structmshadow_1_1Stream_3_01gpu_01_4.html#a714d3b2fc16db0a400e18147cc678e21">mshadow::Stream&lt; gpu &gt;::GetStream</a></div><div class="ttdeci">static cudaStream_t GetStream(Stream&lt; gpu &gt; *stream)</div><div class="ttdoc">returns actual cudaStream_t given an input GPU stream pointer </div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:97</div></div>
<div class="ttc" id="structmshadow_1_1Stream_3_01gpu_01_4_html_a5a71ddbac6b9e29728b13a384ca6af98"><div class="ttname"><a href="structmshadow_1_1Stream_3_01gpu_01_4.html#a5a71ddbac6b9e29728b13a384ca6af98">mshadow::Stream&lt; gpu &gt;::dnn_handle_ownership_</a></div><div class="ttdeci">HandleState dnn_handle_ownership_</div><div class="ttdoc">cudnn handle ownership </div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:60</div></div>
<div class="ttc" id="namespacemxnet_html"><div class="ttname"><a href="namespacemxnet.html">mxnet</a></div><div class="ttdoc">namespace of mxnet </div><div class="ttdef"><b>Definition:</b> api_registry.h:33</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a7e1512621b22a14035f740703d3eb006"><div class="ttname"><a href="structmxnet_1_1Context.html#a7e1512621b22a14035f740703d3eb006">mxnet::Context::GetGPUMemoryInformation</a></div><div class="ttdeci">static void GetGPUMemoryInformation(int dev, uint64_t *free, uint64_t *total)</div><div class="ttdoc">get the free and total available memory on a GPU </div></div>
<div class="ttc" id="classmxnet_1_1SyncedGPUAuxStream_html_aea10f57259cf765e22e48d3b58777f78"><div class="ttname"><a href="classmxnet_1_1SyncedGPUAuxStream.html#aea10f57259cf765e22e48d3b58777f78">mxnet::SyncedGPUAuxStream::SyncedGPUAuxStream</a></div><div class="ttdeci">SyncedGPUAuxStream(GPUAuxStream *gpu_aux_stream)</div><div class="ttdoc">constructor. </div><div class="ttdef"><b>Definition:</b> base.h:320</div></div>
<div class="ttc" id="structmshadow_1_1Stream_3_01gpu_01_4_html"><div class="ttname"><a href="structmshadow_1_1Stream_3_01gpu_01_4.html">mshadow::Stream&lt; gpu &gt;</a></div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:37</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a41f5317543ececa2d0feeea1093e219c"><div class="ttname"><a href="structmxnet_1_1Context.html#a41f5317543ececa2d0feeea1093e219c">mxnet::Context::dev_mask</a></div><div class="ttdeci">DeviceType dev_mask() const</div><div class="ttdoc">Get corresponding device mask. </div><div class="ttdef"><b>Definition:</b> base.h:119</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a8b8d414a429c12ab55cfa9ed13539393"><div class="ttname"><a href="structmxnet_1_1Context.html#a8b8d414a429c12ab55cfa9ed13539393">mxnet::Context::operator==</a></div><div class="ttdeci">bool operator==(const Context &amp;b) const</div><div class="ttdoc">check if current context equals another one </div><div class="ttdef"><b>Definition:</b> base.h:141</div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html_a3f103abfadfb2f6d637430b2d92cce7b"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html#a3f103abfadfb2f6d637430b2d92cce7b">mxnet::GPUAuxStream::PostAuxStreamUseSync</a></div><div class="ttdeci">void PostAuxStreamUseSync()</div><div class="ttdoc">Makes future primary stream work wait on the completion of existing aux stream work. </div><div class="ttdef"><b>Definition:</b> base.h:282</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_adde995df8e2b9871151921a932788cd2"><div class="ttname"><a href="structmxnet_1_1Context.html#adde995df8e2b9871151921a932788cd2">mxnet::Context::GetGPUCount</a></div><div class="ttdeci">static int32_t GetGPUCount()</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a882305327a53b9b9a82f5802b4b013e3"><div class="ttname"><a href="structmxnet_1_1Context.html#a882305327a53b9b9a82f5802b4b013e3">mxnet::Context::Load</a></div><div class="ttdeci">bool Load(dmlc::Stream *strm)</div><div class="ttdoc">load the content from binary stream </div><div class="ttdef"><b>Definition:</b> base.h:165</div></div>
<div class="ttc" id="namespacemxnet_html_a4421326e33f2a848cb2fa3e70ab24ff4"><div class="ttname"><a href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">mxnet::real_t</a></div><div class="ttdeci">mshadow::default_real_t real_t</div><div class="ttdoc">data type that will be used to store ndarray </div><div class="ttdef"><b>Definition:</b> base.h:96</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_afd07473e20810635cb3fffc216d76494"><div class="ttname"><a href="structmxnet_1_1Context.html#afd07473e20810635cb3fffc216d76494">mxnet::Context::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const Context &amp;b) const</div><div class="ttdoc">Comparator, used to enable Context as std::map key. </div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a39d1a2b59bce135da127475995a58671"><div class="ttname"><a href="structmxnet_1_1Context.html#a39d1a2b59bce135da127475995a58671">mxnet::Context::GPU</a></div><div class="ttdeci">static Context GPU(int32_t dev_id=-1)</div></div>
<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdef"><b>Definition:</b> optional.h:251</div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html_aaf171cedf3d88ab52b94df5fdaa391bf"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html#aaf171cedf3d88ab52b94df5fdaa391bf">mxnet::GPUAuxStream::GPUAuxStream</a></div><div class="ttdeci">GPUAuxStream(mshadow::Stream&lt; gpu &gt; *primary_stream)</div><div class="ttdoc">constructor. </div><div class="ttdef"><b>Definition:</b> base.h:247</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_ace5970ed7c25ccc98ffd0dcf35fd3c88"><div class="ttname"><a href="structmxnet_1_1RunContext.html#ace5970ed7c25ccc98ffd0dcf35fd3c88">mxnet::RunContext::ctx</a></div><div class="ttdeci">Context ctx</div><div class="ttdoc">base Context </div><div class="ttdef"><b>Definition:</b> base.h:351</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_a5591cfe410da5ab004c4733a8a2fb0c7"><div class="ttname"><a href="structmxnet_1_1RunContext.html#a5591cfe410da5ab004c4733a8a2fb0c7">mxnet::RunContext::get_gpu_aux_stream</a></div><div class="ttdeci">SyncedGPUAuxStream get_gpu_aux_stream() const</div><div class="ttdoc">get an RAII object that transparently handles the syncing of the auxiliary stream. </div><div class="ttdef"><b>Definition:</b> base.h:378</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a7433936d1daf38f7dced0de49fbe6a4b"><div class="ttname"><a href="structmxnet_1_1Context.html#a7433936d1daf38f7dced0de49fbe6a4b">mxnet::Context::kMaxDevType</a></div><div class="ttdeci">static const int32_t kMaxDevType</div><div class="ttdoc">the maximal device type </div><div class="ttdef"><b>Definition:</b> base.h:171</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html"><div class="ttname"><a href="structmxnet_1_1RunContext.html">mxnet::RunContext</a></div><div class="ttdoc">execution time context. The information needed in runtime for actual execution. </div><div class="ttdef"><b>Definition:</b> base.h:349</div></div>
<div class="ttc" id="classdmlc_1_1Stream_html"><div class="ttname"><a href="classdmlc_1_1Stream.html">dmlc::Stream</a></div><div class="ttdoc">interface of stream I/O for serialization </div><div class="ttdef"><b>Definition:</b> io.h:30</div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html">mxnet::GPUAuxStream</a></div><div class="ttdoc">Holds an auxiliary mshadow gpu stream that can be synced with a primary stream. </div><div class="ttdef"><b>Definition:</b> base.h:241</div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html_adb9e0d791fdc2370b946e95007385bb0"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html#adb9e0d791fdc2370b946e95007385bb0">mxnet::GPUAuxStream::GetStream</a></div><div class="ttdeci">mshadow::Stream&lt; gpu &gt; * GetStream()</div><div class="ttdoc">Getter for created auxiliary stream. </div><div class="ttdef"><b>Definition:</b> base.h:288</div></div>
<div class="ttc" id="namespacemshadow_html_a89b0009770915378c66bc9647040776d"><div class="ttname"><a href="namespacemshadow.html#a89b0009770915378c66bc9647040776d">mshadow::NewStream&lt; gpu &gt;</a></div><div class="ttdeci">Stream&lt; gpu &gt; * NewStream&lt; gpu &gt;(bool create_blas_handle, bool create_dnn_handle, int dev_id)</div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:210</div></div>
<div class="ttc" id="classmxnet_1_1SyncedGPUAuxStream_html"><div class="ttname"><a href="classmxnet_1_1SyncedGPUAuxStream.html">mxnet::SyncedGPUAuxStream</a></div><div class="ttdoc">Provides automatic coordination of an auxilary stream with a primary one. This object, upon construction, prepares an aux stream for use by syncing it with enqueued primary-stream work. Object destruction will sync again so future primary-stream work will wait on enqueued aux-stream work. If MXNET_GPU_WORKER_NSTREAMS == 1, then this defaults simply: the primary stream will equal the aux stream and the syncs will be executed as nops. See ./src/operator/cudnn/cudnn_convolution-inl.h for a usage example. </div><div class="ttdef"><b>Definition:</b> base.h:314</div></div>
<div class="ttc" id="3rdparty_2mshadow_2mshadow_2base_8h_html_a8f433b4dd005a854eec58178ffd3d4bd"><div class="ttname"><a href="3rdparty_2mshadow_2mshadow_2base_8h.html#a8f433b4dd005a854eec58178ffd3d4bd">MSHADOW_CUDA_CALL</a></div><div class="ttdeci">#define MSHADOW_CUDA_CALL(func)</div><div class="ttdoc">Protected cuda call in mshadow. </div><div class="ttdef"><b>Definition:</b> base.h:278</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_aefb2816ee8261ff91c733073da897611"><div class="ttname"><a href="structmxnet_1_1RunContext.html#aefb2816ee8261ff91c733073da897611">mxnet::RunContext::aux_stream</a></div><div class="ttdeci">void * aux_stream</div><div class="ttdoc">the auxiliary stream of the device, can be nullptr or Stream&lt;gpu&gt;* in GPU mode </div><div class="ttdef"><b>Definition:</b> base.h:359</div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html_af47783e8d21ce90a42e1f4fc74b01119"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html#af47783e8d21ce90a42e1f4fc74b01119">mxnet::GPUAuxStream::~GPUAuxStream</a></div><div class="ttdeci">~GPUAuxStream()</div><div class="ttdoc">destructor </div><div class="ttdef"><b>Definition:</b> base.h:264</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_a9901db00632774aef42081ceda0d23f1"><div class="ttname"><a href="structmxnet_1_1RunContext.html#a9901db00632774aef42081ceda0d23f1">mxnet::RunContext::get_stream</a></div><div class="ttdeci">mshadow::Stream&lt; xpu &gt; * get_stream() const</div><div class="ttdoc">get mshadow stream from Context </div><div class="ttdef"><b>Definition:</b> base.h:370</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a66040df23c2a5663f29bc50aa0bbace3"><div class="ttname"><a href="structmxnet_1_1Context.html#a66040df23c2a5663f29bc50aa0bbace3">mxnet::Context::dev_type</a></div><div class="ttdeci">DeviceType dev_type</div><div class="ttdoc">the device type we run the op on </div><div class="ttdef"><b>Definition:</b> base.h:110</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140"><div class="ttname"><a href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea1aced5778bb0d64d4ce6bd4c0a86d140">mxnet::Context::kCPU</a></div><div class="ttdef"><b>Definition:</b> base.h:104</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_ab50bb4c3439d200f5e82702cec587aef"><div class="ttname"><a href="structmxnet_1_1Context.html#ab50bb4c3439d200f5e82702cec587aef">mxnet::Context::GPUDriverPresent</a></div><div class="ttdeci">static bool GPUDriverPresent()</div></div>
<div class="ttc" id="tensor_8h_html"><div class="ttname"><a href="tensor_8h.html">tensor.h</a></div><div class="ttdoc">header file of tensor data structure and functions This lib requires explicit memory allocation and d...</div></div>
<div class="ttc" id="structmshadow_1_1cpu_html"><div class="ttname"><a href="structmshadow_1_1cpu.html">mshadow::cpu</a></div><div class="ttdoc">device name CPU </div><div class="ttdef"><b>Definition:</b> tensor.h:39</div></div>
<div class="ttc" id="structmshadow_1_1gpu_html"><div class="ttname"><a href="structmshadow_1_1gpu.html">mshadow::gpu</a></div><div class="ttdoc">device name GPU </div><div class="ttdef"><b>Definition:</b> tensor.h:46</div></div>
<div class="ttc" id="structmshadow_1_1gpu_html_a15467f39ddeed96fa259efda7c988f05"><div class="ttname"><a href="structmshadow_1_1gpu.html#a15467f39ddeed96fa259efda7c988f05">mshadow::gpu::kDevMask</a></div><div class="ttdeci">static const int kDevMask</div><div class="ttdoc">device flag number, identifies this device </div><div class="ttdef"><b>Definition:</b> tensor.h:50</div></div>
<div class="ttc" id="structmshadow_1_1Stream_3_01gpu_01_4_html_a19575a11766ad1de72a5d174300e79a6"><div class="ttname"><a href="structmshadow_1_1Stream_3_01gpu_01_4.html#a19575a11766ad1de72a5d174300e79a6">mshadow::Stream&lt; gpu &gt;::blas_handle_ownership_</a></div><div class="ttdeci">HandleState blas_handle_ownership_</div><div class="ttdoc">cudnn handle </div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:56</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a8368603622d6af4609fe78f572387b59"><div class="ttname"><a href="structmxnet_1_1Context.html#a8368603622d6af4609fe78f572387b59">mxnet::Context::GetGPUStreamsPerWorker</a></div><div class="ttdeci">static int32_t GetGPUStreamsPerWorker()</div></div>
<div class="ttc" id="namespacedmlc_html_a8620a9c7572cd3aab1ed3135b7a8e137"><div class="ttname"><a href="namespacedmlc.html#a8620a9c7572cd3aab1ed3135b7a8e137">dmlc::HashCombine</a></div><div class="ttdeci">size_t HashCombine(size_t key, const T &amp;value)</div><div class="ttdoc">hash an object and combines the key with previous keys </div><div class="ttdef"><b>Definition:</b> common.h:37</div></div>
<div class="ttc" id="structmshadow_1_1Stream_3_01gpu_01_4_html_a08409eff15849ff7abec6efe8019e396"><div class="ttname"><a href="structmshadow_1_1Stream_3_01gpu_01_4.html#a08409eff15849ff7abec6efe8019e396">mshadow::Stream&lt; gpu &gt;::dev_id</a></div><div class="ttdeci">int dev_id</div><div class="ttdoc">dev id </div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:64</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a8486dcc599dffe447e2f098b170d3db9"><div class="ttname"><a href="structmxnet_1_1Context.html#a8486dcc599dffe447e2f098b170d3db9">mxnet::Context::dev_id</a></div><div class="ttdeci">int32_t dev_id</div><div class="ttdoc">device id we are going to run it on </div><div class="ttdef"><b>Definition:</b> base.h:112</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34"><div class="ttname"><a href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eaa2e12b86e0f957dc14d45863eaa47f34">mxnet::Context::kCPUPinned</a></div><div class="ttdef"><b>Definition:</b> base.h:106</div></div>
<div class="ttc" id="3rdparty_2mshadow_2mshadow_2base_8h_html_a144171091678fc9f3cbc8a9612db899d"><div class="ttname"><a href="3rdparty_2mshadow_2mshadow_2base_8h.html#a144171091678fc9f3cbc8a9612db899d">MSHADOW_CATCH_ERROR</a></div><div class="ttdeci">#define MSHADOW_CATCH_ERROR(func)</div><div class="ttdoc">Run function and catch error, log unknown error. </div><div class="ttdef"><b>Definition:</b> base.h:292</div></div>
<div class="ttc" id="namespacemshadow_html_adcbc2e1131386fccb1474b0bdf045926"><div class="ttname"><a href="namespacemshadow.html#adcbc2e1131386fccb1474b0bdf045926">mshadow::index_t</a></div><div class="ttdeci">int32_t index_t</div><div class="ttdoc">type that will be used for index </div><div class="ttdef"><b>Definition:</b> base.h:343</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_a5c4294a44199f4056915e32a7f70fe0e"><div class="ttname"><a href="structmxnet_1_1RunContext.html#a5c4294a44199f4056915e32a7f70fe0e">mxnet::RunContext::stream</a></div><div class="ttdeci">void * stream</div><div class="ttdoc">the stream of the device, can be nullptr or Stream&lt;gpu&gt;* in GPU mode </div><div class="ttdef"><b>Definition:</b> base.h:355</div></div>
<div class="ttc" id="namespacemxnet_html_a31ef33571a4f6ba8847eeee1f4907141"><div class="ttname"><a href="namespacemxnet.html#a31ef33571a4f6ba8847eeee1f4907141">mxnet::gpu</a></div><div class="ttdeci">mshadow::gpu gpu</div><div class="ttdoc">mxnet gpu </div><div class="ttdef"><b>Definition:</b> base.h:92</div></div>
<div class="ttc" id="namespacemshadow_html_a10a73dbdb4a2b833495c2315b6da69ce"><div class="ttname"><a href="namespacemshadow.html#a10a73dbdb4a2b833495c2315b6da69ce">mshadow::default_real_t</a></div><div class="ttdeci">float default_real_t</div><div class="ttdoc">float point type that will be used in default by mshadow </div><div class="ttdef"><b>Definition:</b> base.h:355</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf"><div class="ttname"><a href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60eab21bed4d5cee411db15283d7529f28cf">mxnet::Context::kGPU</a></div><div class="ttdef"><b>Definition:</b> base.h:105</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a611c227b5e04a2777c3e4507bb76f60e"><div class="ttname"><a href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60e">mxnet::Context::DeviceType</a></div><div class="ttdeci">DeviceType</div><div class="ttdoc">Type of device. </div><div class="ttdef"><b>Definition:</b> base.h:103</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_af2514ea43328d921a74423b7670a3fad"><div class="ttname"><a href="structmxnet_1_1Context.html#af2514ea43328d921a74423b7670a3fad">mxnet::Context::real_dev_id</a></div><div class="ttdeci">int real_dev_id() const</div><div class="ttdoc">Returns dev_id for kGPU and kCPUPinned, 0 otherwise. </div><div class="ttdef"><b>Definition:</b> base.h:126</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a8e090b1fcc96b682512bcc22fc521f80"><div class="ttname"><a href="structmxnet_1_1Context.html#a8e090b1fcc96b682512bcc22fc521f80">mxnet::Context::CPUShared</a></div><div class="ttdeci">static Context CPUShared(int32_t dev_id=0)</div></div>
<div class="ttc" id="structmshadow_1_1Stream_3_01gpu_01_4_html_a07e51e51721e2561c26dd93bbd03da18"><div class="ttname"><a href="structmshadow_1_1Stream_3_01gpu_01_4.html#a07e51e51721e2561c26dd93bbd03da18">mshadow::Stream&lt; gpu &gt;::stream_</a></div><div class="ttdeci">cudaStream_t stream_</div><div class="ttdoc">cudaStream </div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:44</div></div>
<div class="ttc" id="3rdparty_2dmlc-core_2include_2dmlc_2io_8h_html"><div class="ttname"><a href="3rdparty_2dmlc-core_2include_2dmlc_2io_8h.html">io.h</a></div></div>
<div class="ttc" id="namespacemxnet_html_a850af9d76d9d4beaeb5234c1434973e3"><div class="ttname"><a href="namespacemxnet.html#a850af9d76d9d4beaeb5234c1434973e3">mxnet::cpu</a></div><div class="ttdeci">mshadow::cpu cpu</div><div class="ttdoc">mxnet cpu </div><div class="ttdef"><b>Definition:</b> base.h:90</div></div>
<div class="ttc" id="classdmlc_1_1Stream_html_a747da13b990ff68dc9bf9ea5224ad174"><div class="ttname"><a href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">dmlc::Stream::Read</a></div><div class="ttdeci">virtual size_t Read(void *ptr, size_t size)=0</div><div class="ttdoc">reads data from a stream </div></div>
<div class="ttc" id="classmxnet_1_1SyncedGPUAuxStream_html_a5cb6f54e19a02b05d94daf4454a4d032"><div class="ttname"><a href="classmxnet_1_1SyncedGPUAuxStream.html#a5cb6f54e19a02b05d94daf4454a4d032">mxnet::SyncedGPUAuxStream::~SyncedGPUAuxStream</a></div><div class="ttdeci">~SyncedGPUAuxStream()</div><div class="ttdoc">destructor </div><div class="ttdef"><b>Definition:</b> base.h:324</div></div>
<div class="ttc" id="namespacemxnet_html_ac2fb286fd7ddfbc7af1456f6c7a7ee52"><div class="ttname"><a href="namespacemxnet.html#ac2fb286fd7ddfbc7af1456f6c7a7ee52">mxnet::Op</a></div><div class="ttdeci">nnvm::Op Op</div><div class="ttdoc">operator structure from NNVM </div><div class="ttdef"><b>Definition:</b> base.h:98</div></div>
<div class="ttc" id="structmshadow_1_1cpu_html_a57f74b500825e21c0c246ad5b4e5016b"><div class="ttname"><a href="structmshadow_1_1cpu.html#a57f74b500825e21c0c246ad5b4e5016b">mshadow::cpu::kDevMask</a></div><div class="ttdeci">static const int kDevMask</div><div class="ttdoc">device flag number, identifies this device </div><div class="ttdef"><b>Definition:</b> tensor.h:43</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a290642a21363bef82bcb32cf7f98b884"><div class="ttname"><a href="structmxnet_1_1Context.html#a290642a21363bef82bcb32cf7f98b884">mxnet::Context::Context</a></div><div class="ttdeci">Context()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> base.h:114</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a7cea13406ae21ae557d3455f54670a4a"><div class="ttname"><a href="structmxnet_1_1Context.html#a7cea13406ae21ae557d3455f54670a4a">mxnet::Context::Create</a></div><div class="ttdeci">static Context Create(DeviceType dev_type, int32_t dev_id=-1)</div><div class="ttdoc">Create a new context. </div></div>
<div class="ttc" id="include_2mxnet_2tuple_8h_html"><div class="ttname"><a href="include_2mxnet_2tuple_8h.html">tuple.h</a></div><div class="ttdoc">Data structure Tuple and TShape to store dynamic sized shapes. </div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a4bb231d70623fde216de51589347e513"><div class="ttname"><a href="structmxnet_1_1Context.html#a4bb231d70623fde216de51589347e513">mxnet::Context::CPU</a></div><div class="ttdeci">static Context CPU(int32_t dev_id=0)</div></div>
<div class="ttc" id="classdmlc_1_1Stream_html_a622f1377a64e841ca80c2dd8e1fa5ffd"><div class="ttname"><a href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">dmlc::Stream::Write</a></div><div class="ttdeci">virtual void Write(const void *ptr, size_t size)=0</div><div class="ttdoc">writes data to a stream </div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a9ea910ddb7e15d51320806b1666bf6c5"><div class="ttname"><a href="structmxnet_1_1Context.html#a9ea910ddb7e15d51320806b1666bf6c5">mxnet::Context::Save</a></div><div class="ttdeci">void Save(dmlc::Stream *strm) const</div><div class="ttdoc">save the content into binary stream </div><div class="ttdef"><b>Definition:</b> base.h:156</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a420d4e662a5129b202507f42c991391c"><div class="ttname"><a href="structmxnet_1_1Context.html#a420d4e662a5129b202507f42c991391c">mxnet::Context::CPUPinned</a></div><div class="ttdeci">static Context CPUPinned(int32_t dev_id=-1)</div></div>
<div class="ttc" id="op_8h_html"><div class="ttname"><a href="op_8h.html">op.h</a></div><div class="ttdoc">Operator information structor. </div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html_a2add80e8e23386df1646434630f405f4"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html#a2add80e8e23386df1646434630f405f4">mxnet::GPUAuxStream::PreAuxStreamUseSync</a></div><div class="ttdeci">void PreAuxStreamUseSync()</div><div class="ttdoc">Makes future aux stream work wait on the completion of existing primary stream work. </div><div class="ttdef"><b>Definition:</b> base.h:274</div></div>
<div class="ttc" id="3rdparty_2dmlc-core_2include_2dmlc_2base_8h_html"><div class="ttname"><a href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html">base.h</a></div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78"><div class="ttname"><a href="structmxnet_1_1Context.html#a611c227b5e04a2777c3e4507bb76f60ea80c6f8f13908c5805cf12784fca77e78">mxnet::Context::kCPUShared</a></div><div class="ttdef"><b>Definition:</b> base.h:107</div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a4b7e2c87496a90b6b0ed06eab61956c4"><div class="ttname"><a href="structmxnet_1_1Context.html#a4b7e2c87496a90b6b0ed06eab61956c4">mxnet::Context::FromString</a></div><div class="ttdeci">static Context FromString(const std::string &amp;str)</div></div>
<div class="ttc" id="classmxnet_1_1SyncedGPUAuxStream_html_a0638a0d262d28d7719dfe23b603a6d2f"><div class="ttname"><a href="classmxnet_1_1SyncedGPUAuxStream.html#a0638a0d262d28d7719dfe23b603a6d2f">mxnet::SyncedGPUAuxStream::GetStream</a></div><div class="ttdeci">mshadow::Stream&lt; gpu &gt; * GetStream() const</div><div class="ttdoc">Getter for underlying mshadow::Stream&lt;gpu&gt;. </div><div class="ttdef"><b>Definition:</b> base.h:336</div></div>
<div class="ttc" id="structmxnet_1_1RunContext_html_a323fa88ecd7bfb7d5f7d9ca727101d3e"><div class="ttname"><a href="structmxnet_1_1RunContext.html#a323fa88ecd7bfb7d5f7d9ca727101d3e">mxnet::RunContext::get_ctx</a></div><div class="ttdeci">const Context &amp; get_ctx() const</div><div class="ttdoc">get the base Context from RunContext </div><div class="ttdef"><b>Definition:</b> base.h:383</div></div>
<div class="ttc" id="classmxnet_1_1GPUAuxStream_html_a6976536b11894e584f72678213aba993"><div class="ttname"><a href="classmxnet_1_1GPUAuxStream.html#a6976536b11894e584f72678213aba993">mxnet::GPUAuxStream::StreamSync</a></div><div class="ttdeci">static void StreamSync(mshadow::Stream&lt; gpu &gt; *s1, mshadow::Stream&lt; gpu &gt; *s2, cudaEvent_t event)</div><div class="ttdoc">Make future work enqueued to s2 wait on completion of current work enqueued to s1. </div><div class="ttdef"><b>Definition:</b> base.h:295</div></div>
<div class="ttc" id="namespacemxnet_html_abadedc1b42ee3e5b8852e63783b982ef"><div class="ttname"><a href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">mxnet::index_t</a></div><div class="ttdeci">mshadow::index_t index_t</div><div class="ttdoc">index type usually use unsigned </div><div class="ttdef"><b>Definition:</b> base.h:94</div></div>
<div class="ttc" id="tensor__blob_8h_html"><div class="ttname"><a href="tensor__blob_8h.html">tensor_blob.h</a></div><div class="ttdoc">TBlob class that holds common representation of arbirary dimension tensor, can be used to transformed...</div></div>
<div class="ttc" id="symbolic_8h_html"><div class="ttname"><a href="symbolic_8h.html">symbolic.h</a></div><div class="ttdoc">Symbolic graph construction API. </div></div>
<div class="ttc" id="namespacedmlc_html_acf31f99192b5ed0d5d77398d58023912"><div class="ttname"><a href="namespacedmlc.html#acf31f99192b5ed0d5d77398d58023912">dmlc::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const optional&lt; T &gt; &amp;t)</div><div class="ttdoc">serialize an optional object to string. </div><div class="ttdef"><b>Definition:</b> optional.h:151</div></div>
<div class="ttc" id="structmxnet_1_1Context_html"><div class="ttname"><a href="structmxnet_1_1Context.html">mxnet::Context</a></div><div class="ttdoc">Context information about the execution environment. </div><div class="ttdef"><b>Definition:</b> base.h:101</div></div>
<div class="ttc" id="parameter_8h_html"><div class="ttname"><a href="parameter_8h.html">parameter.h</a></div><div class="ttdoc">Provide lightweight util to do parameter setup and checking. </div></div>
<div class="ttc" id="type__traits_8h_html"><div class="ttname"><a href="type__traits_8h.html">type_traits.h</a></div><div class="ttdoc">type traits information header </div></div>
<div class="ttc" id="classnnvm_1_1Op_html"><div class="ttname"><a href="classnnvm_1_1Op.html">nnvm::Op</a></div><div class="ttdoc">Operator structure. </div><div class="ttdef"><b>Definition:</b> op.h:103</div></div>
<div class="ttc" id="namespacemshadow_html_a5d8687821fd6ecf8e271b996df51415c"><div class="ttname"><a href="namespacemshadow.html#a5d8687821fd6ecf8e271b996df51415c">mshadow::DeleteStream&lt; gpu &gt;</a></div><div class="ttdeci">void DeleteStream&lt; gpu &gt;(Stream&lt; gpu &gt; *stream)</div><div class="ttdef"><b>Definition:</b> stream_gpu-inl.h:200</div></div>
<div class="ttc" id="libinfo_8h_html"><div class="ttname"><a href="libinfo_8h.html">libinfo.h</a></div><div class="ttdoc">get features of the MXNet library at runtime </div></div>
<div class="ttc" id="structmxnet_1_1Context_html_a7e84dc72147472e72b50e8545780fd1e"><div class="ttname"><a href="structmxnet_1_1Context.html#a7e84dc72147472e72b50e8545780fd1e">mxnet::Context::operator!=</a></div><div class="ttdeci">bool operator!=(const Context &amp;b) const</div><div class="ttdoc">check if current context not equals another one </div><div class="ttdef"><b>Definition:</b> base.h:149</div></div>
<div class="ttc" id="structmshadow_1_1Stream_html"><div class="ttname"><a href="structmshadow_1_1Stream.html">mshadow::Stream</a></div><div class="ttdoc">computaion stream structure, used for asynchronous computations </div><div class="ttdef"><b>Definition:</b> tensor.h:383</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 00:58:41 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>