blob: d645de789c846438d1f253b1b3cb0fac4386f31d [file] [log] [blame]
Xusong Wang62a760c2019-10-25 12:07:17 -07001/*
2 * Copyright (C) 2019 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 */
16
17package android.hardware.neuralnetworks@1.3;
18
Xusong Wang62a760c2019-10-25 12:07:17 -070019import @1.2::IPreparedModel;
Xusong Wangebd88ba2019-10-28 11:11:19 -070020import @1.2::MeasureTiming;
21import @1.2::OutputShape;
22import @1.2::Timing;
Michael Butlerc2499ec2019-12-11 18:31:12 -080023import ErrorStatus;
Miao Wang3fd70b02020-01-21 13:15:09 -080024import OptionalTimeoutDuration;
Michael Butlerc2499ec2019-12-11 18:31:12 -080025import OptionalTimePoint;
Xusong Wang931d5a12019-11-27 12:46:48 -080026import Request;
Michael Butlerc2499ec2019-12-11 18:31:12 -080027import IExecutionCallback;
Miao Wang90cf3dd2019-11-12 14:02:16 -080028import IFencedExecutionCallback;
Xusong Wang62a760c2019-10-25 12:07:17 -070029
30/**
31 * IPreparedModel describes a model that has been prepared for execution and
32 * is used to launch executions.
33 */
34interface IPreparedModel extends @1.2::IPreparedModel {
35 /**
36 * Launches an asynchronous execution on a prepared model.
37 *
38 * The execution is performed asynchronously with respect to the caller.
Xusong Wang931d5a12019-11-27 12:46:48 -080039 * execute_1_3 must verify the inputs to the function are correct, and the usages
40 * of memory pools allocated by IDevice::allocate are valid. If there is
Xusong Wang62a760c2019-10-25 12:07:17 -070041 * an error, execute_1_3 must immediately invoke the callback with the
42 * appropriate ErrorStatus value, then return with the same ErrorStatus. If
43 * the inputs to the function are valid and there is no error, execute_1_3 must
44 * launch an asynchronous task to perform the execution in the background,
45 * and immediately return with ErrorStatus::NONE. If the asynchronous task
46 * fails to launch, execute_1_3 must immediately invoke the callback with
47 * ErrorStatus::GENERAL_FAILURE, then return with
48 * ErrorStatus::GENERAL_FAILURE.
49 *
50 * When the asynchronous task has finished its execution, it must
51 * immediately invoke the callback object provided as an input to the
52 * execute_1_3 function. This callback must be provided with the ErrorStatus of
53 * the execution.
54 *
55 * If the launch is successful, the caller must not change the content of
56 * any data object referenced by 'request' (described by the
57 * {@link @1.0::DataLocation} of a {@link @1.0::RequestArgument}) until the
58 * asynchronous task has invoked the callback object. The asynchronous task
59 * must not change the content of any of the data objects corresponding to
60 * 'request' inputs.
61 *
62 * If the prepared model was prepared from a model wherein all tensor
63 * operands have fully specified dimensions, and the inputs to the function
64 * are valid, then:
65 * - the execution should launch successfully (ErrorStatus::NONE): There
66 * must be no failure unless the device itself is in a bad state.
67 * - if at execution time every operation's input operands have legal
68 * values, the execution should complete successfully (ErrorStatus::NONE):
69 * There must be no failure unless the device itself is in a bad state.
70 *
Michael Butlerc2499ec2019-12-11 18:31:12 -080071 * execute_1_3 can be called with an optional deadline. If the execution
Miao Wang3fd70b02020-01-21 13:15:09 -080072 * is not able to be completed before the provided deadline, the execution
Michael Butlerc2499ec2019-12-11 18:31:12 -080073 * must be aborted, and either {@link
74 * ErrorStatus::MISSED_DEADLINE_TRANSIENT} or {@link
75 * ErrorStatus::MISSED_DEADLINE_PERSISTENT} must be returned. The error due
76 * to an abort must be sent the same way as other errors, described above.
77 * If the service reports that it does not support execution deadlines via
78 * IDevice::supportsDeadlines, and execute_1_3 is called with a deadline,
79 * then the argument is invalid, and {@link ErrorStatus::INVALID_ARGUMENT}
80 * must be returned.
81 *
Xusong Wangebd88ba2019-10-28 11:11:19 -070082 * Any number of calls to the execute* and executeSynchronously* functions,
83 * in any combination, may be made concurrently, even on the same
Xusong Wang62a760c2019-10-25 12:07:17 -070084 * IPreparedModel object.
85 *
86 * @param request The input and output information on which the prepared
87 * model is to be executed.
88 * @param measure Specifies whether or not to measure duration of the execution.
89 * The duration runs from the time the driver sees the call
90 * to the execute_1_3 function to the time the driver invokes
91 * the callback.
Miao Wang3fd70b02020-01-21 13:15:09 -080092 * @param deadline The time by which the execution must complete. If the
Michael Butlerc2499ec2019-12-11 18:31:12 -080093 * execution cannot be finished by the deadline, the
94 * execution must be aborted.
Xusong Wang62a760c2019-10-25 12:07:17 -070095 * @param callback A callback object used to return the error status of
Miao Wang90cf3dd2019-11-12 14:02:16 -080096 * the execution, shape information of model output operands, and
97 * duration of execution. The callback object's notify function must
Xusong Wang62a760c2019-10-25 12:07:17 -070098 * be called exactly once, even if the execution was
99 * unsuccessful.
100 * @return status Error status of the call, must be:
101 * - NONE if task is successfully launched
102 * - DEVICE_UNAVAILABLE if driver is offline or busy
103 * - GENERAL_FAILURE if there is an unspecified error
104 * - OUTPUT_INSUFFICIENT_SIZE if provided output buffer is
105 * not large enough to store the resultant values
106 * - INVALID_ARGUMENT if one of the input arguments is
107 * invalid
Michael Butlerc2499ec2019-12-11 18:31:12 -0800108 * - MISSED_DEADLINE_* if the deadline for executing a model
109 * cannot be met
110 * - RESOURCE_EXHAUSTED_* if the task was aborted by the
111 * driver
Xusong Wang62a760c2019-10-25 12:07:17 -0700112 */
Michael Butlerc2499ec2019-12-11 18:31:12 -0800113 execute_1_3(Request request, MeasureTiming measure, OptionalTimePoint deadline,
114 IExecutionCallback callback)
Xusong Wang62a760c2019-10-25 12:07:17 -0700115 generates (ErrorStatus status);
Xusong Wangebd88ba2019-10-28 11:11:19 -0700116
117 /**
118 * Performs a synchronous execution on a prepared model.
119 *
120 * The execution is performed synchronously with respect to the caller.
121 * executeSynchronously_1_3 must verify the inputs to the function are
Xusong Wang931d5a12019-11-27 12:46:48 -0800122 * correct, and the usages of memory pools allocated by IDevice::allocate
123 * are valid. If there is an error, executeSynchronously_1_3 must immediately
Xusong Wangebd88ba2019-10-28 11:11:19 -0700124 * return with the appropriate ErrorStatus value. If the inputs to the
125 * function are valid and there is no error, executeSynchronously_1_3 must
126 * perform the execution, and must not return until the execution is
127 * complete.
128 *
129 * The caller must not change the content of any data object referenced by
130 * 'request' (described by the {@link @1.0::DataLocation} of a
131 * {@link @1.0::RequestArgument}) until executeSynchronously_1_3
132 * returns. executeSynchronously_1_3 must not change the content of any of the
133 * data objects corresponding to 'request' inputs.
134 *
135 * If the prepared model was prepared from a model wherein all tensor
136 * operands have fully specified dimensions, and the inputs to the function
137 * are valid, and at execution time every operation's input operands have
138 * legal values, then the execution should complete successfully
139 * (ErrorStatus::NONE): There must be no failure unless the device itself is
140 * in a bad state.
141 *
Michael Butlerc2499ec2019-12-11 18:31:12 -0800142 * executeSynchronously_1_3 can be called with an optional deadline. If the
Miao Wang3fd70b02020-01-21 13:15:09 -0800143 * execution is not able to be completed before the provided deadline, the
Michael Butlerc2499ec2019-12-11 18:31:12 -0800144 * execution must be aborted, and either {@link
145 * ErrorStatus::MISSED_DEADLINE_TRANSIENT} or {@link
146 * ErrorStatus::MISSED_DEADLINE_PERSISTENT} must be returned. The error due
147 * to an abort must be sent the same way as other errors, described above.
148 * If the service reports that it does not support execution deadlines via
149 * IDevice::supportsDeadlines, and executeSynchronously_1_3 is called with a
150 * deadline, then the argument is invalid, and
151 * {@link ErrorStatus::INVALID_ARGUMENT} must be returned.
152 *
Xusong Wangebd88ba2019-10-28 11:11:19 -0700153 * Any number of calls to the execute* and executeSynchronously* functions,
154 * in any combination, may be made concurrently, even on the same
155 * IPreparedModel object.
156 *
157 * @param request The input and output information on which the prepared
158 * model is to be executed.
159 * @param measure Specifies whether or not to measure duration of the execution.
160 * The duration runs from the time the driver sees the call
161 * to the executeSynchronously_1_3 function to the time the driver
162 * returns from the function.
Miao Wang3fd70b02020-01-21 13:15:09 -0800163 * @param deadline The time by which the execution must complete. If the
Michael Butlerc2499ec2019-12-11 18:31:12 -0800164 * execution cannot be finished by the deadline, the
165 * execution must be aborted.
Xusong Wangebd88ba2019-10-28 11:11:19 -0700166 * @return status Error status of the execution, must be:
167 * - NONE if execution is performed successfully
168 * - DEVICE_UNAVAILABLE if driver is offline or busy
169 * - GENERAL_FAILURE if there is an unspecified error
170 * - OUTPUT_INSUFFICIENT_SIZE if at least one output
171 * operand buffer is not large enough to store the
172 * corresponding output
173 * - INVALID_ARGUMENT if one of the input arguments is
174 * invalid
Michael Butlerc2499ec2019-12-11 18:31:12 -0800175 * - MISSED_DEADLINE_* if the deadline for executing a model
176 * cannot be met
177 * - RESOURCE_EXHAUSTED_* if the task was aborted by the
178 * driver
Xusong Wangebd88ba2019-10-28 11:11:19 -0700179 * @return outputShapes A list of shape information of model output operands.
180 * The index into "outputShapes" corresponds to the index
181 * of the output operand in the Request outputs vector.
182 * outputShapes must be empty unless the status is either
183 * NONE or OUTPUT_INSUFFICIENT_SIZE.
Michael Butlerc2499ec2019-12-11 18:31:12 -0800184 * @return timing Duration of execution. Unless measure is YES and status is
Xusong Wangebd88ba2019-10-28 11:11:19 -0700185 * NONE, all times must be reported as UINT64_MAX. A driver may
186 * choose to report any time as UINT64_MAX, indicating that
187 * measurement is not available.
188 */
Michael Butlerc2499ec2019-12-11 18:31:12 -0800189 executeSynchronously_1_3(Request request, MeasureTiming measure,
190 OptionalTimePoint deadline)
191 generates (ErrorStatus status, vec<OutputShape> outputShapes,
192 Timing timing);
Miao Wang90cf3dd2019-11-12 14:02:16 -0800193
194 /**
195 * Launch a fenced asynchronous execution on a prepared model.
196 *
197 * The execution is performed asynchronously with respect to the caller.
Miao Wang3fd70b02020-01-21 13:15:09 -0800198 * executeFenced must verify the inputs to the function are correct, and the usages
199 * of memory pools allocated by IDevice::allocate are valid. If there is an error,
200 * executeFenced must immediately return with the corresponding ErrorStatus, an empty
201 * handle for syncFence, and nullptr for callback. If the inputs to the function
202 * are valid and there is no error, executeFenced must dispatch an asynchronous task
203 * to perform the execution in the background, and immediately return with
204 * ErrorStatus::NONE, a sync fence that will be signaled once the execution is completed,
205 * and a callback that can be used by the client to query the duration and runtime error
206 * status. If the task has finished before the call returns, an empty handle may be returned
207 * for syncFence. The execution must wait for all the sync fences (if any) in waitFor
208 * to be signaled before starting the actual execution.
Miao Wang90cf3dd2019-11-12 14:02:16 -0800209 *
210 * When the asynchronous task has finished its execution, it must
Miao Wang3fd70b02020-01-21 13:15:09 -0800211 * immediately signal the syncFence returned from the executeFenced call. After
212 * the syncFence is signaled, the task must not modify the content of
Miao Wang90cf3dd2019-11-12 14:02:16 -0800213 * any data object referenced by 'request' (described by the
214 * {@link @1.0::DataLocation} of a {@link @1.0::RequestArgument}).
215 *
Miao Wang3fd70b02020-01-21 13:15:09 -0800216 * executeFenced can be called with an optional deadline and an optional duration.
217 * If the execution is not able to be completed before the provided deadline or
218 * within the timeout duration (measured from when all sync fences in waitFor are
219 * signaled), whichever comes earlier, the execution must be aborted, and either
220 * {@link ErrorStatus::MISSED_DEADLINE_TRANSIENT} or {@link
221 * ErrorStatus::MISSED_DEADLINE_PERSISTENT} must be returned. The error due
222 * to an abort must be sent the same way as other errors, described above.
223 * If the service reports that it does not support execution deadlines via
224 * IDevice::supportsDeadlines, and executeFenced is called with a
225 * deadline or duration, then the argument is invalid, and
226 * {@link ErrorStatus::INVALID_ARGUMENT} must be returned.
227 *
228 * If any of the sync fences in waitFor changes to error status after the executeFenced
229 * call succeeds, or the execution is aborted because it cannot finish before the deadline
230 * has been reached or the duration has elapsed, the driver must immediately set the returned
231 * syncFence to error status.
232 *
Miao Wang90cf3dd2019-11-12 14:02:16 -0800233 * Any number of calls to the executeFenced, execute* and executeSynchronously*
234 * functions, in any combination, may be made concurrently, even on the same
235 * IPreparedModel object.
236 *
237 * @param request The input and output information on which the prepared
Miao Wang3fd70b02020-01-21 13:15:09 -0800238 * model is to be executed. The outputs in the request must have
239 * fully specified dimensions.
Miao Wang90cf3dd2019-11-12 14:02:16 -0800240 * @param waitFor A vector of sync fence file descriptors.
241 * Execution must not start until all sync fences have been signaled.
242 * @param measure Specifies whether or not to measure duration of the execution.
Miao Wang3fd70b02020-01-21 13:15:09 -0800243 * @param deadline The time by which the execution must complete. If the
244 * execution cannot be finished by the deadline, the
245 * execution must be aborted.
246 * @param duration The length of time within which the execution must
247 * complete after all sync fences in waitFor are signaled. If the
248 * execution cannot be finished within the duration, the execution
249 * must be aborted.
Miao Wang90cf3dd2019-11-12 14:02:16 -0800250 * @return status Error status of the call, must be:
251 * - NONE if task is successfully launched
252 * - DEVICE_UNAVAILABLE if driver is offline or busy
253 * - GENERAL_FAILURE if there is an unspecified error
254 * - INVALID_ARGUMENT if one of the input arguments is invalid, including
255 * fences in error states.
Miao Wang3fd70b02020-01-21 13:15:09 -0800256 * - MISSED_DEADLINE_* if the deadline for executing a model
257 * cannot be met
258 * - RESOURCE_EXHAUSTED_* if the task was aborted by the
259 * driver
260 * @return syncFence The sync fence that will be signaled when the task is completed.
Miao Wang90cf3dd2019-11-12 14:02:16 -0800261 * The sync fence will be set to error if a critical error,
262 * e.g. hardware failure or kernel panic, occurs when doing execution.
263 * @return callback The IFencedExecutionCallback can be used to query information like duration
264 * and error status when the execution is completed.
265 */
Miao Wang3fd70b02020-01-21 13:15:09 -0800266 executeFenced(Request request, vec<handle> waitFor, MeasureTiming measure,
267 OptionalTimePoint deadline, OptionalTimeoutDuration duration)
Miao Wang90cf3dd2019-11-12 14:02:16 -0800268 generates (ErrorStatus status, handle syncFence, IFencedExecutionCallback callback);
Xusong Wang62a760c2019-10-25 12:07:17 -0700269};