aboutsummaryrefslogtreecommitdiff
path: root/tosa.xml
diff options
context:
space:
mode:
authorDominic Symes <dominic.symes@arm.com>2023-05-09 10:14:49 +0100
committerDominic Symes <dominic.symes@arm.com>2023-08-16 11:50:24 +0100
commit830b43b1d1bd82edd57dee1f5cac12e2b5cf0e04 (patch)
tree971d15dc6ae00118d7be2df9a50dd7445d8428d9 /tosa.xml
parente1f517c541a61d18defc671028b24824c1eadd57 (diff)
downloadspecification-830b43b1d1bd82edd57dee1f5cac12e2b5cf0e04.tar.gz
Add DIM operator and operations on shape_t values
Shape inference derives the shape of tensors in the graph from input shapes. Operations such as RESHAPE may need calculations to derive the new tensor shape. This patch: - Adds a DIM operator to get the size of a tensor in a given axis as a rank 0 tensor of type shape_t - Allows RESHAPE to take a 1D shape tensor as input for the new shape - Allows RESIZE, TILE, PAD to take input sizes based on shape tensors. - Allows ADD, SUB, MUL, INTDIV to operate on rank 0 shape_t tensors - Allows CONCAT to concatenate 0D shape_t tensors to a 1D shape_t tensor - Adds CONST support for shape_t tensors In this version of the specification shape tensors must be resolvable to constants at backend compile time. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I484bd44452453b5e05d0d8a82689564587b224e4
Diffstat (limited to 'tosa.xml')
-rw-r--r--tosa.xml60
1 files changed, 52 insertions, 8 deletions
diff --git a/tosa.xml b/tosa.xml
index 40128f7..d3889a2 100644
--- a/tosa.xml
+++ b/tosa.xml
@@ -773,6 +773,7 @@
<type name='in_out_t'/>
</types>
<typesupport mode="signed 32" in_out_t="int32_t"/>
+ <typesupport mode="shape" in_out_t="shape_t"/>
<typesupport mode="fp16" in_out_t="fp16_t" >
<profile name="MI"/>
<profile name="MT"/>
@@ -907,6 +908,7 @@
<type name='in_out_t'/>
</types>
<typesupport mode="signed 32" in_out_t="int32_t"/>
+ <typesupport mode="shape" in_out_t="shape_t"/>
</operator>
<operator>
<name>LOGICAL_AND</name>
@@ -1118,6 +1120,7 @@
<typesupport mode="signed 8" in_t="int8_t" out_t="int32_t"/>
<typesupport mode="signed 16" in_t="int16_t" out_t="int32_t"/>
<typesupport mode="signed 32" in_t="int32_t" out_t="int32_t"/>
+ <typesupport mode="shape" in_t="shape_t" out_t="shape_t"/>
<typesupport mode="fp16" in_t="fp16_t" out_t="fp16_t">
<profile name="MI"/>
<profile name="MT"/>
@@ -1185,6 +1188,7 @@
<type name='in_out_t'/>
</types>
<typesupport mode="signed 32" in_out_t="int32_t"/>
+ <typesupport mode="shape" in_out_t="shape_t"/>
<typesupport mode="fp16" in_out_t="fp16_t" >
<profile name="MI"/>
<profile name="MT"/>
@@ -1863,7 +1867,7 @@
<arguments>
<argument category="input" name="input1" type="tensor_list_t" shape="shapes1" tensor-element-type="in_out_t">
<description>List of input tensors. All inputs must have the same rank and data type</description>
- <rank min="1" max="MAX_RANK"/>
+ <rank min="0" max="MAX_RANK"/>
</argument>
<argument category="attribute" name="axis" type="tensor_t" shape="-" tensor-element-type="int32_t">
<description>Axis along which concatenation is to occur, in range from 0 to rank(shape)-1</description>
@@ -1882,6 +1886,7 @@
<typesupport mode="signed 8" in_out_t="int8_t"/>
<typesupport mode="signed 16" in_out_t="int16_t"/>
<typesupport mode="signed 32" in_out_t="int32_t"/>
+ <typesupport mode="shape" in_out_t="shape_t"/>
<typesupport mode="fp16" in_out_t="fp16_t">
<profile name="MI"/>
<profile name="MT"/>
@@ -1902,7 +1907,7 @@
<description>Input tensor</description>
<rank min="1" max="MAX_RANK"/>
</argument>
- <argument category="attribute" name="padding" type="tensor_t" shape="[rank(shape1),2]" tensor-element-type="int32_t">
+ <argument category="input" name="padding" type="tensor_t" shape="[rank(shape1),2]" tensor-element-type="shape_t">
<description>Number of pad elements at the start and end of each dimension</description>
<rank min="2" max="2"/>
</argument>
@@ -1937,6 +1942,43 @@
</typesupport>
</operator>
<operator>
+ <name>DIM</name>
+ <arguments>
+ <argument category="input" name="input1" type="tensor_t" shape="shape" tensor-element-type="in_t">
+ <description>Input tensor</description>
+ <levellimit value="rank(shape)" limit="MAX_RANK"/>
+ <rank min="1" max="MAX_RANK"/>
+ </argument>
+ <argument category="attribute" name="axis" type="tensor_t" shape="-" tensor-element-type="int32_t">
+ <description>Axis in range from 0 to rank(shape) - 1</description>
+ <rank min="0" max="0"/>
+ </argument>
+ <argument category="output" name="output" type="tensor_t" shape="-" tensor-element-type="shape_t" >
+ <description>Output rank 0 tensor giving the size of the shape for the given axis</description>
+ <rank min="0" max="0"/>
+ </argument>
+ </arguments>
+ <types>
+ <type name='in_t'/>
+ </types>
+ <typesupport mode="boolean" in_t="bool_t"/>
+ <typesupport mode="signed 8" in_t="int8_t"/>
+ <typesupport mode="signed 16" in_t="int16_t"/>
+ <typesupport mode="signed 32" in_t="int32_t"/>
+ <typesupport mode="fp16" in_t="fp16_t">
+ <profile name="MI"/>
+ <profile name="MT"/>
+ </typesupport>
+ <typesupport mode="bf16" in_t="bf16_t">
+ <profile name="MI"/>
+ <profile name="MT"/>
+ </typesupport>
+ <typesupport mode="fp32" in_t="fp32_t">
+ <profile name="MI"/>
+ <profile name="MT"/>
+ </typesupport>
+ </operator>
+ <operator>
<name>RESHAPE</name>
<arguments>
<argument category="input" name="input1" type="tensor_t" shape="shape1" tensor-element-type="in_out_t">
@@ -1944,8 +1986,8 @@
<levellimit value="rank(shape1)" limit="MAX_RANK"/>
<rank min="1" max="MAX_RANK"/>
</argument>
- <argument category="attribute" name="new_shape" type="tensor_t" shape="[rank(shape)]" tensor-element-type="int32_t">
- <description>List of values, with each element giving the size of the result tensor for the given dimension. At most one dimension may be given as -1 to automatically calculate the dimension size.</description>
+ <argument category="input" name="shape" type="tensor_t" shape="[rank(shape)]" tensor-element-type="shape_t">
+ <description>1D shape tensor giving the new shape.</description>
<rank min="1" max="1"/>
</argument>
<argument category="output" name="output" type="tensor_t" shape="shape" tensor-element-type="in_out_t">
@@ -1998,6 +2040,7 @@
<typesupport mode="signed 8" in_out_t="int8_t"/>
<typesupport mode="signed 16" in_out_t="int16_t"/>
<typesupport mode="signed 32" in_out_t="int32_t"/>
+ <typesupport mode="shape" in_out_t="shape_t"/>
<typesupport mode="fp16" in_out_t="fp16_t">
<profile name="MI"/>
<profile name="MT"/>
@@ -2060,7 +2103,7 @@ used.</description>
<description>Input tensor</description>
<rank min="1" max="MAX_RANK"/>
</argument>
- <argument category="attribute" name="multiples" type="tensor_t" shape="[rank(shape1)]" tensor-element-type="int32_t">
+ <argument category="input" name="multiples" type="tensor_t" shape="[rank(shape1)]" tensor-element-type="shape_t">
<description>Number of times to replicate input1 in each dimension</description>
<rank min="1" max="1"/>
</argument>
@@ -2212,17 +2255,17 @@ used.</description>
<description>Input tensor</description>
<rank min="4" max="4"/>
</argument>
- <argument category="attribute" name="scale" type="tensor_t" shape="[4]" tensor-element-type="int16_t">
+ <argument category="input" name="scale" type="tensor_t" shape="[4]" tensor-element-type="shape_t">
<description>[scale_y_n, scale_y_d, scale_x_n, scale_x_d]</description>
<levellimit value="scale_y_n/scale_y_d" limit="MAX_SCALE"/>
<levellimit value="scale_x_n/scale_x_d" limit="MAX_SCALE"/>
<rank min="1" max="1"/>
</argument>
- <argument category="attribute" name="offset" type="tensor_t" shape="[2]" tensor-element-type="int16_t">
+ <argument category="input" name="offset" type="tensor_t" shape="[2]" tensor-element-type="shape_t">
<description>[offset_y, offset_x]</description>
<rank min="1" max="1"/>
</argument>
- <argument category="attribute" name="border" type="tensor_t" shape="[2]" tensor-element-type="int16_t">
+ <argument category="input" name="border" type="tensor_t" shape="[2]" tensor-element-type="shape_t">
<description>[border_y, border_x]</description>
<rank min="1" max="1"/>
</argument>
@@ -2464,6 +2507,7 @@ used.</description>
<typesupport mode="signed 16" out_t="int16_t" />
<typesupport mode="signed 32" out_t="int32_t" />
<typesupport mode="signed 48" out_t="int48_t" />
+ <typesupport mode="shape" out_t="shape_t" />
<typesupport mode="fp16" out_t="fp16_t" >
<profile name="MI"/>
<profile name="MT"/>