aboutsummaryrefslogtreecommitdiff
path: root/latest/_batch_mat_mul_layer_8cpp_source.html
diff options
context:
space:
mode:
authorNikhil Raj <nikhil.raj@arm.com>2024-05-16 09:47:51 +0100
committerNikhil Raj <nikhil.raj@arm.com>2024-05-16 09:47:51 +0100
commit1dc83febfb76d6a770bdf3ba16c4034a970c2320 (patch)
tree66d27e5587e9010f3db26a23a348df844c88f8e6 /latest/_batch_mat_mul_layer_8cpp_source.html
parent38b600d8abb2c5f7a44511b5deddf441f975d51d (diff)
downloadarmnn-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/_batch_mat_mul_layer_8cpp_source.html')
-rw-r--r--latest/_batch_mat_mul_layer_8cpp_source.html169
1 files changed, 89 insertions, 80 deletions
diff --git a/latest/_batch_mat_mul_layer_8cpp_source.html b/latest/_batch_mat_mul_layer_8cpp_source.html
index d3bdc9bf10..15d9d79d16 100644
--- a/latest/_batch_mat_mul_layer_8cpp_source.html
+++ b/latest/_batch_mat_mul_layer_8cpp_source.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">
- &#160;<span id="projectnumber">24.02</span>
+ &#160;<span id="projectnumber">24.05</span>
</div>
</td>
</tr>
@@ -97,7 +97,7 @@ $(document).ready(function(){initNavTree('_batch_mat_mul_layer_8cpp_source.html'
</div><!--header-->
<div class="contents">
<a href="_batch_mat_mul_layer_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Copyright © 2022-2024 Arm Ltd and Contributors. All rights reserved.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_batch_mat_mul_layer_8hpp.html">BatchMatMulLayer.hpp</a>&quot;</span></div>
@@ -130,96 +130,104 @@ $(document).ready(function(){initNavTree('_batch_mat_mul_layer_8cpp_source.html'
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classarmnn_1_1_batch_mat_mul_layer.html#a65ca562c882ad619684445a1402f415a"> 33</a></span>&#160;std::vector&lt;TensorShape&gt; <a class="code" href="classarmnn_1_1_batch_mat_mul_layer.html#a65ca562c882ad619684445a1402f415a">BatchMatMulLayer::InferOutputShapes</a>(<span class="keyword">const</span> std::vector&lt;TensorShape&gt;&amp; inputShapes)<span class="keyword"> const</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputShapes.size() == 2);</div>
-<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
-<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> inputXShape = inputShapes[0];</div>
-<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> inputYShape = inputShapes[1];</div>
-<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
-<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// Adjoint is assumed to be square, but we will apply the permute anyway</span></div>
-<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#acb441bb8db19bcce78d15cdd8ceb5ea0">m_TransposeX</a> || <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a0cf8306be7d301de0f095fff9901a525">m_AdjointX</a>)</div>
-<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
-<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">auto</span> permuteVec = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div>
-<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; inputXShape);</div>
-<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; inputXShape = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputXShape, permuteVec);</div>
-<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
-<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a112b466e5d2ab9d1887178adbe3afa1c">m_TransposeY</a> || <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#ad945fc98770356dd886a68e98a52e26b">m_AdjointY</a>)</div>
-<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
-<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">auto</span> permuteVec = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div>
-<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; inputYShape);</div>
-<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; inputYShape = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputYShape, permuteVec);</div>
-<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
-<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; longerInput = inputXShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= inputYShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()?</div>
-<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; inputXShape : inputYShape;</div>
-<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; shorterInput = inputXShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= inputYShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()?</div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; inputYShape : inputXShape;</div>
-<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
-<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNumDimsOffset = longerInput.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() - shorterInput.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNumDimensions = longerInput.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (inputShapes.size() != 2)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_layer_validation_exception.html">armnn::LayerValidationException</a>(<span class="stringliteral">&quot;inputShapes&#39; size is \&quot;&quot;</span> + std::to_string(inputShapes.size()) +</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="stringliteral">&quot;\&quot; - should be \&quot;2\&quot;.&quot;</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> inputXShape = inputShapes[0];</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> inputYShape = inputShapes[1];</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// Adjoint is assumed to be square, but we will apply the permute anyway</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#acb441bb8db19bcce78d15cdd8ceb5ea0">m_TransposeX</a> || <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a0cf8306be7d301de0f095fff9901a525">m_AdjointX</a>)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">auto</span> permuteVec = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; inputXShape);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; inputXShape = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputXShape, permuteVec);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a112b466e5d2ab9d1887178adbe3afa1c">m_TransposeY</a> || <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#ad945fc98770356dd886a68e98a52e26b">m_AdjointY</a>)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">auto</span> permuteVec = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(<a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; inputYShape);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; inputYShape = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputYShape, permuteVec);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; longerInput = inputXShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= inputYShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()?</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; inputXShape : inputYShape;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; shorterInput = inputXShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= inputYShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()?</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; inputYShape : inputXShape;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::vector&lt;unsigned int&gt; tensorDimensions(outputNumDimensions, 0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNumDimsOffset = longerInput.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() - shorterInput.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; longerInputDataLayout = inputXShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= inputYShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()?</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a> : <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>;</div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">auto</span> longerAxesToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a58a8b597d58396266e06dd2c415154a2">BatchMatMulDescriptor::GetAxesToMul</a>(longerInputDataLayout,</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; longerInput);</div>
-<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
-<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputNumDimensions; ++i)</div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
-<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">if</span> (i == longerAxesToMul.first)</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; tensorDimensions[i] = &amp;shorterInput == &amp;inputXShape ? inputXShape[i - inputNumDimsOffset] : inputXShape[i];</div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i == longerAxesToMul.second)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNumDimensions = longerInput.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; std::vector&lt;unsigned int&gt; tensorDimensions(outputNumDimensions, 0);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; longerInputDataLayout = inputXShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= inputYShape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()?</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a> : <a class="code" href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">m_Param</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">auto</span> longerAxesToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.html#a58a8b597d58396266e06dd2c415154a2">BatchMatMulDescriptor::GetAxesToMul</a>(longerInputDataLayout,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; longerInput);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputNumDimensions; ++i)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (i == longerAxesToMul.first)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; tensorDimensions[i] = &amp;shorterInput == &amp;inputYShape ? inputYShape[i - inputNumDimsOffset] : inputYShape[i];</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; tensorDimensions[i] = &amp;shorterInput == &amp;inputXShape ? inputXShape[i - inputNumDimsOffset] : inputXShape[i];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
-<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">else</span> <span class="comment">// The other dimensions not to be multiplied (but may be broadcasted)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i == longerAxesToMul.second)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// Does NOT validate whether it&#39;s a valid broadcast - that&#39;s done in the validate func in WorkloadData.cpp</span></div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; tensorDimensions[i] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(i) - <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputNumDimsOffset) &lt; 0 ?</div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; longerInput[i] :</div>
-<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::max(longerInput[i], shorterInput[i - inputNumDimsOffset]);</div>
-<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
-<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
-<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
-<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">auto</span> outputShape = <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>(outputNumDimensions, tensorDimensions.data());</div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> std::vector&lt;TensorShape&gt;({ outputShape });</div>
-<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; tensorDimensions[i] = &amp;shorterInput == &amp;inputYShape ? inputYShape[i - inputNumDimsOffset] : inputYShape[i];</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span> <span class="comment">// The other dimensions not to be multiplied (but may be broadcasted)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// Does NOT validate whether it&#39;s a valid broadcast - that&#39;s done in the validate func in WorkloadData.cpp</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; tensorDimensions[i] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(i) - <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputNumDimsOffset) &lt; 0 ?</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; longerInput[i] :</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; std::max(longerInput[i], shorterInput[i - inputNumDimsOffset]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
-<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classarmnn_1_1_batch_mat_mul_layer.html#a8c8f543d7e9729362c266d12ec169966"> 93</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1_batch_mat_mul_layer.html#a8c8f543d7e9729362c266d12ec169966">BatchMatMulLayer::ValidateTensorShapesFromInputs</a>()</div>
-<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div>
-<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#a0607e36e88f38c34c71c663164b76776">VerifyLayerConnections</a>(2, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">auto</span> outputShape = <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>(outputNumDimensions, tensorDimensions.data());</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> std::vector&lt;TensorShape&gt;({ outputShape });</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
-<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; outputShape = <a class="code" href="classarmnn_1_1_layer.html#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_output_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
-<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
-<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#a448afc716fda85394df1e8e5b7d530e8">VerifyShapeInferenceType</a>(outputShape, <a class="code" href="classarmnn_1_1_layer.html#afe508761cc8318b15329ba4acf7fbfec">m_ShapeInferenceMethod</a>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classarmnn_1_1_batch_mat_mul_layer.html#a8c8f543d7e9729362c266d12ec169966"> 97</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1_batch_mat_mul_layer.html#a8c8f543d7e9729362c266d12ec169966">BatchMatMulLayer::ValidateTensorShapesFromInputs</a>()</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#a0607e36e88f38c34c71c663164b76776">VerifyLayerConnections</a>(2, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">auto</span> inferredShapes = <a class="code" href="classarmnn_1_1_batch_mat_mul_layer.html#a65ca562c882ad619684445a1402f415a">InferOutputShapes</a>({</div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0).<a class="code" href="classarmnn_1_1_input_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(),</div>
-<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(1).<a class="code" href="classarmnn_1_1_input_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>() });</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; outputShape = <a class="code" href="classarmnn_1_1_layer.html#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_output_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#a448afc716fda85394df1e8e5b7d530e8">VerifyShapeInferenceType</a>(outputShape, <a class="code" href="classarmnn_1_1_layer.html#afe508761cc8318b15329ba4acf7fbfec">m_ShapeInferenceMethod</a>);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inferredShapes.size() == 1);</div>
-<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
-<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#aeb2d638cc0e02c10075e015100996f2d">ValidateAndCopyShape</a>(outputShape, inferredShapes[0], <a class="code" href="classarmnn_1_1_layer.html#afe508761cc8318b15329ba4acf7fbfec">m_ShapeInferenceMethod</a>, <span class="stringliteral">&quot;BatchMatMulLayer&quot;</span>);</div>
-<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;}</div>
-<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
-<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;} <span class="comment">// namespace armnn</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">auto</span> inferredShapes = <a class="code" href="classarmnn_1_1_batch_mat_mul_layer.html#a65ca562c882ad619684445a1402f415a">InferOutputShapes</a>({</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0).<a class="code" href="classarmnn_1_1_input_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(),</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(1).<a class="code" href="classarmnn_1_1_input_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>() });</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (inferredShapes.size() != 1)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_layer_validation_exception.html">armnn::LayerValidationException</a>(<span class="stringliteral">&quot;inferredShapes has &quot;</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; + std::to_string(inferredShapes.size()) +</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="stringliteral">&quot; elements - should only have 1.&quot;</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classarmnn_1_1_layer.html#aeb2d638cc0e02c10075e015100996f2d">ValidateAndCopyShape</a>(outputShape, inferredShapes[0], <a class="code" href="classarmnn_1_1_layer.html#afe508761cc8318b15329ba4acf7fbfec">m_ShapeInferenceMethod</a>, <span class="stringliteral">&quot;BatchMatMulLayer&quot;</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;}</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;} <span class="comment">// namespace armnn</span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
-<div class="ttc" id="a_assert_8hpp_html_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.html#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_queue_descriptor_html"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_queue_descriptor.html">armnn::BatchMatMulQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.html#l00753">WorkloadData.hpp:753</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_acb441bb8db19bcce78d15cdd8ceb5ea0"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#acb441bb8db19bcce78d15cdd8ceb5ea0">armnn::BatchMatMulDescriptor::m_TransposeX</a></div><div class="ttdeci">bool m_TransposeX</div><div class="ttdoc">Transpose the slices of each input tensor Transpose and Adjoint can not both be set to true for the s...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01612">Descriptors.hpp:1612</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_output_slot_html_ada2ad7d1caeeb4ef6195c8925fad6a65"><div class="ttname"><a href="classarmnn_1_1_output_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">armnn::OutputSlot::GetTensorInfo</a></div><div class="ttdeci">const TensorInfo &amp; GetTensorInfo() const override</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00092">Layer.cpp:92</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_output_slot_html_ada2ad7d1caeeb4ef6195c8925fad6a65"><div class="ttname"><a href="classarmnn_1_1_output_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">armnn::OutputSlot::GetTensorInfo</a></div><div class="ttdeci">const TensorInfo &amp; GetTensorInfo() const override</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00100">Layer.cpp:100</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_a0cf8306be7d301de0f095fff9901a525"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#a0cf8306be7d301de0f095fff9901a525">armnn::BatchMatMulDescriptor::m_AdjointX</a></div><div class="ttdeci">bool m_AdjointX</div><div class="ttdoc">Adjoint the slices of each input tensor Transpose and Adjoint can not both be set to true for the sam...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01617">Descriptors.hpp:1617</a></div></div>
-<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_a58a8b597d58396266e06dd2c415154a2"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#a58a8b597d58396266e06dd2c415154a2">armnn::BatchMatMulDescriptor::GetAxesToMul</a></div><div class="ttdeci">static std::pair&lt; unsigned int, unsigned int &gt; GetAxesToMul(DataLayout dataLayout, const TensorShape &amp;tensorShape)</div><div class="ttdoc">Static helper to get the two axes (for each input) for multiplication.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00484">Descriptors.cpp:484</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html_a8c8f543d7e9729362c266d12ec169966"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html#a8c8f543d7e9729362c266d12ec169966">armnn::BatchMatMulLayer::ValidateTensorShapesFromInputs</a></div><div class="ttdeci">void ValidateTensorShapesFromInputs() override</div><div class="ttdoc">Check if the input tensor shapes will lead to a valid configuration of BatchMatMulLayer.</div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8cpp_source.html#l00093">BatchMatMulLayer.cpp:93</a></div></div>
+<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_a58a8b597d58396266e06dd2c415154a2"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#a58a8b597d58396266e06dd2c415154a2">armnn::BatchMatMulDescriptor::GetAxesToMul</a></div><div class="ttdeci">static std::pair&lt; unsigned int, unsigned int &gt; GetAxesToMul(DataLayout dataLayout, const TensorShape &amp;tensorShape)</div><div class="ttdoc">Static helper to get the two axes (for each input) for multiplication.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00485">Descriptors.cpp:485</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html_a8c8f543d7e9729362c266d12ec169966"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html#a8c8f543d7e9729362c266d12ec169966">armnn::BatchMatMulLayer::ValidateTensorShapesFromInputs</a></div><div class="ttdeci">void ValidateTensorShapesFromInputs() override</div><div class="ttdoc">Check if the input tensor shapes will lead to a valid configuration of BatchMatMulLayer.</div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8cpp_source.html#l00097">BatchMatMulLayer.cpp:97</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_aedca000a005e091c23191e82d7e81b1d"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#aedca000a005e091c23191e82d7e81b1d">armnn::BatchMatMulDescriptor::m_DataLayoutX</a></div><div class="ttdeci">DataLayout m_DataLayoutX</div><div class="ttdoc">Data layout of each input tensor, such as NHWC/NDHWC (leave as default for arbitrary layout)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01621">Descriptors.hpp:1621</a></div></div>
<div class="ttc" id="a_batch_mat_mul_layer_8hpp_html"><div class="ttname"><a href="_batch_mat_mul_layer_8hpp.html">BatchMatMulLayer.hpp</a></div></div>
<div class="ttc" id="a_exceptions_8hpp_html_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00203">Exceptions.hpp:203</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_layer_html_aeb2d638cc0e02c10075e015100996f2d"><div class="ttname"><a href="classarmnn_1_1_layer.html#aeb2d638cc0e02c10075e015100996f2d">armnn::Layer::ValidateAndCopyShape</a></div><div class="ttdeci">void ValidateAndCopyShape(const TensorShape &amp;outputShape, const TensorShape &amp;inferredShape, const ShapeInferenceMethod shapeInferenceMethod, const std::string &amp;layerName, const unsigned int outputSlotIndex=0)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00435">Layer.cpp:435</a></div></div>
-<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_a85e74c2aeaf6fc124e9582329a82d72b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#a85e74c2aeaf6fc124e9582329a82d72b">armnn::BatchMatMulDescriptor::GetPermuteVec</a></div><div class="ttdeci">static PermutationVector GetPermuteVec(DataLayout dataLayout, const TensorShape &amp;tensorShape)</div><div class="ttdoc">Static helper to get the axes which will be transposed.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00522">Descriptors.cpp:522</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_html_aeb2d638cc0e02c10075e015100996f2d"><div class="ttname"><a href="classarmnn_1_1_layer.html#aeb2d638cc0e02c10075e015100996f2d">armnn::Layer::ValidateAndCopyShape</a></div><div class="ttdeci">void ValidateAndCopyShape(const TensorShape &amp;outputShape, const TensorShape &amp;inferredShape, const ShapeInferenceMethod shapeInferenceMethod, const std::string &amp;layerName, const unsigned int outputSlotIndex=0)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00457">Layer.cpp:457</a></div></div>
+<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_a85e74c2aeaf6fc124e9582329a82d72b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#a85e74c2aeaf6fc124e9582329a82d72b">armnn::BatchMatMulDescriptor::GetPermuteVec</a></div><div class="ttdeci">static PermutationVector GetPermuteVec(DataLayout dataLayout, const TensorShape &amp;tensorShape)</div><div class="ttdoc">Static helper to get the axes which will be transposed.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00523">Descriptors.cpp:523</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_html_a0e36688a43c35668d8db5257274c68fe"><div class="ttname"><a href="classarmnn_1_1_layer.html#a0e36688a43c35668d8db5257274c68fe">armnn::Layer::GetOutputSlot</a></div><div class="ttdeci">const OutputSlot &amp; GetOutputSlot(unsigned int index=0) const override</div><div class="ttdoc">Get the const output slot handle by slot index.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.html#l00339">Layer.hpp:339</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_ad945fc98770356dd886a68e98a52e26b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#ad945fc98770356dd886a68e98a52e26b">armnn::BatchMatMulDescriptor::m_AdjointY</a></div><div class="ttdeci">bool m_AdjointY</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01618">Descriptors.hpp:1618</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html_a5a344fd448ac4673a1e63549b54bc181"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html#a5a344fd448ac4673a1e63549b54bc181">armnn::BatchMatMulLayer::Clone</a></div><div class="ttdeci">BatchMatMulLayer * Clone(Graph &amp;graph) const override</div><div class="ttdoc">Creates a dynamically-allocated copy of this layer.</div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8cpp_source.html#l00026">BatchMatMulLayer.cpp:26</a></div></div>
@@ -228,19 +236,20 @@ $(document).ready(function(){initNavTree('_batch_mat_mul_layer_8cpp_source.html'
<div class="ttc" id="a_workload_factory_8hpp_html"><div class="ttname"><a href="_workload_factory_8hpp.html">WorkloadFactory.hpp</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_with_parameters_html"><div class="ttname"><a href="classarmnn_1_1_layer_with_parameters.html">armnn::LayerWithParameters</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_with_parameters_8hpp_source.html#l00014">LayerWithParameters.hpp:14</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_html_a7ddf0cf6f620d59c10e63495ace795d0"><div class="ttname"><a href="classarmnn_1_1_layer.html#a7ddf0cf6f620d59c10e63495ace795d0">armnn::Layer::GetName</a></div><div class="ttdeci">const char * GetName() const override</div><div class="ttdoc">Returns the name of the layer.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.html#l00332">Layer.hpp:332</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_input_slot_html_ada2ad7d1caeeb4ef6195c8925fad6a65"><div class="ttname"><a href="classarmnn_1_1_input_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">armnn::InputSlot::GetTensorInfo</a></div><div class="ttdeci">const TensorInfo &amp; GetTensorInfo() const override</div><div class="ttdoc">Gets the TensorInfo for this InputSlot.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00592">Layer.cpp:592</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_input_slot_html_ada2ad7d1caeeb4ef6195c8925fad6a65"><div class="ttname"><a href="classarmnn_1_1_input_slot.html#ada2ad7d1caeeb4ef6195c8925fad6a65">armnn::InputSlot::GetTensorInfo</a></div><div class="ttdeci">const TensorInfo &amp; GetTensorInfo() const override</div><div class="ttdoc">Gets the TensorInfo for this InputSlot.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00614">Layer.cpp:614</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.html#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_with_parameters_html_ad32ac22bc72e28dfd6b466d143c8e262"><div class="ttname"><a href="classarmnn_1_1_layer_with_parameters.html#ad32ac22bc72e28dfd6b466d143c8e262">armnn::LayerWithParameters&lt; BatchMatMulDescriptor &gt;::m_Param</a></div><div class="ttdeci">BatchMatMulDescriptor m_Param</div><div class="ttdoc">The parameters for the layer (not including tensor-valued weights etc.).</div><div class="ttdef"><b>Definition:</b> <a href="_layer_with_parameters_8hpp_source.html#l00052">LayerWithParameters.hpp:52</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank.</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.html#l00174">Tensor.cpp:174</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_with_parameters_html_a30a858b2b26d651a066537e499fbf40d"><div class="ttname"><a href="classarmnn_1_1_layer_with_parameters.html#a30a858b2b26d651a066537e499fbf40d">armnn::LayerWithParameters&lt; BatchMatMulDescriptor &gt;::PrepInfoAndDesc</a></div><div class="ttdeci">WorkloadInfo PrepInfoAndDesc(QueueDescriptor &amp;descriptor) const</div><div class="ttdoc">Helper function to reduce duplication in *Layer::CreateWorkload.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_with_parameters_8hpp_source.html#l00044">LayerWithParameters.hpp:44</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_a112b466e5d2ab9d1887178adbe3afa1c"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#a112b466e5d2ab9d1887178adbe3afa1c">armnn::BatchMatMulDescriptor::m_TransposeY</a></div><div class="ttdeci">bool m_TransposeY</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01613">Descriptors.hpp:1613</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_validation_exception_html"><div class="ttname"><a href="classarmnn_1_1_layer_validation_exception.html">armnn::LayerValidationException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00105">Exceptions.hpp:105</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html_aaf7828880989b4b9378d3e86aa6dc843"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html#aaf7828880989b4b9378d3e86aa6dc843">armnn::BatchMatMulDescriptor::m_DataLayoutY</a></div><div class="ttdeci">DataLayout m_DataLayoutY</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01622">Descriptors.hpp:1622</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_i_workload_factory_html"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.html">armnn::IWorkloadFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8hpp_source.html#l00022">WorkloadFactory.hpp:22</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html_a65ca562c882ad619684445a1402f415a"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html#a65ca562c882ad619684445a1402f415a">armnn::BatchMatMulLayer::InferOutputShapes</a></div><div class="ttdeci">std::vector&lt; TensorShape &gt; InferOutputShapes(const std::vector&lt; TensorShape &gt; &amp;inputShapes) const override</div><div class="ttdoc">Infers the output shape from the given input shapes.</div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8cpp_source.html#l00033">BatchMatMulLayer.cpp:33</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html_adfa912d0c4c6c00f1af2cbfa799572b7"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html#adfa912d0c4c6c00f1af2cbfa799572b7">armnn::BatchMatMulLayer::CreateWorkload</a></div><div class="ttdeci">virtual std::unique_ptr&lt; IWorkload &gt; CreateWorkload(const IWorkloadFactory &amp;factory) const override</div><div class="ttdoc">Makes a workload for the BatchMatMul type.</div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8cpp_source.html#l00018">BatchMatMulLayer.cpp:18</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_layer_html_a448afc716fda85394df1e8e5b7d530e8"><div class="ttname"><a href="classarmnn_1_1_layer.html#a448afc716fda85394df1e8e5b7d530e8">armnn::Layer::VerifyShapeInferenceType</a></div><div class="ttdeci">void VerifyShapeInferenceType(const TensorShape &amp;outputShape, ShapeInferenceMethod shapeInferenceMethod)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00504">Layer.cpp:504</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_html_a448afc716fda85394df1e8e5b7d530e8"><div class="ttname"><a href="classarmnn_1_1_layer.html#a448afc716fda85394df1e8e5b7d530e8">armnn::Layer::VerifyShapeInferenceType</a></div><div class="ttdeci">void VerifyShapeInferenceType(const TensorShape &amp;outputShape, ShapeInferenceMethod shapeInferenceMethod)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00526">Layer.cpp:526</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_html"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.html">armnn::BatchMatMulDescriptor</a></div><div class="ttdoc">A BatchMatMulDescriptor for the BatchMatMul operator.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01584">Descriptors.hpp:1584</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_layer_html_af7f0460d32511de0da525f1817d13e8c"><div class="ttname"><a href="classarmnn_1_1_layer.html#af7f0460d32511de0da525f1817d13e8c">armnn::Layer::SetAdditionalInfo</a></div><div class="ttdeci">void SetAdditionalInfo(QueueDescriptor &amp;descriptor) const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00287">Layer.cpp:287</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_html_af7f0460d32511de0da525f1817d13e8c"><div class="ttname"><a href="classarmnn_1_1_layer.html#af7f0460d32511de0da525f1817d13e8c">armnn::Layer::SetAdditionalInfo</a></div><div class="ttdeci">void SetAdditionalInfo(QueueDescriptor &amp;descriptor) const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00303">Layer.cpp:303</a></div></div>
<div class="ttc" id="a_permute_8hpp_html"><div class="ttname"><a href="_permute_8hpp.html">Permute.hpp</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_html"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul.html">armnn::BatchMatMul</a></div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_impl_8hpp_source.html#l00016">BatchMatMulImpl.hpp:16</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">armnn::LayerType::BatchMatMul</a></div><div class="ttdeci">@ BatchMatMul</div></div>
@@ -248,7 +257,7 @@ $(document).ready(function(){initNavTree('_batch_mat_mul_layer_8cpp_source.html'
<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html">armnn::BatchMatMulLayer</a></div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8hpp_source.html#l00013">BatchMatMulLayer.hpp:13</a></div></div>
<div class="ttc" id="anamespacearmnn_html"><div class="ttname"><a href="namespacearmnn.html">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors.</div><div class="ttdef"><b>Definition:</b> <a href="01__00__quick__start_8dox_source.html#l00006">01_00_quick_start.dox:6</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_batch_mat_mul_layer_html_adaa2e073b65919375724109581b751c0"><div class="ttname"><a href="classarmnn_1_1_batch_mat_mul_layer.html#adaa2e073b65919375724109581b751c0">armnn::BatchMatMulLayer::BatchMatMulLayer</a></div><div class="ttdeci">BatchMatMulLayer(const BatchMatMulDescriptor &amp;param, const char *name)</div><div class="ttdoc">Constructor to create a BatchMatMulLayer.</div><div class="ttdef"><b>Definition:</b> <a href="_batch_mat_mul_layer_8cpp_source.html#l00014">BatchMatMulLayer.cpp:14</a></div></div>
-<div class="ttc" id="aclassarmnn_1_1_layer_html_a0607e36e88f38c34c71c663164b76776"><div class="ttname"><a href="classarmnn_1_1_layer.html#a0607e36e88f38c34c71c663164b76776">armnn::Layer::VerifyLayerConnections</a></div><div class="ttdeci">void VerifyLayerConnections(unsigned int expectedConnections, const CheckLocation &amp;location) const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00391">Layer.cpp:391</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_html_a0607e36e88f38c34c71c663164b76776"><div class="ttname"><a href="classarmnn_1_1_layer.html#a0607e36e88f38c34c71c663164b76776">armnn::Layer::VerifyLayerConnections</a></div><div class="ttdeci">void VerifyLayerConnections(unsigned int expectedConnections, const CheckLocation &amp;location) const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00410">Layer.cpp:410</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_html_afe508761cc8318b15329ba4acf7fbfec"><div class="ttname"><a href="classarmnn_1_1_layer.html#afe508761cc8318b15329ba4acf7fbfec">armnn::Layer::m_ShapeInferenceMethod</a></div><div class="ttdeci">ShapeInferenceMethod m_ShapeInferenceMethod</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.html#l00441">Layer.hpp:441</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below.</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00491">Types.hpp:491</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_graph_html"><div class="ttname"><a href="classarmnn_1_1_graph.html">armnn::Graph</a></div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00030">Graph.hpp:30</a></div></div>
@@ -258,7 +267,7 @@ $(document).ready(function(){initNavTree('_batch_mat_mul_layer_8cpp_source.html'
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e0a84d05c80a2ef4231141dcbbeac5c8.html">armnn</a></li><li class="navelem"><a class="el" href="dir_9da6642ce0fd5a8c83524f1b621275be.html">layers</a></li><li class="navelem"><a class="el" href="_batch_mat_mul_layer_8cpp.html">BatchMatMulLayer.cpp</a></li>
- <li class="footer">Generated on Wed Feb 14 2024 16:36:14 for Arm NN by
+ <li class="footer">Generated on Thu May 16 2024 09:31:44 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>