blob: 4267adf756bb6c554f201536e86221bc29ba8de0 [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 {
Eric Kunze2364dcd2021-04-26 11:06:57 -0700163 padding: [int32];
164 kernel: [int32];
165 stride: [int32];
166}
167
Kevin Cheng79a41992021-08-31 16:04:40 -0700168table ConvAttribute {
Eric Kunze2364dcd2021-04-26 11:06:57 -0700169 padding: [int32];
170 stride: [int32];
171 dilation: [int32];
172}
173
Kevin Cheng79a41992021-08-31 16:04:40 -0700174table TransposeConvAttribute {
Eric Kunze2364dcd2021-04-26 11:06:57 -0700175 outpad: [int32];
176 stride: [int32];
177 dilation: [int32];
178 output_shape: [int32];
179}
180
Kevin Cheng38d214c2021-10-15 15:49:19 -0700181table PadAttribute {
182 padding: [int32];
183 pad_const_int: int32;
184 pad_const_fp: float;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700185}
186
187table AxisAttribute {
188 axis: int32;
189}
190
191table ReshapeAttribute {
192 shape: [int32];
193}
194
195table SliceAttribute {
196 begin: [int32];
197 size: [int32];
198}
199
200table TileAttribute {
201 multiples: [int32];
202}
203
204table ResizeAttribute {
205 output_size: [int32];
206 stride: [int32];
207 offset: [int32];
208 shift: int32;
209 stride_fp: [float];
210 offset_fp: [float];
211 mode: ResizeMode;
212}
213
214table ClampAttribute {
215 min_int: int32;
216 max_int: int32;
217 min_fp: float;
218 max_fp: float;
219}
220
221table RescaleAttribute {
222 input_zp: int32;
223 output_zp: int32;
224 multiplier: [int32];
225 shift: [int32];
226 scale32: bool;
227 double_round: bool;
228 per_channel: bool;
229}
230
231table MulAttribute {
232 shift: int32;
233}
234
235table ArithmeticRightShiftAttribute {
236 round: bool;
237}
238
239table CondIfAttribute {
240 then_branch: string;
241 else_branch: string;
242}
243
244table WhileLoopAttribute {
245 cond_branch: string;
246 body_branch: string;
247}
248
Kevin Cheng38d214c2021-10-15 15:49:19 -0700249table TransposeAttribute {
250 perm: [int32];
251}
252
253table TableAttribute {
254 table: [int32];
255}
256
Eric Kunze2364dcd2021-04-26 11:06:57 -0700257union QuantInfo {
258 UnaryQuantInfo,
259 ConvQuantInfo,
260 MatMulQuantInfo,
261 PadQuantInfo,
262}
263
264table UnaryQuantInfo {
265 input_zp: int32;
266 output_zp: int32;
267}
268
269table ConvQuantInfo {
270 input_zp: int32;
271 weight_zp: int32;
272}
273
274table MatMulQuantInfo {
275 a_zp: int32;
276 b_zp: int32;
277}
278
279table PadQuantInfo {
280 input_zp: int32;
281}
282
283table Version {
284 _major: int32 = 0;
Eric Kunzea687b612021-11-03 17:02:57 -0700285 _minor: int32 = 24;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700286 _patch: int32 = 0;
Eric Kunzea687b612021-11-03 17:02:57 -0700287 _draft: bool = true;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700288}
289
290table TosaTensor {
Kevin Cheng3bb1bc12021-06-17 15:57:08 -0700291 name:string; // name of the tensor, used for solving dependency
292 shape:[int32]; // shape of the tensor
293 type:DType; // data type of the tensor
294 data: [ubyte] (force_align: 8); // raw data array if it's a constant tensor.
Eric Kunze2364dcd2021-04-26 11:06:57 -0700295}
296
297table TosaOperator {
298 op:Op; // operator enum
299 attribute: Attribute; // union structure. operator attribute
300 inputs:[string]; // list of input tensor names
301 outputs:[string]; // list of output tensor names
302 quant_info: QuantInfo; // op-based quantization information
303}
304
305table TosaBasicBlock {
306 name:string; // basic block name
307 operators:[TosaOperator]; // operators array
308 tensors:[TosaTensor]; // tensors array
309 inputs:[string]; // name of graph inputs
310 outputs:[string]; // name of graph outputs
311}
312
313table TosaGraph {
314 version: Version;
315 blocks:[TosaBasicBlock]; // basic blocks array
316}
317
318root_type TosaGraph;