blob: f629095fb8f0f6916ea570e4e109229eeb4506fa [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Apache Singa: singa::Tensor Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/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">Apache Singa
</div>
<div id="projectbrief">A General Distributed Deep Learning Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacesinga.html">singa</a></li><li class="navelem"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classsinga_1_1Tensor-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">singa::Tensor Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>A <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> instance is a multi-dimensional array resident on a <a class="el" href="classsinga_1_1Device.html" title="Allocate memory and execute Tensor operations. ">Device</a> (default device is the host CPU).
<a href="classsinga_1_1Tensor.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="tensor_8h_source.html">tensor.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for singa::Tensor:</div>
<div class="dyncontent">
<div class="center"><img src="classsinga_1_1Tensor__coll__graph.png" border="0" usemap="#singa_1_1Tensor_coll__map" alt="Collaboration graph"/></div>
<!-- MAP 0 -->
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a5e927b96220f66e87cb7582cc6f9bbc3"><td class="memItemLeft" align="right" valign="top"><a id="a5e927b96220f66e87cb7582cc6f9bbc3"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a5e927b96220f66e87cb7582cc6f9bbc3">Tensor</a> (const Shape &amp;shape, DataType dtype=kFloat32)</td></tr>
<tr class="memdesc:a5e927b96220f66e87cb7582cc6f9bbc3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor using default device. <br /></td></tr>
<tr class="separator:a5e927b96220f66e87cb7582cc6f9bbc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b3a329469bbaa5fbdec902f3250f7e5"><td class="memItemLeft" align="right" valign="top"><a id="a0b3a329469bbaa5fbdec902f3250f7e5"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a0b3a329469bbaa5fbdec902f3250f7e5">Tensor</a> (const Shape &amp;shape, std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt; dev, DataType dtype=kFloat32)</td></tr>
<tr class="memdesc:a0b3a329469bbaa5fbdec902f3250f7e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor with shape, device and data type. <br /></td></tr>
<tr class="separator:a0b3a329469bbaa5fbdec902f3250f7e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8689563f7f55e646a7bce8245387571f"><td class="memItemLeft" align="right" valign="top"><a id="a8689563f7f55e646a7bce8245387571f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a8689563f7f55e646a7bce8245387571f">Tensor</a> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;from)</td></tr>
<tr class="memdesc:a8689563f7f55e646a7bce8245387571f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. No deep copy. <br /></td></tr>
<tr class="separator:a8689563f7f55e646a7bce8245387571f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af32b9e397a7c5cd3c8d9ff7e8738836c"><td class="memItemLeft" align="right" valign="top"><a id="af32b9e397a7c5cd3c8d9ff7e8738836c"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#af32b9e397a7c5cd3c8d9ff7e8738836c">Tensor</a> (<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&amp;from)</td></tr>
<tr class="memdesc:af32b9e397a7c5cd3c8d9ff7e8738836c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move constructor. No deep copy. <br /></td></tr>
<tr class="separator:af32b9e397a7c5cd3c8d9ff7e8738836c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a38a9f9935afbd535bb7b9e6145bfba77"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Block.html">Block</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a38a9f9935afbd535bb7b9e6145bfba77">block</a> () const</td></tr>
<tr class="memdesc:a38a9f9935afbd535bb7b9e6145bfba77"><td class="mdescLeft">&#160;</td><td class="mdescRight">For functions in xx_math.cc to access the block. <a href="#a38a9f9935afbd535bb7b9e6145bfba77">More...</a><br /></td></tr>
<tr class="separator:a38a9f9935afbd535bb7b9e6145bfba77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe28f4641884bcf0647b2e497b45def7"><td class="memItemLeft" align="right" valign="top"><a id="afe28f4641884bcf0647b2e497b45def7"></a>
std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>device</b> () const</td></tr>
<tr class="separator:afe28f4641884bcf0647b2e497b45def7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5bd7ef8a4292b2b69827bc2d71db352a"><td class="memTemplParams" colspan="2"><a id="a5bd7ef8a4292b2b69827bc2d71db352a"></a>
template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a5bd7ef8a4292b2b69827bc2d71db352a"><td class="memTemplItemLeft" align="right" valign="top">const SType *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a5bd7ef8a4292b2b69827bc2d71db352a">data</a> () const</td></tr>
<tr class="memdesc:a5bd7ef8a4292b2b69827bc2d71db352a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return immutable <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> values with given type. <br /></td></tr>
<tr class="separator:a5bd7ef8a4292b2b69827bc2d71db352a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1043d029610245f22b5844e987b0288a"><td class="memItemLeft" align="right" valign="top"><a id="a1043d029610245f22b5844e987b0288a"></a>
const DataType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a1043d029610245f22b5844e987b0288a">data_type</a> () const</td></tr>
<tr class="memdesc:a1043d029610245f22b5844e987b0288a"><td class="mdescLeft">&#160;</td><td class="mdescRight">data type, including kFloat16, kFloat32, kInt <br /></td></tr>
<tr class="separator:a1043d029610245f22b5844e987b0288a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5cb1fb6b97933ed2013684747516e833"><td class="memItemLeft" align="right" valign="top"><a id="a5cb1fb6b97933ed2013684747516e833"></a>
const Shape &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>shape</b> () const</td></tr>
<tr class="separator:a5cb1fb6b97933ed2013684747516e833"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af773a03fccbd12375536120c5e04e7c6"><td class="memItemLeft" align="right" valign="top"><a id="af773a03fccbd12375536120c5e04e7c6"></a>
const size_t&#160;</td><td class="memItemRight" valign="bottom"><b>shape</b> (const size_t idx) const</td></tr>
<tr class="separator:af773a03fccbd12375536120c5e04e7c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ddd9abca80713c570697948741970aa"><td class="memItemLeft" align="right" valign="top"><a id="a3ddd9abca80713c570697948741970aa"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>nDim</b> () const</td></tr>
<tr class="separator:a3ddd9abca80713c570697948741970aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04cdcdcd73cfa328d9a7622639a30168"><td class="memItemLeft" align="right" valign="top"><a id="a04cdcdcd73cfa328d9a7622639a30168"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>empty</b> () const</td></tr>
<tr class="separator:a04cdcdcd73cfa328d9a7622639a30168"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adcaa6e890701e7a6b3823936c65b95cb"><td class="memItemLeft" align="right" valign="top"><a id="adcaa6e890701e7a6b3823936c65b95cb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#adcaa6e890701e7a6b3823936c65b95cb">transpose</a> () const</td></tr>
<tr class="memdesc:adcaa6e890701e7a6b3823936c65b95cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">The stride should decrease except dim with stride=0 due to broadcasting. <br /></td></tr>
<tr class="separator:adcaa6e890701e7a6b3823936c65b95cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfcd1c1eebe30741572dca5881745ffa"><td class="memItemLeft" align="right" valign="top"><a id="acfcd1c1eebe30741572dca5881745ffa"></a>
const vector&lt; int &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>stride</b> () const</td></tr>
<tr class="separator:acfcd1c1eebe30741572dca5881745ffa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d37e87484fff3a140be4045c9c765cb"><td class="memItemLeft" align="right" valign="top"><a id="a3d37e87484fff3a140be4045c9c765cb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a3d37e87484fff3a140be4045c9c765cb">initailized</a> () const</td></tr>
<tr class="memdesc:a3d37e87484fff3a140be4045c9c765cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if the content of the tensor is initialized. <br /></td></tr>
<tr class="separator:a3d37e87484fff3a140be4045c9c765cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c38d62986020862905d1307c09972e0"><td class="memItemLeft" align="right" valign="top"><a id="a1c38d62986020862905d1307c09972e0"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a1c38d62986020862905d1307c09972e0">Size</a> () const</td></tr>
<tr class="memdesc:a1c38d62986020862905d1307c09972e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return number of total elements. <br /></td></tr>
<tr class="separator:a1c38d62986020862905d1307c09972e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9788f0fdc1eaaeda0157dff1cd0d5f3b"><td class="memItemLeft" align="right" valign="top"><a id="a9788f0fdc1eaaeda0157dff1cd0d5f3b"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a9788f0fdc1eaaeda0157dff1cd0d5f3b">MemSize</a> () const</td></tr>
<tr class="memdesc:a9788f0fdc1eaaeda0157dff1cd0d5f3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return memory size (i.e., Bytes) <br /></td></tr>
<tr class="separator:a9788f0fdc1eaaeda0157dff1cd0d5f3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8837e7a2add8fad52da84fe914e724fa"><td class="memTemplParams" colspan="2">template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a8837e7a2add8fad52da84fe914e724fa"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a8837e7a2add8fad52da84fe914e724fa">GetValue</a> (SType *value, const size_t num)</td></tr>
<tr class="memdesc:a8837e7a2add8fad52da84fe914e724fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">used for swig code to convert <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> into numpy array. <a href="#a8837e7a2add8fad52da84fe914e724fa">More...</a><br /></td></tr>
<tr class="separator:a8837e7a2add8fad52da84fe914e724fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac457aeb46420507b5bc0a31d568e6fcd"><td class="memItemLeft" align="right" valign="top"><a id="ac457aeb46420507b5bc0a31d568e6fcd"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#ac457aeb46420507b5bc0a31d568e6fcd">ToProto</a> (singa::TensorProto *proto) const</td></tr>
<tr class="memdesc:ac457aeb46420507b5bc0a31d568e6fcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize data, shape and transpose to protobuf object. <br /></td></tr>
<tr class="separator:ac457aeb46420507b5bc0a31d568e6fcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa5f03135322a13957c502db36c51fd5b"><td class="memItemLeft" align="right" valign="top"><a id="aa5f03135322a13957c502db36c51fd5b"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#aa5f03135322a13957c502db36c51fd5b">L1</a> () const</td></tr>
<tr class="memdesc:aa5f03135322a13957c502db36c51fd5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return average L1 norm. <br /></td></tr>
<tr class="separator:aa5f03135322a13957c502db36c51fd5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a896beeaf9f9e89f70663ccdf567c6c7e"><td class="memItemLeft" align="right" valign="top"><a id="a896beeaf9f9e89f70663ccdf567c6c7e"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a896beeaf9f9e89f70663ccdf567c6c7e">L2</a> () const</td></tr>
<tr class="memdesc:a896beeaf9f9e89f70663ccdf567c6c7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return average L2 norm. <br /></td></tr>
<tr class="separator:a896beeaf9f9e89f70663ccdf567c6c7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b940544ecf97e88d716af395b728a26"><td class="memTemplParams" colspan="2"><a id="a6b940544ecf97e88d716af395b728a26"></a>
template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a6b940544ecf97e88d716af395b728a26"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a6b940544ecf97e88d716af395b728a26">SetValue</a> (const SType x)</td></tr>
<tr class="memdesc:a6b940544ecf97e88d716af395b728a26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set each element of the tensor to be x. <br /></td></tr>
<tr class="separator:a6b940544ecf97e88d716af395b728a26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09ffd10a924e9fadaf10399df66f0fdf"><td class="memTemplParams" colspan="2">template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a09ffd10a924e9fadaf10399df66f0fdf"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a09ffd10a924e9fadaf10399df66f0fdf">CopyDataFromHostPtr</a> (const SType *src, const size_t num, const size_t offset=0)</td></tr>
<tr class="memdesc:a09ffd10a924e9fadaf10399df66f0fdf"><td class="mdescLeft">&#160;</td><td class="mdescRight">For init the tensor values, copy 'num' elements from 'src' to the internal memory with 'offset' (elements). <a href="#a09ffd10a924e9fadaf10399df66f0fdf">More...</a><br /></td></tr>
<tr class="separator:a09ffd10a924e9fadaf10399df66f0fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0dca11749473abe867abaf9cf3a10c7c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a0dca11749473abe867abaf9cf3a10c7c">CopyData</a> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;other)</td></tr>
<tr class="memdesc:a0dca11749473abe867abaf9cf3a10c7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy data from another <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> which may be on a diff device. <a href="#a0dca11749473abe867abaf9cf3a10c7c">More...</a><br /></td></tr>
<tr class="separator:a0dca11749473abe867abaf9cf3a10c7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89edc1394576347e64e247d07917f91b"><td class="memItemLeft" align="right" valign="top"><a id="a89edc1394576347e64e247d07917f91b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a89edc1394576347e64e247d07917f91b">FromProto</a> (const singa::TensorProto &amp;proto)</td></tr>
<tr class="memdesc:a89edc1394576347e64e247d07917f91b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserialize data, shape and transpose from protobuf object. <br /></td></tr>
<tr class="separator:a89edc1394576347e64e247d07917f91b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a36059ddc56785efc13939d022f7d6c"><td class="memItemLeft" align="right" valign="top"><a id="a3a36059ddc56785efc13939d022f7d6c"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a3a36059ddc56785efc13939d022f7d6c">RepeatData</a> (const vector&lt; size_t &gt; &amp;repeats, int axis, int total_repeats, const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;other)</td></tr>
<tr class="memdesc:a3a36059ddc56785efc13939d022f7d6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">TODO(wangwei) merge RepeatData into Repeat? <br /></td></tr>
<tr class="separator:a3a36059ddc56785efc13939d022f7d6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32aed105992eb340c18b75e8bbb668ae"><td class="memItemLeft" align="right" valign="top"><a id="a32aed105992eb340c18b75e8bbb668ae"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a>&#160;</td><td class="memItemRight" valign="bottom"><b>Repeat</b> (const vector&lt; size_t &gt; &amp;repeats, int axis, std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt; device=nullptr)</td></tr>
<tr class="separator:a32aed105992eb340c18b75e8bbb668ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4264350c378ce25e2f7e69f0f80e4a85"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a4264350c378ce25e2f7e69f0f80e4a85">Clone</a> (std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt; device=nullptr) const</td></tr>
<tr class="memdesc:a4264350c378ce25e2f7e69f0f80e4a85"><td class="mdescLeft">&#160;</td><td class="mdescRight">return an exactly the same <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> with data been deep copied to the given device. <a href="#a4264350c378ce25e2f7e69f0f80e4a85">More...</a><br /></td></tr>
<tr class="separator:a4264350c378ce25e2f7e69f0f80e4a85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49fe082439367924e300b8ad2d2ae32c"><td class="memItemLeft" align="right" valign="top"><a id="a49fe082439367924e300b8ad2d2ae32c"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a49fe082439367924e300b8ad2d2ae32c">operator=</a> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;in)</td></tr>
<tr class="memdesc:a49fe082439367924e300b8ad2d2ae32c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy assignment. <br /></td></tr>
<tr class="separator:a49fe082439367924e300b8ad2d2ae32c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f22e120ebcf642dbc3b89adea6417f4"><td class="memItemLeft" align="right" valign="top"><a id="a9f22e120ebcf642dbc3b89adea6417f4"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a9f22e120ebcf642dbc3b89adea6417f4">operator=</a> (<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&amp;in)</td></tr>
<tr class="memdesc:a9f22e120ebcf642dbc3b89adea6417f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment. <br /></td></tr>
<tr class="separator:a9f22e120ebcf642dbc3b89adea6417f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f837179127ff10eed94560d19be0006"><td class="memItemLeft" align="right" valign="top"><a id="a4f837179127ff10eed94560d19be0006"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator+=</b> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;in)</td></tr>
<tr class="separator:a4f837179127ff10eed94560d19be0006"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a496c692341674c44130f9ee5d927d358"><td class="memItemLeft" align="right" valign="top"><a id="a496c692341674c44130f9ee5d927d358"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator-=</b> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;in)</td></tr>
<tr class="separator:a496c692341674c44130f9ee5d927d358"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a341883c99ad5d4290a21d30563708c11"><td class="memItemLeft" align="right" valign="top"><a id="a341883c99ad5d4290a21d30563708c11"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator*=</b> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;in)</td></tr>
<tr class="separator:a341883c99ad5d4290a21d30563708c11"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3dbd2fb870fdae5c58d44b13394c520"><td class="memItemLeft" align="right" valign="top"><a id="ae3dbd2fb870fdae5c58d44b13394c520"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator/=</b> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;in)</td></tr>
<tr class="separator:ae3dbd2fb870fdae5c58d44b13394c520"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ba44273e8a37894266326a18d532537"><td class="memTemplParams" colspan="2"><a id="a3ba44273e8a37894266326a18d532537"></a>
template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a3ba44273e8a37894266326a18d532537"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a3ba44273e8a37894266326a18d532537">operator+=</a> (const SType x)</td></tr>
<tr class="memdesc:a3ba44273e8a37894266326a18d532537"><td class="mdescLeft">&#160;</td><td class="mdescRight">SType is a scalar type. <br /></td></tr>
<tr class="separator:a3ba44273e8a37894266326a18d532537"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5cd973afa9ef54f26a25277a3736070"><td class="memTemplParams" colspan="2"><a id="ab5cd973afa9ef54f26a25277a3736070"></a>
template&lt;typename SType &gt; </td></tr>
<tr class="memitem:ab5cd973afa9ef54f26a25277a3736070"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#ab5cd973afa9ef54f26a25277a3736070">operator-=</a> (const SType x)</td></tr>
<tr class="memdesc:ab5cd973afa9ef54f26a25277a3736070"><td class="mdescLeft">&#160;</td><td class="mdescRight">SType is a scalar type. <br /></td></tr>
<tr class="separator:ab5cd973afa9ef54f26a25277a3736070"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a661fec4052f8769352b173f700c20dcf"><td class="memTemplParams" colspan="2"><a id="a661fec4052f8769352b173f700c20dcf"></a>
template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a661fec4052f8769352b173f700c20dcf"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a661fec4052f8769352b173f700c20dcf">operator*=</a> (const SType x)</td></tr>
<tr class="memdesc:a661fec4052f8769352b173f700c20dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">SType is a scalar type. <br /></td></tr>
<tr class="separator:a661fec4052f8769352b173f700c20dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e093b4dc59e29bbd1b20db4d98d2acc"><td class="memTemplParams" colspan="2"><a id="a3e093b4dc59e29bbd1b20db4d98d2acc"></a>
template&lt;typename SType &gt; </td></tr>
<tr class="memitem:a3e093b4dc59e29bbd1b20db4d98d2acc"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a3e093b4dc59e29bbd1b20db4d98d2acc">operator/=</a> (const SType x)</td></tr>
<tr class="memdesc:a3e093b4dc59e29bbd1b20db4d98d2acc"><td class="mdescLeft">&#160;</td><td class="mdescRight">SType is a scalar type. <br /></td></tr>
<tr class="separator:a3e093b4dc59e29bbd1b20db4d98d2acc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab926cc6a52b4769422d3f79c001487f3"><td class="memItemLeft" align="right" valign="top"><a id="ab926cc6a52b4769422d3f79c001487f3"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#ab926cc6a52b4769422d3f79c001487f3">Reshape</a> (const Shape &amp;shape)</td></tr>
<tr class="memdesc:ab926cc6a52b4769422d3f79c001487f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">change the shape (and stride); the block may be reallocated. <br /></td></tr>
<tr class="separator:ab926cc6a52b4769422d3f79c001487f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c246861034f2c704ed3190988b40fe8"><td class="memItemLeft" align="right" valign="top"><a id="a4c246861034f2c704ed3190988b40fe8"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a4c246861034f2c704ed3190988b40fe8">Resize</a> (const Shape &amp;shape)</td></tr>
<tr class="memdesc:a4c246861034f2c704ed3190988b40fe8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resize the memory and return itself. <br /></td></tr>
<tr class="separator:a4c246861034f2c704ed3190988b40fe8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab725179d07eb24323271af9540f9c046"><td class="memItemLeft" align="right" valign="top"><a id="ab725179d07eb24323271af9540f9c046"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#ab725179d07eb24323271af9540f9c046">T</a> ()</td></tr>
<tr class="memdesc:ab725179d07eb24323271af9540f9c046"><td class="mdescLeft">&#160;</td><td class="mdescRight">Matrix transpose. Valid only if shape.size() == 2. <br /></td></tr>
<tr class="separator:ab725179d07eb24323271af9540f9c046"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2279b51a1eb0b4896937ce0133f4dbd"><td class="memItemLeft" align="right" valign="top"><a id="af2279b51a1eb0b4896937ce0133f4dbd"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#af2279b51a1eb0b4896937ce0133f4dbd">Transpose</a> ()</td></tr>
<tr class="memdesc:af2279b51a1eb0b4896937ce0133f4dbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reverse the shape vector. <br /></td></tr>
<tr class="separator:af2279b51a1eb0b4896937ce0133f4dbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d98daca7ea5c6cb14354611b9cc4711"><td class="memItemLeft" align="right" valign="top"><a id="a9d98daca7ea5c6cb14354611b9cc4711"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a9d98daca7ea5c6cb14354611b9cc4711">Transpose</a> (const vector&lt; size_t &gt; &amp;axes)</td></tr>
<tr class="memdesc:a9d98daca7ea5c6cb14354611b9cc4711"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change the axes. <br /></td></tr>
<tr class="separator:a9d98daca7ea5c6cb14354611b9cc4711"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac576dc3e929e594a904029c836db374f"><td class="memItemLeft" align="right" valign="top"><a id="ac576dc3e929e594a904029c836db374f"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#ac576dc3e929e594a904029c836db374f">Broadcast</a> (const Shape &amp;shape)</td></tr>
<tr class="memdesc:ac576dc3e929e594a904029c836db374f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a view of the input tensor whose shape is broadcasted to be compitable with the given shape. <br /></td></tr>
<tr class="separator:ac576dc3e929e594a904029c836db374f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8593ee267f73de51aeac35cd2a527f1d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a8593ee267f73de51aeac35cd2a527f1d">ResetLike</a> (const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;t)</td></tr>
<tr class="memdesc:a8593ee267f73de51aeac35cd2a527f1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the shape, device, and data type as given tensor. <a href="#a8593ee267f73de51aeac35cd2a527f1d">More...</a><br /></td></tr>
<tr class="separator:a8593ee267f73de51aeac35cd2a527f1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfe6d1399951598288a04531fba1a904"><td class="memItemLeft" align="right" valign="top"><a id="acfe6d1399951598288a04531fba1a904"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#acfe6d1399951598288a04531fba1a904">AsType</a> (const DataType type)</td></tr>
<tr class="memdesc:acfe6d1399951598288a04531fba1a904"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the data type, it would reallocate block if type changes. <br /></td></tr>
<tr class="separator:acfe6d1399951598288a04531fba1a904"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10e51ef8fe5fb5f9157da5ae56619c49"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a10e51ef8fe5fb5f9157da5ae56619c49">ToDevice</a> (std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt; dev)</td></tr>
<tr class="memdesc:a10e51ef8fe5fb5f9157da5ae56619c49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the device. <a href="#a10e51ef8fe5fb5f9157da5ae56619c49">More...</a><br /></td></tr>
<tr class="separator:a10e51ef8fe5fb5f9157da5ae56619c49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b214269cb2dcea698befe14aae11f2e"><td class="memItemLeft" align="right" valign="top"><a id="a7b214269cb2dcea698befe14aae11f2e"></a>
<a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a7b214269cb2dcea698befe14aae11f2e">ToHost</a> ()</td></tr>
<tr class="memdesc:a7b214269cb2dcea698befe14aae11f2e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to ToDevice(host_dev). <br /></td></tr>
<tr class="separator:a7b214269cb2dcea698befe14aae11f2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a2291031c9a6f45be3fd8b631b205b2ad"><td class="memItemLeft" align="right" valign="top"><a id="a2291031c9a6f45be3fd8b631b205b2ad"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>generate_stride</b> ()</td></tr>
<tr class="separator:a2291031c9a6f45be3fd8b631b205b2ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab63b34f2064c5516ce83291998b6a032"><td class="memItemLeft" align="right" valign="top"><a id="ab63b34f2064c5516ce83291998b6a032"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>set_strides</b> (const vector&lt; int &gt; new_strides)</td></tr>
<tr class="separator:ab63b34f2064c5516ce83291998b6a032"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:ab03198d16db145a4de5f6990e9baaadc"><td class="memItemLeft" align="right" valign="top"><a id="ab03198d16db145a4de5f6990e9baaadc"></a>
DataType&#160;</td><td class="memItemRight" valign="bottom"><b>data_type_</b> = kFloat32</td></tr>
<tr class="separator:ab03198d16db145a4de5f6990e9baaadc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01b11f823c373b6ab300189b86696041"><td class="memItemLeft" align="right" valign="top"><a id="a01b11f823c373b6ab300189b86696041"></a>
std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>device_</b> = nullptr</td></tr>
<tr class="separator:a01b11f823c373b6ab300189b86696041"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f7211731ad2f464748fb2f9395d1180"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsinga_1_1Block.html">Block</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsinga_1_1Tensor.html#a5f7211731ad2f464748fb2f9395d1180">block_</a> = nullptr</td></tr>
<tr class="memdesc:a5f7211731ad2f464748fb2f9395d1180"><td class="mdescLeft">&#160;</td><td class="mdescRight">Note: block_ is allocated in lazy manner to avoid frequent malloc/free. <a href="#a5f7211731ad2f464748fb2f9395d1180">More...</a><br /></td></tr>
<tr class="separator:a5f7211731ad2f464748fb2f9395d1180"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa72a7bd2ca70540a73a30fdaaeb2531"><td class="memItemLeft" align="right" valign="top"><a id="aaa72a7bd2ca70540a73a30fdaaeb2531"></a>
Shape&#160;</td><td class="memItemRight" valign="bottom"><b>shape_</b> = {}</td></tr>
<tr class="separator:aaa72a7bd2ca70540a73a30fdaaeb2531"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92d6085607e50150b66f07201c32e6ba"><td class="memItemLeft" align="right" valign="top"><a id="a92d6085607e50150b66f07201c32e6ba"></a>
vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>stride_</b> = {}</td></tr>
<tr class="separator:a92d6085607e50150b66f07201c32e6ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>A <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> instance is a multi-dimensional array resident on a <a class="el" href="classsinga_1_1Device.html" title="Allocate memory and execute Tensor operations. ">Device</a> (default device is the host CPU). </p>
<p>The internal data is allocated in lazy manner. Linear algebra, neural net and random operations are provided against <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a>. For all operations, if the result tensor is passed as an argument, then it must be set up correctly (shape, device). Otherwise, runtime error like SegmentFault would happen. Simple type/device check would be conducted. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a38a9f9935afbd535bb7b9e6145bfba77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a38a9f9935afbd535bb7b9e6145bfba77">&#9670;&nbsp;</a></span>block()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsinga_1_1Block.html">Block</a>* singa::Tensor::block </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>For functions in xx_math.cc to access the block. </p>
<p>Users should not operate against <a class="el" href="classsinga_1_1Block.html" title="Block represent a chunk of memory (on device or host). ">Block</a> directly. block_ is allocated in constructors. </p>
</div>
</div>
<a id="a4264350c378ce25e2f7e69f0f80e4a85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4264350c378ce25e2f7e69f0f80e4a85">&#9670;&nbsp;</a></span>Clone()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a> singa::Tensor::Clone </td>
<td>(</td>
<td class="paramtype">std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt;&#160;</td>
<td class="paramname"><em>device</em> = <code>nullptr</code></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>return an exactly the same <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> with data been deep copied to the given device. </p>
<p>If 'device' is nullptr, then clone it one the current device. </p>
</div>
</div>
<a id="a0dca11749473abe867abaf9cf3a10c7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0dca11749473abe867abaf9cf3a10c7c">&#9670;&nbsp;</a></span>CopyData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void singa::Tensor::CopyData </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td>
<td class="paramname"><em>other</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Copy data from another <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> which may be on a diff device. </p>
<p>Meta data would not be copied! </p>
</div>
</div>
<a id="a09ffd10a924e9fadaf10399df66f0fdf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09ffd10a924e9fadaf10399df66f0fdf">&#9670;&nbsp;</a></span>CopyDataFromHostPtr()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename SType &gt; </div>
<table class="memname">
<tr>
<td class="memname">void singa::Tensor::CopyDataFromHostPtr </td>
<td>(</td>
<td class="paramtype">const SType *&#160;</td>
<td class="paramname"><em>src</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const size_t&#160;</td>
<td class="paramname"><em>num</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const size_t&#160;</td>
<td class="paramname"><em>offset</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>For init the tensor values, copy 'num' elements from 'src' to the internal memory with 'offset' (elements). </p>
</div>
</div>
<a id="a8837e7a2add8fad52da84fe914e724fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8837e7a2add8fad52da84fe914e724fa">&#9670;&nbsp;</a></span>GetValue()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename SType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void singa::Tensor::GetValue </td>
<td>(</td>
<td class="paramtype">SType *&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const size_t&#160;</td>
<td class="paramname"><em>num</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>used for swig code to convert <a class="el" href="classsinga_1_1Tensor.html" title="A Tensor instance is a multi-dimensional array resident on a Device (default device is the host CPU)...">Tensor</a> into numpy array. </p>
<p>It gets data into 'value' </p>
</div>
</div>
<a id="a8593ee267f73de51aeac35cd2a527f1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8593ee267f73de51aeac35cd2a527f1d">&#9670;&nbsp;</a></span>ResetLike()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a>&amp; singa::Tensor::ResetLike </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classsinga_1_1Tensor.html">Tensor</a> &amp;&#160;</td>
<td class="paramname"><em>t</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reset the shape, device, and data type as given tensor. </p>
<p>If block size changes, then reallocate a new block. The previous block would be deleted. </p>
</div>
</div>
<a id="a10e51ef8fe5fb5f9157da5ae56619c49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10e51ef8fe5fb5f9157da5ae56619c49">&#9670;&nbsp;</a></span>ToDevice()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsinga_1_1Tensor.html">Tensor</a>&amp; singa::Tensor::ToDevice </td>
<td>(</td>
<td class="paramtype">std::shared_ptr&lt; <a class="el" href="classsinga_1_1Device.html">Device</a> &gt;&#160;</td>
<td class="paramname"><em>dev</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reset the device. </p>
<p>If the target device is a diff device, then do deep data copy. </p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a5f7211731ad2f464748fb2f9395d1180"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f7211731ad2f464748fb2f9395d1180">&#9670;&nbsp;</a></span>block_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsinga_1_1Block.html">Block</a>* singa::Tensor::block_ = nullptr</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Note: block_ is allocated in lazy manner to avoid frequent malloc/free. </p>
<p>If you want to get an allocated <a class="el" href="classsinga_1_1Block.html" title="Block represent a chunk of memory (on device or host). ">Block</a>, use <a class="el" href="classsinga_1_1Tensor.html#a38a9f9935afbd535bb7b9e6145bfba77" title="For functions in xx_math.cc to access the block. ">block()</a> instead of block_. </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>/home/moaz/incubator-singa/include/singa/core/<a class="el" href="tensor_8h_source.html">tensor.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Apr 22 2019 12:27:05 for Apache Singa by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>