blob: 7830bd2dc074557ff4513e3a9eb5855a7f6a5784 [file] [log] [blame]
Eric Kunze2364dcd2021-04-26 11:06:57 -07001
2// Copyright (c) 2020-2021, ARM Limited.
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16namespace tosa;
17
18// This corresponds to the version.
19file_identifier "TOSA";
20// File extension of any written files.
21file_extension "tosa";
22
23enum DType:uint32 {
24 UNKNOWN = 0,
25 BOOL,
26 UINT8,
27 INT4,
28 INT8,
29 INT16,
30 INT32,
31 INT48,
32 FLOAT,
Jeremy Johnson41027732022-05-25 17:52:29 +010033 UINT16,
Eric Kunze2364dcd2021-04-26 11:06:57 -070034}
35
36enum ResizeMode:uint32 {
37 UNKNOWN = 0,
38 NEAREST,
39 BILINEAR,
40}
41
42enum Op:uint32 {
43 UNKNOWN = 0,
44
45 // Tensor Operator
46 ARGMAX,
47 AVG_POOL2D,
48 CONV2D,
49 CONV3D,
50 DEPTHWISE_CONV2D,
51 FULLY_CONNECTED,
52 MATMUL,
53 MAX_POOL2D,
54 TRANSPOSE_CONV2D,
55
56 // Activation
57 CLAMP,
Kevin Cheng38d214c2021-10-15 15:49:19 -070058 RESERVED,
Eric Kunze2364dcd2021-04-26 11:06:57 -070059 SIGMOID,
60 TANH,
61
62 // Elementwise-Binary
63 ADD,
64 ARITHMETIC_RIGHT_SHIFT,
65 BITWISE_AND,
66 BITWISE_OR,
67 BITWISE_XOR,
Matthew Haddonab905ec2021-08-23 16:40:57 +010068 INTDIV,
Eric Kunze2364dcd2021-04-26 11:06:57 -070069 LOGICAL_AND,
70 LOGICAL_LEFT_SHIFT,
71 LOGICAL_RIGHT_SHIFT,
72 LOGICAL_OR,
73 LOGICAL_XOR,
74 MAXIMUM,
75 MINIMUM,
76 MUL,
77 POW,
78 SUB,
79 TABLE,
80
81 // Elementwise-Unary
82 ABS,
83 BITWISE_NOT,
84 CEIL,
85 CLZ,
86 EXP,
87 FLOOR,
88 LOG,
89 LOGICAL_NOT,
90 NEGATE,
91 RECIPROCAL,
92 RSQRT,
93
94 // Elementwise-Ternary
95 SELECT,
96
97 // Logical
98 EQUAL,
99 GREATER,
100 GREATER_EQUAL,
101
102 // Reduction
103 REDUCE_ANY,
104 REDUCE_ALL,
105 REDUCE_MAX,
106 REDUCE_MIN,
107 REDUCE_PRODUCT,
108 REDUCE_SUM,
109
110 // Data layout operation
111 CONCAT,
112 PAD,
113 RESHAPE,
114 REVERSE,
115 SLICE,
116 TILE,
117 TRANSPOSE,
118
119 // Gather/scatter operation
120 GATHER,
121 SCATTER,
122
123 // Image
124 RESIZE,
125
126 // Type conversion
127 CAST,
128 RESCALE,
129
130 // Data Nodes
131 CONST,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700132 IDENTITY,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700133
134 // Custom operations
135 CUSTOM,
136
137 // Control flow operators
138 COND_IF,
139 WHILE_LOOP,
140}
141
142union Attribute {
Kevin Cheng79a41992021-08-31 16:04:40 -0700143 PoolAttribute,
144 ConvAttribute,
145 TransposeConvAttribute,
Kevin Cheng38d214c2021-10-15 15:49:19 -0700146 PadAttribute,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700147 AxisAttribute,
148 ReshapeAttribute,
149 SliceAttribute,
150 TileAttribute,
151 ResizeAttribute,
152 ClampAttribute,
153 RescaleAttribute,
154 MulAttribute,
155 ArithmeticRightShiftAttribute,
156 CondIfAttribute,
157 WhileLoopAttribute,
Kevin Cheng38d214c2021-10-15 15:49:19 -0700158 TransposeAttribute,
159 TableAttribute,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700160}
161
Kevin Cheng79a41992021-08-31 16:04:40 -0700162table PoolAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700163 pad: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700164 kernel: [int32];
165 stride: [int32];
166}
167
Kevin Cheng79a41992021-08-31 16:04:40 -0700168table ConvAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700169 pad: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700170 stride: [int32];
171 dilation: [int32];
172}
173
Kevin Cheng79a41992021-08-31 16:04:40 -0700174table TransposeConvAttribute {
Eric Kunze7ffa1ff2022-06-01 17:26:48 -0700175 out_pad: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700176 stride: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700177 output_shape: [int32];
178}
179
Kevin Cheng38d214c2021-10-15 15:49:19 -0700180table PadAttribute {
181 padding: [int32];
182 pad_const_int: int32;
183 pad_const_fp: float;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700184}
185
186table AxisAttribute {
187 axis: int32;
188}
189
190table ReshapeAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700191 new_shape: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700192}
193
194table SliceAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700195 start: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700196 size: [int32];
197}
198
199table TileAttribute {
200 multiples: [int32];
201}
202
203table ResizeAttribute {
204 output_size: [int32];
205 stride: [int32];
206 offset: [int32];
207 shift: int32;
208 stride_fp: [float];
209 offset_fp: [float];
210 mode: ResizeMode;
211}
212
213table ClampAttribute {
214 min_int: int32;
215 max_int: int32;
216 min_fp: float;
217 max_fp: float;
218}
219
220table RescaleAttribute {
221 input_zp: int32;
222 output_zp: int32;
223 multiplier: [int32];
224 shift: [int32];
225 scale32: bool;
226 double_round: bool;
227 per_channel: bool;
228}
229
230table MulAttribute {
231 shift: int32;
232}
233
234table ArithmeticRightShiftAttribute {
235 round: bool;
236}
237
238table CondIfAttribute {
239 then_branch: string;
240 else_branch: string;
241}
242
243table WhileLoopAttribute {
244 cond_branch: string;
245 body_branch: string;
246}
247
Kevin Cheng38d214c2021-10-15 15:49:19 -0700248table TransposeAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700249 perms: [int32];
Kevin Cheng38d214c2021-10-15 15:49:19 -0700250}
251
252table TableAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700253 table: [int16];
Kevin Cheng38d214c2021-10-15 15:49:19 -0700254}
255
Eric Kunze2364dcd2021-04-26 11:06:57 -0700256union QuantInfo {
257 UnaryQuantInfo,
258 ConvQuantInfo,
259 MatMulQuantInfo,
260 PadQuantInfo,
261}
262
263table UnaryQuantInfo {
264 input_zp: int32;
265 output_zp: int32;
266}
267
268table ConvQuantInfo {
269 input_zp: int32;
270 weight_zp: int32;
271}
272
273table MatMulQuantInfo {
274 a_zp: int32;
275 b_zp: int32;
276}
277
278table PadQuantInfo {
279 input_zp: int32;
280}
281
282table Version {
283 _major: int32 = 0;
Eric Kunzee6596402022-06-09 21:27:36 +0000284 _minor: int32 = 25;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700285 _patch: int32 = 0;
Eric Kunzea687b612021-11-03 17:02:57 -0700286 _draft: bool = true;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700287}
288
289table TosaTensor {
Kevin Cheng3bb1bc12021-06-17 15:57:08 -0700290 name:string; // name of the tensor, used for solving dependency
291 shape:[int32]; // shape of the tensor
292 type:DType; // data type of the tensor
293 data: [ubyte] (force_align: 8); // raw data array if it's a constant tensor.
Eric Kunze2364dcd2021-04-26 11:06:57 -0700294}
295
296table TosaOperator {
297 op:Op; // operator enum
298 attribute: Attribute; // union structure. operator attribute
299 inputs:[string]; // list of input tensor names
300 outputs:[string]; // list of output tensor names
301 quant_info: QuantInfo; // op-based quantization information
302}
303
304table TosaBasicBlock {
305 name:string; // basic block name
306 operators:[TosaOperator]; // operators array
307 tensors:[TosaTensor]; // tensors array
308 inputs:[string]; // name of graph inputs
309 outputs:[string]; // name of graph outputs
310}
311
312table TosaGraph {
313 version: Version;
314 blocks:[TosaBasicBlock]; // basic blocks array
315}
316
317root_type TosaGraph;