blob: 0a415c3ec5167bf63d4b7f2f6e0606b62654ba85 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: /work/mxnet/include/mxnet/ndarray.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.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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">ndarray.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="include_2mxnet_2ndarray_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_NDARRAY_H_</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define MXNET_NDARRAY_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 &lt;<a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html">dmlc/base.h</a>&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2io_8h.html">dmlc/io.h</a>&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;dmlc/logging.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2registry_8h.html">dmlc/registry.h</a>&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="type__traits_8h.html">dmlc/type_traits.h</a>&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="3rdparty_2tvm_2nnvm_2include_2nnvm_2node_8h.html">nnvm/node.h</a>&gt;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html">./base.h</a>&quot;</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="engine_8h.html">./engine.h</a>&quot;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="storage_8h.html">./storage.h</a>&quot;</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// check c++11</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if DMLC_USE_CXX11 == 0</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#error &quot;cxx11 was required for ndarray module&quot;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespacednnl.html"> 47</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacednnl.html">dnnl</a> {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">struct </span>memory;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;} <span class="comment">// namespace dnnl</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacemxnet.html">mxnet</a> {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// enum for storage types</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1csr.html"> 53</a></span>&#160;<span class="keyword">namespace </span>csr {</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42ad9dcbaec1c8c6ca9d69648c83354aac1"> 54</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42">CSRAuxType</a> { <a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42ad9dcbaec1c8c6ca9d69648c83354aac1">kIndPtr</a>, <a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">kIdx</a> };</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1rowsparse.html"> 57</a></span>&#160;<span class="keyword">namespace </span>rowsparse {</div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232"> 58</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232">RowSparseAuxType</a> { <a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">kIdx</a> };</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a"> 61</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> {</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584"> 62</a></span>&#160; <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584">kUndefinedStorage</a> = -1, <span class="comment">// undefined storage</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608"> 63</a></span>&#160; <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>, <span class="comment">// dense</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3"> 64</a></span>&#160; <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">kRowSparseStorage</a>, <span class="comment">// row sparse</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254"> 65</a></span>&#160; <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">kCSRStorage</a>, <span class="comment">// csr</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;};</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1a"> 68</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1a">NDArrayFormatErr</a> {</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa322b8b178929b43f1b4b16c8cb9003ef"> 69</a></span>&#160; <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa322b8b178929b43f1b4b16c8cb9003ef">kNormalErr</a>, <span class="comment">// normal</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aaf64429479d4a48998e6cd122a3117628"> 70</a></span>&#160; <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aaf64429479d4a48998e6cd122a3117628">kCSRShapeErr</a>, <span class="comment">// shape mismatch for csr</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa11ce5dbb8ad355e9ee5a678f2f51a5bb"> 71</a></span>&#160; <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa11ce5dbb8ad355e9ee5a678f2f51a5bb">kCSRIndPtrErr</a>, <span class="comment">// indptr error for csr</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aaf3ee084ba1d9a6203922ff7c9ddb12e3"> 72</a></span>&#160; <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aaf3ee084ba1d9a6203922ff7c9ddb12e3">kCSRIdxErr</a>, <span class="comment">// idx error for csr</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa200492eeec6fa431683ef0d943bfbc2d"> 73</a></span>&#160; <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa200492eeec6fa431683ef0d943bfbc2d">kRSPShapeErr</a>, <span class="comment">// shape mismatch for row sparse</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa7636cc230df4abe46f3210846faac799"> 74</a></span>&#160; <a class="code" href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa7636cc230df4abe46f3210846faac799">kRSPIdxErr</a>, <span class="comment">// indices error for row sparse</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;};</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"> 77</span>&#160;<span class="keyword">class </span>DNNLMemory;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html"> 82</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756"> 85</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>() : autograd_entry_(nullptr) {}</div>
<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a58d6f716d7eebf822c75e841342d9feb"> 93</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a58d6f716d7eebf822c75e841342d9feb">NDArray</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>,</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>,</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">bool</span> delay_alloc = <span class="keyword">false</span>,</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a> = <a class="code" href="namespacemshadow.html#a143ad1a73ba518ef0aad29d36f2569ee">mshadow::default_type_flag</a>)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; : ptr_(<a class="code" href="namespacestd.html">std</a>::make_shared&lt;Chunk&gt;(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>, delay_alloc, <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)),</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; shape_(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>),</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; dtype_(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>),</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; storage_type_(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>),</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; autograd_entry_(nullptr) {}</div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ad8035f9c0060a2420bce8d466e46b86b"> 104</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#ad8035f9c0060a2420bce8d466e46b86b">NDArray</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> stype,</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>,</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>,</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">bool</span> delay_alloc = <span class="keyword">true</span>,</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a> = <a class="code" href="namespacemshadow.html#a143ad1a73ba518ef0aad29d36f2569ee">mshadow::default_type_flag</a>,</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a> = {},</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a> = {},</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>(<a class="code" href="namespacemshadow.html#a05e468ef4d8882fccce53ae951b7bdbd">mshadow::Shape1</a>(0))) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a05c99c4040b6a37610046e508de98db2">ReInit</a>(stype, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>, <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>, delay_alloc, &amp;<a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a>, &amp;<a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>, &amp;<a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#afbfcf25b4e005007c40300c711c34f69"> 120</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1NDArray.html#afbfcf25b4e005007c40300c711c34f69">NDArray</a>(<a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a> = <a class="code" href="namespacemshadow.html#a143ad1a73ba518ef0aad29d36f2569ee">mshadow::default_type_flag</a>)</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; : ptr_(<a class="code" href="namespacestd.html">std</a>::make_shared&lt;Chunk&gt;(<a class="code" href="namespacemxnet.html">mxnet</a>::<a class="code" href="classmxnet_1_1TShape.html">TShape</a>(<a class="code" href="namespacemshadow.html">mshadow</a>::<a class="code" href="namespacemshadow.html#a05e468ef4d8882fccce53ae951b7bdbd">Shape1</a>(0)), <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>, true, <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)),</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; shape_(),</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; dtype_(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>),</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; storage_type_(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>),</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; autograd_entry_(nullptr) {}</div>
<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a1a7288505ac9bbb19830161f7e5c1a6f"> 133</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a1a7288505ac9bbb19830161f7e5c1a6f">NDArray</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, <span class="keywordtype">int</span> dev_id)</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; : ptr_(<a class="code" href="namespacestd.html">std</a>::make_shared&lt;Chunk&gt;(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, dev_id)),</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; shape_(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.shape_),</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; dtype_(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.type_flag_),</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; storage_type_(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>),</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; autograd_entry_(nullptr) {}</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa2e26d3d53e546a8b5f458c0cc204387"> 148</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa2e26d3d53e546a8b5f458c0cc204387">NDArray</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, <span class="keywordtype">int</span> dev_id, <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>()&gt;&amp; deleter)</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; : ptr_(new Chunk(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, dev_id),</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; [deleter](Chunk* p) {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; deleter(); <span class="comment">// call custom deleter</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">delete</span> p; <span class="comment">// delete Chunk object</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }),</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; shape_(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#af0e813ff066c775051d1f1f78a4a2029">shape_</a>),</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; dtype_(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#a4649b740b80a6045754cb2389cfcca61">type_flag_</a>),</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; storage_type_(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>),</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; autograd_entry_(<span class="keyword">nullptr</span>) {}</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ac5858cd154fbf68f832c2717f4f925e8"> 160</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#ac5858cd154fbf68f832c2717f4f925e8">NDArray</a>(<span class="keywordtype">int</span> shared_pid, <span class="keywordtype">int</span> shared_id, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; : ptr_(<a class="code" href="namespacestd.html">std</a>::make_shared&lt;Chunk&gt;(shared_pid, shared_id, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)),</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; shape_(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>),</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; dtype_(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>),</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; storage_type_(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>),</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; autograd_entry_(nullptr) {}</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a3ab28f889680e6aad1b981b378f206d9"> 177</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a3ab28f889680e6aad1b981b378f206d9">NDArray</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> stype,</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>,</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>,</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">const</span> std::vector&lt;TBlob&gt;&amp; <a class="code" href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9">aux_data</a>,</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">int</span> dev_id)</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; : ptr_(<a class="code" href="namespacestd.html">std</a>::make_shared&lt;Chunk&gt;(stype, <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, <a class="code" href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9">aux_data</a>, dev_id)),</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; shape_(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>),</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; dtype_(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.type_flag_),</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; storage_type_(stype),</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; autograd_entry_(nullptr) {}</div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a1e789a9d17c0b15749d247122e9b207a"> 191</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a1e789a9d17c0b15749d247122e9b207a">Init</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>) {</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; ptr_-&gt;Init(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, this-&gt;dtype_);</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; this-&gt;shape_ = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a414aa4b87b1da96cfa227e5df858ece5"> 196</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a414aa4b87b1da96cfa227e5df858ece5">InitDetached</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>* src) {</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; *<span class="keyword">this</span> = *src;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; autograd_entry_ = <a class="code" href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a>(<span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a05c99c4040b6a37610046e508de98db2"> 200</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a05c99c4040b6a37610046e508de98db2">ReInit</a>() {</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; ptr_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a1e789a9d17c0b15749d247122e9b207a">Init</a>(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584">kUndefinedStorage</a>, <a class="code" href="classmxnet_1_1TShape.html">TShape</a>(), -1);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a05c99c4040b6a37610046e508de98db2">ReInit</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> stype,</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>,</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>,</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>,</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">bool</span> delay_alloc = <span class="keyword">true</span>,</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;* <a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a> = <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a>* <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a> = <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>* <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#af8e67cc189771ba824ffba70b49056d2">SelfReorder2Default</a>();</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a3108a54e05d537444cb1961c69091efa">SetShapeFromChunk</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment"> * This indicates whether an array is a view of another array (created by</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="comment"> * reshape or slice). If an array is a view and the data is stored in</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment"> * DNNL format, we need to convert the data to the default format when</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment"> * data in the view is accessed.</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#afe1e6281a1bc6d0a0f2377d8870fb8f5"> 224</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#afe1e6281a1bc6d0a0f2377d8870fb8f5">IsView</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// View only works on the default storage</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>() != <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// If the array reuses memory, its shape may be different from the storage</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// shape. However, we shouldn&#39;t consider it as a view.</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (reuse_)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span> byte_offset_ &gt; 0 || <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>() != ptr_-&gt;storage_shape;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">/* \brief Check whether the two arrays are the same array */</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ab5c172c0f1d77d212790583ba11a3cd2"> 236</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#ab5c172c0f1d77d212790583ba11a3cd2">IsSame</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> ptr_ == other.ptr_ &amp;&amp; shape_ == other.shape_ &amp;&amp; byte_offset_ == other.byte_offset_ &amp;&amp;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; dtype_ == other.dtype_;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42"> 244</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> shape_;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931"> 252</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; CHECK(ptr_ != <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; &lt;&lt; <span class="stringliteral">&quot;storage_shape() is not intended for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;storage_shape;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836"> 264</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<span class="keywordtype">size_t</span> index)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>) &lt;&lt; <span class="stringliteral">&quot;aux_shape() is not intended for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;aux_shapes[index];</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">/* \return the shapes of all aux data */</span></div>
<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98"> 270</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; &lt;&lt; <span class="stringliteral">&quot;aux_shapes() is not intended for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;aux_shapes;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b"> 277</a></span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>) &lt;&lt; <span class="stringliteral">&quot;aux_types() is not intended for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;aux_types;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a245bf6c0b4dd454fa5d5bfb255005221"> 289</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a245bf6c0b4dd454fa5d5bfb255005221">set_aux_shape</a>(<span class="keywordtype">size_t</span> index, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; &lt;&lt; <span class="stringliteral">&quot;set_aux_shape() is not intended for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; ptr_-&gt;set_aux_shape(index, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5"> 298</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>() == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>();</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; SetTBlob();</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">return</span> tblob_;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a9c038544414ed2b992f9393a14eff6cd">grad</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9"> 312</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a> <a class="code" href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9">aux_data</a>(<span class="keywordtype">size_t</span> i)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">auto</span> stype = <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>();</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a> res;</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">auto</span> <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(i);</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">auto</span> type = <a class="code" href="classmxnet_1_1NDArray.html#ac1f24bbdb0013050415ef0542d8273f1">aux_type</a>(i);</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="3rdparty_2mshadow_2mshadow_2base_8h.html#af67c41c06afea92ccf285ae8501e2316">MSHADOW_TYPE_SWITCH</a>(type, DType, {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">auto</span> dptr = <span class="keyword">static_cast&lt;</span>DType*<span class="keyword">&gt;</span>(ptr_-&gt;aux_handles[i].dptr);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; CHECK(stype == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">kRowSparseStorage</a> || stype == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">kCSRStorage</a>)</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Unexpected storage type: &quot;</span> &lt;&lt; stype;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; res = <a class="code" href="classmxnet_1_1TBlob.html">TBlob</a>(dptr, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, ptr_-&gt;aux_handles[i].ctx.dev_mask(), type);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; });</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> res;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d"> 328</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; CHECK(!<a class="code" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">is_none</a>());</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;shandle.ctx;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3"> 335</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> dtype_;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ac1f24bbdb0013050415ef0542d8273f1"> 338</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#ac1f24bbdb0013050415ef0542d8273f1">aux_type</a>(<span class="keywordtype">size_t</span> i)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; CHECK(!<a class="code" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">is_none</a>());</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;aux_types[i];</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</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"><a class="line" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97"> 343</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> storage_type_;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div>
<div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67"> 347</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">is_none</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">return</span> ptr_.get() == <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#ad9d2fa3ffbe963fb5960375da1b557a2">fresh_out_grad</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aec1b90af51327c2956adf182c201de03">set_fresh_out_grad</a>(<span class="keywordtype">bool</span> state) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ac4ccbd0815226566d65d53229f719222"> 358</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#ac4ccbd0815226566d65d53229f719222">storage_initialized</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">is_none</a>())</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">auto</span> stype = <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>();</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; CHECK_NE(stype, <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; &lt;&lt; <span class="stringliteral">&quot;storage_initialized() is not intended for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span> (stype == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">kRowSparseStorage</a>) {</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">rowsparse::kIdx</a>)[0], <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>()[0])</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; &lt;&lt; <span class="stringliteral">&quot;inconsistent storage shape &quot;</span> &lt;&lt; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>() &lt;&lt; <span class="stringliteral">&quot; vs. aux shape &quot;</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; &lt;&lt; <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">rowsparse::kIdx</a>);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">rowsparse::kIdx</a>).<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() != 0;</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stype == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">kCSRStorage</a>) {</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>)[0], <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>()[0])</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; &lt;&lt; <span class="stringliteral">&quot;inconsistent storage shape &quot;</span> &lt;&lt; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>() &lt;&lt; <span class="stringliteral">&quot; vs. aux shape &quot;</span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; &lt;&lt; <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>(<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>).<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() != 0;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; LOG(FATAL) &lt;&lt; <span class="stringliteral">&quot;Unknown storage type&quot;</span>;</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div>
<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#afbafb6c0712694be87ab034a2eb1639c"> 380</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1Storage_1_1Handle.html">Storage::Handle</a> <a class="code" href="classmxnet_1_1NDArray.html#afbafb6c0712694be87ab034a2eb1639c">storage_handle</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; CHECK(!<a class="code" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">is_none</a>());</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>);</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>();</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;shandle;</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#ab160abff10bc69fdc0cff93fe502c74c">AssignStorageInfo</a>(<span class="keyword">const</span> std::string&amp; profiler_scope, <span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a1cf4c49e6925d35586f75a1c9bdb51e4">WaitToRead</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#ad8599450a4ba06b5890c5d06bd024d8e">WaitToWrite</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aff56b804010005abb7e23f877c35940b">StreamSync</a>(<span class="keywordtype">int</span> stream) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9"> 411</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1engine_1_1Var.html">Engine::VarHandle</a> <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;var;</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a7574bc7633ff7f796bf8a1f2e6e2a392"> 415</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classmxnet_1_1NDArray.html#a7574bc7633ff7f796bf8a1f2e6e2a392">byte_offset</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">return</span> byte_offset_;</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div>
<div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#ab0cd632ca10d91e65734cd8ce558cb08"> 419</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classmxnet_1_1NDArray.html#ab0cd632ca10d91e65734cd8ce558cb08">version</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a>()-&gt;<a class="code" href="structmxnet_1_1engine_1_1Var.html#a5ae9f575784f18598df8824ccd421c18">version</a>();</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a7dd1143eeb4fbe15cebe85f28142551f">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="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#a0b212c0a0c4c83c64a6bf6d0c430602b">LegacyLoad</a>(<a class="code" href="classdmlc_1_1Stream.html">dmlc::Stream</a>* strm, <span class="keyword">const</span> uint32_t magic);</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1NDArray.html#a5203aa033a53942deaecb7bb3bf46480">Load</a>(<a class="code" href="classdmlc_1_1Stream.html">dmlc::Stream</a>* strm);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa7a198e3e4c80a48cf92a913009aab8f">operator=</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> <a class="code" href="namespacemshadow_1_1expr.html#ac547eb1dceee713542019c2cc6da378b">scalar</a>);</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#a7df5a5d9956a481635fc43ca4d9a196c">operator+=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src);</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#a7df5a5d9956a481635fc43ca4d9a196c">operator+=</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; src);</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#ad35ba01da6949494afe895b7429e4fc3">operator-=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src);</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#ad35ba01da6949494afe895b7429e4fc3">operator-=</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; src);</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#a1b47078a60bf0369ff0a7df893caf65b">operator*=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src);</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#a1b47078a60bf0369ff0a7df893caf65b">operator*=</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; src);</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aebc61006705874666423c45f161df546">operator/=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src);</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aebc61006705874666423c45f161df546">operator/=</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; src);</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a6617e1bf4242314f7ee6b6e3a66ce493">Copy</a>(<a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#ac390edfdd8a7dd99f69ea373f4d18e1a">SyncCopyFromCPU</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, <span class="keywordtype">size_t</span> size) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; </div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aa3943fcf632304f6ab165b8628710609">SyncCopyFromNDArray</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src, <span class="keywordtype">int</span> i = -1, <span class="keywordtype">int</span> j = -1);</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#afb3dbc357c53e1e0b980257f6c5e2cac">SyncCopyToCPU</a>(<span class="keywordtype">void</span>* <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, <span class="keywordtype">size_t</span> size) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#ab8b6b078a376806d8a72ea14befe02c9">SyncCheckFormat</a>(<span class="keyword">const</span> <span class="keywordtype">bool</span> full_check) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a0cfa7466a652feb2258bb990453a0a7d">Slice</a>(<a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a> begin, <a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a> end) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a0d868e5303669d6ce8a5ada1c34940ac">SliceWithRecord</a>(<a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a> begin, <a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a> end);</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#addb42a7353a4c07b2d1bae0afa8ef48e">At</a>(<a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a> idx) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#aa2a801dd5c47b5bdd01a385d2c4327b8">AtWithRecord</a>(<a class="code" href="namespacemxnet.html#abadedc1b42ee3e5b8852e63783b982ef">index_t</a> idx);</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#ac3279047ec28e02b794e7662ec68384a">aux_ndarray</a>(<span class="keywordtype">size_t</span> i) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#ae14d45e2bae697565a0723f4963db7e4">data_ndarray</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; </div>
<div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a65b47e2d501a8e623ea70c0ae88b789e"> 586</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a65b47e2d501a8e623ea70c0ae88b789e">AsArray</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>) &lt;&lt; <span class="stringliteral">&quot;AsArray is intended only for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; CHECK_GE(ptr_-&gt;shandle.size, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>))</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; &lt;&lt; <span class="stringliteral">&quot;NDArray.AsArray: target memory size is bigger&quot;</span>;</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// We can&#39;t reuse memory in a view.</span></div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; CHECK(!<a class="code" href="classmxnet_1_1NDArray.html#afe1e6281a1bc6d0a0f2377d8870fb8f5">IsView</a>());</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> ret = *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; ret.shape_ = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; ret.dtype_ = <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>;</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; ret.reuse_ = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
<div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#af85fea0c1ec24bc2c387dce8d344ea2a"> 599</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#af85fea0c1ec24bc2c387dce8d344ea2a">InitAsArray</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>) {</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; CHECK_EQ(src.<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; &lt;&lt; <span class="stringliteral">&quot;AsArray is intended only for kDefaultStorage.&quot;</span>;</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; CHECK_GE(src.ptr_-&gt;shandle.size, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>))</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; &lt;&lt; <span class="stringliteral">&quot;NDArray.AsArray: target memory size is bigger than what was allocated.&quot;</span>;</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// We can&#39;t reuse memory in a view.</span></div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; CHECK(!src.<a class="code" href="classmxnet_1_1NDArray.html#afe1e6281a1bc6d0a0f2377d8870fb8f5">IsView</a>());</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; *<span class="keyword">this</span> = src;</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; shape_ = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; dtype_ = <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>;</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; reuse_ = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; </div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <a class="code" href="structDLManagedTensor.html">DLManagedTensor</a>* <a class="code" href="classmxnet_1_1NDArray.html#aaf96f31bf9cb46c4bf1a425e82e26f33">ToDLPack</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; </div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">static</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a0d7a0ccf8e8a76e8be1c5817f4754236">FromDLPack</a>(<span class="keyword">const</span> <a class="code" href="structDLManagedTensor.html">DLManagedTensor</a>* tensor, <span class="keywordtype">bool</span> transient_handle);</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; </div>
<div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a8b390d8776568e2ffc8c2ed227e12f96"> 639</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a8b390d8776568e2ffc8c2ed227e12f96">SparseUpdateChunk</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; arr)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; CHECK(shape_ == arr.shape_) &lt;&lt; <span class="stringliteral">&quot;ndarray shape is different from the target&quot;</span>;</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; CHECK(dtype_ == arr.dtype_) &lt;&lt; <span class="stringliteral">&quot;ndarray dtype is different from the target&quot;</span>;</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keyword">auto</span> stype = arr.<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>();</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; CHECK(stype == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">kCSRStorage</a> || stype == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">kRowSparseStorage</a>)</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Only to be used with CSR and RSP storage types&quot;</span>;</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="comment">// swap shandles between src and dst</span></div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <a class="code" href="structmxnet_1_1Storage_1_1Handle.html">Storage::Handle</a> shandle_dst = arr.ptr_-&gt;shandle;</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; arr.ptr_-&gt;shandle = ptr_-&gt;shandle;</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; ptr_-&gt;shandle = shandle_dst;</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; </div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; ptr_-&gt;storage_shape = arr.ptr_-&gt;storage_shape;</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; ptr_-&gt;storage_type = arr.ptr_-&gt;storage_type;</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; ptr_-&gt;ctx = arr.ptr_-&gt;ctx;</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// swap aux_handles between src and dst</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">size_t</span> aux_idx = 0;</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; CHECK(ptr_-&gt;aux_handles.size() == arr.ptr_-&gt;aux_handles.size())</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; &lt;&lt; <span class="stringliteral">&quot;ndarray number of aux_handles is different from target&quot;</span>;</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; aux_handle : arr.ptr_-&gt;aux_handles) {</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="structmxnet_1_1Storage_1_1Handle.html">Storage::Handle</a> aux_dst = ptr_-&gt;aux_handles[aux_idx];</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; ptr_-&gt;aux_handles[aux_idx] = aux_handle;</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; aux_handle = aux_dst;</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; aux_idx++;</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; ptr_-&gt;aux_types = arr.ptr_-&gt;aux_types;</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; ptr_-&gt;aux_shapes = arr.ptr_-&gt;aux_shapes;</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; </div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a6011ffa88e84bdcdc9bfa5d3365647d9">Reshape</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a318e6f3ae6f94026dec90aa98a7e3f10">ReshapeWithRecord</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>);</div>
<div class="line"><a name="l00684"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a76646c5c7e164bd7c81854521d3bee52"> 684</a></span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> <a class="code" href="classmxnet_1_1NDArray.html#a76646c5c7e164bd7c81854521d3bee52">Detach</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a> ret(*<span class="keyword">this</span>);</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; ret.autograd_entry_ = <a class="code" href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a>(<span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; ret.deferredcompute_entry_ = <a class="code" href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a>(<span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; </div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="classnnvm_1_1Symbol.html">nnvm::Symbol</a> <a class="code" href="classmxnet_1_1NDArray.html#ab9b6fd0a27d13af7b2494be903f501ec">get_autograd_symbol</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00696"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a"> 696</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>);</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; ptr_-&gt;CheckAndAlloc();</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; </div>
<div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa99f425040db90b52f945007a2f11b73"> 710</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aa99f425040db90b52f945007a2f11b73">ReshapeAndAlloc</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>) {</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>);</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; CHECK(!<a class="code" href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">is_none</a>());</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; shape_ = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; ptr_-&gt;CheckAndAlloc(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(dtype_));</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; </div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="comment">/* !</span></div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="comment"> * \brief Alloc memory for non-default storage</span></div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="comment"> * aux_shape is only known at run time</span></div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#a5fbabba18b71e4ad61fee8da1a05a275"> 721</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a5fbabba18b71e4ad61fee8da1a05a275">CheckAndAlloc</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; &lt;&lt; <span class="stringliteral">&quot;CheckAndAlloc(aux_shapes) is not intended for kDefaultStorage&quot;</span>;</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; ptr_-&gt;CheckAndAlloc(shape_, <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>, dtype_);</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; }</div>
<div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c"> 726</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c">CheckAndAllocData</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; &lt;&lt; <span class="stringliteral">&quot;CheckAndAllocData is not intended for kDefaultStorage&quot;</span>;</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; ptr_-&gt;CheckAndAllocData(<a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>, dtype_);</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div>
<div class="line"><a name="l00731"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88"> 731</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">CheckAndAllocAuxData</a>(<span class="keywordtype">size_t</span> i, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(), <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; &lt;&lt; <span class="stringliteral">&quot;CheckAndAllocAuxData is not intended for kDefaultStorage&quot;</span>;</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; ptr_-&gt;CheckAndAllocAuxData(i, <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>);</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; }</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; </div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;<span class="preprocessor">#if MXNET_USE_ONEDNN == 1</span></div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;<span class="comment"> * Create NDArray from dnnl memory.</span></div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;<span class="comment"> * dnnl_mem The dnnl memory to be managed.</span></div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>(<span class="keyword">const</span> std::shared_ptr&lt;dnnl::memory&gt;&amp; dnnl_mem);</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;<span class="comment"> * Create NDArray from dnnl memory descriptor.</span></div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;<span class="comment"> * mem_pd The dnnl memory descriptor to be created.</span></div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* md);</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;<span class="comment"> * Test if the data is stored in one of special DNNL formats.</span></div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordtype">bool</span> IsDNNLData()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;IsDNNL();</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="comment"> * Test if the data is stored in one of default MXNet formats.</span></div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordtype">bool</span> IsDefaultData()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">return</span> ptr_-&gt;IsDefault();</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; }</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;<span class="comment"> * All functions below return a raw pointer to dnnl memory. Actually there</span></div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="comment"> * is a shared pointer that hold the memory either in NDArray or in DNNL</span></div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;<span class="comment"> * stream. As long as we call these functions inside an operator, the return</span></div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;<span class="comment"> * memory is always valid.</span></div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; </div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;<span class="comment"> * This function returns dnnl::memory with the default primitive_desc.</span></div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keyword">const</span> dnnl::memory* GetDNNLData() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;<span class="comment"> * This function returns dnnl::memory with the given primitive_desc</span></div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment"> * as long as the array size meets the required size in the given primitive_desc.</span></div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> dnnl::memory* GetDNNLData(<span class="keyword">const</span> <span class="keywordtype">void</span>* md) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;<span class="comment"> * This function returns dnnl::memory with the given primitive_desc.</span></div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;<span class="comment"> * The returned dnnl::memory will have the same physical layout as</span></div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;<span class="comment"> * the given primitive_desc.</span></div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keyword">const</span> dnnl::memory* GetDNNLDataReorder(<span class="keyword">const</span> <span class="keywordtype">void</span>* md) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; </div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;<span class="comment"> * This function copies data from dnnl memory.</span></div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordtype">void</span> CopyFrom(<span class="keyword">const</span> dnnl::memory&amp; mem);</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="comment"> * This function allocates memory for array and creates dnnl memory</span></div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;<span class="comment"> * with the specified format.</span></div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; dnnl::memory* CreateDNNLData(<span class="keyword">const</span> <span class="keywordtype">void</span>* md);</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; </div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="comment"> * These are the async version of the methods above.</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment"> * It changes the layout of this NDArray, but it happens after all accesses to</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment"> * the array are complete.</span></div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordtype">void</span> Reorder2DefaultAsync() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordtype">void</span> DNNLDataReorderAsync(<span class="keyword">const</span> <span class="keywordtype">void</span>* md) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; </div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;<span class="comment"> * This creates a new NDArray with the reordered data.</span></div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;<span class="comment"> * It doesn&#39;t affect the data of the original NDArray.</span></div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> Reorder2Default() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; </div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;<span class="comment"> * This creates a new NDArray using f32 with the reordered data.</span></div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;<span class="comment"> * It doesn&#39;t affect the data of the original NDArray.</span></div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> Reorder2DefaultFloatFormat() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; </div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordtype">void</span> InvalidateDNNLData();</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; </div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="comment"> * This function is used inside operators to reshape an array.</span></div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;<span class="comment"> * It doesn&#39;t change the layout of the original array and allocate memory from</span></div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="comment"> * the temporary buffer. The returned array is only valid inside the current</span></div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;<span class="comment"> * invocation of this operator.</span></div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;<span class="comment"> * This is different from Reshape. Reshape will cause data in the array to be</span></div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="comment"> * converted to the default layout and allocate memory from malloc directly,</span></div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="comment"> * which can be expensive.</span></div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="comment"> * It&#39;s used by FullyConnected right now.</span></div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> DNNLDataReshape(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; </div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordtype">void</span> UpdateDNNLMemDesc(<span class="keyword">const</span> <span class="keywordtype">void</span>* desc);</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; </div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a7dd1143eeb4fbe15cebe85f28142551f">Save</a>(<a class="code" href="classdmlc_1_1Stream.html">dmlc::Stream</a>* fo,</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keyword">const</span> std::vector&lt;NDArray&gt;&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>,</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; names);</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a5203aa033a53942deaecb7bb3bf46480">Load</a>(<a class="code" href="classdmlc_1_1Stream.html">dmlc::Stream</a>* fi, std::vector&lt;NDArray&gt;* <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, std::vector&lt;std::string&gt;* keys);</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; </div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00851"></a><span class="lineno"><a class="line" href="classmxnet_1_1NDArray.html#add286ab9a359eb017008c9a3ff53701f"> 851</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1Imperative.html">Imperative</a>;</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="comment">// shandle is used to store the actual values in the NDArray</span></div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="comment">// aux_handles store the aux data(such as indices) if it&#39;s needed by non-default storage.</span></div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keyword">struct </span>Chunk {</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <a class="code" href="structmxnet_1_1Storage_1_1Handle.html">Storage::Handle</a> shandle;</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; std::vector&lt;Storage::Handle&gt; aux_handles;</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; </div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="preprocessor">#if MXNET_USE_ONEDNN == 1</span></div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; </div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; std::shared_ptr&lt;DNNLMemory&gt; dnnl_mem_;</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; </div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <a class="code" href="structmxnet_1_1engine_1_1Var.html">Engine::VarHandle</a> <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a>;</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordtype">bool</span> static_data;</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordtype">bool</span> delay_alloc;</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="comment">// the type of the storage. The storage_type is never kUndefinedStorage once the chunk</span></div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="comment">// is constructed.</span></div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a> = <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>;</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; std::vector&lt;int&gt; <a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a>;</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// context of data</span></div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="structmxnet_1_1Context.html">Context</a> <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="comment">// The shape of the chunk data.</span></div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="comment">// This might not be the same shape as the NDArray, since the storage may be sparse.</span></div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="comment">// The default value for storage_shape is {0} when an empty non-default NDArray is created.</span></div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a> <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>;</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">// The shape of aux data. The default value for the shape depends on the type of storage.</span></div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="comment">// If aux_shapes[i].Size() is zero, aux data i is empty.</span></div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a> <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>;</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; std::shared_ptr&lt;Storage&gt; storage_ref_;</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; std::weak_ptr&lt;Engine&gt; engine_ref_;</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; </div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; Chunk()</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; : static_data(true),</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; delay_alloc(false),</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; storage_ref_(<a class="code" href="classmxnet_1_1Storage.html">Storage</a>::_GetSharedRef()),</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; engine_ref_(<a class="code" href="classmxnet_1_1Engine.html">Engine</a>::_GetSharedRef()) {}</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; </div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; Chunk(<a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a> <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <a class="code" href="structmxnet_1_1Context.html">Context</a> ctx_, <span class="keywordtype">bool</span> delay_alloc_, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; : static_data(false),</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; delay_alloc(true),</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>(ctx_),</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; storage_ref_(<a class="code" href="classmxnet_1_1Storage.html">Storage</a>::_GetSharedRef()),</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; engine_ref_(<a class="code" href="classmxnet_1_1Engine.html">Engine</a>::_GetSharedRef()) {</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacemxnet.html#a6c29d398f4166fdc0f95f63ce0ef66ee">shape_is_known</a>(<a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>)) {</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; }</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a> = <a class="code" href="classmxnet_1_1Engine.html#ae0a23da15ef63d9479c7468e1f2f825f">Engine::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Engine.html#a6e141b188f018d5d933ab99868631d5e">NewVariable</a>();</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ae0a4202582aa12a598f5c55ef51ad4c8">ctx</a> = ctx_;</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">if</span> (!delay_alloc_) {</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; this-&gt;<a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>();</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; }</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; </div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; Chunk(<span class="keyword">const</span> TBlob&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>, <span class="keywordtype">int</span> dev_id)</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; : static_data(true),</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; delay_alloc(false),</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; storage_ref_(Storage::_GetSharedRef()),</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; engine_ref_(Engine::_GetSharedRef()) {</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; CHECK(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a> == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>);</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a> = <a class="code" href="classmxnet_1_1Engine.html#ae0a23da15ef63d9479c7468e1f2f825f">Engine::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Engine.html#a6e141b188f018d5d933ab99868631d5e">NewVariable</a>();</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#ad8bcf56e13082fc0607e21f08b14758f">dev_mask</a>() == <a class="code" href="structmshadow_1_1cpu.html#a57f74b500825e21c0c246ad5b4e5016b">cpu::kDevMask</a>) {</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a> = <a class="code" href="structmxnet_1_1Context.html#a4bb231d70623fde216de51589347e513">Context::CPU</a>();</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#ad8bcf56e13082fc0607e21f08b14758f">dev_mask</a>(), <a class="code" href="structmshadow_1_1gpu.html#a15467f39ddeed96fa259efda7c988f05">gpu::kDevMask</a>);</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a> = <a class="code" href="structmxnet_1_1Context.html#a39d1a2b59bce135da127475995a58671">Context::GPU</a>(dev_id);</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; }</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="comment">// init shandle</span></div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ae0a4202582aa12a598f5c55ef51ad4c8">ctx</a> = <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#a428e25a6317e50c8b55307c96f8ec595">dptr</a> = <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#a4e5f4953be2c16724ecff0afc5ea2e10">dptr_</a>;</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#af0e813ff066c775051d1f1f78a4a2029">shape_</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#a4649b740b80a6045754cb2389cfcca61">type_flag_</a>);</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#af0e813ff066c775051d1f1f78a4a2029">shape_</a>;</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; }</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; </div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; Chunk(<span class="keywordtype">int</span> shared_pid, <span class="keywordtype">int</span> shared_id, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>)</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; : static_data(false),</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; delay_alloc(false),</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; storage_ref_(Storage::_GetSharedRef()),</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; engine_ref_(Engine::_GetSharedRef()) {</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a> = <a class="code" href="classmxnet_1_1Engine.html#ae0a23da15ef63d9479c7468e1f2f825f">Engine::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Engine.html#a6e141b188f018d5d933ab99868631d5e">NewVariable</a>();</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a> = <a class="code" href="structmxnet_1_1Context.html#a8e090b1fcc96b682512bcc22fc521f80">Context::CPUShared</a>(0);</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ae0a4202582aa12a598f5c55ef51ad4c8">ctx</a> = <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ac92111bc6d73d7402331615506684b74">shared_pid</a> = shared_pid;</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ad938f8d0ddba567350ee7b3aae14b4c1">shared_id</a> = shared_id;</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#afc59309d033f5c09256e042d285eb00d">Alloc</a>(&amp;shandle);</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; }</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="comment">// Constructor for a non-default storage chunk</span></div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; Chunk(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> storage_type_,</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; storage_shape_,</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; Context ctx_,</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordtype">bool</span> delay_alloc_,</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>,</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; aux_types_,</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a>&amp; aux_shapes_)</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; : static_data(false),</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; delay_alloc(delay_alloc_),</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(storage_type_),</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a>(aux_types_),</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>(ctx_),</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>(storage_shape_),</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>(aux_shapes_),</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; storage_ref_(Storage::_GetSharedRef()),</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; engine_ref_(Engine::_GetSharedRef()) {</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ae0a4202582aa12a598f5c55ef51ad4c8">ctx</a> = <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a> = <a class="code" href="classmxnet_1_1Engine.html#ae0a23da15ef63d9479c7468e1f2f825f">Engine::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Engine.html#a6e141b188f018d5d933ab99868631d5e">NewVariable</a>();</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="comment">// aux_handles always reflect the correct number of aux data</span></div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>.size(); i++) {</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">CheckAndAllocAuxData</a>(i, <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>[i]);</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="comment">// this line is needed in case when aux_shapes[i].Size() = 0</span></div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="comment">// aux_handles[i] will not be updated and take only default value.</span></div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; aux_handles[i].ctx = <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; }</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">if</span> (!delay_alloc) {</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c">CheckAndAllocData</a>(<a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>, <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; }</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; </div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; Chunk(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> storage_type_,</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <span class="keyword">const</span> TBlob&amp; <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>,</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keyword">const</span> std::vector&lt;TBlob&gt;&amp; <a class="code" href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9">aux_data</a>,</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <span class="keywordtype">int</span> dev_id)</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; : static_data(true),</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; delay_alloc(false),</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>(storage_type_),</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; storage_ref_(Storage::_GetSharedRef()),</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; engine_ref_(Engine::_GetSharedRef()) {</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keyword">using namespace </span><a class="code" href="namespacemshadow.html">mshadow</a>;</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>, <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>);</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="comment">// init var</span></div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">var</a> = <a class="code" href="classmxnet_1_1Engine.html#ae0a23da15ef63d9479c7468e1f2f825f">Engine::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Engine.html#a6e141b188f018d5d933ab99868631d5e">NewVariable</a>();</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="comment">// init ctx</span></div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#ad8bcf56e13082fc0607e21f08b14758f">dev_mask</a>() == <a class="code" href="structmshadow_1_1cpu.html#a57f74b500825e21c0c246ad5b4e5016b">cpu::kDevMask</a>) {</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a> = <a class="code" href="structmxnet_1_1Context.html#a4bb231d70623fde216de51589347e513">Context::CPU</a>();</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#ad8bcf56e13082fc0607e21f08b14758f">dev_mask</a>(), <a class="code" href="structmshadow_1_1gpu.html#a15467f39ddeed96fa259efda7c988f05">gpu::kDevMask</a>);</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a> = <a class="code" href="structmxnet_1_1Context.html#a39d1a2b59bce135da127475995a58671">Context::GPU</a>(dev_id);</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; }</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="comment">// init shandle</span></div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ae0a4202582aa12a598f5c55ef51ad4c8">ctx</a> = <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#a428e25a6317e50c8b55307c96f8ec595">dptr</a> = <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#a4e5f4953be2c16724ecff0afc5ea2e10">dptr_</a>;</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#af0e813ff066c775051d1f1f78a4a2029">shape_</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#a4649b740b80a6045754cb2389cfcca61">type_flag_</a>);</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">data</a>.<a class="code" href="classmxnet_1_1TBlob.html#af0e813ff066c775051d1f1f78a4a2029">shape_</a>;</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">// init aux handles</span></div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; aux : <a class="code" href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9">aux_data</a>) {</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; Storage::Handle aux_handle;</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; aux_handle.ctx = <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>;</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; aux_handle.dptr = aux.dptr_;</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; aux_handle.size = aux.shape_.Size() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow_sizeof</a>(aux.type_flag_);</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; aux_handles.push_back(aux_handle);</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a>.emplace_back(aux.type_flag_);</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>.emplace_back(aux.shape_);</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; }</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; }</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; </div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a245bf6c0b4dd454fa5d5bfb255005221">set_aux_shape</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> i, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>) {</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>[i] = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>.<a class="code" href="classmxnet_1_1Tuple.html#a6e0bdfe3f0f34693223f657ef676bef6">ndim</a>() &gt;= 0) {</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a> == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">kRowSparseStorage</a> &amp;&amp; i == <a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">rowsparse::kIdx</a>) {</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>[0] = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>[0];</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a> == <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">kCSRStorage</a> &amp;&amp; i == <a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>) {</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>[0] = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>[0];</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; }</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; }</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; }</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; </div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>(<span class="keywordtype">void</span>) {</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">if</span> (delay_alloc) {</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#afc59309d033f5c09256e042d285eb00d">Alloc</a>(&amp;shandle);</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="preprocessor">#if MXNET_USE_ONEDNN == 1</span></div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; dnnl_mem_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; delay_alloc = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; }</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; </div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="comment">// size is the number of bytes</span></div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>(uint64_t dbytes) {</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; CHECK_EQ(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>, <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>)</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; &lt;&lt; <span class="stringliteral">&quot;CheckAndAlloc(dbytes) is only intended for kDefaultStorage&quot;</span>;</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; dbytes = std::max(dbytes, <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a>));</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">if</span> (delay_alloc) {</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = dbytes;</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#afc59309d033f5c09256e042d285eb00d">Alloc</a>(&amp;shandle);</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="preprocessor">#if MXNET_USE_ONEDNN == 1</span></div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; dnnl_mem_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; delay_alloc = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> &lt; dbytes) {</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// free storage</span></div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#a5bdbd7b3ab712cd9e087ab007bdc64dd">Free</a>(shandle);</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="comment">// init storage</span></div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = dbytes;</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#afc59309d033f5c09256e042d285eb00d">Alloc</a>(&amp;shandle);</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="preprocessor">#if MXNET_USE_ONEDNN == 1</span></div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; dnnl_mem_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; }</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; }</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a1e789a9d17c0b15749d247122e9b207a">Init</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>) {</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keyword">auto</span> size = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>();</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; shandle.<a class="code" href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">size</a> = size * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; this-&gt;<a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>();</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; }</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">CheckAndAlloc</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>,</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>,</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>) {</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// calculate size, perform allocation</span></div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">kRowSparseStorage</a> == <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>) {</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// For row sparse, aux_shape indicates the number of rows to allocate</span></div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="keyword">auto</span> <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a> = <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>[<a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">rowsparse::kIdx</a>];</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">CheckAndAllocAuxData</a>(<a class="code" href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">rowsparse::kIdx</a>, <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>);</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a> <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>);</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>[0] = <a class="code" href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">aux_shape</a>[0];</div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c">CheckAndAllocData</a>(<a class="code" href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">storage_shape</a>, <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">kCSRStorage</a> == <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>) {</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">CheckAndAllocAuxData</a>(<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42ad9dcbaec1c8c6ca9d69648c83354aac1">csr::kIndPtr</a>, <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>[<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42ad9dcbaec1c8c6ca9d69648c83354aac1">csr::kIndPtr</a>]);</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">CheckAndAllocAuxData</a>(<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>, <a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>[<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>]);</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c">CheckAndAllocData</a>(<a class="code" href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">aux_shapes</a>[<a class="code" href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">csr::kIdx</a>], <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; LOG(FATAL) &lt;&lt; <span class="stringliteral">&quot;Storage type &quot;</span> &lt;&lt; <a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a> &lt;&lt; <span class="stringliteral">&quot; not implemented for CheckAndAlloc&quot;</span>;</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; }</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; }</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="comment">// create storage handle for data based on shape and dtype, assuming ctx is set</span></div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="comment">// storage shape is also updated</span></div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="comment">// if data is already allocated, try reuse the storage. Otherwise, free the current one</span></div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="comment">// and allocate new storage</span></div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c">CheckAndAllocData</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; </div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;<span class="preprocessor">#if MXNET_USE_ONEDNN == 1</span></div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="comment">// Have DNNL memory reference to the data in the default storage</span></div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="comment">// or create memory for DNNL.</span></div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordtype">void</span> SetDNNLMem(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>);</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// If the data is stored in DNNL layout, we reorder data in dnnl_mem_ and</span></div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="comment">// save the result in shandle.</span></div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordtype">void</span> Reorder2Default();</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="comment">// Reroder data to a specified layout.</span></div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordtype">void</span> DNNLDataReorder(<span class="keyword">const</span> <span class="keywordtype">void</span>* md);</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordtype">bool</span> IsDNNL() <span class="keyword">const</span>;</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="keywordtype">bool</span> IsDefault() <span class="keyword">const</span>;</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; </div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="comment">// create storage handle for aux data based on shape</span></div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="comment">// this function assumes ctx, aux shapes and aux types are set</span></div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="comment">// aux shape is also updated</span></div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="comment">// if aux data is already allocated, try reuse the storage. Otherwise, free the current one</span></div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="comment">// and allocate new storage</span></div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">CheckAndAllocAuxData</a>(<span class="keywordtype">size_t</span> i, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>) {</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; CHECK_EQ(<a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1Tuple.html#a6e0bdfe3f0f34693223f657ef676bef6">ndim</a>(), 1) &lt;&lt; <span class="stringliteral">&quot;shape must be 1D in CheckAndAllocAuxData&quot;</span>;</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>, <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584">kUndefinedStorage</a>)</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; &lt;&lt; <span class="stringliteral">&quot;storage type cannot be kUndefinedStorage in CheckAndAllocAuxData&quot;</span>;</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; CHECK_NE(<a class="code" href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">storage_type</a>, <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">kDefaultStorage</a>)</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; &lt;&lt; <span class="stringliteral">&quot;storage type cannot be kDefaultStorage in CheckAndAllocAuxData&quot;</span>;</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">if</span> (aux_handles.size() &lt;= i) {</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; aux_handles.resize(i + 1);</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; }</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordtype">size_t</span> aux_bytes = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>.<a class="code" href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">Size</a>() * <a class="code" href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a>(<a class="code" href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">aux_types</a>[i]);</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">if</span> (aux_handles[i].size &lt; aux_bytes) {</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="comment">// free storage</span></div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#a5bdbd7b3ab712cd9e087ab007bdc64dd">Free</a>(aux_handles[i]);</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="comment">// init aux storage</span></div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; aux_handles[i] = <a class="code" href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">Storage::Get</a>()-&gt;<a class="code" href="classmxnet_1_1Storage.html#afc59309d033f5c09256e042d285eb00d">Alloc</a>(aux_bytes, <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>);</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; }</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// init shape</span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a245bf6c0b4dd454fa5d5bfb255005221">set_aux_shape</a>(i, <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>);</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; }</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; ~Chunk();</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; }; <span class="comment">// struct Chunk</span></div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; </div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1NDArray.html#a1e789a9d17c0b15749d247122e9b207a">Init</a>(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> stype, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a>&amp; <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>, <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>) {</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; shape_ = <a class="code" href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">shape</a>;</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; dtype_ = <a class="code" href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">dtype</a>;</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; storage_type_ = stype;</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; reuse_ = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; byte_offset_ = 0;</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; autograd_entry_ = <a class="code" href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a>(<span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; </div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordtype">void</span> SetTBlob() <span class="keyword">const</span>;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; </div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; std::shared_ptr&lt;Chunk&gt; ptr_{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keyword">mutable</span> <a class="code" href="classmxnet_1_1TShape.html">mxnet::TShape</a> shape_;</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordtype">size_t</span> byte_offset_ = 0;</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordtype">int</span> dtype_ = -1;</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordtype">bool</span> reuse_ = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> storage_type_ = <a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584">kUndefinedStorage</a>;</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <a class="code" href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a> autograd_entry_;</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <a class="code" href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a> deferredcompute_entry_;</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keyword">mutable</span> TBlob tblob_;</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;}; <span class="comment">// class NDArray</span></div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; </div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespacemxnet.html#ae4143fe21881cbf0174bba638e8e0330">num_aux_data</a>(<a class="code" href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">NDArrayStorageType</a> stype);</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#ae7b0809624683afc59b6d7f7784d8bfb">CopyFromTo</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; from, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* to, <span class="keywordtype">int</span> priority = 0);</div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; </div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#ae7b0809624683afc59b6d7f7784d8bfb">CopyFromTo</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; from, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; to, <span class="keywordtype">int</span> priority = 0, <span class="keywordtype">bool</span> is_opr = <span class="keyword">false</span>);</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; </div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a15dfd6f3fa03dc2cf39dbab1225e1a51">ElementwiseSum</a>(<span class="keyword">const</span> std::vector&lt;NDArray&gt;&amp; source, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out, <span class="keywordtype">int</span> priority = 0);</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; </div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#a4dafe3aae43025fd21bc44b98c18ed1e">operator+</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; rhs);</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#a4dafe3aae43025fd21bc44b98c18ed1e">operator+</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; rhs);</div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#ae3356844b657c9ae1b84d3ddd56bccf6">operator-</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; rhs);</div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#ae3356844b657c9ae1b84d3ddd56bccf6">operator-</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; rhs);</div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#af26b09fbcda865d34ec4fdad482d266a">operator*</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; rhs);</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#af26b09fbcda865d34ec4fdad482d266a">operator*</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; rhs);</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#a502e3e00dc61cedb9c6eef711f1176ac">operator/</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; rhs);</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a> <a class="code" href="namespacemxnet.html#a502e3e00dc61cedb9c6eef711f1176ac">operator/</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; rhs);</div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; </div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a5bf83454c8f41259eb9d471f59feda2b">RandomSeed</a>(uint32_t seed);</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a5bf83454c8f41259eb9d471f59feda2b">RandomSeed</a>(Context <a class="code" href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">ctx</a>, uint32_t seed);</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a2846f4556c9ca9bd0f567504ce60f274">SampleUniform</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> begin, <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> end, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a5a28062f52ca576a126599e7ad487077">SampleGaussian</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> mu, <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> sigma, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a050beaa505f11e0b844deb91efe0cac2">SampleGamma</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> alpha, <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> beta, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#a51f9b094369a349c05463de2be9f0a31">SampleExponential</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> lambda, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#aed55e8197182b7c66126902b2a43739a">SamplePoisson</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> lambda, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#ae82f70918b2d946f7ad66a158b1733dc">SampleNegBinomial</a>(int32_t k, <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> p, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacemxnet.html#ad8e0dad88ce27133fd24811763b7afdb">SampleGenNegBinomial</a>(<a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> mu, <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a> alpha, <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>* out);</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; </div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;<span class="comment">//--------------------------------------------------------------</span></div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;<span class="comment">// The following part are API Registration of NDArray functions.</span></div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;<span class="comment">//--------------------------------------------------------------</span></div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; </div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;<span class="keyword">typedef</span> std::function&lt;void(<a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* scalars,</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordtype">char</span>** param_vals)&gt;</div>
<div class="line"><a name="l01358"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a0782774ef482f7135bc9d627dda520a1"> 1358</a></span>&#160; <a class="code" href="namespacemxnet.html#a0782774ef482f7135bc9d627dda520a1">NDArrayAPIFunction</a>;</div>
<div class="line"><a name="l01360"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818a"> 1360</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818a">NDArrayFunctionTypeMask</a> {</div>
<div class="line"><a name="l01362"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51"> 1362</a></span>&#160; <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51">kNDArrayArgBeforeScalar</a> = 1,</div>
<div class="line"><a name="l01364"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aaef9818c8aae9d0046b3d9033a62fcfbb"> 1364</a></span>&#160; <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aaef9818c8aae9d0046b3d9033a62fcfbb">kScalarArgBeforeNDArray</a> = 1 &lt;&lt; 1,</div>
<div class="line"><a name="l01373"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd"> 1373</a></span>&#160; <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd">kAcceptEmptyMutateTarget</a> = 1 &lt;&lt; 2</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;};</div>
<div class="line"><a name="l01376"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html"> 1376</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a></div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; : <span class="keyword">public</span> <a class="code" href="classdmlc_1_1FunctionRegEntryBase.html">dmlc::FunctionRegEntryBase</a>&lt;NDArrayFunctionReg, NDArrayAPIFunction&gt; {</div>
<div class="line"><a name="l01379"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#aa0847438b4f3f600ec61d6d544755a29"> 1379</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#aa0847438b4f3f600ec61d6d544755a29">num_use_vars</a>;</div>
<div class="line"><a name="l01381"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#ad7881779b7807c6357902bdaccfccde2"> 1381</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#ad7881779b7807c6357902bdaccfccde2">num_mutate_vars</a>;</div>
<div class="line"><a name="l01383"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#a9591e2abf6cbca0903aec582b96b4d95"> 1383</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#a9591e2abf6cbca0903aec582b96b4d95">num_scalars</a>;</div>
<div class="line"><a name="l01385"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#a0b24615f30e4fbe69ee75c7b319735bf"> 1385</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#a0b24615f30e4fbe69ee75c7b319735bf">type_mask</a>;</div>
<div class="line"><a name="l01389"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#abd540887b52ba89572ad6a18b4ac739c"> 1389</a></span>&#160; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#abd540887b52ba89572ad6a18b4ac739c">NDArrayFunctionReg</a>() : num_use_vars(0), num_mutate_vars(0), num_scalars(0), type_mask(0) {}</div>
<div class="line"><a name="l01396"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#aa606f0cec91a2e069553f98d7e7addcd"> 1396</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#aa606f0cec91a2e069553f98d7e7addcd">set_function</a>(<span class="keywordtype">void</span> (*fsetvalue)(<span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; rhs, <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>* out)) {</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; body = [fsetvalue](<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="keywordtype">char</span>** param_vals) { (*fsetvalue)(s[0], mutate_vars[0]); };</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; num_mutate_vars = 1;</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; num_scalars = 1;</div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;src&quot;</span>, <span class="stringliteral">&quot;real_t&quot;</span>, <span class="stringliteral">&quot;Source input to the function.&quot;</span>);</div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; }</div>
<div class="line"><a name="l01414"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#aa7f4633d042179d90c067aeb8da62060"> 1414</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#aa7f4633d042179d90c067aeb8da62060">set_function</a>(</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keywordtype">void</span> (*fternary)(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; mhs, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; rhs, <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>* out)) {</div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; body = [fternary](<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keywordtype">char</span>** param_vals) {</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; (*fternary)(*used_vars[0], *used_vars[1], *used_vars[2], mutate_vars[0]);</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; };</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; num_use_vars = 3;</div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; num_mutate_vars = 1;</div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; type_mask = <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51">kNDArrayArgBeforeScalar</a> | <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd">kAcceptEmptyMutateTarget</a>;</div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;lhs&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Left operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;mhs&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Middle operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;rhs&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Right operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; }</div>
<div class="line"><a name="l01438"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#aa57c24a22d49470496b221c72bf7a1a0"> 1438</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#aa57c24a22d49470496b221c72bf7a1a0">set_function</a>(<span class="keywordtype">void</span> (*fbinary)(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; lhs,</div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; rhs,</div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>* out)) {</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; body = [fbinary](<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordtype">char</span>** param_vals) {</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; (*fbinary)(*used_vars[0], *used_vars[1], mutate_vars[0]);</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; };</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; num_use_vars = 2;</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; num_mutate_vars = 1;</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; type_mask = <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51">kNDArrayArgBeforeScalar</a> | <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd">kAcceptEmptyMutateTarget</a>;</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;lhs&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Left operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;rhs&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Right operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; }</div>
<div class="line"><a name="l01462"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#af6fc4419b30c74139eceb04e7d5758f5"> 1462</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#af6fc4419b30c74139eceb04e7d5758f5">set_function</a>(<span class="keywordtype">void</span> (*fscalar)(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; lhs,</div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>&amp; rhs,</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>* out)) {</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; body = [fscalar](<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keywordtype">char</span>** param_vals) { (*fscalar)(*used_vars[0], s[0], mutate_vars[0]); };</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; num_use_vars = 1;</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; num_mutate_vars = 1;</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; num_scalars = 1;</div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; type_mask = <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51">kNDArrayArgBeforeScalar</a> | <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd">kAcceptEmptyMutateTarget</a>;</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;lhs&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Left operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;rhs&quot;</span>, <span class="stringliteral">&quot;real_t&quot;</span>, <span class="stringliteral">&quot;Right operand to the function.&quot;</span>);</div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; }</div>
<div class="line"><a name="l01485"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#a5f4c0751bc3111a8707b160d0e99e1af"> 1485</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#a5f4c0751bc3111a8707b160d0e99e1af">set_function</a>(<span class="keywordtype">void</span> (*funary)(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>&amp; src, <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>* out)) {</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; body = [funary](<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordtype">char</span>** param_vals) { (*funary)(*used_vars[0], mutate_vars[0]); };</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; num_use_vars = 1;</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; num_mutate_vars = 1;</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; type_mask = <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51">kNDArrayArgBeforeScalar</a> | <a class="code" href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd">kAcceptEmptyMutateTarget</a>;</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; this-&gt;add_argument(<span class="stringliteral">&quot;src&quot;</span>, <span class="stringliteral">&quot;NDArray&quot;</span>, <span class="stringliteral">&quot;Source input to the function.&quot;</span>);</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; }</div>
<div class="line"><a name="l01504"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#a220e1866bea35e103adbe23ff92855d9"> 1504</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#a220e1866bea35e103adbe23ff92855d9">set_function</a>(</div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="keywordtype">void</span> (*fgeneric)(<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="keyword">const</span> std::map&lt;std::string, std::string&gt;&amp; param)) {</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; body = [fgeneric](<a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** used_vars,</div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <a class="code" href="namespacemxnet.html#a4421326e33f2a848cb2fa3e70ab24ff4">real_t</a>* s,</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <a class="code" href="classmxnet_1_1NDArray.html">NDArray</a>** mutate_vars,</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordtype">int</span> num_params,</div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keywordtype">char</span>** param_keys,</div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="keywordtype">char</span>** param_vals) {</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; std::map&lt;std::string, std::string&gt; param;</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; num_params; ++i) {</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; param[param_keys[i]] = param_vals[i];</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; }</div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; fgeneric(used_vars, s, mutate_vars, param);</div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; };</div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; }</div>
<div class="line"><a name="l01528"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#a970756506340ff688dbb447858b1963c"> 1528</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#a970756506340ff688dbb447858b1963c">set_num_use_vars</a>(<span class="keywordtype">unsigned</span> n) {</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; num_use_vars = n;</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; }</div>
<div class="line"><a name="l01537"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#af0a5efd67efe9b7c14abd49652e79a14"> 1537</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#af0a5efd67efe9b7c14abd49652e79a14">set_num_mutate_vars</a>(<span class="keywordtype">unsigned</span> n) {</div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; num_mutate_vars = n;</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; }</div>
<div class="line"><a name="l01546"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#a4f6a3ba75e30389c827b3b26a12415d1"> 1546</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#a4f6a3ba75e30389c827b3b26a12415d1">set_num_scalars</a>(<span class="keywordtype">unsigned</span> n) {</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; num_scalars = n;</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; }</div>
<div class="line"><a name="l01555"></a><span class="lineno"><a class="line" href="structmxnet_1_1NDArrayFunctionReg.html#acc3656ba948c28d3d155736ce064a3f4"> 1555</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html">NDArrayFunctionReg</a>&amp; <a class="code" href="structmxnet_1_1NDArrayFunctionReg.html#acc3656ba948c28d3d155736ce064a3f4">set_type_mask</a>(<span class="keywordtype">int</span> tmask) {</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; type_mask = tmask;</div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; }</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;}; <span class="comment">// NDArrayFunctionReg</span></div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; </div>
<div class="line"><a name="l01572"></a><span class="lineno"><a class="line" href="include_2mxnet_2ndarray_8h.html#a21d0a394bdf34194b9954252d9476d56"> 1572</a></span>&#160;<span class="preprocessor">#define MXNET_REGISTER_NDARRAY_FUN(name) \</span></div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;<span class="preprocessor"> DMLC_REGISTRY_REGISTER(::mxnet::NDArrayFunctionReg, NDArrayFunctionReg, name)</span></div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; </div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;} <span class="comment">// namespace mxnet</span></div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; </div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedmlc.html">dmlc</a> {</div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;<a class="code" href="type__traits_8h.html#ad29838fb4e93a8dd3efbdcd292c98bd5">DMLC_DECLARE_TRAITS</a>(has_saveload, <a class="code" href="classmxnet_1_1NDArray.html">mxnet::NDArray</a>, <span class="keyword">true</span>);</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;} <span class="comment">// namespace dmlc</span></div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;<span class="preprocessor">#endif // MXNET_NDARRAY_H_</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ab160abff10bc69fdc0cff93fe502c74c"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ab160abff10bc69fdc0cff93fe502c74c">mxnet::NDArray::AssignStorageInfo</a></div><div class="ttdeci">void AssignStorageInfo(const std::string &amp;profiler_scope, const std::string &amp;name)</div><div class="ttdoc">assign profiler scope and name to the storage handles</div></div>
<div class="ttc" id="anamespacemxnet_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="aclassmxnet_1_1NDArray_html_aa99f425040db90b52f945007a2f11b73"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa99f425040db90b52f945007a2f11b73">mxnet::NDArray::ReshapeAndAlloc</a></div><div class="ttdeci">void ReshapeAndAlloc(const mxnet::TShape &amp;shape)</div><div class="ttdoc">Allocate the space if the allocation has been delayed or the requested size is bigger than the availa...</div><div class="ttdef"><b>Definition:</b> ndarray.h:710</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_a970756506340ff688dbb447858b1963c"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#a970756506340ff688dbb447858b1963c">mxnet::NDArrayFunctionReg::set_num_use_vars</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_num_use_vars(unsigned n)</div><div class="ttdoc">set the number of mutate variables</div><div class="ttdef"><b>Definition:</b> ndarray.h:1528</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a76646c5c7e164bd7c81854521d3bee52"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a76646c5c7e164bd7c81854521d3bee52">mxnet::NDArray::Detach</a></div><div class="ttdeci">NDArray Detach() const</div><div class="ttdoc">Return a copy of this NDArray without autograd and deferred compute history.</div><div class="ttdef"><b>Definition:</b> ndarray.h:684</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1aa200492eeec6fa431683ef0d943bfbc2d"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa200492eeec6fa431683ef0d943bfbc2d">mxnet::kRSPShapeErr</a></div><div class="ttdeci">@ kRSPShapeErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:73</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_addb42a7353a4c07b2d1bae0afa8ef48e"><div class="ttname"><a href="classmxnet_1_1NDArray.html#addb42a7353a4c07b2d1bae0afa8ef48e">mxnet::NDArray::At</a></div><div class="ttdeci">NDArray At(index_t idx) const</div><div class="ttdoc">Index a NDArray.</div></div>
<div class="ttc" id="anamespacemshadow_html_a143ad1a73ba518ef0aad29d36f2569ee"><div class="ttname"><a href="namespacemshadow.html#a143ad1a73ba518ef0aad29d36f2569ee">mshadow::default_type_flag</a></div><div class="ttdeci">const int default_type_flag</div><div class="ttdoc">type enum value for default real type</div><div class="ttdef"><b>Definition:</b> base.h:492</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_acc3656ba948c28d3d155736ce064a3f4"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#acc3656ba948c28d3d155736ce064a3f4">mxnet::NDArrayFunctionReg::set_type_mask</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_type_mask(int tmask)</div><div class="ttdoc">set type mask</div><div class="ttdef"><b>Definition:</b> ndarray.h:1555</div></div>
<div class="ttc" id="anamespacemxnet_html_a5a28062f52ca576a126599e7ad487077"><div class="ttname"><a href="namespacemxnet.html#a5a28062f52ca576a126599e7ad487077">mxnet::SampleGaussian</a></div><div class="ttdeci">void SampleGaussian(real_t mu, real_t sigma, NDArray *out)</div><div class="ttdoc">Sample gaussian distribution for each elements of out.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ab0cd632ca10d91e65734cd8ce558cb08"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ab0cd632ca10d91e65734cd8ce558cb08">mxnet::NDArray::version</a></div><div class="ttdeci">size_t version() const</div><div class="ttdoc">return var version of the NDArray</div><div class="ttdef"><b>Definition:</b> ndarray.h:419</div></div>
<div class="ttc" id="anamespacemxnet_html_af26b09fbcda865d34ec4fdad482d266a"><div class="ttname"><a href="namespacemxnet.html#af26b09fbcda865d34ec4fdad482d266a">mxnet::operator*</a></div><div class="ttdeci">NDArray operator*(const NDArray &amp;lhs, const NDArray &amp;rhs)</div><div class="ttdoc">elementwise multiplication</div></div>
<div class="ttc" id="aclassdmlc_1_1FunctionRegEntryBase_html"><div class="ttname"><a href="classdmlc_1_1FunctionRegEntryBase.html">dmlc::FunctionRegEntryBase</a></div><div class="ttdoc">Common base class for function registry.</div><div class="ttdef"><b>Definition:</b> registry.h:151</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_af85fea0c1ec24bc2c387dce8d344ea2a"><div class="ttname"><a href="classmxnet_1_1NDArray.html#af85fea0c1ec24bc2c387dce8d344ea2a">mxnet::NDArray::InitAsArray</a></div><div class="ttdeci">void InitAsArray(const NDArray &amp;src, const mxnet::TShape &amp;shape, int dtype)</div><div class="ttdef"><b>Definition:</b> ndarray.h:599</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_afb3dbc357c53e1e0b980257f6c5e2cac"><div class="ttname"><a href="classmxnet_1_1NDArray.html#afb3dbc357c53e1e0b980257f6c5e2cac">mxnet::NDArray::SyncCopyToCPU</a></div><div class="ttdeci">void SyncCopyToCPU(void *data, size_t size) const</div><div class="ttdoc">Do a synchronize copy to a contiguous CPU memory region.</div></div>
<div class="ttc" id="anamespacemxnet_1_1csr_html_a74a2e3877ef7b348d5374a9d604aba42"><div class="ttname"><a href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42">mxnet::csr::CSRAuxType</a></div><div class="ttdeci">CSRAuxType</div><div class="ttdef"><b>Definition:</b> ndarray.h:54</div></div>
<div class="ttc" id="anamespacemxnet_html_a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd"><div class="ttname"><a href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aa334598420a4246d5412ddc346b2b57bd">mxnet::kAcceptEmptyMutateTarget</a></div><div class="ttdeci">@ kAcceptEmptyMutateTarget</div><div class="ttdoc">whether this function allows the handles in the target to be empty NDArray that are not yet initializ...</div><div class="ttdef"><b>Definition:</b> ndarray.h:1373</div></div>
<div class="ttc" id="anamespacemshadow_1_1expr_html_ac547eb1dceee713542019c2cc6da378b"><div class="ttname"><a href="namespacemshadow_1_1expr.html#ac547eb1dceee713542019c2cc6da378b">mshadow::expr::scalar</a></div><div class="ttdeci">ScalarExp&lt; DType &gt; scalar(DType s)</div><div class="ttdoc">create an scalar expression</div><div class="ttdef"><b>Definition:</b> expression.h:103</div></div>
<div class="ttc" id="anamespacemxnet_html_a15dfd6f3fa03dc2cf39dbab1225e1a51"><div class="ttname"><a href="namespacemxnet.html#a15dfd6f3fa03dc2cf39dbab1225e1a51">mxnet::ElementwiseSum</a></div><div class="ttdeci">void ElementwiseSum(const std::vector&lt; NDArray &gt; &amp;source, NDArray *out, int priority=0)</div><div class="ttdoc">Perform elementwise sum over each data from source, store result into out.</div></div>
<div class="ttc" id="astructmxnet_1_1Storage_1_1Handle_html_a428e25a6317e50c8b55307c96f8ec595"><div class="ttname"><a href="structmxnet_1_1Storage_1_1Handle.html#a428e25a6317e50c8b55307c96f8ec595">mxnet::Storage::Handle::dptr</a></div><div class="ttdeci">void * dptr</div><div class="ttdoc">Pointer to the data.</div><div class="ttdef"><b>Definition:</b> storage.h:60</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aba6fd4c790a1857c080321572b61546c"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aba6fd4c790a1857c080321572b61546c">mxnet::NDArray::CheckAndAllocData</a></div><div class="ttdeci">void CheckAndAllocData(const mxnet::TShape &amp;storage_shape) const</div><div class="ttdef"><b>Definition:</b> ndarray.h:726</div></div>
<div class="ttc" id="anamespacemxnet_html_aed55e8197182b7c66126902b2a43739a"><div class="ttname"><a href="namespacemxnet.html#aed55e8197182b7c66126902b2a43739a">mxnet::SamplePoisson</a></div><div class="ttdeci">void SamplePoisson(real_t lambda, NDArray *out)</div><div class="ttdoc">Sample Poisson distribution for each elements of out.</div></div>
<div class="ttc" id="aclassmxnet_1_1Storage_html_a96abc072908d72d3271360a7e3e4bbc2"><div class="ttname"><a href="classmxnet_1_1Storage.html#a96abc072908d72d3271360a7e3e4bbc2">mxnet::Storage::Get</a></div><div class="ttdeci">static Storage * Get()</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a245bf6c0b4dd454fa5d5bfb255005221"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a245bf6c0b4dd454fa5d5bfb255005221">mxnet::NDArray::set_aux_shape</a></div><div class="ttdeci">void set_aux_shape(size_t index, const mxnet::TShape &amp;shape) const</div><div class="ttdoc">For a sparse operation on a csr matrix for example, the size of the column index array is an estimate...</div><div class="ttdef"><b>Definition:</b> ndarray.h:289</div></div>
<div class="ttc" id="aclassmxnet_1_1Engine_html_a6e141b188f018d5d933ab99868631d5e"><div class="ttname"><a href="classmxnet_1_1Engine.html#a6e141b188f018d5d933ab99868631d5e">mxnet::Engine::NewVariable</a></div><div class="ttdeci">virtual VarHandle NewVariable()=0</div><div class="ttdoc">Allocate a new variable, the variable can then be used to schedule the operation concurrently via dep...</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a67b0f8eb36568b4c9fbd3da2a1c4b0a3"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a67b0f8eb36568b4c9fbd3da2a1c4b0a3">mxnet::NDArray::dtype</a></div><div class="ttdeci">int dtype() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:335</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html">mxnet::NDArrayFunctionReg</a></div><div class="ttdoc">Registry entry for NDArrayFunction.</div><div class="ttdef"><b>Definition:</b> ndarray.h:1376</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a1cf4c49e6925d35586f75a1c9bdb51e4"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a1cf4c49e6925d35586f75a1c9bdb51e4">mxnet::NDArray::WaitToRead</a></div><div class="ttdeci">void WaitToRead() const</div><div class="ttdoc">Block until all the pending write operations with respect to current NDArray are finished,...</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ac5858cd154fbf68f832c2717f4f925e8"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ac5858cd154fbf68f832c2717f4f925e8">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(int shared_pid, int shared_id, const mxnet::TShape &amp;shape, int dtype)</div><div class="ttdoc">create ndarray from shared memory</div><div class="ttdef"><b>Definition:</b> ndarray.h:160</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa2e26d3d53e546a8b5f458c0cc204387"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa2e26d3d53e546a8b5f458c0cc204387">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(const TBlob &amp;data, int dev_id, const std::function&lt; void()&gt; &amp;deleter)</div><div class="ttdoc">constructing a static NDArray that shares data with TBlob which is with deleter Use with caution: all...</div><div class="ttdef"><b>Definition:</b> ndarray.h:148</div></div>
<div class="ttc" id="anamespacedmlc_html"><div class="ttname"><a href="namespacedmlc.html">dmlc</a></div><div class="ttdoc">namespace for dmlc</div><div class="ttdef"><b>Definition:</b> array_view.h:12</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a1b47078a60bf0369ff0a7df893caf65b"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a1b47078a60bf0369ff0a7df893caf65b">mxnet::NDArray::operator*=</a></div><div class="ttdeci">NDArray &amp; operator*=(const NDArray &amp;src)</div><div class="ttdoc">elementwise multiplication to current ndarray this mutate the current NDArray</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1aa322b8b178929b43f1b4b16c8cb9003ef"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa322b8b178929b43f1b4b16c8cb9003ef">mxnet::kNormalErr</a></div><div class="ttdeci">@ kNormalErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:69</div></div>
<div class="ttc" id="anamespacemxnet_html_a6c29d398f4166fdc0f95f63ce0ef66ee"><div class="ttname"><a href="namespacemxnet.html#a6c29d398f4166fdc0f95f63ce0ef66ee">mxnet::shape_is_known</a></div><div class="ttdeci">bool shape_is_known(const TShape &amp;x)</div><div class="ttdef"><b>Definition:</b> tuple.h:699</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a0cfa7466a652feb2258bb990453a0a7d"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a0cfa7466a652feb2258bb990453a0a7d">mxnet::NDArray::Slice</a></div><div class="ttdeci">NDArray Slice(index_t begin, index_t end) const</div><div class="ttdoc">Slice a NDArray.</div></div>
<div class="ttc" id="atype__traits_8h_html_ad29838fb4e93a8dd3efbdcd292c98bd5"><div class="ttname"><a href="type__traits_8h.html#ad29838fb4e93a8dd3efbdcd292c98bd5">DMLC_DECLARE_TRAITS</a></div><div class="ttdeci">#define DMLC_DECLARE_TRAITS(Trait, Type, Value)</div><div class="ttdoc">macro to quickly declare traits information</div><div class="ttdef"><b>Definition:</b> type_traits.h:126</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa7a198e3e4c80a48cf92a913009aab8f"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa7a198e3e4c80a48cf92a913009aab8f">mxnet::NDArray::operator=</a></div><div class="ttdeci">NDArray &amp; operator=(real_t scalar)</div><div class="ttdoc">set all the elements in ndarray to be scalar</div></div>
<div class="ttc" id="anamespacemxnet_html_a0782774ef482f7135bc9d627dda520a1"><div class="ttname"><a href="namespacemxnet.html#a0782774ef482f7135bc9d627dda520a1">mxnet::NDArrayAPIFunction</a></div><div class="ttdeci">std::function&lt; void(NDArray **used_vars, real_t *scalars, NDArray **mutate_vars, int num_params, char **param_keys, char **param_vals)&gt; NDArrayAPIFunction</div><div class="ttdoc">definition of NDArray function</div><div class="ttdef"><b>Definition:</b> ndarray.h:1358</div></div>
<div class="ttc" id="anamespacemxnet_html_a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608"><div class="ttname"><a href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aabf6395d98a9668e8066a0c0da5570608">mxnet::kDefaultStorage</a></div><div class="ttdeci">@ kDefaultStorage</div><div class="ttdef"><b>Definition:</b> ndarray.h:63</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1aa11ce5dbb8ad355e9ee5a678f2f51a5bb"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa11ce5dbb8ad355e9ee5a678f2f51a5bb">mxnet::kCSRIndPtrErr</a></div><div class="ttdeci">@ kCSRIndPtrErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:71</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a05c99c4040b6a37610046e508de98db2"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a05c99c4040b6a37610046e508de98db2">mxnet::NDArray::ReInit</a></div><div class="ttdeci">void ReInit()</div><div class="ttdef"><b>Definition:</b> ndarray.h:200</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ad8035f9c0060a2420bce8d466e46b86b"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ad8035f9c0060a2420bce8d466e46b86b">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(const NDArrayStorageType stype, const mxnet::TShape &amp;shape, Context ctx, bool delay_alloc=true, int dtype=mshadow::default_type_flag, const std::vector&lt; int &gt; &amp;aux_types={}, const mxnet::ShapeVector &amp;aux_shapes={}, const mxnet::TShape &amp;storage_shape=mxnet::TShape(mshadow::Shape1(0)))</div><div class="ttdoc">constructor for NDArray with storage type</div><div class="ttdef"><b>Definition:</b> ndarray.h:104</div></div>
<div class="ttc" id="anamespacemxnet_html_a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584"><div class="ttname"><a href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aadf6c6faf0de1e55119c679180c99e584">mxnet::kUndefinedStorage</a></div><div class="ttdeci">@ kUndefinedStorage</div><div class="ttdef"><b>Definition:</b> ndarray.h:62</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a1a7288505ac9bbb19830161f7e5c1a6f"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a1a7288505ac9bbb19830161f7e5c1a6f">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(const TBlob &amp;data, int dev_id)</div><div class="ttdoc">constructing a static NDArray that shares data with TBlob Use with caution: allocate ONLY ONE NDArray...</div><div class="ttdef"><b>Definition:</b> ndarray.h:133</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ade5c291caf0e240892b1bffaf7e5c8b5"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ade5c291caf0e240892b1bffaf7e5c8b5">mxnet::NDArray::data</a></div><div class="ttdeci">const TBlob &amp; data() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:298</div></div>
<div class="ttc" id="anamespacemxnet_html_a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51"><div class="ttname"><a href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aabbc1ba0bb3f8647dcfd8bad69efdbb51">mxnet::kNDArrayArgBeforeScalar</a></div><div class="ttdeci">@ kNDArrayArgBeforeScalar</div><div class="ttdoc">all the use_vars should go before scalar</div><div class="ttdef"><b>Definition:</b> ndarray.h:1362</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_af8e67cc189771ba824ffba70b49056d2"><div class="ttname"><a href="classmxnet_1_1NDArray.html#af8e67cc189771ba824ffba70b49056d2">mxnet::NDArray::SelfReorder2Default</a></div><div class="ttdeci">void SelfReorder2Default()</div></div>
<div class="ttc" id="anamespacemxnet_html_a89a5f0f5cfd9e1e94604a7b42dda818aaef9818c8aae9d0046b3d9033a62fcfbb"><div class="ttname"><a href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818aaef9818c8aae9d0046b3d9033a62fcfbb">mxnet::kScalarArgBeforeNDArray</a></div><div class="ttdeci">@ kScalarArgBeforeNDArray</div><div class="ttdoc">all the scalar should go before use_vars</div><div class="ttdef"><b>Definition:</b> ndarray.h:1364</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_afbafb6c0712694be87ab034a2eb1639c"><div class="ttname"><a href="classmxnet_1_1NDArray.html#afbafb6c0712694be87ab034a2eb1639c">mxnet::NDArray::storage_handle</a></div><div class="ttdeci">Storage::Handle storage_handle() const</div><div class="ttdoc">get storage handle</div><div class="ttdef"><b>Definition:</b> ndarray.h:380</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ad35ba01da6949494afe895b7429e4fc3"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ad35ba01da6949494afe895b7429e4fc3">mxnet::NDArray::operator-=</a></div><div class="ttdeci">NDArray &amp; operator-=(const NDArray &amp;src)</div><div class="ttdoc">elementwise subtract from current ndarray this mutate the current NDArray</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_a220e1866bea35e103adbe23ff92855d9"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#a220e1866bea35e103adbe23ff92855d9">mxnet::NDArrayFunctionReg::set_function</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_function(void(*fgeneric)(NDArray **used_vars, real_t *s, NDArray **mutate_vars, const std::map&lt; std::string, std::string &gt; &amp;param))</div><div class="ttdoc">set the function body to a unary NDArray function this will also auto set the parameters correctly</div><div class="ttdef"><b>Definition:</b> ndarray.h:1504</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ad8599450a4ba06b5890c5d06bd024d8e"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ad8599450a4ba06b5890c5d06bd024d8e">mxnet::NDArray::WaitToWrite</a></div><div class="ttdeci">void WaitToWrite() const</div><div class="ttdoc">Block until all the pending read/write operations with respect to current NDArray are finished,...</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ab5c172c0f1d77d212790583ba11a3cd2"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ab5c172c0f1d77d212790583ba11a3cd2">mxnet::NDArray::IsSame</a></div><div class="ttdeci">bool IsSame(const NDArray &amp;other) const</div><div class="ttdef"><b>Definition:</b> ndarray.h:236</div></div>
<div class="ttc" id="a3rdparty_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 class="ttdoc">defines configuration macros</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ab8b6b078a376806d8a72ea14befe02c9"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ab8b6b078a376806d8a72ea14befe02c9">mxnet::NDArray::SyncCheckFormat</a></div><div class="ttdeci">void SyncCheckFormat(const bool full_check) const</div><div class="ttdoc">check whether the NDArray format is valid</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa30cf4bfe565044616228286b8334931"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa30cf4bfe565044616228286b8334931">mxnet::NDArray::storage_shape</a></div><div class="ttdeci">const mxnet::TShape &amp; storage_shape() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:252</div></div>
<div class="ttc" id="anamespacemxnet_1_1csr_html_a74a2e3877ef7b348d5374a9d604aba42ad9dcbaec1c8c6ca9d69648c83354aac1"><div class="ttname"><a href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42ad9dcbaec1c8c6ca9d69648c83354aac1">mxnet::csr::kIndPtr</a></div><div class="ttdeci">@ kIndPtr</div><div class="ttdef"><b>Definition:</b> ndarray.h:54</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ae14d45e2bae697565a0723f4963db7e4"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ae14d45e2bae697565a0723f4963db7e4">mxnet::NDArray::data_ndarray</a></div><div class="ttdeci">NDArray data_ndarray() const</div><div class="ttdoc">Generate a deep copy of data() returned as a default storage type NDArray.</div></div>
<div class="ttc" id="aclassmxnet_1_1TBlob_html_a4e5f4953be2c16724ecff0afc5ea2e10"><div class="ttname"><a href="classmxnet_1_1TBlob.html#a4e5f4953be2c16724ecff0afc5ea2e10">mxnet::TBlob::dptr_</a></div><div class="ttdeci">void * dptr_</div><div class="ttdoc">pointer to the data</div><div class="ttdef"><b>Definition:</b> tensor_blob.h:70</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_afe1e6281a1bc6d0a0f2377d8870fb8f5"><div class="ttname"><a href="classmxnet_1_1NDArray.html#afe1e6281a1bc6d0a0f2377d8870fb8f5">mxnet::NDArray::IsView</a></div><div class="ttdeci">bool IsView() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:224</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a65b47e2d501a8e623ea70c0ae88b789e"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a65b47e2d501a8e623ea70c0ae88b789e">mxnet::NDArray::AsArray</a></div><div class="ttdeci">NDArray AsArray(const mxnet::TShape &amp;shape, int dtype) const</div><div class="ttdoc">Create a NDArray that shares memory with current one The new array must have smaller memory size than...</div><div class="ttdef"><b>Definition:</b> ndarray.h:586</div></div>
<div class="ttc" id="astructmshadow_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="astructmxnet_1_1NDArrayFunctionReg_html_abd540887b52ba89572ad6a18b4ac739c"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#abd540887b52ba89572ad6a18b4ac739c">mxnet::NDArrayFunctionReg::NDArrayFunctionReg</a></div><div class="ttdeci">NDArrayFunctionReg()</div><div class="ttdoc">constructor</div><div class="ttdef"><b>Definition:</b> ndarray.h:1389</div></div>
<div class="ttc" id="astructmxnet_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="aclassmxnet_1_1NDArray_html_a318e6f3ae6f94026dec90aa98a7e3f10"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a318e6f3ae6f94026dec90aa98a7e3f10">mxnet::NDArray::ReshapeWithRecord</a></div><div class="ttdeci">NDArray ReshapeWithRecord(const mxnet::TShape &amp;shape)</div><div class="ttdoc">Get an reshaped NDArray. Supports autograd recording.</div></div>
<div class="ttc" id="aclassmxnet_1_1Tuple_html_a6e0bdfe3f0f34693223f657ef676bef6"><div class="ttname"><a href="classmxnet_1_1Tuple.html#a6e0bdfe3f0f34693223f657ef676bef6">mxnet::Tuple::ndim</a></div><div class="ttdeci">int ndim() const</div><div class="ttdef"><b>Definition:</b> tuple.h:217</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a3ab28f889680e6aad1b981b378f206d9"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a3ab28f889680e6aad1b981b378f206d9">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(const NDArrayStorageType stype, const mxnet::TShape &amp;shape, const TBlob &amp;data, const std::vector&lt; TBlob &gt; &amp;aux_data, int dev_id)</div><div class="ttdoc">constructing a static NDArray of non-default storage that shares data with TBlob Use with caution: al...</div><div class="ttdef"><b>Definition:</b> ndarray.h:177</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ac3279047ec28e02b794e7662ec68384a"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ac3279047ec28e02b794e7662ec68384a">mxnet::NDArray::aux_ndarray</a></div><div class="ttdeci">NDArray aux_ndarray(size_t i) const</div><div class="ttdoc">Generate a deep copy of aux_data(i) returned as a default storage type NDArray.</div></div>
<div class="ttc" id="astructDLManagedTensor_html"><div class="ttname"><a href="structDLManagedTensor.html">DLManagedTensor</a></div><div class="ttdoc">C Tensor object, manage memory of DLTensor. This data structure is intended to facilitate the borrowi...</div><div class="ttdef"><b>Definition:</b> dlpack.h:157</div></div>
<div class="ttc" id="astructmxnet_1_1Storage_1_1Handle_html_ab93b9db0c83e4ef3803fb587377a74a0"><div class="ttname"><a href="structmxnet_1_1Storage_1_1Handle.html#ab93b9db0c83e4ef3803fb587377a74a0">mxnet::Storage::Handle::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">Size of the storage.</div><div class="ttdef"><b>Definition:</b> storage.h:64</div></div>
<div class="ttc" id="anamespacemxnet_html_a4dafe3aae43025fd21bc44b98c18ed1e"><div class="ttname"><a href="namespacemxnet.html#a4dafe3aae43025fd21bc44b98c18ed1e">mxnet::operator+</a></div><div class="ttdeci">NDArray operator+(const NDArray &amp;lhs, const NDArray &amp;rhs)</div><div class="ttdoc">elementwise add</div></div>
<div class="ttc" id="aclassmxnet_1_1Engine_html_ae0a23da15ef63d9479c7468e1f2f825f"><div class="ttname"><a href="classmxnet_1_1Engine.html#ae0a23da15ef63d9479c7468e1f2f825f">mxnet::Engine::Get</a></div><div class="ttdeci">static Engine * Get()</div></div>
<div class="ttc" id="anamespacemxnet_1_1csr_html_a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7"><div class="ttname"><a href="namespacemxnet_1_1csr.html#a74a2e3877ef7b348d5374a9d604aba42aa6ca1dbcb9c5858e0d28237ae3624ed7">mxnet::csr::kIdx</a></div><div class="ttdeci">@ kIdx</div><div class="ttdef"><b>Definition:</b> ndarray.h:54</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ac1f24bbdb0013050415ef0542d8273f1"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ac1f24bbdb0013050415ef0542d8273f1">mxnet::NDArray::aux_type</a></div><div class="ttdeci">int aux_type(size_t i) const</div><div class="ttdef"><b>Definition:</b> ndarray.h:338</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a531a3437dde0dfc9b0c40a32450f4c7a"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a531a3437dde0dfc9b0c40a32450f4c7a">mxnet::NDArray::CheckAndAlloc</a></div><div class="ttdeci">void CheckAndAlloc() const</div><div class="ttdoc">Allocate the space if it is delayed allocated. This is an internal function used by system that norma...</div><div class="ttdef"><b>Definition:</b> ndarray.h:696</div></div>
<div class="ttc" id="anamespacemxnet_html_a51f9b094369a349c05463de2be9f0a31"><div class="ttname"><a href="namespacemxnet.html#a51f9b094369a349c05463de2be9f0a31">mxnet::SampleExponential</a></div><div class="ttdeci">void SampleExponential(real_t lambda, NDArray *out)</div><div class="ttdoc">Sample exponential distribution for each elements of out.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a9c038544414ed2b992f9393a14eff6cd"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a9c038544414ed2b992f9393a14eff6cd">mxnet::NDArray::grad</a></div><div class="ttdeci">NDArray grad() const</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_a5f4c0751bc3111a8707b160d0e99e1af"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#a5f4c0751bc3111a8707b160d0e99e1af">mxnet::NDArrayFunctionReg::set_function</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_function(void(*funary)(const NDArray &amp;src, NDArray *out))</div><div class="ttdoc">set the function body to a unary NDArray function this will also auto set the parameters correctly</div><div class="ttdef"><b>Definition:</b> ndarray.h:1485</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a0bb9681f2b23318ff38566ed71af26a9"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a0bb9681f2b23318ff38566ed71af26a9">mxnet::NDArray::aux_data</a></div><div class="ttdeci">TBlob aux_data(size_t i) const</div><div class="ttdef"><b>Definition:</b> ndarray.h:312</div></div>
<div class="ttc" id="aclassmxnet_1_1TBlob_html_ad8bcf56e13082fc0607e21f08b14758f"><div class="ttname"><a href="classmxnet_1_1TBlob.html#ad8bcf56e13082fc0607e21f08b14758f">mxnet::TBlob::dev_mask</a></div><div class="ttdeci">int dev_mask() const</div><div class="ttdoc">device mask of the corresponding device</div><div class="ttdef"><b>Definition:</b> tensor_blob.h:257</div></div>
<div class="ttc" id="aclassnnvm_1_1Symbol_html"><div class="ttname"><a href="classnnvm_1_1Symbol.html">nnvm::Symbol</a></div><div class="ttdoc">Symbol is help class used to represent the operator node in Graph.</div><div class="ttdef"><b>Definition:</b> symbolic.h:50</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a7f1d95c104a092be10a22a546e74f836"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a7f1d95c104a092be10a22a546e74f836">mxnet::NDArray::aux_shape</a></div><div class="ttdeci">const mxnet::TShape &amp; aux_shape(size_t index) const</div><div class="ttdoc">get the shape of aux_data(index)</div><div class="ttdef"><b>Definition:</b> ndarray.h:264</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1aaf3ee084ba1d9a6203922ff7c9ddb12e3"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aaf3ee084ba1d9a6203922ff7c9ddb12e3">mxnet::kCSRIdxErr</a></div><div class="ttdeci">@ kCSRIdxErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:72</div></div>
<div class="ttc" id="anamespacemxnet_html_a536b732faa980e1de446c552460ff76a"><div class="ttname"><a href="namespacemxnet.html#a536b732faa980e1de446c552460ff76a">mxnet::NDArrayStorageType</a></div><div class="ttdeci">NDArrayStorageType</div><div class="ttdef"><b>Definition:</b> ndarray.h:61</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a58d6f716d7eebf822c75e841342d9feb"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a58d6f716d7eebf822c75e841342d9feb">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(const mxnet::TShape &amp;shape, Context ctx, bool delay_alloc=false, int dtype=mshadow::default_type_flag)</div><div class="ttdoc">constructs a new dynamic NDArray</div><div class="ttdef"><b>Definition:</b> ndarray.h:93</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa475e532890ae08c2a63ea2707a5053b"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa475e532890ae08c2a63ea2707a5053b">mxnet::NDArray::aux_types</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; aux_types() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:277</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_afbfcf25b4e005007c40300c711c34f69"><div class="ttname"><a href="classmxnet_1_1NDArray.html#afbfcf25b4e005007c40300c711c34f69">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray(Context ctx, int dtype=mshadow::default_type_flag)</div><div class="ttdoc">constructs a new dynamic NDArray whose shape is unknown, hence the NDArray is inherently lazily creat...</div><div class="ttdef"><b>Definition:</b> ndarray.h:120</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_aa57c24a22d49470496b221c72bf7a1a0"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#aa57c24a22d49470496b221c72bf7a1a0">mxnet::NDArrayFunctionReg::set_function</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_function(void(*fbinary)(const NDArray &amp;lhs, const NDArray &amp;rhs, NDArray *out))</div><div class="ttdoc">set the function body to a binary NDArray function this will also auto set the parameters correctly</div><div class="ttdef"><b>Definition:</b> ndarray.h:1438</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1aaf64429479d4a48998e6cd122a3117628"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aaf64429479d4a48998e6cd122a3117628">mxnet::kCSRShapeErr</a></div><div class="ttdeci">@ kCSRShapeErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:70</div></div>
<div class="ttc" id="astructmxnet_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="aclassmxnet_1_1NDArray_html_a0d7a0ccf8e8a76e8be1c5817f4754236"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a0d7a0ccf8e8a76e8be1c5817f4754236">mxnet::NDArray::FromDLPack</a></div><div class="ttdeci">static NDArray FromDLPack(const DLManagedTensor *tensor, bool transient_handle)</div><div class="ttdoc">Create a NDArray backed by a dlpack tensor.</div></div>
<div class="ttc" id="aclassmxnet_1_1TBlob_html_a4649b740b80a6045754cb2389cfcca61"><div class="ttname"><a href="classmxnet_1_1TBlob.html#a4649b740b80a6045754cb2389cfcca61">mxnet::TBlob::type_flag_</a></div><div class="ttdeci">int type_flag_</div><div class="ttdoc">type flag of the tensor blob</div><div class="ttdef"><b>Definition:</b> tensor_blob.h:74</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_aa606f0cec91a2e069553f98d7e7addcd"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#aa606f0cec91a2e069553f98d7e7addcd">mxnet::NDArrayFunctionReg::set_function</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_function(void(*fsetvalue)(const real_t &amp;rhs, NDArray *out))</div><div class="ttdoc">set the function body to a NDArray setvalue function this will also auto set the parameters correctly</div><div class="ttdef"><b>Definition:</b> ndarray.h:1396</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1aa7636cc230df4abe46f3210846faac799"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1aa7636cc230df4abe46f3210846faac799">mxnet::kRSPIdxErr</a></div><div class="ttdeci">@ kRSPIdxErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:74</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a7dd1143eeb4fbe15cebe85f28142551f"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a7dd1143eeb4fbe15cebe85f28142551f">mxnet::NDArray::Save</a></div><div class="ttdeci">void Save(dmlc::Stream *strm) const</div><div class="ttdoc">save the content into binary stream</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a29673998ea5bec1cab7337595d907c67"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a29673998ea5bec1cab7337595d907c67">mxnet::NDArray::is_none</a></div><div class="ttdeci">bool is_none() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:347</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa2a801dd5c47b5bdd01a385d2c4327b8"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa2a801dd5c47b5bdd01a385d2c4327b8">mxnet::NDArray::AtWithRecord</a></div><div class="ttdeci">NDArray AtWithRecord(index_t idx)</div><div class="ttdoc">Index a NDArray.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aec1b90af51327c2956adf182c201de03"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aec1b90af51327c2956adf182c201de03">mxnet::NDArray::set_fresh_out_grad</a></div><div class="ttdeci">void set_fresh_out_grad(bool state) const</div></div>
<div class="ttc" id="anamespacemxnet_html_ad8e0dad88ce27133fd24811763b7afdb"><div class="ttname"><a href="namespacemxnet.html#ad8e0dad88ce27133fd24811763b7afdb">mxnet::SampleGenNegBinomial</a></div><div class="ttdeci">void SampleGenNegBinomial(real_t mu, real_t alpha, NDArray *out)</div><div class="ttdoc">Sample generalized negative binomial distribution for each elements of out.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a7574bc7633ff7f796bf8a1f2e6e2a392"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a7574bc7633ff7f796bf8a1f2e6e2a392">mxnet::NDArray::byte_offset</a></div><div class="ttdeci">size_t byte_offset() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:415</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aff56b804010005abb7e23f877c35940b"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aff56b804010005abb7e23f877c35940b">mxnet::NDArray::StreamSync</a></div><div class="ttdeci">void StreamSync(int stream) const</div><div class="ttdoc">Synchronize the destination stream provided by consumer with the source stream that current NDArray l...</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_aa0847438b4f3f600ec61d6d544755a29"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#aa0847438b4f3f600ec61d6d544755a29">mxnet::NDArrayFunctionReg::num_use_vars</a></div><div class="ttdeci">unsigned num_use_vars</div><div class="ttdoc">number of variable used by this function</div><div class="ttdef"><b>Definition:</b> ndarray.h:1379</div></div>
<div class="ttc" id="astructmxnet_1_1Storage_1_1Handle_html"><div class="ttname"><a href="structmxnet_1_1Storage_1_1Handle.html">mxnet::Storage::Handle</a></div><div class="ttdoc">Storage handle.</div><div class="ttdef"><b>Definition:</b> storage.h:56</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html"><div class="ttname"><a href="classmxnet_1_1NDArray.html">mxnet::NDArray</a></div><div class="ttdoc">ndarray interface</div><div class="ttdef"><b>Definition:</b> ndarray.h:82</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ac390edfdd8a7dd99f69ea373f4d18e1a"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ac390edfdd8a7dd99f69ea373f4d18e1a">mxnet::NDArray::SyncCopyFromCPU</a></div><div class="ttdeci">void SyncCopyFromCPU(const void *data, size_t size) const</div><div class="ttdoc">Do a synchronize copy from a contiguous CPU memory region.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a26d1ddb2bb0ed1e671ce7606498b942d"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a26d1ddb2bb0ed1e671ce7606498b942d">mxnet::NDArray::ctx</a></div><div class="ttdeci">Context ctx() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:328</div></div>
<div class="ttc" id="aclassmxnet_1_1TBlob_html"><div class="ttname"><a href="classmxnet_1_1TBlob.html">mxnet::TBlob</a></div><div class="ttdoc">tensor blob class that can be used to hold tensor of any dimension, any device and any data type,...</div><div class="ttdef"><b>Definition:</b> tensor_blob.h:65</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa0ff3466e6ff09f8fe0a8019b53d5d42"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa0ff3466e6ff09f8fe0a8019b53d5d42">mxnet::NDArray::shape</a></div><div class="ttdeci">const mxnet::TShape &amp; shape() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:244</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a6617e1bf4242314f7ee6b6e3a66ce493"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a6617e1bf4242314f7ee6b6e3a66ce493">mxnet::NDArray::Copy</a></div><div class="ttdeci">NDArray Copy(Context ctx) const</div><div class="ttdoc">return a new copy this NDArray</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ab9b6fd0a27d13af7b2494be903f501ec"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ab9b6fd0a27d13af7b2494be903f501ec">mxnet::NDArray::get_autograd_symbol</a></div><div class="ttdeci">nnvm::Symbol get_autograd_symbol() const</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_a9591e2abf6cbca0903aec582b96b4d95"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#a9591e2abf6cbca0903aec582b96b4d95">mxnet::NDArrayFunctionReg::num_scalars</a></div><div class="ttdeci">unsigned num_scalars</div><div class="ttdoc">number of scalars used by this function</div><div class="ttdef"><b>Definition:</b> ndarray.h:1383</div></div>
<div class="ttc" id="aclassmxnet_1_1Engine_html"><div class="ttname"><a href="classmxnet_1_1Engine.html">mxnet::Engine</a></div><div class="ttdoc">Dependency engine that schedules operations.</div><div class="ttdef"><b>Definition:</b> engine.h:213</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a6011ffa88e84bdcdc9bfa5d3365647d9"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a6011ffa88e84bdcdc9bfa5d3365647d9">mxnet::NDArray::Reshape</a></div><div class="ttdeci">NDArray Reshape(const mxnet::TShape &amp;shape) const</div><div class="ttdoc">Get an reshaped NDArray.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a414aa4b87b1da96cfa227e5df858ece5"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a414aa4b87b1da96cfa227e5df858ece5">mxnet::NDArray::InitDetached</a></div><div class="ttdeci">void InitDetached(const NDArray *src)</div><div class="ttdef"><b>Definition:</b> ndarray.h:196</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa49fb5edddbf0d9ca38e8c2130e3ca88"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa49fb5edddbf0d9ca38e8c2130e3ca88">mxnet::NDArray::CheckAndAllocAuxData</a></div><div class="ttdeci">void CheckAndAllocAuxData(size_t i, const mxnet::TShape &amp;aux_shape) const</div><div class="ttdef"><b>Definition:</b> ndarray.h:731</div></div>
<div class="ttc" id="astructmxnet_1_1Storage_1_1Handle_html_ac92111bc6d73d7402331615506684b74"><div class="ttname"><a href="structmxnet_1_1Storage_1_1Handle.html#ac92111bc6d73d7402331615506684b74">mxnet::Storage::Handle::shared_pid</a></div><div class="ttdeci">int shared_pid</div><div class="ttdoc">Id for IPC shared memory.</div><div class="ttdef"><b>Definition:</b> storage.h:72</div></div>
<div class="ttc" id="a3rdparty_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 class="ttdoc">defines serializable interface of dmlc</div></div>
<div class="ttc" id="anamespacemshadow_html_a2e0671a4ac1729d7f8996ba091f8e07c"><div class="ttname"><a href="namespacemshadow.html#a2e0671a4ac1729d7f8996ba091f8e07c">mshadow::mshadow_sizeof</a></div><div class="ttdeci">size_t mshadow_sizeof(int type)</div><div class="ttdoc">get data type size from type enum</div><div class="ttdef"><b>Definition:</b> base.h:1804</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa18b9a6db4601e6b96bbe0560abeac98"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa18b9a6db4601e6b96bbe0560abeac98">mxnet::NDArray::aux_shapes</a></div><div class="ttdeci">const mxnet::ShapeVector &amp; aux_shapes() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:270</div></div>
<div class="ttc" id="anamespacemxnet_html_a89a5f0f5cfd9e1e94604a7b42dda818a"><div class="ttname"><a href="namespacemxnet.html#a89a5f0f5cfd9e1e94604a7b42dda818a">mxnet::NDArrayFunctionTypeMask</a></div><div class="ttdeci">NDArrayFunctionTypeMask</div><div class="ttdoc">mask information on how functions can be exposed</div><div class="ttdef"><b>Definition:</b> ndarray.h:1360</div></div>
<div class="ttc" id="astructmxnet_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:90</div></div>
<div class="ttc" id="aclassmxnet_1_1Imperative_html"><div class="ttname"><a href="classmxnet_1_1Imperative.html">mxnet::Imperative</a></div><div class="ttdoc">runtime functions for NDArray</div><div class="ttdef"><b>Definition:</b> imperative.h:61</div></div>
<div class="ttc" id="aclassmxnet_1_1TShape_html_a505a8c1666a7aa7f6e4108b808e6a897"><div class="ttname"><a href="classmxnet_1_1TShape.html#a505a8c1666a7aa7f6e4108b808e6a897">mxnet::TShape::Size</a></div><div class="ttdeci">size_t Size() const</div><div class="ttdef"><b>Definition:</b> tuple.h:523</div></div>
<div class="ttc" id="aclassmxnet_1_1Storage_html_a5bdbd7b3ab712cd9e087ab007bdc64dd"><div class="ttname"><a href="classmxnet_1_1Storage.html#a5bdbd7b3ab712cd9e087ab007bdc64dd">mxnet::Storage::Free</a></div><div class="ttdeci">virtual void Free(Handle handle)=0</div><div class="ttdoc">Free storage.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a3108a54e05d537444cb1961c69091efa"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a3108a54e05d537444cb1961c69091efa">mxnet::NDArray::SetShapeFromChunk</a></div><div class="ttdeci">void SetShapeFromChunk() const</div><div class="ttdoc">set the correct shape of NDArray directly from the storage_shape of its own chunk.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a5203aa033a53942deaecb7bb3bf46480"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a5203aa033a53942deaecb7bb3bf46480">mxnet::NDArray::Load</a></div><div class="ttdeci">bool Load(dmlc::Stream *strm)</div><div class="ttdoc">load the content from binary stream</div></div>
<div class="ttc" id="anamespacemshadow_html"><div class="ttname"><a href="namespacemshadow.html">mshadow</a></div><div class="ttdoc">overloaded + operator between half_t and bf16_t</div><div class="ttdef"><b>Definition:</b> base.h:319</div></div>
<div class="ttc" id="astorage_8h_html"><div class="ttname"><a href="storage_8h.html">storage.h</a></div><div class="ttdoc">Storage manager across multiple devices.</div></div>
<div class="ttc" id="anamespacemxnet_html_a5bf83454c8f41259eb9d471f59feda2b"><div class="ttname"><a href="namespacemxnet.html#a5bf83454c8f41259eb9d471f59feda2b">mxnet::RandomSeed</a></div><div class="ttdeci">void RandomSeed(uint32_t seed)</div><div class="ttdoc">Seed all random number generator in mxnet.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a8b390d8776568e2ffc8c2ed227e12f96"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a8b390d8776568e2ffc8c2ed227e12f96">mxnet::NDArray::SparseUpdateChunk</a></div><div class="ttdeci">void SparseUpdateChunk(const NDArray &amp;arr) const</div><div class="ttdoc">Update ndarray chunk storage handles using existing ndarray storage handles Also update the aux_handl...</div><div class="ttdef"><b>Definition:</b> ndarray.h:639</div></div>
<div class="ttc" id="anamespacemxnet_html_a2846f4556c9ca9bd0f567504ce60f274"><div class="ttname"><a href="namespacemxnet.html#a2846f4556c9ca9bd0f567504ce60f274">mxnet::SampleUniform</a></div><div class="ttdeci">void SampleUniform(real_t begin, real_t end, NDArray *out)</div><div class="ttdoc">Sample uniform distribution for each elements of out.</div></div>
<div class="ttc" id="astructmxnet_1_1engine_1_1Var_html"><div class="ttname"><a href="structmxnet_1_1engine_1_1Var.html">mxnet::engine::Var</a></div><div class="ttdoc">base class of engine variables.</div><div class="ttdef"><b>Definition:</b> engine.h:111</div></div>
<div class="ttc" id="astructmxnet_1_1Storage_1_1Handle_html_ae0a4202582aa12a598f5c55ef51ad4c8"><div class="ttname"><a href="structmxnet_1_1Storage_1_1Handle.html#ae0a4202582aa12a598f5c55ef51ad4c8">mxnet::Storage::Handle::ctx</a></div><div class="ttdeci">Context ctx</div><div class="ttdoc">Context information about device and ID.</div><div class="ttdef"><b>Definition:</b> storage.h:68</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a168da55c01cc5c7a218d975af6b5b1f9"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a168da55c01cc5c7a218d975af6b5b1f9">mxnet::NDArray::var</a></div><div class="ttdeci">Engine::VarHandle var() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:411</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aebc61006705874666423c45f161df546"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aebc61006705874666423c45f161df546">mxnet::NDArray::operator/=</a></div><div class="ttdeci">NDArray &amp; operator/=(const NDArray &amp;src)</div><div class="ttdoc">elementwise division from current ndarray this mutate the current NDArray</div></div>
<div class="ttc" id="anamespacemxnet_html_ace60510752753f459193f95cab0e9e1a"><div class="ttname"><a href="namespacemxnet.html#ace60510752753f459193f95cab0e9e1a">mxnet::NDArrayFormatErr</a></div><div class="ttdeci">NDArrayFormatErr</div><div class="ttdef"><b>Definition:</b> ndarray.h:68</div></div>
<div class="ttc" id="anamespacemxnet_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:81</div></div>
<div class="ttc" id="anamespacemxnet_html_a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254"><div class="ttname"><a href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aa777c7ad3afa566f2e841f12c81aab254">mxnet::kCSRStorage</a></div><div class="ttdeci">@ kCSRStorage</div><div class="ttdef"><b>Definition:</b> ndarray.h:65</div></div>
<div class="ttc" id="anamespacestd_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="aclassmxnet_1_1NDArray_html_aaf96f31bf9cb46c4bf1a425e82e26f33"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aaf96f31bf9cb46c4bf1a425e82e26f33">mxnet::NDArray::ToDLPack</a></div><div class="ttdeci">DLManagedTensor * ToDLPack() const</div><div class="ttdoc">Create a reference view of NDArray that represents as DLManagedTensor.</div></div>
<div class="ttc" id="atype__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="astructmxnet_1_1NDArrayFunctionReg_html_aa7f4633d042179d90c067aeb8da62060"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#aa7f4633d042179d90c067aeb8da62060">mxnet::NDArrayFunctionReg::set_function</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_function(void(*fternary)(const NDArray &amp;lhs, const NDArray &amp;mhs, const NDArray &amp;rhs, NDArray *out))</div><div class="ttdoc">set the function body to a ternary NDArray function this will also auto set the parameters correctly</div><div class="ttdef"><b>Definition:</b> ndarray.h:1414</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a1e789a9d17c0b15749d247122e9b207a"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a1e789a9d17c0b15749d247122e9b207a">mxnet::NDArray::Init</a></div><div class="ttdeci">void Init(const mxnet::TShape &amp;shape)</div><div class="ttdoc">initialize the NDArray, assuming it is not assigned a meaningful shape before</div><div class="ttdef"><b>Definition:</b> ndarray.h:191</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_af0a5efd67efe9b7c14abd49652e79a14"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#af0a5efd67efe9b7c14abd49652e79a14">mxnet::NDArrayFunctionReg::set_num_mutate_vars</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_num_mutate_vars(unsigned n)</div><div class="ttdoc">set the number of mutate variables</div><div class="ttdef"><b>Definition:</b> ndarray.h:1537</div></div>
<div class="ttc" id="aclassmxnet_1_1Storage_html_afc59309d033f5c09256e042d285eb00d"><div class="ttname"><a href="classmxnet_1_1Storage.html#afc59309d033f5c09256e042d285eb00d">mxnet::Storage::Alloc</a></div><div class="ttdeci">Handle Alloc(size_t size, Context ctx, bool failsafe=false)</div><div class="ttdoc">Allocate a new contiguous memory for a given size.</div><div class="ttdef"><b>Definition:</b> storage.h:92</div></div>
<div class="ttc" id="anamespacemxnet_html_ae3356844b657c9ae1b84d3ddd56bccf6"><div class="ttname"><a href="namespacemxnet.html#ae3356844b657c9ae1b84d3ddd56bccf6">mxnet::operator-</a></div><div class="ttdeci">NDArray operator-(const NDArray &amp;lhs, const NDArray &amp;rhs)</div><div class="ttdoc">elementwise subtraction</div></div>
<div class="ttc" id="astructmxnet_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="anamespacemxnet_html_ae4143fe21881cbf0174bba638e8e0330"><div class="ttname"><a href="namespacemxnet.html#ae4143fe21881cbf0174bba638e8e0330">mxnet::num_aux_data</a></div><div class="ttdeci">size_t num_aux_data(NDArrayStorageType stype)</div></div>
<div class="ttc" id="anamespacemxnet_html_a87e1c30aafac389774c6f4d905c0e5ea"><div class="ttname"><a href="namespacemxnet.html#a87e1c30aafac389774c6f4d905c0e5ea">mxnet::ShapeVector</a></div><div class="ttdeci">std::vector&lt; mxnet::TShape &gt; ShapeVector</div><div class="ttdoc">The result holder of shape of each NodeEntry in the graph.</div><div class="ttdef"><b>Definition:</b> tuple.h:830</div></div>
<div class="ttc" id="anamespacemxnet_1_1rowsparse_html_a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da"><div class="ttname"><a href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232ac52a46037d8cfe90ccc5da8712c7f6da">mxnet::rowsparse::kIdx</a></div><div class="ttdeci">@ kIdx</div><div class="ttdef"><b>Definition:</b> ndarray.h:58</div></div>
<div class="ttc" id="astructnnvm_1_1NodeEntry_html"><div class="ttname"><a href="structnnvm_1_1NodeEntry.html">nnvm::NodeEntry</a></div><div class="ttdoc">an entry that represents output data from a node</div><div class="ttdef"><b>Definition:</b> node.h:52</div></div>
<div class="ttc" id="anamespacemshadow_html_a05e468ef4d8882fccce53ae951b7bdbd"><div class="ttname"><a href="namespacemshadow.html#a05e468ef4d8882fccce53ae951b7bdbd">mshadow::Shape1</a></div><div class="ttdeci">MSHADOW_XINLINE Shape&lt; 1 &gt; Shape1(index_t s0)</div><div class="ttdoc">construct a one dimension shape, stride will equal s0</div><div class="ttdef"><b>Definition:</b> tensor.h:220</div></div>
<div class="ttc" id="anamespacemxnet_html_ae82f70918b2d946f7ad66a158b1733dc"><div class="ttname"><a href="namespacemxnet.html#ae82f70918b2d946f7ad66a158b1733dc">mxnet::SampleNegBinomial</a></div><div class="ttdeci">void SampleNegBinomial(int32_t k, real_t p, NDArray *out)</div><div class="ttdoc">Sample negative binomial distribution for each elements of out.</div></div>
<div class="ttc" id="aclassmxnet_1_1TBlob_html_af0e813ff066c775051d1f1f78a4a2029"><div class="ttname"><a href="classmxnet_1_1TBlob.html#af0e813ff066c775051d1f1f78a4a2029">mxnet::TBlob::shape_</a></div><div class="ttdeci">mxnet::TShape shape_</div><div class="ttdoc">shape of the tensor</div><div class="ttdef"><b>Definition:</b> tensor_blob.h:72</div></div>
<div class="ttc" id="aclassmxnet_1_1TShape_html"><div class="ttname"><a href="classmxnet_1_1TShape.html">mxnet::TShape</a></div><div class="ttdoc">A Shape class that is used to represent shape of each tensor.</div><div class="ttdef"><b>Definition:</b> tuple.h:440</div></div>
<div class="ttc" id="anamespacednnl_html"><div class="ttname"><a href="namespacednnl.html">dnnl</a></div><div class="ttdef"><b>Definition:</b> ndarray.h:47</div></div>
<div class="ttc" id="anamespacemxnet_html_a050beaa505f11e0b844deb91efe0cac2"><div class="ttname"><a href="namespacemxnet.html#a050beaa505f11e0b844deb91efe0cac2">mxnet::SampleGamma</a></div><div class="ttdeci">void SampleGamma(real_t alpha, real_t beta, NDArray *out)</div><div class="ttdoc">Sample gamma distribution for each elements of out.</div></div>
<div class="ttc" id="aengine_8h_html"><div class="ttname"><a href="engine_8h.html">engine.h</a></div><div class="ttdoc">Engine that schedules all the operations according to dependency.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a7df5a5d9956a481635fc43ca4d9a196c"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a7df5a5d9956a481635fc43ca4d9a196c">mxnet::NDArray::operator+=</a></div><div class="ttdeci">NDArray &amp; operator+=(const NDArray &amp;src)</div><div class="ttdoc">elementwise add to current space this mutate the current NDArray</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_af6fc4419b30c74139eceb04e7d5758f5"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#af6fc4419b30c74139eceb04e7d5758f5">mxnet::NDArrayFunctionReg::set_function</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_function(void(*fscalar)(const NDArray &amp;lhs, const real_t &amp;rhs, NDArray *out))</div><div class="ttdoc">set the function body to a binary NDArray function this will also auto set the parameters correctly</div><div class="ttdef"><b>Definition:</b> ndarray.h:1462</div></div>
<div class="ttc" id="a3rdparty_2dmlc-core_2include_2dmlc_2registry_8h_html"><div class="ttname"><a href="3rdparty_2dmlc-core_2include_2dmlc_2registry_8h.html">registry.h</a></div><div class="ttdoc">Registry utility that helps to build registry singletons.</div></div>
<div class="ttc" id="astructmxnet_1_1Storage_1_1Handle_html_ad938f8d0ddba567350ee7b3aae14b4c1"><div class="ttname"><a href="structmxnet_1_1Storage_1_1Handle.html#ad938f8d0ddba567350ee7b3aae14b4c1">mxnet::Storage::Handle::shared_id</a></div><div class="ttdeci">int shared_id</div><div class="ttdef"><b>Definition:</b> storage.h:73</div></div>
<div class="ttc" id="a3rdparty_2tvm_2nnvm_2include_2nnvm_2node_8h_html"><div class="ttname"><a href="3rdparty_2tvm_2nnvm_2include_2nnvm_2node_8h.html">node.h</a></div><div class="ttdoc">Graph node data structure.</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ad9d2fa3ffbe963fb5960375da1b557a2"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ad9d2fa3ffbe963fb5960375da1b557a2">mxnet::NDArray::fresh_out_grad</a></div><div class="ttdeci">bool fresh_out_grad() const</div></div>
<div class="ttc" id="anamespacemxnet_1_1rowsparse_html_a0ad4c619684fa4d442c7076c18fef232"><div class="ttname"><a href="namespacemxnet_1_1rowsparse.html#a0ad4c619684fa4d442c7076c18fef232">mxnet::rowsparse::RowSparseAuxType</a></div><div class="ttdeci">RowSparseAuxType</div><div class="ttdef"><b>Definition:</b> ndarray.h:58</div></div>
<div class="ttc" id="astructmshadow_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="anamespacemxnet_html_a502e3e00dc61cedb9c6eef711f1176ac"><div class="ttname"><a href="namespacemxnet.html#a502e3e00dc61cedb9c6eef711f1176ac">mxnet::operator/</a></div><div class="ttdeci">NDArray operator/(const NDArray &amp;lhs, const NDArray &amp;rhs)</div><div class="ttdoc">elementwise division</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a67cb416db42a52288bb0a693026a8b97"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a67cb416db42a52288bb0a693026a8b97">mxnet::NDArray::storage_type</a></div><div class="ttdeci">NDArrayStorageType storage_type() const</div><div class="ttdef"><b>Definition:</b> ndarray.h:343</div></div>
<div class="ttc" id="astructmxnet_1_1engine_1_1Var_html_a5ae9f575784f18598df8824ccd421c18"><div class="ttname"><a href="structmxnet_1_1engine_1_1Var.html#a5ae9f575784f18598df8824ccd421c18">mxnet::engine::Var::version</a></div><div class="ttdeci">virtual size_t version()</div><div class="ttdef"><b>Definition:</b> engine.h:112</div></div>
<div class="ttc" id="aclassdmlc_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="anamespacemxnet_html_a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3"><div class="ttname"><a href="namespacemxnet.html#a536b732faa980e1de446c552460ff76aac095f52c31076adc7207f4a4f17d7aa3">mxnet::kRowSparseStorage</a></div><div class="ttdeci">@ kRowSparseStorage</div><div class="ttdef"><b>Definition:</b> ndarray.h:64</div></div>
<div class="ttc" id="aclassmxnet_1_1Storage_html"><div class="ttname"><a href="classmxnet_1_1Storage.html">mxnet::Storage</a></div><div class="ttdoc">Storage manager across multiple devices.</div><div class="ttdef"><b>Definition:</b> storage.h:40</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_a4f6a3ba75e30389c827b3b26a12415d1"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#a4f6a3ba75e30389c827b3b26a12415d1">mxnet::NDArrayFunctionReg::set_num_scalars</a></div><div class="ttdeci">NDArrayFunctionReg &amp; set_num_scalars(unsigned n)</div><div class="ttdoc">set the number of scalar arguments</div><div class="ttdef"><b>Definition:</b> ndarray.h:1546</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a0b212c0a0c4c83c64a6bf6d0c430602b"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a0b212c0a0c4c83c64a6bf6d0c430602b">mxnet::NDArray::LegacyLoad</a></div><div class="ttdeci">bool LegacyLoad(dmlc::Stream *strm, const uint32_t magic)</div><div class="ttdoc">load ndarrays before supporting sparse ndarrays</div></div>
<div class="ttc" id="anamespacemxnet_html_ae7b0809624683afc59b6d7f7784d8bfb"><div class="ttname"><a href="namespacemxnet.html#ae7b0809624683afc59b6d7f7784d8bfb">mxnet::CopyFromTo</a></div><div class="ttdeci">void CopyFromTo(const NDArray &amp;from, const NDArray *to, int priority=0)</div><div class="ttdoc">issue an copy operation from one NDArray to another the two ndarray can sit on different devices this...</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_ad7881779b7807c6357902bdaccfccde2"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#ad7881779b7807c6357902bdaccfccde2">mxnet::NDArrayFunctionReg::num_mutate_vars</a></div><div class="ttdeci">unsigned num_mutate_vars</div><div class="ttdoc">number of variable mutated by this function</div><div class="ttdef"><b>Definition:</b> ndarray.h:1381</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_ac4ccbd0815226566d65d53229f719222"><div class="ttname"><a href="classmxnet_1_1NDArray.html#ac4ccbd0815226566d65d53229f719222">mxnet::NDArray::storage_initialized</a></div><div class="ttdeci">bool storage_initialized() const</div><div class="ttdoc">Returns true if a sparse ndarray's aux_data and storage are initialized Throws an exception if the in...</div><div class="ttdef"><b>Definition:</b> ndarray.h:358</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a12ec978e5dbe9092d21721a657c39756"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a12ec978e5dbe9092d21721a657c39756">mxnet::NDArray::NDArray</a></div><div class="ttdeci">NDArray()</div><div class="ttdoc">default constructor</div><div class="ttdef"><b>Definition:</b> ndarray.h:85</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_aa3943fcf632304f6ab165b8628710609"><div class="ttname"><a href="classmxnet_1_1NDArray.html#aa3943fcf632304f6ab165b8628710609">mxnet::NDArray::SyncCopyFromNDArray</a></div><div class="ttdeci">void SyncCopyFromNDArray(const NDArray &amp;src, int i=-1, int j=-1)</div><div class="ttdoc">Copy from src.data()/aux_data(i) to this-&gt;data()/aux_data(j)</div></div>
<div class="ttc" id="anamespacemxnet_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:85</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a5fbabba18b71e4ad61fee8da1a05a275"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a5fbabba18b71e4ad61fee8da1a05a275">mxnet::NDArray::CheckAndAlloc</a></div><div class="ttdeci">void CheckAndAlloc(const mxnet::ShapeVector &amp;aux_shapes) const</div><div class="ttdef"><b>Definition:</b> ndarray.h:721</div></div>
<div class="ttc" id="aclassmxnet_1_1NDArray_html_a0d868e5303669d6ce8a5ada1c34940ac"><div class="ttname"><a href="classmxnet_1_1NDArray.html#a0d868e5303669d6ce8a5ada1c34940ac">mxnet::NDArray::SliceWithRecord</a></div><div class="ttdeci">NDArray SliceWithRecord(index_t begin, index_t end)</div><div class="ttdoc">Slice a NDArray. Supports recording with autograd.</div></div>
<div class="ttc" id="astructmxnet_1_1NDArrayFunctionReg_html_a0b24615f30e4fbe69ee75c7b319735bf"><div class="ttname"><a href="structmxnet_1_1NDArrayFunctionReg.html#a0b24615f30e4fbe69ee75c7b319735bf">mxnet::NDArrayFunctionReg::type_mask</a></div><div class="ttdeci">int type_mask</div><div class="ttdoc">information on how function should be called from API</div><div class="ttdef"><b>Definition:</b> ndarray.h:1385</div></div>
<div class="ttc" id="a3rdparty_2mshadow_2mshadow_2base_8h_html_af67c41c06afea92ccf285ae8501e2316"><div class="ttname"><a href="3rdparty_2mshadow_2mshadow_2base_8h.html#af67c41c06afea92ccf285ae8501e2316">MSHADOW_TYPE_SWITCH</a></div><div class="ttdeci">#define MSHADOW_TYPE_SWITCH(type, DType,...)</div><div class="ttdef"><b>Definition:</b> base.h:1163</div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 03:47:39 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>