blob: e37c89aa22d34df845210376b97884741113fbfc [file] [log] [blame]
Eric Kunze2364dcd2021-04-26 11:06:57 -07001
Tai Ly5d580fa2023-12-15 20:34:51 +00002// Copyright (c) 2020-2024, ARM Limited.
Eric Kunze2364dcd2021-04-26 11:06:57 -07003//
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
Luke Hutton5e268092023-01-12 22:20:53 +000023// NOTE: New values added to the schema should be placed
24// at the end of the list in order to keep schema stable.
25
Eric Kunze2364dcd2021-04-26 11:06:57 -070026enum DType:uint32 {
27 UNKNOWN = 0,
28 BOOL,
29 UINT8,
30 INT4,
31 INT8,
32 INT16,
33 INT32,
34 INT48,
Jeremy Johnsone1072a92022-09-27 12:44:11 +010035 FP32,
Jeremy Johnson41027732022-05-25 17:52:29 +010036 UINT16,
James Ward485a11d2022-08-05 13:48:37 +010037 FP16,
James Ward34a62792022-10-18 17:27:40 +010038 BF16,
Won Jeoncb4bbf42023-08-10 08:50:15 +000039 SHAPE,
Won Jeona029f1f2023-12-29 22:43:11 +000040 FP8E4M3,
41 FP8E5M2,
Eric Kunze2364dcd2021-04-26 11:06:57 -070042}
43
44enum ResizeMode:uint32 {
45 UNKNOWN = 0,
46 NEAREST,
47 BILINEAR,
48}
49
50enum Op:uint32 {
51 UNKNOWN = 0,
Eric Kunze2364dcd2021-04-26 11:06:57 -070052 ARGMAX,
53 AVG_POOL2D,
54 CONV2D,
55 CONV3D,
56 DEPTHWISE_CONV2D,
57 FULLY_CONNECTED,
58 MATMUL,
59 MAX_POOL2D,
60 TRANSPOSE_CONV2D,
Eric Kunze2364dcd2021-04-26 11:06:57 -070061 CLAMP,
Kevin Cheng38d214c2021-10-15 15:49:19 -070062 RESERVED,
Eric Kunze2364dcd2021-04-26 11:06:57 -070063 SIGMOID,
64 TANH,
Eric Kunze2364dcd2021-04-26 11:06:57 -070065 ADD,
66 ARITHMETIC_RIGHT_SHIFT,
67 BITWISE_AND,
68 BITWISE_OR,
69 BITWISE_XOR,
Matthew Haddonab905ec2021-08-23 16:40:57 +010070 INTDIV,
Eric Kunze2364dcd2021-04-26 11:06:57 -070071 LOGICAL_AND,
72 LOGICAL_LEFT_SHIFT,
73 LOGICAL_RIGHT_SHIFT,
74 LOGICAL_OR,
75 LOGICAL_XOR,
76 MAXIMUM,
77 MINIMUM,
78 MUL,
79 POW,
80 SUB,
81 TABLE,
Eric Kunze2364dcd2021-04-26 11:06:57 -070082 ABS,
83 BITWISE_NOT,
84 CEIL,
85 CLZ,
86 EXP,
87 FLOOR,
88 LOG,
89 LOGICAL_NOT,
90 NEGATE,
91 RECIPROCAL,
92 RSQRT,
Eric Kunze2364dcd2021-04-26 11:06:57 -070093 SELECT,
Eric Kunze2364dcd2021-04-26 11:06:57 -070094 EQUAL,
95 GREATER,
96 GREATER_EQUAL,
Eric Kunze2364dcd2021-04-26 11:06:57 -070097 REDUCE_ANY,
98 REDUCE_ALL,
99 REDUCE_MAX,
100 REDUCE_MIN,
101 REDUCE_PRODUCT,
102 REDUCE_SUM,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700103 CONCAT,
104 PAD,
105 RESHAPE,
106 REVERSE,
107 SLICE,
108 TILE,
109 TRANSPOSE,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700110 GATHER,
111 SCATTER,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700112 RESIZE,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700113 CAST,
114 RESCALE,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700115 CONST,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700116 IDENTITY,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700117 CUSTOM,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700118 COND_IF,
119 WHILE_LOOP,
Luke Hutton5e268092023-01-12 22:20:53 +0000120 FFT2D,
121 RFFT2D,
Won Jeon3acb1cb2023-06-07 23:26:32 +0000122 ERF,
Won Jeoncb4bbf42023-08-10 08:50:15 +0000123 DIM,
Tai Ly5d580fa2023-12-15 20:34:51 +0000124 CONST_SHAPE,
125 CONCAT_SHAPE,
126 ADD_SHAPE,
127 SUB_SHAPE,
128 MUL_SHAPE,
129 DIV_SHAPE,
Jerry Ge61a83132024-02-20 19:03:06 +0000130 COS,
131 SIN,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700132}
133
134union Attribute {
Kevin Cheng79a41992021-08-31 16:04:40 -0700135 PoolAttribute,
136 ConvAttribute,
137 TransposeConvAttribute,
Kevin Cheng38d214c2021-10-15 15:49:19 -0700138 PadAttribute,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700139 AxisAttribute,
140 ReshapeAttribute,
141 SliceAttribute,
142 TileAttribute,
143 ResizeAttribute,
144 ClampAttribute,
145 RescaleAttribute,
146 MulAttribute,
147 ArithmeticRightShiftAttribute,
148 CondIfAttribute,
149 WhileLoopAttribute,
Kevin Cheng38d214c2021-10-15 15:49:19 -0700150 TransposeAttribute,
151 TableAttribute,
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000152 MatMulAttribute,
153 FullyConnectedAttribute,
Eric Kunze497ab5d2022-10-21 16:39:01 -0700154 NegateAttribute,
Luke Hutton5e268092023-01-12 22:20:53 +0000155 CustomAttribute,
156 FFTAttribute,
Eric Kunze4881c292023-11-01 16:12:07 -0700157 RFFTAttribute,
Eric Kunze2364dcd2021-04-26 11:06:57 -0700158}
159
Kevin Cheng79a41992021-08-31 16:04:40 -0700160table PoolAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700161 pad: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700162 kernel: [int32];
163 stride: [int32];
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000164 input_zp: int32;
165 output_zp: int32;
James Ward485a11d2022-08-05 13:48:37 +0100166 accum_dtype: DType;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700167}
168
Kevin Cheng79a41992021-08-31 16:04:40 -0700169table ConvAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700170 pad: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700171 stride: [int32];
172 dilation: [int32];
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000173 input_zp: int32;
174 weight_zp: int32;
Eric Kunze4881c292023-11-01 16:12:07 -0700175 local_bound: bool;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700176}
177
Kevin Cheng79a41992021-08-31 16:04:40 -0700178table TransposeConvAttribute {
Eric Kunze7ffa1ff2022-06-01 17:26:48 -0700179 out_pad: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700180 stride: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700181 output_shape: [int32];
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000182 input_zp: int32;
183 weight_zp: int32;
Eric Kunze4881c292023-11-01 16:12:07 -0700184 local_bound: bool;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700185}
186
Kevin Cheng38d214c2021-10-15 15:49:19 -0700187table PadAttribute {
188 padding: [int32];
189 pad_const_int: int32;
James Wardc15f7d52022-12-07 15:38:01 +0000190 pad_const_fp: [ubyte] (force_align: 8);
Eric Kunze2364dcd2021-04-26 11:06:57 -0700191}
192
193table AxisAttribute {
194 axis: int32;
195}
196
197table ReshapeAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700198 new_shape: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700199}
200
201table SliceAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700202 start: [int32];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700203 size: [int32];
204}
205
206table TileAttribute {
207 multiples: [int32];
208}
209
210table ResizeAttribute {
TatWai Chong49b1ca62022-06-10 01:49:13 -0700211 scale: [int16];
212 offset: [int16];
213 border: [int16];
Eric Kunze2364dcd2021-04-26 11:06:57 -0700214 mode: ResizeMode;
215}
216
217table ClampAttribute {
218 min_int: int32;
219 max_int: int32;
James Wardc15f7d52022-12-07 15:38:01 +0000220 min_fp: [ubyte] (force_align: 8);
221 max_fp: [ubyte] (force_align: 8);
Eric Kunze2364dcd2021-04-26 11:06:57 -0700222}
223
224table RescaleAttribute {
225 input_zp: int32;
226 output_zp: int32;
227 multiplier: [int32];
228 shift: [int32];
229 scale32: bool;
230 double_round: bool;
231 per_channel: bool;
Eric Kunze9601cbd2023-08-17 20:44:39 +0000232 input_unsigned: bool;
233 output_unsigned: bool;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700234}
235
236table MulAttribute {
237 shift: int32;
238}
239
240table ArithmeticRightShiftAttribute {
241 round: bool;
242}
243
244table CondIfAttribute {
245 then_branch: string;
246 else_branch: string;
247}
248
249table WhileLoopAttribute {
250 cond_branch: string;
251 body_branch: string;
252}
253
Kevin Cheng38d214c2021-10-15 15:49:19 -0700254table TransposeAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700255 perms: [int32];
Kevin Cheng38d214c2021-10-15 15:49:19 -0700256}
257
258table TableAttribute {
TatWai Chong7be71652022-05-10 17:26:20 -0700259 table: [int16];
Kevin Cheng38d214c2021-10-15 15:49:19 -0700260}
261
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000262table MatMulAttribute {
Eric Kunze2364dcd2021-04-26 11:06:57 -0700263 a_zp: int32;
264 b_zp: int32;
265}
266
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000267table FullyConnectedAttribute {
Eric Kunze2364dcd2021-04-26 11:06:57 -0700268 input_zp: int32;
Eric Kunzebdcc3fe2022-06-07 05:17:37 +0000269 weight_zp: int32;
270}
271
272table NegateAttribute {
273 input1_zp: int32;
274 output_zp: int32;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700275}
276
Eric Kunze497ab5d2022-10-21 16:39:01 -0700277table CustomAttribute {
Jerry Gecd914da2023-11-09 18:41:12 +0000278 operator_name:string;
279 domain_name:string;
Eric Kunze497ab5d2022-10-21 16:39:01 -0700280 implementation_attrs:[ubyte];
281}
282
Luke Hutton5e268092023-01-12 22:20:53 +0000283table FFTAttribute {
284 inverse: bool;
Eric Kunze4881c292023-11-01 16:12:07 -0700285 local_bound: bool;
286}
287
288table RFFTAttribute {
289 local_bound: bool;
Luke Hutton5e268092023-01-12 22:20:53 +0000290}
291
Eric Kunze2364dcd2021-04-26 11:06:57 -0700292table Version {
Eric Kunzef08956b2023-05-18 01:13:41 +0000293 _major: int32 = -1;
294 _minor: int32 = -1;
295 _patch: int32 = -1;
Eric Kunzec3719ab2023-05-23 04:30:05 +0000296 _draft: bool = true;
Eric Kunze2364dcd2021-04-26 11:06:57 -0700297}
298
299table TosaTensor {
Kevin Cheng3bb1bc12021-06-17 15:57:08 -0700300 name:string; // name of the tensor, used for solving dependency
301 shape:[int32]; // shape of the tensor
302 type:DType; // data type of the tensor
303 data: [ubyte] (force_align: 8); // raw data array if it's a constant tensor.
Jerry Ge442261b2022-09-09 13:38:56 -0700304 variable: bool; // is this a variable tensor
Tai Lyc6939a42023-08-21 17:00:29 +0000305 is_unranked: bool; // whether this is an unranked tensor
Tai Lyd0520b92023-09-19 21:30:18 +0000306 variable_name:string; // name for variable attribute
Eric Kunze2364dcd2021-04-26 11:06:57 -0700307}
308
309table TosaOperator {
310 op:Op; // operator enum
Jerry Ge13c78a62022-10-04 20:32:39 -0700311 attribute:Attribute; // union structure. operator attribute
Eric Kunze2364dcd2021-04-26 11:06:57 -0700312 inputs:[string]; // list of input tensor names
313 outputs:[string]; // list of output tensor names
Eric Kunze2364dcd2021-04-26 11:06:57 -0700314}
315
316table TosaBasicBlock {
317 name:string; // basic block name
318 operators:[TosaOperator]; // operators array
319 tensors:[TosaTensor]; // tensors array
320 inputs:[string]; // name of graph inputs
321 outputs:[string]; // name of graph outputs
322}
323
Jerry Ge13c78a62022-10-04 20:32:39 -0700324table TosaRegion {
325 name:string; // name of region
326 blocks:[TosaBasicBlock]; // basic blocks array
327}
328
Eric Kunze2364dcd2021-04-26 11:06:57 -0700329table TosaGraph {
Eric Kunzef08956b2023-05-18 01:13:41 +0000330 version:Version (required);
Jerry Ge13c78a62022-10-04 20:32:39 -0700331 regions:[TosaRegion]; // regions array
Eric Kunze2364dcd2021-04-26 11:06:57 -0700332}
333
334root_type TosaGraph;