diff options
author | Michael Butler <butlermichael@google.com> | 2017-07-27 18:28:20 -0700 |
---|---|---|
committer | Michael Butler <butlermichael@google.com> | 2017-07-29 00:10:35 -0700 |
commit | 376ec0c0fd4a3f6b661599f37a03d66cbde9caa7 (patch) | |
tree | 5ebd649048c4a0deaec5032d23c9bda4f555b299 /neuralnetworks | |
parent | a732c00feb07badff49871621312c5bfa126a3cb (diff) | |
download | platform_hardware_interfaces-376ec0c0fd4a3f6b661599f37a03d66cbde9caa7.tar.gz platform_hardware_interfaces-376ec0c0fd4a3f6b661599f37a03d66cbde9caa7.tar.bz2 platform_hardware_interfaces-376ec0c0fd4a3f6b661599f37a03d66cbde9caa7.zip |
Move neuralnetworks HAL to hardware/interfaces
The neuralnetworks hal was placed in
frameworks/ml/nn/hardware/interfaces while VTS tests were being
developed.
This CL moves it to hardware/interfaces and another CL removes
it from frameworks/ml/nn/hardware/interfaces.
VTS tests included in a sibling CL in this topic.
Bug: 63905942
Test: mm -j40
Change-Id: I0e6c84de72a763edbaef3e9b3063c3ecca216337
Diffstat (limited to 'neuralnetworks')
-rw-r--r-- | neuralnetworks/1.0/Android.bp | 70 | ||||
-rw-r--r-- | neuralnetworks/1.0/IDevice.hal | 31 | ||||
-rw-r--r-- | neuralnetworks/1.0/IPreparedModel.hal | 25 | ||||
-rw-r--r-- | neuralnetworks/1.0/types.hal | 174 | ||||
-rw-r--r-- | neuralnetworks/Android.bp | 4 |
5 files changed, 304 insertions, 0 deletions
diff --git a/neuralnetworks/1.0/Android.bp b/neuralnetworks/1.0/Android.bp new file mode 100644 index 0000000000..1356d33d1c --- /dev/null +++ b/neuralnetworks/1.0/Android.bp @@ -0,0 +1,70 @@ +// This file is autogenerated by hidl-gen. Do not edit manually. + +filegroup { + name: "android.hardware.neuralnetworks@1.0_hal", + srcs: [ + "types.hal", + "IDevice.hal", + "IPreparedModel.hal", + ], +} + +genrule { + name: "android.hardware.neuralnetworks@1.0_genc++", + tools: ["hidl-gen"], + cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.neuralnetworks@1.0", + srcs: [ + ":android.hardware.neuralnetworks@1.0_hal", + ], + out: [ + "android/hardware/neuralnetworks/1.0/types.cpp", + "android/hardware/neuralnetworks/1.0/DeviceAll.cpp", + "android/hardware/neuralnetworks/1.0/PreparedModelAll.cpp", + ], +} + +genrule { + name: "android.hardware.neuralnetworks@1.0_genc++_headers", + tools: ["hidl-gen"], + cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.neuralnetworks@1.0", + srcs: [ + ":android.hardware.neuralnetworks@1.0_hal", + ], + out: [ + "android/hardware/neuralnetworks/1.0/types.h", + "android/hardware/neuralnetworks/1.0/hwtypes.h", + "android/hardware/neuralnetworks/1.0/IDevice.h", + "android/hardware/neuralnetworks/1.0/IHwDevice.h", + "android/hardware/neuralnetworks/1.0/BnHwDevice.h", + "android/hardware/neuralnetworks/1.0/BpHwDevice.h", + "android/hardware/neuralnetworks/1.0/BsDevice.h", + "android/hardware/neuralnetworks/1.0/IPreparedModel.h", + "android/hardware/neuralnetworks/1.0/IHwPreparedModel.h", + "android/hardware/neuralnetworks/1.0/BnHwPreparedModel.h", + "android/hardware/neuralnetworks/1.0/BpHwPreparedModel.h", + "android/hardware/neuralnetworks/1.0/BsPreparedModel.h", + ], +} + +cc_library_shared { + name: "android.hardware.neuralnetworks@1.0", + defaults: ["hidl-module-defaults"], + generated_sources: ["android.hardware.neuralnetworks@1.0_genc++"], + generated_headers: ["android.hardware.neuralnetworks@1.0_genc++_headers"], + export_generated_headers: ["android.hardware.neuralnetworks@1.0_genc++_headers"], + vendor_available: true, + shared_libs: [ + "libhidlbase", + "libhidltransport", + "libhwbinder", + "liblog", + "libutils", + "libcutils", + ], + export_shared_lib_headers: [ + "libhidlbase", + "libhidltransport", + "libhwbinder", + "libutils", + ], +} diff --git a/neuralnetworks/1.0/IDevice.hal b/neuralnetworks/1.0/IDevice.hal new file mode 100644 index 0000000000..b826b23774 --- /dev/null +++ b/neuralnetworks/1.0/IDevice.hal @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 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. + */ + +/* This HAL is a work in progress */ + +package android.hardware.neuralnetworks@1.0; + +import IPreparedModel; + +interface IDevice { + initialize() generates(Capabilities capabilities); + + getSupportedSubgraph(Model model) generates(vec<bool> supported); + + prepareModel(Model model) generates(IPreparedModel preparedModel); + + getStatus() generates(DeviceStatus status); +}; diff --git a/neuralnetworks/1.0/IPreparedModel.hal b/neuralnetworks/1.0/IPreparedModel.hal new file mode 100644 index 0000000000..566d6ace44 --- /dev/null +++ b/neuralnetworks/1.0/IPreparedModel.hal @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 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. + */ + +/* This HAL is a work in progress */ + +package android.hardware.neuralnetworks@1.0; + +interface IPreparedModel { + // TODO: The execution is synchronous. Change that to have a callback on completion. + // Multiple threads can call this execute function concurrently. + execute(Request request) generates(bool success); +}; diff --git a/neuralnetworks/1.0/types.hal b/neuralnetworks/1.0/types.hal new file mode 100644 index 0000000000..ccc17f144e --- /dev/null +++ b/neuralnetworks/1.0/types.hal @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2017 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. + */ + +/* This HAL is a work in progress */ + +package android.hardware.neuralnetworks@1.0; + +// The types an operand can have. +// These values are the same as found in the NeuralNetworks.h file. +// When modifying, be sure to update HAL_NUM_OPERAND_TYPES in HalIntefaces.h. +enum OperandType : uint32_t { + FLOAT16 = 0, + FLOAT32 = 1, + INT8 = 2, + UINT8 = 3, + INT16 = 4, + UINT16 = 5, + INT32 = 6, + UINT32 = 7, + TENSOR_FLOAT16 = 8, + TENSOR_FLOAT32 = 9, + TENSOR_SYMMETRICAL_QUANT8 = 10, +}; + +// The type of operations. Unlike the operation types found in +// NeuralNetworks.h file, these specify the data type they operate on. +// This is done to simplify the work of drivers. +// TODO: Currently they are the same. Add a conversion when finalizing the model. +// When modifying, be sure to update HAL_NUM_OPERATION_TYPES in HalIntefaces.h. +enum OperationType : uint32_t { + AVERAGE_POOL_FLOAT32 = 0, + CONCATENATION_FLOAT32 = 1, + CONV_FLOAT32 = 2, + DEPTHWISE_CONV_FLOAT32 = 3, + MAX_POOL_FLOAT32 = 4, + L2_POOL_FLOAT32 = 5, + DEPTH_TO_SPACE_FLOAT32 = 6, + SPACE_TO_DEPTH_FLOAT32 = 7, + LOCAL_RESPONSE_NORMALIZATION_FLOAT32 = 8, + SOFTMAX_FLOAT32 = 9, + RESHAPE_FLOAT32 = 10, + SPLIT_FLOAT32 = 11, + FAKE_QUANT_FLOAT32 = 12, + ADD_FLOAT32 = 13, + FULLY_CONNECTED_FLOAT32 = 14, + CAST_FLOAT32 = 15, + MUL_FLOAT32 = 16, + L2_NORMALIZATION_FLOAT32 = 17, + LOGISTIC_FLOAT32 = 18, + RELU_FLOAT32 = 19, + RELU6_FLOAT32 = 20, + RELU1_FLOAT32 = 21, + TANH_FLOAT32 = 22, + DEQUANTIZE_FLOAT32 = 23, + FLOOR_FLOAT32 = 24, + GATHER_FLOAT32 = 25, + RESIZE_BILINEAR_FLOAT32 = 26, + LSH_PROJECTION_FLOAT32 = 27, + LSTM_FLOAT32 = 28, + SVDF_FLOAT32 = 29, + RNN_FLOAT32 = 30, + N_GRAM_FLOAT32 = 31, + LOOKUP_FLOAT32 = 32, +}; + +// Two special values that can be used instead of a regular poolIndex. +enum LocationValues : uint32_t { + // The location will be specified at runtime. It's either a temporary + // variable, an input, or an output. + LOCATION_AT_RUN_TIME = 0xFFFFFFFF, + // The operand's value is stored in the + // TODO: Only for old + LOCATION_SAME_BLOCK = 0xFFFFFFFE +}; + +// Status of a device. +enum DeviceStatus : uint32_t { + AVAILABLE, + BUSY, + OFFLINE, + UNKNOWN // Do we need this? +}; + +// For the reference workload +// Used by a driver to report its performance characteristics. +// TODO revisit the data types and scales. +struct PerformanceInfo { + float execTime; // in nanoseconds + float powerUsage; // in picoJoules +}; + +// The capabilities of a driver. +struct Capabilities { + vec<OperationType> supportedOperationTypes; + // TODO Do the same for baseline model IDs + bool cachesCompilation; + // TODO revisit the data types and scales. + float bootupTime; // in nanoseconds + PerformanceInfo float16Performance; + PerformanceInfo float32Performance; + PerformanceInfo quantized8Performance; +}; + +// Describes the location of a data object. +struct DataLocation { + // The index of the memory pool where this location is found. + // Two special values can also be used. See the LOCATION_* constants above. + uint32_t poolIndex; + // Offset in bytes from the start of the pool. + uint32_t offset; + // The length of the data, in bytes. + uint32_t length; +}; + +struct Operand { + OperandType type; + vec<uint32_t> dimensions; + + // The number of operations that uses this operand as input. + // TODO It would be nice to track the actual consumers, e.g. vec<uint32_t> consumers; + uint32_t numberOfConsumers; + + float scale; + int32_t zeroPoint; + + // Where to find the data for this operand. + DataLocation location; +}; + +// Describes one operation of the graph. +struct Operation { + // The type of operation. + OperationType type; + // Describes the table that contains the indexes of the inputs of the + // operation. The offset is the index in the operandIndexes table. + vec<uint32_t> inputs; + // Describes the table that contains the indexes of the outputs of the + // operation. The offset is the index in the operandIndexes table. + vec<uint32_t> outputs; +}; + +struct InputOutputInfo { + DataLocation location; + // If dimensions.size() > 0, we have updated dimensions. + vec<uint32_t> dimensions; +}; + +struct Model { + vec<Operand> operands; + vec<Operation> operations; + vec<uint32_t> inputIndexes; + vec<uint32_t> outputIndexes; + vec<uint8_t> operandValues; + vec<memory> pools; +}; + +struct Request { + vec<InputOutputInfo> inputs; + vec<InputOutputInfo> outputs; + vec<memory> pools; +}; diff --git a/neuralnetworks/Android.bp b/neuralnetworks/Android.bp new file mode 100644 index 0000000000..bbb3e4bac0 --- /dev/null +++ b/neuralnetworks/Android.bp @@ -0,0 +1,4 @@ +// This is an autogenerated file, do not edit. +subdirs = [ + "1.0", +] |