diff options
Diffstat (limited to '23.02/structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml')
-rw-r--r-- | 23.02/structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml | 303 |
1 files changed, 260 insertions, 43 deletions
diff --git a/23.02/structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml b/23.02/structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml index 5af8749c23..9894d03d56 100644 --- a/23.02/structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml +++ b/23.02/structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.13"/> +<meta name="generator" content="Doxygen 1.8.17"/> <meta name="robots" content="NOINDEX, NOFOLLOW" /> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>ArmNN: BatchMatMulQueueDescriptor Struct Reference</title> @@ -19,9 +19,6 @@ <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtreedata.js"></script> <script type="text/javascript" src="navtree.js"></script> -<script type="text/javascript"> - $(document).ready(initResizable); -</script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/searchdata.js"></script> <script type="text/javascript" src="search/search.js"></script> @@ -30,7 +27,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); -</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script> +</script> +<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> <link href="stylesheet.css" rel="stylesheet" type="text/css"/> </head> @@ -51,18 +49,21 @@ </table> </div> <!-- end header part --> -<!-- Generated by Doxygen 1.8.13 --> +<!-- Generated by Doxygen 1.8.17 --> <script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ var searchBox = new SearchBox("searchBox", "search",false,'Search'); +/* @license-end */ </script> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',true,false,'search.php','Search'); $(document).ready(function() { init_search(); }); }); -</script> +/* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> @@ -76,7 +77,9 @@ $(function() { </div> </div> <script type="text/javascript"> -$(document).ready(function(){initNavTree('structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml','');}); +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +$(document).ready(function(){initNavTree('structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml',''); initResizable(); }); +/* @license-end */ </script> <div id="doc-content"> <!-- window showing the filter options --> @@ -111,8 +114,8 @@ Inheritance diagram for BatchMatMulQueueDescriptor:</div> <map id="BatchMatMulQueueDescriptor_map" name="BatchMatMulQueueDescriptor_map"> <area href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml" alt="QueueDescriptorWithParameters< BatchMatMulDescriptor >" shape="rect" coords="0,56,354,80"/> <area href="structarmnn_1_1_queue_descriptor.xhtml" alt="QueueDescriptor" shape="rect" coords="0,0,354,24"/> -</map> - </div></div> + </map> +</div></div> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> @@ -184,38 +187,223 @@ Additional Inherited Members</h2></td></tr> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="_workload_data_8cpp_source.xhtml#l04053">4053</a> of file <a class="el" href="_workload_data_8cpp_source.xhtml">WorkloadData.cpp</a>.</p> - -<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::Float32</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00467">BatchMatMulDescriptor::GetAxesNotMul()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00459">BatchMatMulDescriptor::GetAxesToMul()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00514">BatchMatMulDescriptor::GetPermuteVec()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo::m_InputTensorInfos</a>, <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo::m_OutputTensorInfos</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::NCDHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::NDHWC</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::NHWC</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::QAsymmU8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::QSymmS16</a>.</p> -<div class="fragment"><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span> {</div><div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>  <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">"BatchMatMulDescriptor"</span>};</div><div class="line"><a name="l04056"></a><span class="lineno"> 4056</span> </div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>  ValidateNumInputs(workloadInfo, descriptorName, 2);</div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>  ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l04059"></a><span class="lineno"> 4059</span> </div><div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>  <span class="comment">// Inputs must be: both 2D+</span></div><div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>  <span class="comment">// For inputs X and Y whose dimensions to be multiplied are (M,N) and (I,J) respectively,</span></div><div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>  <span class="comment">// axes N and I must be the same size</span></div><div class="line"><a name="l04063"></a><span class="lineno"> 4063</span> </div><div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& inputXInfoBeforeParams = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& inputYInfoBeforeParams = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& outputInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>  <span class="comment">// Output info has already been inferred</span></div><div class="line"><a name="l04068"></a><span class="lineno"> 4068</span> </div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>  std::vector<DataType> supportedTypes =</div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>  {</div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>  };</div><div class="line"><a name="l04078"></a><span class="lineno"> 4078</span> </div><div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>  ValidateDataTypes(inputXInfoBeforeParams, supportedTypes, descriptorName);</div><div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>  ValidateDataTypes(inputYInfoBeforeParams, supportedTypes, descriptorName);</div><div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>  ValidateDataTypes(outputInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l04082"></a><span class="lineno"> 4082</span> </div><div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>  <span class="keywordflow">if</span> ((inputXInfoBeforeParams.GetNumDimensions() < 2) ||</div><div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>  (inputYInfoBeforeParams.GetNumDimensions() < 2))</div><div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>  {</div><div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Input tensors are not 2D or greater."</span>);</div><div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>  }</div><div class="line"><a name="l04088"></a><span class="lineno"> 4088</span> </div><div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputXInfoAfterParams;</div><div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputYInfoAfterParams;</div><div class="line"><a name="l04091"></a><span class="lineno"> 4091</span> </div><div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>  <span class="keywordflow">if</span>((<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#acb441bb8db19bcce78d15cdd8ceb5ea0">m_TransposeX</a> && <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a0cf8306be7d301de0f095fff9901a525">m_AdjointX</a>) ||</div><div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>  (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a112b466e5d2ab9d1887178adbe3afa1c">m_TransposeY</a> && <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#ad945fc98770356dd886a68e98a52e26b">m_AdjointY</a>))</div><div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>  {</div><div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>  <span class="stringliteral">": Invalid descriptor parameters - Transpose and Adjoint "</span></div><div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>  <span class="stringliteral">"cannot both be true for a given input tensor."</span>);</div><div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>  }</div><div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>  <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#acb441bb8db19bcce78d15cdd8ceb5ea0">m_TransposeX</a>)</div><div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>  {</div><div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>  inputXInfoAfterParams = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputXInfoBeforeParams,</div><div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>  <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(</div><div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div><div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>  inputXInfoBeforeParams.GetShape()));</div><div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>  }</div><div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a0cf8306be7d301de0f095fff9901a525">m_AdjointX</a>)</div><div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>  {</div><div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>  <span class="keyword">auto</span> axesToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div><div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>  inputXInfoBeforeParams.GetShape());</div><div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>  <span class="keywordflow">if</span>(inputXInfoBeforeParams.GetShape()[axesToMul.first] !=</div><div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>  inputXInfoBeforeParams.GetShape()[axesToMul.second])</div><div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>  {</div><div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>  <span class="stringliteral">": Adjoint is set to true for input tensor X, but the axes to be adjointed are not square."</span> );</div><div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>  }</div><div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>  <span class="comment">// Shape remains the same as it's square</span></div><div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>  inputXInfoAfterParams = inputXInfoBeforeParams;</div><div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>  }</div><div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>  {</div><div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>  inputXInfoAfterParams = inputXInfoBeforeParams;</div><div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>  }</div><div class="line"><a name="l04123"></a><span class="lineno"> 4123</span> </div><div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>  <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a112b466e5d2ab9d1887178adbe3afa1c">m_TransposeY</a>)</div><div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>  {</div><div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>  inputYInfoAfterParams = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputYInfoBeforeParams,</div><div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>  <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(</div><div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div><div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>  inputYInfoBeforeParams.GetShape()));</div><div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>  }</div><div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#ad945fc98770356dd886a68e98a52e26b">m_AdjointY</a>)</div><div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>  {</div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>  <span class="keyword">auto</span> axesToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div><div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>  inputYInfoBeforeParams.GetShape());</div><div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>  <span class="keywordflow">if</span>(inputYInfoBeforeParams.GetShape()[axesToMul.first] !=</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>  inputYInfoBeforeParams.GetShape()[axesToMul.second])</div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>  {</div><div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>  <span class="stringliteral">": Adjoint is set to true for input tensor Y, but the axes to be adjointed are not square."</span> );</div><div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>  }</div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>  <span class="comment">// Shape remains the same as it's square</span></div><div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>  inputYInfoAfterParams = inputYInfoBeforeParams;</div><div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>  }</div><div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>  {</div><div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>  inputYInfoAfterParams = inputYInfoBeforeParams;</div><div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>  }</div><div class="line"><a name="l04148"></a><span class="lineno"> 4148</span> </div><div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>  <span class="keywordflow">switch</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>)</div><div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>  {</div><div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>:</div><div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>:</div><div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>  <span class="keywordflow">if</span>(inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() < 3)</div><div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>  {</div><div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>  <span class="stringliteral">": Input tensor X does not have the correct "</span></div><div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>  <span class="stringliteral">"number of dimensions for the Data Layout that it has been assigned."</span>);</div><div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>  }</div><div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div><div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div><div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>  }</div><div class="line"><a name="l04165"></a><span class="lineno"> 4165</span> </div><div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>  <span class="keywordflow">switch</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>)</div><div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>  {</div><div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>:</div><div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>:</div><div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>  <span class="keywordflow">if</span>(inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() < 3)</div><div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>  {</div><div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>  <span class="stringliteral">": Input tensor Y does not have the correct "</span></div><div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>  <span class="stringliteral">"number of dimensions for the Data Layout that it has been assigned."</span>);</div><div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>  }</div><div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div><div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div><div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>  }</div><div class="line"><a name="l04182"></a><span class="lineno"> 4182</span> </div><div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>  <span class="keyword">auto</span> axesXToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div><div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>  inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div><div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>  <span class="keyword">auto</span> axesYToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div><div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>  inputXInfoBeforeParams.GetShape());</div><div class="line"><a name="l04187"></a><span class="lineno"> 4187</span> </div><div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>  <span class="keywordflow">if</span>(inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[axesXToMul.second]</div><div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>  != inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[axesYToMul.first])</div><div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>  {</div><div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>  <span class="stringliteral">": The final axis of input tensor X must be the same size as "</span></div><div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>  <span class="stringliteral">"the second last axis of input tensor Y."</span>);</div><div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>  }</div><div class="line"><a name="l04195"></a><span class="lineno"> 4195</span> </div><div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>  { <span class="comment">// Separate scope so we don't pollute the rest of the scope with our temp variables</span></div><div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>  <span class="comment">// e.g. NHWC isnt compatible with NCHW as of now</span></div><div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> xLayout = <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>;</div><div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> yLayout = <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>;</div><div class="line"><a name="l04200"></a><span class="lineno"> 4200</span> </div><div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>  <span class="keywordflow">if</span>(xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a> || xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>)</div><div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>  {</div><div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>  <span class="keywordflow">if</span>(yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a> || yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>)</div><div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>  {</div><div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>  <span class="stringliteral">": Invalid input tensor data layout combination."</span>);</div><div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>  }</div><div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>  }</div><div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>  <span class="keywordflow">if</span>(yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a> || yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>)</div><div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>  {</div><div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>  <span class="keywordflow">if</span>(xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a> || xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>)</div><div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>  {</div><div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>  <span class="stringliteral">": Invalid input tensor data layout combination."</span>);</div><div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>  }</div><div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>  }</div><div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>  }</div><div class="line"><a name="l04218"></a><span class="lineno"> 4218</span> </div><div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>  <span class="comment">// Simulate aligning the ends of the matrix dims and prepending 1's to the beginning of the shorter one</span></div><div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputTensorDimSize = std::max(inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>  inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>  <span class="keywordflow">if</span>(outputTensorDimSize-2 > 0)</div><div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>  {</div><div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tiXNotMul = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputTensorDimSize-2),</div><div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tiYNotMul = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputTensorDimSize-2),</div><div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tiOutNotMul = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputTensorDimSize-2),</div><div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l04230"></a><span class="lineno"> 4230</span> </div><div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>  <span class="keyword">auto</span> doAxisExtension = [&](std::vector<unsigned int> axisIndices, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>& ti)</div><div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>  {</div><div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>  <span class="keyword">auto</span> sizeDiff = (outputTensorDimSize-2) - axisIndices.size();</div><div class="line"><a name="l04234"></a><span class="lineno"> 4234</span> </div><div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < sizeDiff; i++)</div><div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>  {</div><div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>  axisIndices.insert(axisIndices.begin(), 1);</div><div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>  }</div><div class="line"><a name="l04239"></a><span class="lineno"> 4239</span> </div><div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < ti.GetNumDimensions(); i++)</div><div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>  {</div><div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>  ti.GetShape()[i] = inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i];</div><div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>  }</div><div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>  };</div><div class="line"><a name="l04245"></a><span class="lineno"> 4245</span> </div><div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>  <span class="keyword">auto</span> axesXNotMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aed81894ad76effd38e1d871af4db0a59">BatchMatMulDescriptor::GetAxesNotMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div><div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>  inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div><div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>  <span class="keyword">auto</span> axesYNotMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aed81894ad76effd38e1d871af4db0a59">BatchMatMulDescriptor::GetAxesNotMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div><div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>  inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div><div class="line"><a name="l04250"></a><span class="lineno"> 4250</span> </div><div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>  doAxisExtension(axesXNotMul, tiXNotMul);</div><div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>  doAxisExtension(axesYNotMul, tiYNotMul);</div><div class="line"><a name="l04253"></a><span class="lineno"> 4253</span> </div><div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < tiOutNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>  {</div><div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>  tiOutNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i] = std::max(tiXNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i],</div><div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>  tiYNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]);</div><div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>  }</div><div class="line"><a name="l04259"></a><span class="lineno"> 4259</span> </div><div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>  ValidateBroadcastTensorShapesMatch(tiXNotMul,</div><div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>  tiYNotMul,</div><div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>  tiOutNotMul,</div><div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>  descriptorName,</div><div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>  <span class="stringliteral">"input_X"</span>,</div><div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>  <span class="stringliteral">"input_Y"</span>);</div><div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>  }</div><div class="line"><a name="l04267"></a><span class="lineno"> 4267</span> }</div><div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_ad945fc98770356dd886a68e98a52e26b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01565">Descriptors.hpp:1565</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_aaf7828880989b4b9378d3e86aa6dc843"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01569">Descriptors.hpp:1569</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00062">Types.hpp:62</a></div></div> -<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape & GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div> -<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_acb441bb8db19bcce78d15cdd8ceb5ea0"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01559">Descriptors.hpp:1559</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_a0cf8306be7d301de0f095fff9901a525"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01564">Descriptors.hpp:1564</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div> -<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_a85e74c2aeaf6fc124e9582329a82d72b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a85e74c2aeaf6fc124e9582329a82d72b">armnn::BatchMatMulDescriptor::GetPermuteVec</a></div><div class="ttdeci">static PermutationVector GetPermuteVec(DataLayout dataLayout, const TensorShape &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.xhtml#l00514">Descriptors.cpp:514</a></div></div> -<div class="ttc" id="structarmnn_1_1_queue_descriptor_with_parameters_xhtml_aad91b9bbf7aa365d304febe79a3d1333"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">armnn::QueueDescriptorWithParameters< BatchMatMulDescriptor >::m_Parameters</a></div><div class="ttdeci">BatchMatMulDescriptor m_Parameters</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00066">WorkloadData.hpp:66</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_aedca000a005e091c23191e82d7e81b1d"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01568">Descriptors.hpp:1568</a></div></div> -<div class="ttc" id="structarmnn_1_1_workload_info_xhtml_ac97905bfa0daab357b91df1347600309"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">armnn::WorkloadInfo::m_InputTensorInfos</a></div><div class="ttdeci">std::vector< TensorInfo > m_InputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo.hpp:18</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::DataLayout::NCDHW</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_aed81894ad76effd38e1d871af4db0a59"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aed81894ad76effd38e1d871af4db0a59">armnn::BatchMatMulDescriptor::GetAxesNotMul</a></div><div class="ttdeci">static std::pair< std::vector< unsigned int >, std::vector< unsigned int > > GetAxesNotMul(const BatchMatMulDescriptor &desc, const TensorShape &inputXShape, const TensorShape &inputYShape)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00467">Descriptors.cpp:467</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_adea0557f6519a2d7f1f1424e3de0fc4a"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">armnn::BatchMatMulDescriptor::GetAxesToMul</a></div><div class="ttdeci">static std::pair< std::pair< unsigned int, unsigned int >, std::pair< unsigned int, unsigned int > > GetAxesToMul(const BatchMatMulDescriptor &desc, const TensorShape &tensorXShape, const TensorShape &tensorYShape)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00459">Descriptors.cpp:459</a></div></div> -<div class="ttc" id="structarmnn_1_1_batch_mat_mul_descriptor_xhtml_a112b466e5d2ab9d1887178adbe3afa1c"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01560">Descriptors.hpp:1560</a></div></div> -<div class="ttc" id="structarmnn_1_1_workload_info_xhtml_a67b178f8a836bc1e52b8de109760adfd"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">armnn::WorkloadInfo::m_OutputTensorInfos</a></div><div class="ttdeci">std::vector< TensorInfo > m_OutputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo.hpp:19</a></div></div> -<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::DataLayout::NDHWC</a></div></div> -<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div> -<div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &srcShape, const armnn::PermutationVector &mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div> -<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div> +<div class="fragment"><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span> {</div> +<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>  <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">"BatchMatMulDescriptor"</span>};</div> +<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>  </div> +<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>  ValidateNumInputs(workloadInfo, descriptorName, 2);</div> +<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>  ValidateNumOutputs(workloadInfo, descriptorName, 1);</div> +<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>  </div> +<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>  <span class="comment">// Inputs must be: both 2D+</span></div> +<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>  <span class="comment">// For inputs X and Y whose dimensions to be multiplied are (M,N) and (I,J) respectively,</span></div> +<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>  <span class="comment">// axes N and I must be the same size</span></div> +<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>  </div> +<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& inputXInfoBeforeParams = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div> +<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& inputYInfoBeforeParams = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div> +<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& outputInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div> +<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>  <span class="comment">// Output info has already been inferred</span></div> +<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>  </div> +<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>  std::vector<DataType> supportedTypes =</div> +<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>  {</div> +<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div> +<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div> +<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div> +<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div> +<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div> +<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div> +<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>  };</div> +<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>  </div> +<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>  ValidateDataTypes(inputXInfoBeforeParams, supportedTypes, descriptorName);</div> +<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>  ValidateDataTypes(inputYInfoBeforeParams, supportedTypes, descriptorName);</div> +<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>  ValidateDataTypes(outputInfo, supportedTypes, descriptorName);</div> +<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>  </div> +<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>  <span class="keywordflow">if</span> ((inputXInfoBeforeParams.GetNumDimensions() < 2) ||</div> +<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>  (inputYInfoBeforeParams.GetNumDimensions() < 2))</div> +<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>  {</div> +<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">": Input tensors are not 2D or greater."</span>);</div> +<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>  }</div> +<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>  </div> +<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputXInfoAfterParams;</div> +<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputYInfoAfterParams;</div> +<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>  </div> +<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>  <span class="keywordflow">if</span>((<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#acb441bb8db19bcce78d15cdd8ceb5ea0">m_TransposeX</a> && <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a0cf8306be7d301de0f095fff9901a525">m_AdjointX</a>) ||</div> +<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>  (<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a112b466e5d2ab9d1887178adbe3afa1c">m_TransposeY</a> && <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#ad945fc98770356dd886a68e98a52e26b">m_AdjointY</a>))</div> +<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>  {</div> +<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>  <span class="stringliteral">": Invalid descriptor parameters - Transpose and Adjoint "</span></div> +<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>  <span class="stringliteral">"cannot both be true for a given input tensor."</span>);</div> +<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>  }</div> +<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>  <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#acb441bb8db19bcce78d15cdd8ceb5ea0">m_TransposeX</a>)</div> +<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>  {</div> +<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>  inputXInfoAfterParams = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputXInfoBeforeParams,</div> +<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>  <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(</div> +<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div> +<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>  inputXInfoBeforeParams.GetShape()));</div> +<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>  }</div> +<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a0cf8306be7d301de0f095fff9901a525">m_AdjointX</a>)</div> +<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>  {</div> +<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>  <span class="keyword">auto</span> axesToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div> +<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>  inputXInfoBeforeParams.GetShape());</div> +<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>  <span class="keywordflow">if</span>(inputXInfoBeforeParams.GetShape()[axesToMul.first] !=</div> +<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>  inputXInfoBeforeParams.GetShape()[axesToMul.second])</div> +<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>  {</div> +<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>  <span class="stringliteral">": Adjoint is set to true for input tensor X, but the axes to be adjointed are not square."</span> );</div> +<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>  }</div> +<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>  <span class="comment">// Shape remains the same as it's square</span></div> +<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>  inputXInfoAfterParams = inputXInfoBeforeParams;</div> +<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>  }</div> +<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>  {</div> +<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>  inputXInfoAfterParams = inputXInfoBeforeParams;</div> +<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>  }</div> +<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>  </div> +<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>  <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a112b466e5d2ab9d1887178adbe3afa1c">m_TransposeY</a>)</div> +<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>  {</div> +<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>  inputYInfoAfterParams = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputYInfoBeforeParams,</div> +<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>  <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a85e74c2aeaf6fc124e9582329a82d72b">BatchMatMulDescriptor::GetPermuteVec</a>(</div> +<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>  <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div> +<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>  inputYInfoBeforeParams.GetShape()));</div> +<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>  }</div> +<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#ad945fc98770356dd886a68e98a52e26b">m_AdjointY</a>)</div> +<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>  {</div> +<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>  <span class="keyword">auto</span> axesToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div> +<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>  inputYInfoBeforeParams.GetShape());</div> +<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>  <span class="keywordflow">if</span>(inputYInfoBeforeParams.GetShape()[axesToMul.first] !=</div> +<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>  inputYInfoBeforeParams.GetShape()[axesToMul.second])</div> +<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>  {</div> +<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>  <span class="stringliteral">": Adjoint is set to true for input tensor Y, but the axes to be adjointed are not square."</span> );</div> +<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>  }</div> +<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>  <span class="comment">// Shape remains the same as it's square</span></div> +<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>  inputYInfoAfterParams = inputYInfoBeforeParams;</div> +<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>  }</div> +<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>  {</div> +<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>  inputYInfoAfterParams = inputYInfoBeforeParams;</div> +<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>  }</div> +<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>  </div> +<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>  <span class="keywordflow">switch</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>)</div> +<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>  {</div> +<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>:</div> +<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>:</div> +<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>  <span class="keywordflow">if</span>(inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() < 3)</div> +<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>  {</div> +<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>  <span class="stringliteral">": Input tensor X does not have the correct "</span></div> +<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>  <span class="stringliteral">"number of dimensions for the Data Layout that it has been assigned."</span>);</div> +<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>  }</div> +<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div> +<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div> +<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>  }</div> +<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>  </div> +<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>  <span class="keywordflow">switch</span>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>)</div> +<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>  {</div> +<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>:</div> +<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>:</div> +<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>  <span class="keywordflow">if</span>(inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() < 3)</div> +<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>  {</div> +<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>  <span class="stringliteral">": Input tensor Y does not have the correct "</span></div> +<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>  <span class="stringliteral">"number of dimensions for the Data Layout that it has been assigned."</span>);</div> +<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>  }</div> +<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div> +<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div> +<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>  }</div> +<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>  </div> +<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>  <span class="keyword">auto</span> axesXToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div> +<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>  inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div> +<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>  <span class="keyword">auto</span> axesYToMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">BatchMatMulDescriptor::GetAxesToMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div> +<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>  inputXInfoBeforeParams.GetShape());</div> +<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>  </div> +<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>  <span class="keywordflow">if</span>(inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[axesXToMul.second]</div> +<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>  != inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[axesYToMul.first])</div> +<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>  {</div> +<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>  <span class="stringliteral">": The final axis of input tensor X must be the same size as "</span></div> +<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>  <span class="stringliteral">"the second last axis of input tensor Y."</span>);</div> +<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>  }</div> +<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>  </div> +<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>  { <span class="comment">// Separate scope so we don't pollute the rest of the scope with our temp variables</span></div> +<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>  <span class="comment">// e.g. NHWC isnt compatible with NCHW as of now</span></div> +<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> xLayout = <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>;</div> +<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> yLayout = <a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>;</div> +<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>  </div> +<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>  <span class="keywordflow">if</span>(xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a> || xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>)</div> +<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>  {</div> +<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>  <span class="keywordflow">if</span>(yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a> || yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>)</div> +<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>  {</div> +<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>  <span class="stringliteral">": Invalid input tensor data layout combination."</span>);</div> +<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>  }</div> +<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>  }</div> +<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>  <span class="keywordflow">if</span>(yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a> || yLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">DataLayout::NCDHW</a>)</div> +<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>  {</div> +<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>  <span class="keywordflow">if</span>(xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a> || xLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">DataLayout::NDHWC</a>)</div> +<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>  {</div> +<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div> +<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>  <span class="stringliteral">": Invalid input tensor data layout combination."</span>);</div> +<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>  }</div> +<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>  }</div> +<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>  }</div> +<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>  </div> +<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>  <span class="comment">// Simulate aligning the ends of the matrix dims and prepending 1's to the beginning of the shorter one</span></div> +<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputTensorDimSize = std::max(inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div> +<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>  inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div> +<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>  <span class="keywordflow">if</span>(outputTensorDimSize-2 > 0)</div> +<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>  {</div> +<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tiXNotMul = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputTensorDimSize-2),</div> +<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div> +<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tiYNotMul = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputTensorDimSize-2),</div> +<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div> +<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tiOutNotMul = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputTensorDimSize-2),</div> +<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div> +<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>  </div> +<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>  <span class="keyword">auto</span> doAxisExtension = [&](std::vector<unsigned int> axisIndices, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>& ti)</div> +<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>  {</div> +<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>  <span class="keyword">auto</span> sizeDiff = (outputTensorDimSize-2) - axisIndices.size();</div> +<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>  </div> +<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < sizeDiff; i++)</div> +<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>  {</div> +<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>  axisIndices.insert(axisIndices.begin(), 1);</div> +<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>  }</div> +<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>  </div> +<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < ti.GetNumDimensions(); i++)</div> +<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>  {</div> +<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>  ti.GetShape()[i] = inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i];</div> +<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>  }</div> +<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>  };</div> +<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>  </div> +<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>  <span class="keyword">auto</span> axesXNotMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aed81894ad76effd38e1d871af4db0a59">BatchMatMulDescriptor::GetAxesNotMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aedca000a005e091c23191e82d7e81b1d">m_DataLayoutX</a>,</div> +<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>  inputXInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div> +<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>  <span class="keyword">auto</span> axesYNotMul = <a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aed81894ad76effd38e1d871af4db0a59">BatchMatMulDescriptor::GetAxesNotMul</a>(<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aaf7828880989b4b9378d3e86aa6dc843">m_DataLayoutY</a>,</div> +<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>  inputYInfoAfterParams.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div> +<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>  </div> +<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>  doAxisExtension(axesXNotMul, tiXNotMul);</div> +<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>  doAxisExtension(axesYNotMul, tiYNotMul);</div> +<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>  </div> +<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < tiOutNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div> +<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>  {</div> +<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>  tiOutNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i] = std::max(tiXNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i],</div> +<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>  tiYNotMul.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]);</div> +<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>  }</div> +<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span>  </div> +<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>  ValidateBroadcastTensorShapesMatch(tiXNotMul,</div> +<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>  tiYNotMul,</div> +<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>  tiOutNotMul,</div> +<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>  descriptorName,</div> +<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>  <span class="stringliteral">"input_X"</span>,</div> +<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>  <span class="stringliteral">"input_Y"</span>);</div> +<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>  }</div> +<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span> }</div> </div><!-- fragment --> +<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::Float32</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00467">BatchMatMulDescriptor::GetAxesNotMul()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00459">BatchMatMulDescriptor::GetAxesToMul()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00514">BatchMatMulDescriptor::GetPermuteVec()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01564">BatchMatMulDescriptor::m_AdjointX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01565">BatchMatMulDescriptor::m_AdjointY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01568">BatchMatMulDescriptor::m_DataLayoutX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01569">BatchMatMulDescriptor::m_DataLayoutY</a>, <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo::m_InputTensorInfos</a>, <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo::m_OutputTensorInfos</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">QueueDescriptorWithParameters< BatchMatMulDescriptor >::m_Parameters</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01559">BatchMatMulDescriptor::m_TransposeX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01560">BatchMatMulDescriptor::m_TransposeY</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::NCDHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::NDHWC</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::NHWC</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::QAsymmU8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::QSymmS16</a>.</p> + </div> </div> <hr/>The documentation for this struct was generated from the following files:<ul> @@ -224,13 +412,42 @@ Additional Inherited Members</h2></td></tr> </ul> </div><!-- contents --> </div><!-- doc-content --> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_acb441bb8db19bcce78d15cdd8ceb5ea0"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01559">Descriptors.hpp:1559</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div><div class="ttdeci">@ QAsymmU8</div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00062">Types.hpp:62</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div><div class="ttdeci">@ Float16</div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div><div class="ttdeci">@ QAsymmS8</div></div> +<div class="ttc" id="anamespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &srcShape, const armnn::PermutationVector &mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div> +<div class="ttc" id="aclassarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div><div class="ttdeci">@ NCHW</div></div> +<div class="ttc" id="astructarmnn_1_1_workload_info_xhtml_a67b178f8a836bc1e52b8de109760adfd"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">armnn::WorkloadInfo::m_OutputTensorInfos</a></div><div class="ttdeci">std::vector< TensorInfo > m_OutputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo.hpp:19</a></div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_aedca000a005e091c23191e82d7e81b1d"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01568">Descriptors.hpp:1568</a></div></div> +<div class="ttc" id="aclassarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::DataLayout::NCDHW</a></div><div class="ttdeci">@ NCDHW</div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div><div class="ttdeci">@ Float32</div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_a112b466e5d2ab9d1887178adbe3afa1c"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01560">Descriptors.hpp:1560</a></div></div> +<div class="ttc" id="aclassarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div> +<div class="ttc" id="aclassarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape & GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div><div class="ttdeci">@ NHWC</div></div> +<div class="ttc" id="astructarmnn_1_1_queue_descriptor_with_parameters_xhtml_aad91b9bbf7aa365d304febe79a3d1333"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">armnn::QueueDescriptorWithParameters< BatchMatMulDescriptor >::m_Parameters</a></div><div class="ttdeci">BatchMatMulDescriptor m_Parameters</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00066">WorkloadData.hpp:66</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div><div class="ttdeci">@ BFloat16</div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_aaf7828880989b4b9378d3e86aa6dc843"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01569">Descriptors.hpp:1569</a></div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div><div class="ttdeci">@ QSymmS16</div></div> +<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::DataLayout::NDHWC</a></div><div class="ttdeci">@ NDHWC</div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_a85e74c2aeaf6fc124e9582329a82d72b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#a85e74c2aeaf6fc124e9582329a82d72b">armnn::BatchMatMulDescriptor::GetPermuteVec</a></div><div class="ttdeci">static PermutationVector GetPermuteVec(DataLayout dataLayout, const TensorShape &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.xhtml#l00514">Descriptors.cpp:514</a></div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_ad945fc98770356dd886a68e98a52e26b"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01565">Descriptors.hpp:1565</a></div></div> +<div class="ttc" id="aclassarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_a0cf8306be7d301de0f095fff9901a525"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#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.xhtml#l01564">Descriptors.hpp:1564</a></div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_adea0557f6519a2d7f1f1424e3de0fc4a"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#adea0557f6519a2d7f1f1424e3de0fc4a">armnn::BatchMatMulDescriptor::GetAxesToMul</a></div><div class="ttdeci">static std::pair< std::pair< unsigned int, unsigned int >, std::pair< unsigned int, unsigned int > > GetAxesToMul(const BatchMatMulDescriptor &desc, const TensorShape &tensorXShape, const TensorShape &tensorYShape)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00459">Descriptors.cpp:459</a></div></div> +<div class="ttc" id="astructarmnn_1_1_workload_info_xhtml_ac97905bfa0daab357b91df1347600309"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">armnn::WorkloadInfo::m_InputTensorInfos</a></div><div class="ttdeci">std::vector< TensorInfo > m_InputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo.hpp:18</a></div></div> +<div class="ttc" id="astructarmnn_1_1_batch_mat_mul_descriptor_xhtml_aed81894ad76effd38e1d871af4db0a59"><div class="ttname"><a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#aed81894ad76effd38e1d871af4db0a59">armnn::BatchMatMulDescriptor::GetAxesNotMul</a></div><div class="ttdeci">static std::pair< std::vector< unsigned int >, std::vector< unsigned int > > GetAxesNotMul(const BatchMatMulDescriptor &desc, const TensorShape &inputXShape, const TensorShape &inputYShape)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00467">Descriptors.cpp:467</a></div></div> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="navelem"><a class="el" href="namespacearmnn.xhtml">armnn</a></li><li class="navelem"><a class="el" href="structarmnn_1_1_batch_mat_mul_queue_descriptor.xhtml">BatchMatMulQueueDescriptor</a></li> - <li class="footer">Generated on Fri Feb 24 2023 10:24:29 for ArmNN by + <li class="footer">Generated on Wed Mar 22 2023 15:53:04 for ArmNN by <a href="http://www.doxygen.org/index.html"> - <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li> + <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li> </ul> </div> </body> |