Support sync fence in NNAPI
- Add IPreparedModel::dispatchRequest to NNAPI 1.3 HAL - Add IDispatchExecutionCallback to allow clients query information related to the actual evaluation. Bug: 142778241 Test: mm Change-Id: I87cbb7f2aee87342b0418fce04eb4050e2bc1920
This commit is contained in:
parent
9e638b54a0
commit
90cf3dd37c
4 changed files with 107 additions and 2 deletions
|
@ -653,7 +653,8 @@ a3eddd9bbdc87e8c22764070037dd1154f1cf006e6fba93364c4f85d4c134a19 android.hardwar
|
|||
65c16331e57f6dd68b3971f06f78fe9e3209afb60630c31705aa355f9a52bf0d android.hardware.neuralnetworks@1.3::IBuffer
|
||||
d1f382d14e1384b907d5bb5780df7f01934650d556fedbed2f15a90773c657d6 android.hardware.neuralnetworks@1.3::IDevice
|
||||
4167dc3ad35e9cd0d2057d4868c7675ae2c3c9d05bbd614c1f5dccfa5fd68797 android.hardware.neuralnetworks@1.3::IExecutionCallback
|
||||
7d23020248194abbee8091cc624f39a5a6d7ccba338b172d5d2d3df0cceffbee android.hardware.neuralnetworks@1.3::IPreparedModel
|
||||
29e26e83399b69c7998b787bd30426dd5baa2da350effca76bbee1ba877355c9 android.hardware.neuralnetworks@1.3::IFencedExecutionCallback
|
||||
384fd9fd6e4d43ea11d407e52ea81da5242c3c5f4b458b8707d8feb652a13e36 android.hardware.neuralnetworks@1.3::IPreparedModel
|
||||
0439a1fbbec7f16e5e4c653d85ac685d51bfafbae15b8f8cca530acdd7d6a8ce android.hardware.neuralnetworks@1.3::IPreparedModelCallback
|
||||
ee65638f8af3f9f4f222e7208eaa9f1f8e7f8e0a21545846ba67d0e27624efa1 android.hardware.neuralnetworks@1.3::types
|
||||
3e01d4446cd69fd1c48f8572efd97487bc179564b32bd795800b97bbe10be37b android.hardware.wifi@1.4::IWifi
|
||||
|
|
|
@ -11,6 +11,7 @@ hidl_interface {
|
|||
"IBuffer.hal",
|
||||
"IDevice.hal",
|
||||
"IExecutionCallback.hal",
|
||||
"IFencedExecutionCallback.hal",
|
||||
"IPreparedModel.hal",
|
||||
"IPreparedModelCallback.hal",
|
||||
],
|
||||
|
|
48
neuralnetworks/1.3/IFencedExecutionCallback.hal
Normal file
48
neuralnetworks/1.3/IFencedExecutionCallback.hal
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.neuralnetworks@1.3;
|
||||
|
||||
import @1.2::Timing;
|
||||
import ErrorStatus;
|
||||
|
||||
/**
|
||||
* IFencedExecutionCallback can be used to query the error status result
|
||||
* and duration information from an IPreparedModel::executeFenced call.
|
||||
*/
|
||||
interface IFencedExecutionCallback {
|
||||
|
||||
/**
|
||||
* The getExecutionInfo method is used by the clients to query error status
|
||||
* result and duration information. The method must only be called after the actual
|
||||
* evaluation has finished or resulted in an runtime error, as indicated by the status
|
||||
* of the sync fence returned by the IPreparedModel::executeFenced call, otherwise
|
||||
* GENERAL_FAILURE must be returned.
|
||||
*
|
||||
* @return status Error status returned from the asynchronously dispatched execution
|
||||
* must be:
|
||||
* - NONE if the asynchronous execution was successful
|
||||
* - DEVICE_UNAVAILABLE if driver is offline or busy
|
||||
* - GENERAL_FAILURE if the asynchronous task resulted in an
|
||||
* unspecified error
|
||||
* @return timing Duration of execution. Unless MeasureTiming::YES was passed when
|
||||
* launching the execution and status is NONE, all times must
|
||||
* be reported as UINT64_MAX. A driver may choose to report
|
||||
* any time as UINT64_MAX, indicating that particular measurement is
|
||||
* not available.
|
||||
*/
|
||||
getExecutionInfo() generates (ErrorStatus status, Timing timing);
|
||||
};
|
|
@ -24,6 +24,7 @@ import ErrorStatus;
|
|||
import OptionalTimePoint;
|
||||
import Request;
|
||||
import IExecutionCallback;
|
||||
import IFencedExecutionCallback;
|
||||
|
||||
/**
|
||||
* IPreparedModel describes a model that has been prepared for execution and
|
||||
|
@ -91,7 +92,8 @@ interface IPreparedModel extends @1.2::IPreparedModel {
|
|||
* execution cannot be finished by the deadline, the
|
||||
* execution must be aborted.
|
||||
* @param callback A callback object used to return the error status of
|
||||
* the execution. The callback object's notify function must
|
||||
* the execution, shape information of model output operands, and
|
||||
* duration of execution. The callback object's notify function must
|
||||
* be called exactly once, even if the execution was
|
||||
* unsuccessful.
|
||||
* @return status Error status of the call, must be:
|
||||
|
@ -187,4 +189,57 @@ interface IPreparedModel extends @1.2::IPreparedModel {
|
|||
OptionalTimePoint deadline)
|
||||
generates (ErrorStatus status, vec<OutputShape> outputShapes,
|
||||
Timing timing);
|
||||
|
||||
/**
|
||||
* Launch a fenced asynchronous execution on a prepared model.
|
||||
*
|
||||
* The execution is performed asynchronously with respect to the caller.
|
||||
* executeFenced must fully validate the request, and only accept one that is
|
||||
* guaranteed to be completed, unless a hardware failure or kernel panic happens on the device.
|
||||
* If there is an error during validation, executeFenced must immediately return with
|
||||
* the corresponding ErrorStatus. If the request is valid and there is no error launching,
|
||||
* executeFenced must dispatch an asynchronous task to perform the execution in the
|
||||
* background, and immediately return with ErrorStatus::NONE, a sync_fence that will be
|
||||
* signaled once the execution is completed, and a callback that can be used by the client
|
||||
* to query the duration and runtime error status. If the task has finished
|
||||
* before the call returns, empty handle may be returned for the sync fence. If the
|
||||
* asynchronous task fails to launch, executeFenced must immediately return with
|
||||
* ErrorStatus::GENERAL_FAILURE, and empty handle for the sync fence and nullptr
|
||||
* for callback. The execution must wait for all the sync fences (if any) in wait_for to be
|
||||
* signaled before starting the actual execution.
|
||||
*
|
||||
* If any of sync fences in wait_for changes to error status after the executeFenced
|
||||
* call succeeds, the driver must immediately set the returned sync fence to error status.
|
||||
*
|
||||
* When the asynchronous task has finished its execution, it must
|
||||
* immediately signal the sync_fence created when dispatching. After
|
||||
* the sync_fence is signaled, the task must not modify the content of
|
||||
* any data object referenced by 'request' (described by the
|
||||
* {@link @1.0::DataLocation} of a {@link @1.0::RequestArgument}).
|
||||
*
|
||||
* Any number of calls to the executeFenced, execute* and executeSynchronously*
|
||||
* functions, in any combination, may be made concurrently, even on the same
|
||||
* IPreparedModel object.
|
||||
*
|
||||
* @param request The input and output information on which the prepared
|
||||
* model is to be executed.
|
||||
* @param waitFor A vector of sync fence file descriptors.
|
||||
* Execution must not start until all sync fences have been signaled.
|
||||
* @param measure Specifies whether or not to measure duration of the execution.
|
||||
* The duration runs from the time the driver sees the call
|
||||
* to the executeFenced function to the time sync_fence is triggered.
|
||||
* @return status Error status of the call, must be:
|
||||
* - NONE if task is successfully launched
|
||||
* - DEVICE_UNAVAILABLE if driver is offline or busy
|
||||
* - GENERAL_FAILURE if there is an unspecified error
|
||||
* - INVALID_ARGUMENT if one of the input arguments is invalid, including
|
||||
* fences in error states.
|
||||
* @return syncFence The sync fence that will be triggered when the task is completed.
|
||||
* The sync fence will be set to error if a critical error,
|
||||
* e.g. hardware failure or kernel panic, occurs when doing execution.
|
||||
* @return callback The IFencedExecutionCallback can be used to query information like duration
|
||||
* and error status when the execution is completed.
|
||||
*/
|
||||
executeFenced(Request request, vec<handle> waitFor, MeasureTiming measure)
|
||||
generates (ErrorStatus status, handle syncFence, IFencedExecutionCallback callback);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue