blob: 8e4552640991340b9979fe13d02a3cbfed4cd135 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: mxnet::Executor 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">mxnet
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacemxnet.html">mxnet</a></li><li class="navelem"><a class="el" href="classmxnet_1_1Executor.html">Executor</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="classmxnet_1_1Executor-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">mxnet::Executor Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
</div><!--header-->
<div class="contents">
<p><a class="el" href="classmxnet_1_1Executor.html" title="Executor of a computation graph. Executor can be created by Binding a symbol. ">Executor</a> of a computation graph. <a class="el" href="classmxnet_1_1Executor.html" title="Executor of a computation graph. Executor can be created by Binding a symbol. ">Executor</a> can be created by Binding a symbol.
<a href="classmxnet_1_1Executor.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="include_2mxnet_2executor_8h_source.html">executor.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for mxnet::Executor:</div>
<div class="dyncontent">
<div class="center"><img src="classmxnet_1_1Executor__coll__graph.png" border="0" usemap="#mxnet_1_1Executor_coll__map" alt="Collaboration graph"/></div>
<map name="mxnet_1_1Executor_coll__map" id="mxnet_1_1Executor_coll__map">
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a5684c74daafc9b80681cde6a9b7b4587"><td class="memItemLeft" align="right" valign="top">typedef std::function&lt; void(const char *, void *)&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a5684c74daafc9b80681cde6a9b7b4587">MonitorCallback</a></td></tr>
<tr class="memdesc:a5684c74daafc9b80681cde6a9b7b4587"><td class="mdescLeft">&#160;</td><td class="mdescRight">the prototype of user-defined monitor callback <a href="#a5684c74daafc9b80681cde6a9b7b4587">More...</a><br /></td></tr>
<tr class="separator:a5684c74daafc9b80681cde6a9b7b4587"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:adf445ff665c954061889d6bbee3c1c2a"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#adf445ff665c954061889d6bbee3c1c2a">~Executor</a> ()</td></tr>
<tr class="memdesc:adf445ff665c954061889d6bbee3c1c2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">destructor <a href="#adf445ff665c954061889d6bbee3c1c2a">More...</a><br /></td></tr>
<tr class="separator:adf445ff665c954061889d6bbee3c1c2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3716be8e6c265b091e618f46eeb6f9b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#ab3716be8e6c265b091e618f46eeb6f9b">Forward</a> (bool is_train)=0</td></tr>
<tr class="memdesc:ab3716be8e6c265b091e618f46eeb6f9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform a Forward operation of <a class="el" href="classmxnet_1_1Operator.html" title="Operator interface. Operator defines basic operation unit of optimized computation graph in mxnet...">Operator</a> After this operation, user can get the result by using function head. <a href="#ab3716be8e6c265b091e618f46eeb6f9b">More...</a><br /></td></tr>
<tr class="separator:ab3716be8e6c265b091e618f46eeb6f9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e261d44065848e434c527000d4390c8"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a3e261d44065848e434c527000d4390c8">PartialForward</a> (bool is_train, int step, int *step_left)=0</td></tr>
<tr class="memdesc:a3e261d44065848e434c527000d4390c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform a Partial Forward operation of <a class="el" href="classmxnet_1_1Operator.html" title="Operator interface. Operator defines basic operation unit of optimized computation graph in mxnet...">Operator</a>. Only issue operation specified by step. The caller must keep calling PartialForward with increasing steps, until step_left=0. <a href="#a3e261d44065848e434c527000d4390c8">More...</a><br /></td></tr>
<tr class="separator:a3e261d44065848e434c527000d4390c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2fd32510a718aff38323e63be0d65e3"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#aa2fd32510a718aff38323e63be0d65e3">Backward</a> (const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;head_grads, bool is_train=true)=0</td></tr>
<tr class="memdesc:aa2fd32510a718aff38323e63be0d65e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform a Backward operation of the <a class="el" href="classmxnet_1_1Operator.html" title="Operator interface. Operator defines basic operation unit of optimized computation graph in mxnet...">Operator</a>. This must be called after Forward. After this operation, NDArrays specified by grad_in_args_store will be updated accordingly. User is allowed to pass in an empty <a class="el" href="classmxnet_1_1Array.html" title="Array container of NodeRef in DSL graph. Array implements copy on write semantics, which means array is mutable but copy will happen when array is referenced in more than two places. ">Array</a> if the head node is loss function and head gradeitn is not needed. <a href="#aa2fd32510a718aff38323e63be0d65e3">More...</a><br /></td></tr>
<tr class="separator:aa2fd32510a718aff38323e63be0d65e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac391ee6cf8cf8afb60acd0480db2ae86"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#ac391ee6cf8cf8afb60acd0480db2ae86">Print</a> (std::ostream &amp;os) const</td></tr>
<tr class="memdesc:ac391ee6cf8cf8afb60acd0480db2ae86"><td class="mdescLeft">&#160;</td><td class="mdescRight">print the execution plan info to output stream. <a href="#ac391ee6cf8cf8afb60acd0480db2ae86">More...</a><br /></td></tr>
<tr class="separator:ac391ee6cf8cf8afb60acd0480db2ae86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a16d0f1ab276e32242685702aa10b9a3d"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a16d0f1ab276e32242685702aa10b9a3d">outputs</a> () const =0</td></tr>
<tr class="memdesc:a16d0f1ab276e32242685702aa10b9a3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">get array of outputs in the executor. <a href="#a16d0f1ab276e32242685702aa10b9a3d">More...</a><br /></td></tr>
<tr class="separator:a16d0f1ab276e32242685702aa10b9a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a07a3e917596ed08718ee2859283c2476"><td class="memItemLeft" align="right" valign="top">virtual const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a07a3e917596ed08718ee2859283c2476">in_arg_map</a> () const =0</td></tr>
<tr class="memdesc:a07a3e917596ed08718ee2859283c2476"><td class="mdescLeft">&#160;</td><td class="mdescRight">get input argument map, key is arg name, value is arg's <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a>. <a href="#a07a3e917596ed08718ee2859283c2476">More...</a><br /></td></tr>
<tr class="separator:a07a3e917596ed08718ee2859283c2476"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84552a918a65633678f30c00a2a0ae7f"><td class="memItemLeft" align="right" valign="top">virtual const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a84552a918a65633678f30c00a2a0ae7f">arg_grad_map</a> () const =0</td></tr>
<tr class="memdesc:a84552a918a65633678f30c00a2a0ae7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">get input argument graident map, key is arg name, value is gradient's <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a>. <a href="#a84552a918a65633678f30c00a2a0ae7f">More...</a><br /></td></tr>
<tr class="separator:a84552a918a65633678f30c00a2a0ae7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a38a98fc4dcddc4205b5980ee7bdc4b"><td class="memItemLeft" align="right" valign="top">virtual const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a0a38a98fc4dcddc4205b5980ee7bdc4b">aux_state_map</a> () const =0</td></tr>
<tr class="memdesc:a0a38a98fc4dcddc4205b5980ee7bdc4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">get aux state map, key is arg name, value is aux state's <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a>. <a href="#a0a38a98fc4dcddc4205b5980ee7bdc4b">More...</a><br /></td></tr>
<tr class="separator:a0a38a98fc4dcddc4205b5980ee7bdc4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14a0c3efb6f8a7b5335854f0a8c08013"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classmxnet_1_1Executor.html">Executor</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a14a0c3efb6f8a7b5335854f0a8c08013">Reshape</a> (const bool partial_shaping, const bool allow_up_sizing, const <a class="el" href="structmxnet_1_1Context.html">Context</a> &amp;default_ctx, const std::map&lt; std::string, <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;ctx_map, const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1TShape.html">mxnet::TShape</a> &gt; &amp;provided_arg_shapes, std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *in_args, std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *arg_grads, std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *aux_states)=0</td></tr>
<tr class="memdesc:a14a0c3efb6f8a7b5335854f0a8c08013"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a new executor with the same symbol and shared memory, but different input/output shapes. <a href="#a14a0c3efb6f8a7b5335854f0a8c08013">More...</a><br /></td></tr>
<tr class="separator:a14a0c3efb6f8a7b5335854f0a8c08013"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11d863ca81fad9d55112b77e5aaf388c"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#a11d863ca81fad9d55112b77e5aaf388c">SetMonitorCallback</a> (const <a class="el" href="classmxnet_1_1Executor.html#a5684c74daafc9b80681cde6a9b7b4587">MonitorCallback</a> &amp;callback, bool monitor_all=false)</td></tr>
<tr class="memdesc:a11d863ca81fad9d55112b77e5aaf388c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Install a callback to notify the completion of operation. <a href="#a11d863ca81fad9d55112b77e5aaf388c">More...</a><br /></td></tr>
<tr class="separator:a11d863ca81fad9d55112b77e5aaf388c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ad4c72f642143d2eb264f29c1e28bab59"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmxnet_1_1Executor.html">Executor</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#ad4c72f642143d2eb264f29c1e28bab59">Bind</a> (<a class="el" href="classnnvm_1_1Symbol.html">nnvm::Symbol</a> symbol, const <a class="el" href="structmxnet_1_1Context.html">Context</a> &amp;default_ctx, const std::map&lt; std::string, <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;group2ctx, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;in_args, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;arg_grad_store, const std::vector&lt; <a class="el" href="namespacemxnet.html#a7cd7094ef222e9ae1f520c3b6a214398">OpReqType</a> &gt; &amp;grad_req_type, const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;aux_states, <a class="el" href="classmxnet_1_1Executor.html">Executor</a> *shared_exec=nullptr)</td></tr>
<tr class="memdesc:ad4c72f642143d2eb264f29c1e28bab59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an operator by bind symbol with context and arguments. If user do not want to compute the gradients of i-th argument, grad_req_type[i] can be kNullOp. <a href="#ad4c72f642143d2eb264f29c1e28bab59">More...</a><br /></td></tr>
<tr class="separator:ad4c72f642143d2eb264f29c1e28bab59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad617d39640a88759f84d47f093dd7ffa"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classmxnet_1_1Executor.html">Executor</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1Executor.html#ad617d39640a88759f84d47f093dd7ffa">SimpleBind</a> (<a class="el" href="classnnvm_1_1Symbol.html">nnvm::Symbol</a> symbol, const <a class="el" href="structmxnet_1_1Context.html">Context</a> &amp;default_ctx, const std::map&lt; std::string, <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;group2ctx, const std::vector&lt; <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;in_arg_ctxes, const std::vector&lt; <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;arg_grad_ctxes, const std::vector&lt; <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;aux_state_ctxes, const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1TShape.html">mxnet::TShape</a> &gt; &amp;arg_shape_map, const std::unordered_map&lt; std::string, int &gt; &amp;arg_dtype_map, const std::unordered_map&lt; std::string, int &gt; &amp;arg_stype_map, const std::vector&lt; <a class="el" href="namespacemxnet.html#a7cd7094ef222e9ae1f520c3b6a214398">OpReqType</a> &gt; &amp;grad_req_types, const std::unordered_set&lt; std::string &gt; &amp;param_names, std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *in_args, std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *arg_grads, std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *aux_states, std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *shared_data_arrays=nullptr, <a class="el" href="classmxnet_1_1Executor.html">Executor</a> *shared_exec=nullptr)</td></tr>
<tr class="separator:ad617d39640a88759f84d47f093dd7ffa"><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 class="el" href="classmxnet_1_1Executor.html" title="Executor of a computation graph. Executor can be created by Binding a symbol. ">Executor</a> of a computation graph. <a class="el" href="classmxnet_1_1Executor.html" title="Executor of a computation graph. Executor can be created by Binding a symbol. ">Executor</a> can be created by Binding a symbol. </p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a5684c74daafc9b80681cde6a9b7b4587"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5684c74daafc9b80681cde6a9b7b4587">&#9670;&nbsp;</a></span>MonitorCallback</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef std::function&lt;void(const char*, void*)&gt; <a class="el" href="classmxnet_1_1Executor.html#a5684c74daafc9b80681cde6a9b7b4587">mxnet::Executor::MonitorCallback</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>the prototype of user-defined monitor callback </p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="adf445ff665c954061889d6bbee3c1c2a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf445ff665c954061889d6bbee3c1c2a">&#9670;&nbsp;</a></span>~Executor()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual mxnet::Executor::~Executor </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>destructor </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a84552a918a65633678f30c00a2a0ae7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84552a918a65633678f30c00a2a0ae7f">&#9670;&nbsp;</a></span>arg_grad_map()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual const std::unordered_map&lt;std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a>&gt;&amp; mxnet::Executor::arg_grad_map </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">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>get input argument graident map, key is arg name, value is gradient's <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>input argument gradient map in the executor. </dd></dl>
</div>
</div>
<a id="a0a38a98fc4dcddc4205b5980ee7bdc4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a38a98fc4dcddc4205b5980ee7bdc4b">&#9670;&nbsp;</a></span>aux_state_map()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual const std::unordered_map&lt;std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a>&gt;&amp; mxnet::Executor::aux_state_map </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">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>get aux state map, key is arg name, value is aux state's <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>aux state map in the executor. </dd></dl>
</div>
</div>
<a id="aa2fd32510a718aff38323e63be0d65e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2fd32510a718aff38323e63be0d65e3">&#9670;&nbsp;</a></span>Backward()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::Executor::Backward </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>head_grads</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>is_train</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Perform a Backward operation of the <a class="el" href="classmxnet_1_1Operator.html" title="Operator interface. Operator defines basic operation unit of optimized computation graph in mxnet...">Operator</a>. This must be called after Forward. After this operation, NDArrays specified by grad_in_args_store will be updated accordingly. User is allowed to pass in an empty <a class="el" href="classmxnet_1_1Array.html" title="Array container of NodeRef in DSL graph. Array implements copy on write semantics, which means array is mutable but copy will happen when array is referenced in more than two places. ">Array</a> if the head node is loss function and head gradeitn is not needed. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">head_grads</td><td>the gradient of head nodes to be backproped. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ad4c72f642143d2eb264f29c1e28bab59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4c72f642143d2eb264f29c1e28bab59">&#9670;&nbsp;</a></span>Bind()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="classmxnet_1_1Executor.html">Executor</a>* mxnet::Executor::Bind </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classnnvm_1_1Symbol.html">nnvm::Symbol</a>&#160;</td>
<td class="paramname"><em>symbol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structmxnet_1_1Context.html">Context</a> &amp;&#160;</td>
<td class="paramname"><em>default_ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::map&lt; std::string, <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>group2ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>in_args</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>arg_grad_store</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="namespacemxnet.html#a7cd7094ef222e9ae1f520c3b6a214398">OpReqType</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>grad_req_type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>aux_states</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classmxnet_1_1Executor.html">Executor</a> *&#160;</td>
<td class="paramname"><em>shared_exec</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create an operator by bind symbol with context and arguments. If user do not want to compute the gradients of i-th argument, grad_req_type[i] can be kNullOp. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">default_ctx</td><td>the default context of binding. </td></tr>
<tr><td class="paramname">group2ctx</td><td><a class="el" href="structmxnet_1_1Context.html" title="Context information about the execution environment. ">Context</a> mapping group to context. </td></tr>
<tr><td class="paramname">symbol</td><td>the symbol that specifies the output of Forward pass. </td></tr>
<tr><td class="paramname">in_args</td><td>the <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> that stores the input arguments to the symbol. </td></tr>
<tr><td class="paramname">arg_grad_store</td><td><a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> that is used to store the gradient output of the input arguments. </td></tr>
<tr><td class="paramname">grad_req_type</td><td>requirment type of gradient saving. Can only be in {kNullOp, kAddTo, kWriteTo}. </td></tr>
<tr><td class="paramname">aux_states</td><td><a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> that is used as internal state in op </td></tr>
<tr><td class="paramname">shared_exec</td><td>input executor to share memory with. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a new executor. </dd></dl>
</div>
</div>
<a id="ab3716be8e6c265b091e618f46eeb6f9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3716be8e6c265b091e618f46eeb6f9b">&#9670;&nbsp;</a></span>Forward()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::Executor::Forward </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>is_train</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Perform a Forward operation of <a class="el" href="classmxnet_1_1Operator.html" title="Operator interface. Operator defines basic operation unit of optimized computation graph in mxnet...">Operator</a> After this operation, user can get the result by using function head. </p>
</div>
</div>
<a id="a07a3e917596ed08718ee2859283c2476"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a07a3e917596ed08718ee2859283c2476">&#9670;&nbsp;</a></span>in_arg_map()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual const std::unordered_map&lt;std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a>&gt;&amp; mxnet::Executor::in_arg_map </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">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>get input argument map, key is arg name, value is arg's <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>input argument map in the executor. </dd></dl>
</div>
</div>
<a id="a16d0f1ab276e32242685702aa10b9a3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a16d0f1ab276e32242685702aa10b9a3d">&#9670;&nbsp;</a></span>outputs()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual const std::vector&lt;<a class="el" href="classmxnet_1_1NDArray.html">NDArray</a>&gt;&amp; mxnet::Executor::outputs </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">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>get array of outputs in the executor. </p>
<dl class="section return"><dt>Returns</dt><dd>array of outputs in the executor. </dd></dl>
</div>
</div>
<a id="a3e261d44065848e434c527000d4390c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e261d44065848e434c527000d4390c8">&#9670;&nbsp;</a></span>PartialForward()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::Executor::PartialForward </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>is_train</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>step</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&#160;</td>
<td class="paramname"><em>step_left</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Perform a Partial Forward operation of <a class="el" href="classmxnet_1_1Operator.html" title="Operator interface. Operator defines basic operation unit of optimized computation graph in mxnet...">Operator</a>. Only issue operation specified by step. The caller must keep calling PartialForward with increasing steps, until step_left=0. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">is_train</td><td>Whether this is training phase. </td></tr>
<tr><td class="paramname">step</td><td>current step, user can always start from 0 </td></tr>
<tr><td class="paramname">step_left</td><td>Number of steps left to finish the forward. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac391ee6cf8cf8afb60acd0480db2ae86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac391ee6cf8cf8afb60acd0480db2ae86">&#9670;&nbsp;</a></span>Print()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::Executor::Print </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>print the execution plan info to output stream. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">os</td><td>the output stream we like to print to. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a14a0c3efb6f8a7b5335854f0a8c08013"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14a0c3efb6f8a7b5335854f0a8c08013">&#9670;&nbsp;</a></span>Reshape()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual <a class="el" href="classmxnet_1_1Executor.html">Executor</a>* mxnet::Executor::Reshape </td>
<td>(</td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>partial_shaping</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>allow_up_sizing</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structmxnet_1_1Context.html">Context</a> &amp;&#160;</td>
<td class="paramname"><em>default_ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::map&lt; std::string, <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>ctx_map</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1TShape.html">mxnet::TShape</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>provided_arg_shapes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>in_args</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>arg_grads</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>aux_states</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Return a new executor with the same symbol and shared memory, but different input/output shapes. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">partial_shaping</td><td>Whether to allow changing the shape of unspecified arguments. </td></tr>
<tr><td class="paramname">allow_up_sizing</td><td>Whether to allow allocating new ndarrays that's larger than the original. </td></tr>
<tr><td class="paramname">default_ctx</td><td>the default context of binding. </td></tr>
<tr><td class="paramname">ctx_map</td><td><a class="el" href="structmxnet_1_1Context.html" title="Context information about the execution environment. ">Context</a> mapping group to context. </td></tr>
<tr><td class="paramname">provided_arg_shapes</td><td>New shape for arguments. </td></tr>
<tr><td class="paramname">in_args</td><td>the <a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> that stores the input arguments. </td></tr>
<tr><td class="paramname">arg_grads</td><td><a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> that is used to store the gradient output of the input arguments. </td></tr>
<tr><td class="paramname">aux_states</td><td><a class="el" href="classmxnet_1_1NDArray.html" title="ndarray interface ">NDArray</a> that is used as internal states. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a new executor. </dd></dl>
</div>
</div>
<a id="a11d863ca81fad9d55112b77e5aaf388c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11d863ca81fad9d55112b77e5aaf388c">&#9670;&nbsp;</a></span>SetMonitorCallback()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void mxnet::Executor::SetMonitorCallback </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classmxnet_1_1Executor.html#a5684c74daafc9b80681cde6a9b7b4587">MonitorCallback</a> &amp;&#160;</td>
<td class="paramname"><em>callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>monitor_all</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Install a callback to notify the completion of operation. </p>
</div>
</div>
<a id="ad617d39640a88759f84d47f093dd7ffa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad617d39640a88759f84d47f093dd7ffa">&#9670;&nbsp;</a></span>SimpleBind()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="classmxnet_1_1Executor.html">Executor</a>* mxnet::Executor::SimpleBind </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classnnvm_1_1Symbol.html">nnvm::Symbol</a>&#160;</td>
<td class="paramname"><em>symbol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structmxnet_1_1Context.html">Context</a> &amp;&#160;</td>
<td class="paramname"><em>default_ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::map&lt; std::string, <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>group2ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>in_arg_ctxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>arg_grad_ctxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="structmxnet_1_1Context.html">Context</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>aux_state_ctxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1TShape.html">mxnet::TShape</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>arg_shape_map</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::unordered_map&lt; std::string, int &gt; &amp;&#160;</td>
<td class="paramname"><em>arg_dtype_map</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::unordered_map&lt; std::string, int &gt; &amp;&#160;</td>
<td class="paramname"><em>arg_stype_map</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="namespacemxnet.html#a7cd7094ef222e9ae1f520c3b6a214398">OpReqType</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>grad_req_types</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::unordered_set&lt; std::string &gt; &amp;&#160;</td>
<td class="paramname"><em>param_names</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>in_args</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>arg_grads</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>aux_states</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unordered_map&lt; std::string, <a class="el" href="classmxnet_1_1NDArray.html">NDArray</a> &gt; *&#160;</td>
<td class="paramname"><em>shared_data_arrays</em> = <code>nullptr</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classmxnet_1_1Executor.html">Executor</a> *&#160;</td>
<td class="paramname"><em>shared_exec</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>/work/mxnet/include/mxnet/<a class="el" href="include_2mxnet_2executor_8h_source.html">executor.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 00:58:44 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>