platform_hardware_interfaces/neuralnetworks/1.2/IBurstCallback.hal

42 lines
1.7 KiB
Text
Raw Normal View History

NNAPI Burst -- HAL interface FastMessageQueue is a Treble-compliant data structure that enables fast communication between two processes. The FMQ object itself is an atomic circular buffer that is optionally synchronized with a futex. However, FMQ has no notion of ownership or lifetime across processes, so it must be paired with higher-level constructs to manage the lifetime and ownership. The NNAPI is introducing the notion of an "Execution Burst" object (or more simply a "Burst" object), which is similar to an ANeuralNetworksExecution, but is intended to be reused across multiple executions and has lower IPC overheads. It achieves this low IPC overhead by replacing HIDL HwBinder calls with FMQ messages. Specifically, it replaces IPreparedModel::executeSynchronously's call from the client into the service with fmq_sync<FmqRequestDatum> (an FMQ channel used to pass a serialized Request object) and it replaces the return from the service into the client with fmq_sync<FmqResultDatum> (an FMQ channel used to return serialized result status and OutputShapes information). Each channel is a unidirectional flow of information with exactly one producer and exactly one consumer. The channels are created by the NN runtime and passed to the service via IPreparedModel::configureExecutionBurst. This CL defines the FmqRequestDatum and FmqResultDatum types in types.hal. IBurstContext.hal defines IBurstContext, a HIDL object used by the service to manage the resources of a Burst. IBurstCallback.hal defines IBurstCallback, a HIDL callback object that can be used to retrieve the handle to a resource the service has either not yet seen or has evicted from its cache. Finally, IPreparedModel.hal is extended with IPreparedModel::configureExecutionBurst to create the burst object. Bug: 119570067 Test: mma Change-Id: I333da70201531b1396efc714d096c277e8e1d47b Merged-In: I333da70201531b1396efc714d096c277e8e1d47b (cherry picked from commit 7e91e24fe155de15c677c48ca5a2c141ba2246dc)
2019-01-15 19:52:41 +01:00
/*
* Copyright (C) 2019 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.2;
import @1.0::ErrorStatus;
/**
* Callback object used by a service to retreive memory objects based on unique
* identifiers ("slots").
*/
interface IBurstCallback {
/**
* Get the memory regions that correspond to slot ids. The slot ids are
NNAPI Burst -- HAL interface FastMessageQueue is a Treble-compliant data structure that enables fast communication between two processes. The FMQ object itself is an atomic circular buffer that is optionally synchronized with a futex. However, FMQ has no notion of ownership or lifetime across processes, so it must be paired with higher-level constructs to manage the lifetime and ownership. The NNAPI is introducing the notion of an "Execution Burst" object (or more simply a "Burst" object), which is similar to an ANeuralNetworksExecution, but is intended to be reused across multiple executions and has lower IPC overheads. It achieves this low IPC overhead by replacing HIDL HwBinder calls with FMQ messages. Specifically, it replaces IPreparedModel::executeSynchronously's call from the client into the service with fmq_sync<FmqRequestDatum> (an FMQ channel used to pass a serialized Request object) and it replaces the return from the service into the client with fmq_sync<FmqResultDatum> (an FMQ channel used to return serialized result status and OutputShapes information). Each channel is a unidirectional flow of information with exactly one producer and exactly one consumer. The channels are created by the NN runtime and passed to the service via IPreparedModel::configureExecutionBurst. This CL defines the FmqRequestDatum and FmqResultDatum types in types.hal. IBurstContext.hal defines IBurstContext, a HIDL object used by the service to manage the resources of a Burst. IBurstCallback.hal defines IBurstCallback, a HIDL callback object that can be used to retrieve the handle to a resource the service has either not yet seen or has evicted from its cache. Finally, IPreparedModel.hal is extended with IPreparedModel::configureExecutionBurst to create the burst object. Bug: 119570067 Test: mma Change-Id: I333da70201531b1396efc714d096c277e8e1d47b Merged-In: I333da70201531b1396efc714d096c277e8e1d47b (cherry picked from commit 7e91e24fe155de15c677c48ca5a2c141ba2246dc)
2019-01-15 19:52:41 +01:00
* unique to the burst object.
*
* @param slots Values uniquely identifying memory regions within a Burst.
* @return status Indicates whether the memories were successfully returned;
* must be:
* - NONE if the memory region was successfully retrieved
* - GENERAL_FAILURE if there is an unspecified error
* - INVALID_ARGUMENT if a slot number is invalid
* @return buffers Memory buffers corresponding to the slot numbers. If an
* error occurs, an empty vector must be returned for
* buffers, otherwise slots.size() == buffers.size().
*/
getMemories(vec<int32_t> slots) generates (ErrorStatus status, vec<memory> buffers);
};