diff options
author | Nikhil Raj <nikhil.raj@arm.com> | 2024-05-16 09:47:51 +0100 |
---|---|---|
committer | Nikhil Raj <nikhil.raj@arm.com> | 2024-05-16 09:47:51 +0100 |
commit | 1dc83febfb76d6a770bdf3ba16c4034a970c2320 (patch) | |
tree | 66d27e5587e9010f3db26a23a348df844c88f8e6 /latest/structarmnn_1_1_lstm_queue_descriptor.html | |
parent | 38b600d8abb2c5f7a44511b5deddf441f975d51d (diff) | |
download | armnn-gh-pages.tar.gz |
IVGCVSW-8260 Update Doxgen Docu for 24.05gh-pages
Signed-off-by: Nikhil Raj <nikhil.raj@arm.com>
Change-Id: If4bc983bf2793a27ded8e26ac2b29523fc1e4711
Diffstat (limited to 'latest/structarmnn_1_1_lstm_queue_descriptor.html')
-rw-r--r-- | latest/structarmnn_1_1_lstm_queue_descriptor.html | 586 |
1 files changed, 293 insertions, 293 deletions
diff --git a/latest/structarmnn_1_1_lstm_queue_descriptor.html b/latest/structarmnn_1_1_lstm_queue_descriptor.html index 3bf5f79802..4c38663950 100644 --- a/latest/structarmnn_1_1_lstm_queue_descriptor.html +++ b/latest/structarmnn_1_1_lstm_queue_descriptor.html @@ -36,7 +36,7 @@ <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/> <td id="projectalign" style="padding-left: 0.9em;"> <div id="projectname"> -  <span id="projectnumber">24.02</span> +  <span id="projectnumber">24.05</span> </div> </td> </tr> @@ -282,277 +282,277 @@ Additional Inherited Members</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_workload_data_8cpp_source.html#l02011">2011</a> of file <a class="el" href="_workload_data_8cpp_source.html">WorkloadData.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> {</div> -<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  <span class="comment">// ported from android/ml/nn/common/operations/LSTM.cpp CheckInputTensorDimensions()</span></div> -<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  </div> -<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">"LstmQueueDescriptor"</span>};</div> +<p class="definition">Definition at line <a class="el" href="_workload_data_8cpp_source.html#l02013">2013</a> of file <a class="el" href="_workload_data_8cpp_source.html">WorkloadData.cpp</a>.</p> +<div class="fragment"><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> {</div> +<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  <span class="comment">// ported from android/ml/nn/common/operations/LSTM.cpp CheckInputTensorDimensions()</span></div> <div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  </div> -<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  <span class="comment">// check dimensions of all inputs and outputs</span></div> -<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != 3)</div> -<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  {</div> -<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Invalid number of inputs."</span>);</div> -<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  }</div> -<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() != 4)</div> -<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  {</div> -<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Invalid number of outputs."</span>);</div> -<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>  }</div> -<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>  </div> -<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  std::vector<DataType> supportedTypes =</div> -<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  {</div> -<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div> -<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div> -<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div> -<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div> -<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  };</div> -<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  </div> -<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  <span class="comment">// check for supported type of one input and match them with all the other input and output</span></div> -<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  ValidateDataTypes(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], supportedTypes, descriptorName);</div> -<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  </div> -<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  <span class="comment">// type matches all other inputs</span></div> -<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  <span class="keywordflow">for</span> (uint32_t i = 1u; i < workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</div> -<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  {</div> -<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div> -<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i],</div> -<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  descriptorName,</div> -<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  <span class="stringliteral">"input_0"</span>,</div> -<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  <span class="stringliteral">"input_"</span> + std::to_string(i));</div> -<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  }</div> -<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>  <span class="comment">// type matches all other outputs</span></div> -<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <span class="keywordflow">for</span> (uint32_t i = 0u; i < workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size(); ++i)</div> -<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  {</div> -<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>  ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div> -<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[i],</div> -<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  <span class="stringliteral">"LstmQueueDescriptor"</span>,</div> -<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  <span class="stringliteral">"input_0"</span>,</div> -<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  <span class="stringliteral">"output_"</span> + std::to_string(i));</div> -<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  }</div> -<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  </div> -<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  <span class="comment">// Making sure clipping parameters have valid values.</span></div> -<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  <span class="comment">// == 0 means no clipping</span></div> -<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  <span class="comment">// > 0 means clipping</span></div> -<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a531a3907ec13d3772370da88030191a5">m_ClippingThresCell</a> < 0.0f)</div> -<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  {</div> -<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": negative cell clipping threshold is invalid"</span>);</div> -<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  }</div> -<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a86e88bef0df4df96df752b4b8955a3af">m_ClippingThresProj</a> < 0.0f)</div> -<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  {</div> -<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": negative projection clipping threshold is invalid"</span>);</div> -<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  }</div> -<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  </div> -<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  <span class="comment">// Inferring batch size, number of outputs and number of cells from the inputs.</span></div> -<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  <span class="keyword">const</span> uint32_t n_input = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[1];</div> -<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>  <span class="keyword">const</span> uint32_t n_batch = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[0];</div> -<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a17ba1c8bcc71a55a95b2a3913f8cb203">m_InputToOutputWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"InputToOutputWeights"</span>);</div> -<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  <span class="keyword">const</span> uint32_t n_cell = <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a17ba1c8bcc71a55a95b2a3913f8cb203">m_InputToOutputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a8e8d2fbabcac19f9e12779080ddff54e">GetShape</a>()[0];</div> -<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a4c27716f61bb68e8ea0bd4e8389ba01a">m_RecurrentToOutputWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"RecurrentToOutputWeights"</span>);</div> -<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  <span class="keyword">const</span> uint32_t n_output = <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a4c27716f61bb68e8ea0bd4e8389ba01a">m_RecurrentToOutputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a8e8d2fbabcac19f9e12779080ddff54e">GetShape</a>()[1];</div> -<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>  </div> -<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>  <span class="comment">// input tensor</span></div> -<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], 2, (n_batch * n_input),</div> -<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>  descriptorName + <span class="stringliteral">" input_0"</span>);</div> -<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>  <span class="comment">// outputStateInTensor</span></div> -<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1], 2, (n_batch * n_output),</div> -<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  descriptorName + <span class="stringliteral">" input_1"</span>);</div> -<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  <span class="comment">// outputStateInTensor</span></div> -<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[2], 2, (n_batch * n_cell),</div> -<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  descriptorName + <span class="stringliteral">" input_2"</span>);</div> -<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>  <span class="comment">// scratchBufferTensor</span></div> -<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scratchBufferSize = <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a> ? n_cell * 3 : n_cell * 4;</div> -<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0], 2, (n_batch * scratchBufferSize),</div> -<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  descriptorName + <span class="stringliteral">" output_0"</span>);</div> -<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  <span class="comment">// outputStateOutTensor</span></div> -<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1], 2, (n_batch * n_output),</div> -<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  descriptorName + <span class="stringliteral">" output_1"</span>);</div> -<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  <span class="comment">// cellStateOutTensor</span></div> -<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[2], 2, (n_batch * n_cell),</div> -<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>  descriptorName + <span class="stringliteral">" output_2"</span>);</div> -<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>  <span class="comment">// outputTensor</span></div> -<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[3], 2, (n_batch * n_output),</div> -<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>  descriptorName + <span class="stringliteral">" output_3"</span>);</div> -<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>  </div> -<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  <span class="comment">// check that dimensions of inputs/outputs and QueueDescriptor data match with each other</span></div> -<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a> )</div> -<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>  {</div> -<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>  (n_cell * n_input), <span class="stringliteral">"InputLayerNormWeights"</span>);</div> -<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>  }</div> -<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>  </div> -<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aab77f54a037658ca9b2bf9cc8a1fadf1">m_InputToForgetWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"InputToForgetWeights"</span>);</div> -<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aab77f54a037658ca9b2bf9cc8a1fadf1">m_InputToForgetWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  (n_cell * n_input), <span class="stringliteral">"InputToForgetWeights"</span>);</div> -<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>  </div> -<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a841439e3b8dc157a7368b19c9ecb7d03">m_InputToCellWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"InputToCellWeights"</span>);</div> -<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a841439e3b8dc157a7368b19c9ecb7d03">m_InputToCellWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  (n_cell * n_input), <span class="stringliteral">"InputToCellWeights"</span>);</div> -<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  </div> -<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a> )</div> -<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>  {</div> -<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>  (n_cell * n_output), <span class="stringliteral">"RecurrentToInputWeights"</span>);</div> -<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>  }</div> -<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>  </div> -<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#adf8571dd1867ee91082bd005f94f2610">m_RecurrentToForgetWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"RecurrentToForgetWeights"</span>);</div> -<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#adf8571dd1867ee91082bd005f94f2610">m_RecurrentToForgetWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>  (n_cell * n_output), <span class="stringliteral">"RecurrentToForgetWeights"</span>);</div> -<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>  </div> -<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac18c8b8b2039267d8282e91b4162d8aa">m_RecurrentToCellWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"RecurrentToCellWeights"</span>);</div> -<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac18c8b8b2039267d8282e91b4162d8aa">m_RecurrentToCellWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>  (n_cell * n_output), <span class="stringliteral">"RecurrentToCellWeights"</span>);</div> -<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>  </div> -<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>  <span class="comment">// Make sure the input-gate's parameters are either both present (regular</span></div> -<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>  <span class="comment">// LSTM) or not at all (CIFG-LSTM). And CifgEnable is set accordingly.</span></div> -<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>  <span class="keywordtype">bool</span> cifg_weights_all_or_none = ((<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a> && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a> &&</div> -<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>  !<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>) ||</div> -<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>  (!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a> &&</div> -<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>));</div> -<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>  <span class="keywordflow">if</span> (!cifg_weights_all_or_none)</div> -<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>  {</div> -<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Input-Gate's parameters InputToInputWeights and "</span></div> -<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  <span class="stringliteral">"RecurrentToInputWeights must either both be present (regular LSTM) "</span></div> -<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>  <span class="stringliteral">"or both not present (CIFG-LSTM). In addition CifgEnable must be set "</span></div> -<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>  <span class="stringliteral">"accordingly."</span>);</div> -<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>  }</div> -<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>  </div> -<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a> )</div> -<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>  {</div> -<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> -<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>  n_cell, <span class="stringliteral">"CellToInputWeights"</span>);</div> -<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>  }</div> -<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a> )</div> -<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>  {</div> -<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> -<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>  n_cell, <span class="stringliteral">"CellToForgetWeights"</span>);</div> -<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>  }</div> -<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a> )</div> -<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  {</div> -<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> -<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>  n_cell, <span class="stringliteral">"CellToOutputWeights"</span>);</div> -<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>  }</div> -<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  </div> -<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  <span class="comment">// Making sure the peephole weights are there all or none. And PeepholeEnable is set accordingly.</span></div> -<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>  <span class="keywordtype">bool</span> peephole_weights_all_or_none =</div> -<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  (((<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a> || <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>) && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a></div> -<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a> && <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a2837b4396f20c956952d1a7286cab5f8">m_PeepholeEnabled</a>)</div> -<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>  || ( !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a></div> -<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>  && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a> && !<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a2837b4396f20c956952d1a7286cab5f8">m_PeepholeEnabled</a>));</div> -<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>  <span class="keywordflow">if</span> (!peephole_weights_all_or_none)</div> -<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>  {</div> -<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Invalid combination of peephole parameters."</span>);</div> -<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>  }</div> -<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>  </div> -<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>  <span class="comment">// Make sure the input gate bias is present only when not a CIFG-LSTM.</span></div> -<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>)</div> -<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>  {</div> -<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a44eb7524badcca9b2073359e3814c98b">m_InputGateBias</a>)</div> -<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>  {</div> -<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": InputGateBias is present and CIFG-LSTM is enabled."</span>);</div> -<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>  }</div> -<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>  }</div> -<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  {</div> -<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>  <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a44eb7524badcca9b2073359e3814c98b">m_InputGateBias</a>)</div> -<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>  {</div> -<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": If CIFG-LSTM is disabled InputGateBias "</span></div> -<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>  <span class="stringliteral">"must be present."</span>);</div> -<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>  }</div> -<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a44eb7524badcca9b2073359e3814c98b">m_InputGateBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> -<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>  n_cell, <span class="stringliteral">"InputGateBias"</span>);</div> -<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  }</div> -<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>  </div> -<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a29fa293fffbf9c6f00cd75db1dc0a52a">m_ForgetGateBias</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"ForgetGateBias"</span>);</div> -<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a29fa293fffbf9c6f00cd75db1dc0a52a">m_ForgetGateBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"ForgetGateBias"</span>);</div> -<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>  </div> -<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a6e9593869b82984de198fed27f72cdcf">m_CellBias</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"CellBias"</span>);</div> -<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a6e9593869b82984de198fed27f72cdcf">m_CellBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"CellBias"</span>);</div> -<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  </div> -<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a5ff4158b1b363b898d0da04c42d37ce0">m_OutputGateBias</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"OutputGateBias"</span>);</div> -<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a5ff4158b1b363b898d0da04c42d37ce0">m_OutputGateBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"OutputGateBias"</span>);</div> -<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>  </div> -<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a>)</div> -<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>  {</div> -<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> -<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>  (n_cell * n_output), <span class="stringliteral">"ProjectionWeights"</span>);</div> -<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>  }</div> -<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a>)</div> -<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>  {</div> -<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_output, <span class="stringliteral">"ProjectionBias"</span>);</div> -<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  }</div> -<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  </div> -<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>  <span class="comment">// Making sure the projection tensors are consistent:</span></div> -<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>  <span class="comment">// 1) If projection weight is not present, then projection bias should not be</span></div> -<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  <span class="comment">// present.</span></div> -<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>  <span class="comment">// 2) If projection weight is present, then projection bias is optional.</span></div> -<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>  <span class="keywordtype">bool</span> projecton_tensors_consistent = ((!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a> &&</div> -<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>  !<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a>)</div> -<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>  || (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a> &&</div> -<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a>)</div> -<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>  || (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a> && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a> &&</div> -<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a>));</div> -<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>  <span class="keywordflow">if</span> (!projecton_tensors_consistent)</div> -<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>  {</div> -<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Projection tensors are inconsistent."</span>);</div> -<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>  }</div> -<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>  </div> -<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>  <span class="comment">// The four layer normalization weights either all have values or none of them have values. Additionally, if</span></div> -<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>  <span class="comment">// CIFG is used, input layer normalization weights tensor is omitted and the other layer normalization weights</span></div> -<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>  <span class="comment">// either all have values or none of them have values. Layer normalization is used when the values of all the</span></div> -<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>  <span class="comment">// layer normalization weights are present</span></div> -<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>)</div> -<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>  {</div> -<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"InputLayerNormWeights"</span>);</div> -<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>  }</div> -<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>)</div> -<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>  {</div> -<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"ForgetLayerNormWeights"</span>);</div> -<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>  }</div> -<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>)</div> -<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>  {</div> -<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"CellLayerNormWeights"</span>);</div> -<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  }</div> -<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>)</div> -<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>  {</div> -<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"OutputLayerNormWeights"</span>);</div> -<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>  }</div> -<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>  </div> -<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a4a8ec49f130084445d44297549254780">m_LayerNormEnabled</a>)</div> -<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>  {</div> -<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>  <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>)</div> -<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>  {</div> -<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>  <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>)</div> -<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>  {</div> -<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Layer normalisation is enabled and CIFG-LSTM is "</span></div> -<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>  <span class="stringliteral">"disabled but InputLayerNormWeights are not present"</span>);</div> -<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>  }</div> -<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(),</div> -<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>  1, n_cell, <span class="stringliteral">"InputLayerNormWeights"</span>);</div> -<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  }</div> -<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>)</div> -<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  {</div> -<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">":InputLayerNormWeights are present while CIFG is "</span></div> -<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  <span class="stringliteral">"enabled"</span>);</div> -<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>  }</div> -<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  </div> -<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>, <span class="stringliteral">"Null pointer check layer normalisation enabled"</span>,</div> -<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  <span class="stringliteral">"ForgetLayerNormWeights"</span>);</div> -<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"ForgetLayerNormWeights"</span>);</div> -<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>  </div> -<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>, <span class="stringliteral">"Null pointer check layer normalisation enabled"</span>,</div> -<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  <span class="stringliteral">"OutputLayerNormWeights"</span>);</div> -<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"OutputLayerNormWeights"</span>);</div> -<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>  </div> -<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>, <span class="stringliteral">"Null pointer check layer normalisation enabled"</span>,</div> -<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>  <span class="stringliteral">"CellLayerNormWeights"</span>);</div> -<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"CellLayerNormWeights"</span>);</div> -<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>  }</div> -<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a> || <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a> || <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a> || <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>)</div> -<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>  {</div> -<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Layer normalisation is disabled but one or more layer "</span></div> -<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>  <span class="stringliteral">"normalisation weights are present."</span>);</div> -<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>  }</div> -<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> }</div> +<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">"LstmQueueDescriptor"</span>};</div> +<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  </div> +<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  <span class="comment">// check dimensions of all inputs and outputs</span></div> +<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != 3)</div> +<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  {</div> +<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Invalid number of inputs."</span>);</div> +<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  }</div> +<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() != 4)</div> +<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>  {</div> +<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Invalid number of outputs."</span>);</div> +<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  }</div> +<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  </div> +<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  std::vector<DataType> supportedTypes =</div> +<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  {</div> +<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div> +<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div> +<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div> +<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div> +<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  };</div> +<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  </div> +<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  <span class="comment">// check for supported type of one input and match them with all the other input and output</span></div> +<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  ValidateDataTypes(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], supportedTypes, descriptorName);</div> +<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  </div> +<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  <span class="comment">// type matches all other inputs</span></div> +<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  <span class="keywordflow">for</span> (uint32_t i = 1u; i < workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</div> +<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  {</div> +<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div> +<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i],</div> +<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  descriptorName,</div> +<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  <span class="stringliteral">"input_0"</span>,</div> +<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>  <span class="stringliteral">"input_"</span> + std::to_string(i));</div> +<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  }</div> +<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  <span class="comment">// type matches all other outputs</span></div> +<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>  <span class="keywordflow">for</span> (uint32_t i = 0u; i < workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size(); ++i)</div> +<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  {</div> +<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div> +<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[i],</div> +<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  <span class="stringliteral">"LstmQueueDescriptor"</span>,</div> +<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  <span class="stringliteral">"input_0"</span>,</div> +<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  <span class="stringliteral">"output_"</span> + std::to_string(i));</div> +<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  }</div> +<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  </div> +<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  <span class="comment">// Making sure clipping parameters have valid values.</span></div> +<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>  <span class="comment">// == 0 means no clipping</span></div> +<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  <span class="comment">// > 0 means clipping</span></div> +<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a531a3907ec13d3772370da88030191a5">m_ClippingThresCell</a> < 0.0f)</div> +<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  {</div> +<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": negative cell clipping threshold is invalid"</span>);</div> +<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  }</div> +<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a86e88bef0df4df96df752b4b8955a3af">m_ClippingThresProj</a> < 0.0f)</div> +<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  {</div> +<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": negative projection clipping threshold is invalid"</span>);</div> +<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  }</div> +<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  </div> +<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>  <span class="comment">// Inferring batch size, number of outputs and number of cells from the inputs.</span></div> +<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  <span class="keyword">const</span> uint32_t n_input = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[1];</div> +<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  <span class="keyword">const</span> uint32_t n_batch = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[0];</div> +<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a17ba1c8bcc71a55a95b2a3913f8cb203">m_InputToOutputWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"InputToOutputWeights"</span>);</div> +<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  <span class="keyword">const</span> uint32_t n_cell = <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a17ba1c8bcc71a55a95b2a3913f8cb203">m_InputToOutputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a8e8d2fbabcac19f9e12779080ddff54e">GetShape</a>()[0];</div> +<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a4c27716f61bb68e8ea0bd4e8389ba01a">m_RecurrentToOutputWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"RecurrentToOutputWeights"</span>);</div> +<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>  <span class="keyword">const</span> uint32_t n_output = <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a4c27716f61bb68e8ea0bd4e8389ba01a">m_RecurrentToOutputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a8e8d2fbabcac19f9e12779080ddff54e">GetShape</a>()[1];</div> +<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>  </div> +<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>  <span class="comment">// input tensor</span></div> +<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], 2, (n_batch * n_input),</div> +<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  descriptorName + <span class="stringliteral">" input_0"</span>);</div> +<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  <span class="comment">// outputStateInTensor</span></div> +<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1], 2, (n_batch * n_output),</div> +<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  descriptorName + <span class="stringliteral">" input_1"</span>);</div> +<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  <span class="comment">// outputStateInTensor</span></div> +<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[2], 2, (n_batch * n_cell),</div> +<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  descriptorName + <span class="stringliteral">" input_2"</span>);</div> +<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  <span class="comment">// scratchBufferTensor</span></div> +<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scratchBufferSize = <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a> ? n_cell * 3 : n_cell * 4;</div> +<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0], 2, (n_batch * scratchBufferSize),</div> +<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>  descriptorName + <span class="stringliteral">" output_0"</span>);</div> +<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  <span class="comment">// outputStateOutTensor</span></div> +<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1], 2, (n_batch * n_output),</div> +<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>  descriptorName + <span class="stringliteral">" output_1"</span>);</div> +<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>  <span class="comment">// cellStateOutTensor</span></div> +<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[2], 2, (n_batch * n_cell),</div> +<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  descriptorName + <span class="stringliteral">" output_2"</span>);</div> +<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>  <span class="comment">// outputTensor</span></div> +<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.html#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[3], 2, (n_batch * n_output),</div> +<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  descriptorName + <span class="stringliteral">" output_3"</span>);</div> +<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  </div> +<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>  <span class="comment">// check that dimensions of inputs/outputs and QueueDescriptor data match with each other</span></div> +<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a> )</div> +<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>  {</div> +<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>  (n_cell * n_input), <span class="stringliteral">"InputLayerNormWeights"</span>);</div> +<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>  }</div> +<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>  </div> +<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aab77f54a037658ca9b2bf9cc8a1fadf1">m_InputToForgetWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"InputToForgetWeights"</span>);</div> +<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aab77f54a037658ca9b2bf9cc8a1fadf1">m_InputToForgetWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>  (n_cell * n_input), <span class="stringliteral">"InputToForgetWeights"</span>);</div> +<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>  </div> +<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a841439e3b8dc157a7368b19c9ecb7d03">m_InputToCellWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"InputToCellWeights"</span>);</div> +<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a841439e3b8dc157a7368b19c9ecb7d03">m_InputToCellWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>  (n_cell * n_input), <span class="stringliteral">"InputToCellWeights"</span>);</div> +<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>  </div> +<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a> )</div> +<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>  {</div> +<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>  (n_cell * n_output), <span class="stringliteral">"RecurrentToInputWeights"</span>);</div> +<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>  }</div> +<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>  </div> +<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#adf8571dd1867ee91082bd005f94f2610">m_RecurrentToForgetWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"RecurrentToForgetWeights"</span>);</div> +<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#adf8571dd1867ee91082bd005f94f2610">m_RecurrentToForgetWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>  (n_cell * n_output), <span class="stringliteral">"RecurrentToForgetWeights"</span>);</div> +<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>  </div> +<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac18c8b8b2039267d8282e91b4162d8aa">m_RecurrentToCellWeights</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"RecurrentToCellWeights"</span>);</div> +<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac18c8b8b2039267d8282e91b4162d8aa">m_RecurrentToCellWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>  (n_cell * n_output), <span class="stringliteral">"RecurrentToCellWeights"</span>);</div> +<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>  </div> +<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>  <span class="comment">// Make sure the input-gate's parameters are either both present (regular</span></div> +<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>  <span class="comment">// LSTM) or not at all (CIFG-LSTM). And CifgEnable is set accordingly.</span></div> +<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>  <span class="keywordtype">bool</span> cifg_weights_all_or_none = ((<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a> && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a> &&</div> +<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  !<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>) ||</div> +<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>  (!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ab160eba2493d5fe52185c0986dcb190c">m_InputToInputWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a299587d4f3fca029492700f3e2585bd8">m_RecurrentToInputWeights</a> &&</div> +<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>));</div> +<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>  <span class="keywordflow">if</span> (!cifg_weights_all_or_none)</div> +<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  {</div> +<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Input-Gate's parameters InputToInputWeights and "</span></div> +<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>  <span class="stringliteral">"RecurrentToInputWeights must either both be present (regular LSTM) "</span></div> +<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>  <span class="stringliteral">"or both not present (CIFG-LSTM). In addition CifgEnable must be set "</span></div> +<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>  <span class="stringliteral">"accordingly."</span>);</div> +<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>  }</div> +<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>  </div> +<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a> )</div> +<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>  {</div> +<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> +<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>  n_cell, <span class="stringliteral">"CellToInputWeights"</span>);</div> +<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>  }</div> +<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a> )</div> +<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>  {</div> +<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> +<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  n_cell, <span class="stringliteral">"CellToForgetWeights"</span>);</div> +<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  }</div> +<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>  <span class="keywordflow">if</span> ( <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a> )</div> +<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>  {</div> +<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> +<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  n_cell, <span class="stringliteral">"CellToOutputWeights"</span>);</div> +<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  }</div> +<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>  </div> +<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  <span class="comment">// Making sure the peephole weights are there all or none. And PeepholeEnable is set accordingly.</span></div> +<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  <span class="keywordtype">bool</span> peephole_weights_all_or_none =</div> +<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>  (((<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a> || <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>) && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a></div> +<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>  && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a> && <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a2837b4396f20c956952d1a7286cab5f8">m_PeepholeEnabled</a>)</div> +<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>  || ( !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a951b7c90b862138071a298065f16be61">m_CellToInputWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">m_CellToForgetWeights</a></div> +<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>  && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aa09f7bdb9fd0d06b6386e412a4e72dd6">m_CellToOutputWeights</a> && !<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a2837b4396f20c956952d1a7286cab5f8">m_PeepholeEnabled</a>));</div> +<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>  <span class="keywordflow">if</span> (!peephole_weights_all_or_none)</div> +<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>  {</div> +<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Invalid combination of peephole parameters."</span>);</div> +<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>  }</div> +<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>  </div> +<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>  <span class="comment">// Make sure the input gate bias is present only when not a CIFG-LSTM.</span></div> +<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>)</div> +<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>  {</div> +<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a44eb7524badcca9b2073359e3814c98b">m_InputGateBias</a>)</div> +<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>  {</div> +<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": InputGateBias is present and CIFG-LSTM is enabled."</span>);</div> +<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>  }</div> +<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  }</div> +<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>  {</div> +<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a44eb7524badcca9b2073359e3814c98b">m_InputGateBias</a>)</div> +<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>  {</div> +<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": If CIFG-LSTM is disabled InputGateBias "</span></div> +<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>  <span class="stringliteral">"must be present."</span>);</div> +<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>  }</div> +<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a44eb7524badcca9b2073359e3814c98b">m_InputGateBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1,</div> +<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>  n_cell, <span class="stringliteral">"InputGateBias"</span>);</div> +<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>  }</div> +<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  </div> +<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a29fa293fffbf9c6f00cd75db1dc0a52a">m_ForgetGateBias</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"ForgetGateBias"</span>);</div> +<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a29fa293fffbf9c6f00cd75db1dc0a52a">m_ForgetGateBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"ForgetGateBias"</span>);</div> +<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>  </div> +<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a6e9593869b82984de198fed27f72cdcf">m_CellBias</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"CellBias"</span>);</div> +<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a6e9593869b82984de198fed27f72cdcf">m_CellBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"CellBias"</span>);</div> +<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>  </div> +<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a5ff4158b1b363b898d0da04c42d37ce0">m_OutputGateBias</a>, <span class="stringliteral">"Null pointer check"</span>, <span class="stringliteral">"OutputGateBias"</span>);</div> +<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a5ff4158b1b363b898d0da04c42d37ce0">m_OutputGateBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"OutputGateBias"</span>);</div> +<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>  </div> +<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a>)</div> +<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>  {</div> +<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 2,</div> +<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>  (n_cell * n_output), <span class="stringliteral">"ProjectionWeights"</span>);</div> +<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>  }</div> +<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a>)</div> +<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  {</div> +<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_output, <span class="stringliteral">"ProjectionBias"</span>);</div> +<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>  }</div> +<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>  </div> +<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  <span class="comment">// Making sure the projection tensors are consistent:</span></div> +<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>  <span class="comment">// 1) If projection weight is not present, then projection bias should not be</span></div> +<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>  <span class="comment">// present.</span></div> +<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>  <span class="comment">// 2) If projection weight is present, then projection bias is optional.</span></div> +<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>  <span class="keywordtype">bool</span> projecton_tensors_consistent = ((!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a> &&</div> +<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>  !<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a>)</div> +<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>  || (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a> && !<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a> &&</div> +<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a>)</div> +<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>  || (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a3ead2ef8da00b2709d561d85996fc513">m_ProjectionWeights</a> && <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">m_ProjectionBias</a> &&</div> +<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a>));</div> +<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>  <span class="keywordflow">if</span> (!projecton_tensors_consistent)</div> +<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>  {</div> +<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Projection tensors are inconsistent."</span>);</div> +<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>  }</div> +<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>  </div> +<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>  <span class="comment">// The four layer normalization weights either all have values or none of them have values. Additionally, if</span></div> +<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>  <span class="comment">// CIFG is used, input layer normalization weights tensor is omitted and the other layer normalization weights</span></div> +<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>  <span class="comment">// either all have values or none of them have values. Layer normalization is used when the values of all the</span></div> +<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>  <span class="comment">// layer normalization weights are present</span></div> +<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>)</div> +<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>  {</div> +<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"InputLayerNormWeights"</span>);</div> +<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>  }</div> +<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>)</div> +<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>  {</div> +<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"ForgetLayerNormWeights"</span>);</div> +<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>  }</div> +<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>)</div> +<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  {</div> +<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"CellLayerNormWeights"</span>);</div> +<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>  }</div> +<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>)</div> +<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>  {</div> +<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"OutputLayerNormWeights"</span>);</div> +<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>  }</div> +<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>  </div> +<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>  <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#a4a8ec49f130084445d44297549254780">m_LayerNormEnabled</a>)</div> +<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>  {</div> +<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>  <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_lstm_descriptor.html#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>)</div> +<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>  {</div> +<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>  <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>)</div> +<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>  {</div> +<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Layer normalisation is enabled and CIFG-LSTM is "</span></div> +<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>  <span class="stringliteral">"disabled but InputLayerNormWeights are not present"</span>);</div> +<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>  }</div> +<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(),</div> +<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  1, n_cell, <span class="stringliteral">"InputLayerNormWeights"</span>);</div> +<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  }</div> +<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a>)</div> +<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  {</div> +<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">":InputLayerNormWeights are present while CIFG is "</span></div> +<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  <span class="stringliteral">"enabled"</span>);</div> +<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  }</div> +<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  </div> +<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>, <span class="stringliteral">"Null pointer check layer normalisation enabled"</span>,</div> +<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>  <span class="stringliteral">"ForgetLayerNormWeights"</span>);</div> +<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"ForgetLayerNormWeights"</span>);</div> +<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  </div> +<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>, <span class="stringliteral">"Null pointer check layer normalisation enabled"</span>,</div> +<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>  <span class="stringliteral">"OutputLayerNormWeights"</span>);</div> +<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"OutputLayerNormWeights"</span>);</div> +<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>  </div> +<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>  ValidatePointer(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>, <span class="stringliteral">"Null pointer check layer normalisation enabled"</span>,</div> +<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>  <span class="stringliteral">"CellLayerNormWeights"</span>);</div> +<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  <a class="code" href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">ValidateTensorNumDimNumElem</a>(<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>-><a class="code" href="classarmnn_1_1_const_tensor_handle.html#a66e8f43a5b42b500871ed96e15419567">GetTensorInfo</a>(), 1, n_cell, <span class="stringliteral">"CellLayerNormWeights"</span>);</div> +<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>  }</div> +<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a1dbad32cad5c0437e1272f59fedf52ea">m_InputLayerNormWeights</a> || <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#ad9442e26aa79f896da5f404ab825a9c8">m_ForgetLayerNormWeights</a> || <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#a0e0f66bd03c88f3d2dc666f581d3cf12">m_OutputLayerNormWeights</a> || <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.html#aeef6f1ac3efad8ec8b0a7118652b64c9">m_CellLayerNormWeights</a>)</div> +<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>  {</div> +<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Layer normalisation is disabled but one or more layer "</span></div> +<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>  <span class="stringliteral">"normalisation weights are present."</span>);</div> +<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>  }</div> +<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::BFloat16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::Float32</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00056">ConstTensorHandle::GetShape()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.html#l00440">LstmQueueDescriptor::m_CellBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00446">LstmQueueDescriptor::m_CellLayerNormWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00436">LstmQueueDescriptor::m_CellToForgetWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00435">LstmQueueDescriptor::m_CellToInputWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00437">LstmQueueDescriptor::m_CellToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.html#l01146">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01142">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.html#l01144">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_workload_data_8hpp_source.html#l00439">LstmQueueDescriptor::m_ForgetGateBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00445">LstmQueueDescriptor::m_ForgetLayerNormWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00438">LstmQueueDescriptor::m_InputGateBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00444">LstmQueueDescriptor::m_InputLayerNormWeights</a>, <a class="el" href="_workload_info_8hpp_source.html#l00018">WorkloadInfo::m_InputTensorInfos</a>, <a class="el" href="_workload_data_8hpp_source.html#l00429">LstmQueueDescriptor::m_InputToCellWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00428">LstmQueueDescriptor::m_InputToForgetWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00427">LstmQueueDescriptor::m_InputToInputWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00430">LstmQueueDescriptor::m_InputToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.html#l01152">LstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_workload_data_8hpp_source.html#l00441">LstmQueueDescriptor::m_OutputGateBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00447">LstmQueueDescriptor::m_OutputLayerNormWeights</a>, <a class="el" href="_workload_info_8hpp_source.html#l00019">WorkloadInfo::m_OutputTensorInfos</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters< LstmDescriptor >::m_Parameters</a>, <a class="el" href="_descriptors_8hpp_source.html#l01148">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_workload_data_8hpp_source.html#l00443">LstmQueueDescriptor::m_ProjectionBias</a>, <a class="el" href="_descriptors_8hpp_source.html#l01150">LstmDescriptor::m_ProjectionEnabled</a>, <a class="el" href="_workload_data_8hpp_source.html#l00442">LstmQueueDescriptor::m_ProjectionWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00433">LstmQueueDescriptor::m_RecurrentToCellWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00432">LstmQueueDescriptor::m_RecurrentToForgetWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00431">LstmQueueDescriptor::m_RecurrentToInputWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00434">LstmQueueDescriptor::m_RecurrentToOutputWeights</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::QSymmS16</a>, and <a class="el" href="_workload_data_8cpp_source.html#l00435">QueueDescriptor::ValidateTensorNumDimNumElem()</a>.</p> +<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::BFloat16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::Float32</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00056">ConstTensorHandle::GetShape()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.html#l00440">LstmQueueDescriptor::m_CellBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00446">LstmQueueDescriptor::m_CellLayerNormWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00436">LstmQueueDescriptor::m_CellToForgetWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00435">LstmQueueDescriptor::m_CellToInputWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00437">LstmQueueDescriptor::m_CellToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.html#l01146">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01142">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.html#l01144">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_workload_data_8hpp_source.html#l00439">LstmQueueDescriptor::m_ForgetGateBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00445">LstmQueueDescriptor::m_ForgetLayerNormWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00438">LstmQueueDescriptor::m_InputGateBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00444">LstmQueueDescriptor::m_InputLayerNormWeights</a>, <a class="el" href="_workload_info_8hpp_source.html#l00018">WorkloadInfo::m_InputTensorInfos</a>, <a class="el" href="_workload_data_8hpp_source.html#l00429">LstmQueueDescriptor::m_InputToCellWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00428">LstmQueueDescriptor::m_InputToForgetWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00427">LstmQueueDescriptor::m_InputToInputWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00430">LstmQueueDescriptor::m_InputToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.html#l01152">LstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_workload_data_8hpp_source.html#l00441">LstmQueueDescriptor::m_OutputGateBias</a>, <a class="el" href="_workload_data_8hpp_source.html#l00447">LstmQueueDescriptor::m_OutputLayerNormWeights</a>, <a class="el" href="_workload_info_8hpp_source.html#l00019">WorkloadInfo::m_OutputTensorInfos</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters< LstmDescriptor >::m_Parameters</a>, <a class="el" href="_descriptors_8hpp_source.html#l01148">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_workload_data_8hpp_source.html#l00443">LstmQueueDescriptor::m_ProjectionBias</a>, <a class="el" href="_descriptors_8hpp_source.html#l01150">LstmDescriptor::m_ProjectionEnabled</a>, <a class="el" href="_workload_data_8hpp_source.html#l00442">LstmQueueDescriptor::m_ProjectionWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00433">LstmQueueDescriptor::m_RecurrentToCellWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00432">LstmQueueDescriptor::m_RecurrentToForgetWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00431">LstmQueueDescriptor::m_RecurrentToInputWeights</a>, <a class="el" href="_workload_data_8hpp_source.html#l00434">LstmQueueDescriptor::m_RecurrentToOutputWeights</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::QSymmS16</a>, and <a class="el" href="_workload_data_8cpp_source.html#l00436">QueueDescriptor::ValidateTensorNumDimNumElem()</a>.</p> </div> </div> @@ -571,7 +571,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00440">440</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -589,7 +589,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00446">446</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -607,7 +607,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00436">436</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -625,7 +625,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00435">435</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -643,7 +643,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00437">437</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -661,7 +661,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00439">439</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -679,7 +679,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00445">445</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -697,7 +697,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00438">438</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -715,7 +715,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00444">444</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -733,7 +733,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00429">429</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -751,7 +751,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00428">428</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -769,7 +769,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00427">427</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -787,7 +787,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00430">430</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -805,7 +805,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00441">441</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -823,7 +823,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00447">447</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -841,7 +841,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00443">443</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -859,7 +859,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00442">442</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -877,7 +877,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00433">433</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -895,7 +895,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00432">432</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -913,7 +913,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00431">431</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -931,7 +931,7 @@ Additional Inherited Members</h2></td></tr> <p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00434">434</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p> -<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02011">LstmQueueDescriptor::Validate()</a>.</p> +<p class="reference">Referenced by <a class="el" href="_lstm_layer_8cpp_source.html#l00022">LstmLayer::CreateWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02013">LstmQueueDescriptor::Validate()</a>.</p> </div> </div> @@ -974,7 +974,7 @@ Additional Inherited Members</h2></td></tr> <div class="ttc" id="astructarmnn_1_1_lstm_descriptor_html_a6c9de81fc65b3c4924cab11907075a17"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.html#a6c9de81fc65b3c4924cab11907075a17">armnn::LstmDescriptor::m_ProjectionEnabled</a></div><div class="ttdeci">bool m_ProjectionEnabled</div><div class="ttdoc">Enable/disable the projection layer.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01150">Descriptors.hpp:1150</a></div></div> <div class="ttc" id="astructarmnn_1_1_lstm_queue_descriptor_html_ac668b31de6fb0f19d4c793d5ed3c3316"><div class="ttname"><a href="structarmnn_1_1_lstm_queue_descriptor.html#ac668b31de6fb0f19d4c793d5ed3c3316">armnn::LstmQueueDescriptor::m_ProjectionBias</a></div><div class="ttdeci">const ConstTensorHandle * m_ProjectionBias</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.html#l00443">WorkloadData.hpp:443</a></div></div> <div class="ttc" id="astructarmnn_1_1_lstm_queue_descriptor_html_a5ff4158b1b363b898d0da04c42d37ce0"><div class="ttname"><a href="structarmnn_1_1_lstm_queue_descriptor.html#a5ff4158b1b363b898d0da04c42d37ce0">armnn::LstmQueueDescriptor::m_OutputGateBias</a></div><div class="ttdeci">const ConstTensorHandle * m_OutputGateBias</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.html#l00441">WorkloadData.hpp:441</a></div></div> -<div class="ttc" id="astructarmnn_1_1_queue_descriptor_html_a8a30194ce14c088a2625ccc8c3e9d155"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">armnn::QueueDescriptor::ValidateTensorNumDimNumElem</a></div><div class="ttdeci">void ValidateTensorNumDimNumElem(const TensorInfo &tensorInfo, unsigned int numDimension, unsigned int numElements, std::string const &tensorName) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.html#l00435">WorkloadData.cpp:435</a></div></div> +<div class="ttc" id="astructarmnn_1_1_queue_descriptor_html_a8a30194ce14c088a2625ccc8c3e9d155"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.html#a8a30194ce14c088a2625ccc8c3e9d155">armnn::QueueDescriptor::ValidateTensorNumDimNumElem</a></div><div class="ttdeci">void ValidateTensorNumDimNumElem(const TensorInfo &tensorInfo, unsigned int numDimension, unsigned int numElements, std::string const &tensorName) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.html#l00436">WorkloadData.cpp:436</a></div></div> <div class="ttc" id="astructarmnn_1_1_lstm_queue_descriptor_html_a20c10fcb26657477377d07b7b1e13120"><div class="ttname"><a href="structarmnn_1_1_lstm_queue_descriptor.html#a20c10fcb26657477377d07b7b1e13120">armnn::LstmQueueDescriptor::m_CellToForgetWeights</a></div><div class="ttdeci">const ConstTensorHandle * m_CellToForgetWeights</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.html#l00436">WorkloadData.hpp:436</a></div></div> <div class="ttc" id="astructarmnn_1_1_lstm_queue_descriptor_html_a17ba1c8bcc71a55a95b2a3913f8cb203"><div class="ttname"><a href="structarmnn_1_1_lstm_queue_descriptor.html#a17ba1c8bcc71a55a95b2a3913f8cb203">armnn::LstmQueueDescriptor::m_InputToOutputWeights</a></div><div class="ttdeci">const ConstTensorHandle * m_InputToOutputWeights</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.html#l00430">WorkloadData.hpp:430</a></div></div> <div class="ttc" id="astructarmnn_1_1_lstm_descriptor_html_a531a3907ec13d3772370da88030191a5"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.html#a531a3907ec13d3772370da88030191a5">armnn::LstmDescriptor::m_ClippingThresCell</a></div><div class="ttdeci">float m_ClippingThresCell</div><div class="ttdoc">Clipping threshold value for the cell state.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01142">Descriptors.hpp:1142</a></div></div> @@ -983,7 +983,7 @@ Additional Inherited Members</h2></td></tr> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="navelem"><a class="el" href="namespacearmnn.html">armnn</a></li><li class="navelem"><a class="el" href="structarmnn_1_1_lstm_queue_descriptor.html">LstmQueueDescriptor</a></li> - <li class="footer">Generated on Wed Feb 14 2024 16:36:23 for Arm NN by + <li class="footer">Generated on Thu May 16 2024 09:31:57 for Arm NN by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li> </ul> |