Merge "Audio: Do not sanitize android.hardware.audio@2.0-service"
[android/platform-hardware-interfaces.git] / neuralnetworks / 1.2 / types.hal
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
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  */
17 package android.hardware.neuralnetworks@1.2;
19 import @1.0::Operand;
20 import @1.0::PerformanceInfo;
21 import @1.1::OperationType;
23 /**
24  * Operation types.
25  *
26  * The type of an operation in a model.
27  */
28 enum OperationType : @1.1::OperationType {
29     // TODO(b/116445845): Sync docs when all ops are implemented.
30     ARGMAX = 38,
31     ARGMIN = 39,
32     PAD_V2 = 40,
33     AXIS_ALIGNED_BBOX_TRANSFORM = 41,
34     BIDIRECTIONAL_SEQUENCE_LSTM = 42,
35     BIDIRECTIONAL_SEQUENCE_RNN = 43,
36     BOX_WITH_NMS_LIMIT = 44,
37     CAST = 45,
38     CHANNEL_SHUFFLE = 46,
39     DETECTION_OUTPUT = 47,
40     EMBEDDING_LOOKUP_SPARSE = 48,
41     EXP = 49,
42     EXPAND_DIMS = 50,
43     GATHER = 51,
44     GENERATE_PROPOSALS = 52,
45     GREATER = 53,
46     GREATER_EQUAL = 54,
47     GROUPED_CONV_2D = 55,
48     HEATMAP_MAX_KEYPOINT = 56,
49     LESS = 57,
50     LESS_EQUAL = 58,
51     LOG = 59,
52     LOGICAL_AND = 60,
53     LOGICAL_NOT = 61,
54     LOGICAL_OR = 62,
55     LOG_SOFTMAX = 63,
56     MAXIMUM = 64,
57     MINIMUM = 65,
58     NEG = 66,
59     POW = 67,
60     PRELU = 68,
61     PRIOR_BOX = 69,
62     QUANTIZE = 70,
63     QUANTIZED_16BIT_LSTM = 71,
64     RANDOM_MULTINOMIAL = 72,
65     REDUCE = 73,
66     ROI_ALIGN = 74,
67     RSQRT = 75,
68     SELECT = 76,
69     SIN = 77,
70     SLICE = 78,
71     SPARSE_TO_DENSE = 79,
72     SPLIT = 80,
73     SQRT = 81,
74     TILE = 82,
75     TOPK_V2 = 83,
76     TRANSPOSE_CONV_2D = 84,
77     UNIDIRECTIONAL_SEQUENCE_LSTM = 85,
78     UNIDIRECTIONAL_SEQUENCE_RNN = 86,
79     ROTATED_BBOX_TRANSFORM = 87,
80 };
82 /**
83  * Describes one operation of the model's graph.
84  */
85 struct Operation {
86     /**
87      * The operation type.
88      */
89     OperationType type;
91     /**
92      * Describes the table that contains the indexes of the inputs of the
93      * operation. The offset is the index in the operandIndexes table.
94      */
95     vec<uint32_t> inputs;
97     /**
98      * Describes the table that contains the indexes of the outputs of the
99      * operation. The offset is the index in the operandIndexes table.
100      */
101     vec<uint32_t> outputs;
102 };
104 /**
105  * A Neural Network Model.
106  *
107  * This includes not only the execution graph, but also constant data such as
108  * weights or scalars added at construction time. The only information that
109  * may not be known is the shape of the input tensors.
110  */
111 struct Model {
112     /**
113      * All operands included in the model.
114      */
115     vec<Operand> operands;
117     /**
118      * All operations included in the model.
119      *
120      * The operations are sorted into execution order. Every operand
121      * with lifetime MODEL_OUTPUT or TEMPORARY_VARIABLE must be
122      * written before it is read.
123      */
124     vec<Operation> operations;
126     /**
127      * Input indexes of the model. There must be at least one.
128      *
129      * Each value corresponds to the index of the operand in "operands".
130      */
131     vec<uint32_t> inputIndexes;
133     /**
134      * Output indexes of the model. There must be at least one.
135      *
136      * Each value corresponds to the index of the operand in "operands".
137      */
138     vec<uint32_t> outputIndexes;
140     /**
141      * A byte buffer containing operand data that were copied into the model.
142      *
143      * An operand's value must be located here if and only if Operand::lifetime
144      * equals OperandLifeTime::CONSTANT_COPY.
145      */
146     vec<uint8_t> operandValues;
148     /**
149      * A collection of shared memory pools containing operand values.
150      *
151      * An operand's value must be located here if and only if Operand::lifetime
152      * equals OperandLifeTime::CONSTANT_REFERENCE.
153      */
154     vec<memory> pools;
156     /**
157      * 'true' indicates TENSOR_FLOAT32 may be calculated with range and/or
158      * precision as low as that of the IEEE 754 16-bit floating-point format.
159      * 'false' indicates TENSOR_FLOAT32 must be calculated using at least the
160      * range and precision of the IEEE 754 32-bit floating-point format.
161      */
162     bool relaxComputationFloat32toFloat16;
163 };