summaryrefslogtreecommitdiffstats
path: root/neuralnetworks
diff options
context:
space:
mode:
authorMichael Butler <butlermichael@google.com>2017-07-27 18:28:20 -0700
committerMichael Butler <butlermichael@google.com>2017-07-29 00:10:35 -0700
commit376ec0c0fd4a3f6b661599f37a03d66cbde9caa7 (patch)
tree5ebd649048c4a0deaec5032d23c9bda4f555b299 /neuralnetworks
parenta732c00feb07badff49871621312c5bfa126a3cb (diff)
downloadplatform_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.bp70
-rw-r--r--neuralnetworks/1.0/IDevice.hal31
-rw-r--r--neuralnetworks/1.0/IPreparedModel.hal25
-rw-r--r--neuralnetworks/1.0/types.hal174
-rw-r--r--neuralnetworks/Android.bp4
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",
+]