summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtimes/neurun/frontend/nnapi/model.cc2
-rw-r--r--runtimes/neurun/frontend/nnapi/wrapper/OperationFactory.cc42
-rw-r--r--tests/nnapi/nnapi_gtest.skip.armv7l-linux2
-rw-r--r--tests/nnapi/nnapi_gtest.skip.armv7l-linux.neurun.cpu2
-rw-r--r--tests/nnapi/nnapi_gtest.skip.armv7l-tizen2
-rw-r--r--tests/nnapi/specs/Ex/greater_equal_ex.mod.py35
-rw-r--r--tests/nnapi/specs/Ex/less_ex.mod.py35
7 files changed, 119 insertions, 1 deletions
diff --git a/runtimes/neurun/frontend/nnapi/model.cc b/runtimes/neurun/frontend/nnapi/model.cc
index 89a54f372..5a3b787e8 100644
--- a/runtimes/neurun/frontend/nnapi/model.cc
+++ b/runtimes/neurun/frontend/nnapi/model.cc
@@ -294,7 +294,7 @@ int ANeuralNetworksModel_addOperationEx(ANeuralNetworksModel *model,
}
const ANeuralNetworksOperationTypeEx FIRST_OPERATION = ANEURALNETWORKS_CAST_EX;
- const ANeuralNetworksOperationTypeEx LAST_OPERATION = ANEURALNETWORKS_PRELU_EX;
+ const ANeuralNetworksOperationTypeEx LAST_OPERATION = ANEURALNETWORKS_LESS_EX;
if ((type < FIRST_OPERATION) || (type > LAST_OPERATION))
{
VERBOSE(NNAPI::Model) << "addOperation: Invalid operation type" << std::endl;
diff --git a/runtimes/neurun/frontend/nnapi/wrapper/OperationFactory.cc b/runtimes/neurun/frontend/nnapi/wrapper/OperationFactory.cc
index dd04ca06a..d88e8aaef 100644
--- a/runtimes/neurun/frontend/nnapi/wrapper/OperationFactory.cc
+++ b/runtimes/neurun/frontend/nnapi/wrapper/OperationFactory.cc
@@ -618,6 +618,48 @@ OperationFactory::OperationFactory()
return new operation::ExpNode{inputs, outputs};
};
+ _map[ANEURALNETWORKS_GREATER_EQUAL_EX] = [](const OperationFactory::Param &init_param,
+ neurun::model::operand::Set &operands) {
+ assert(init_param.input_count == 2 && init_param.output_count == 1);
+
+ operand::IndexSet outputs{init_param.outputs[0]};
+
+ // Each input should be interpreted as follows:
+ //
+ // 0 -> input0 Tensor Index
+ // 1 -> input1 Tensor Index
+ operand::IndexSet inputs{init_param.inputs[0], init_param.inputs[1]};
+
+ operation::ComparisonNode::Param param;
+ param.comparison_type = operation::ComparisonNode::ComparisonType::GreaterEqual;
+
+ // Output operand type must be boolean
+ replaceDataType(operands, outputs.at(0), operand::DataType::TENSOR_BOOL8);
+
+ return new operation::ComparisonNode{inputs, outputs, param};
+ };
+
+ _map[ANEURALNETWORKS_LESS_EX] = [](const OperationFactory::Param &init_param,
+ neurun::model::operand::Set &operands) {
+ assert(init_param.input_count == 2 && init_param.output_count == 1);
+
+ operand::IndexSet outputs{init_param.outputs[0]};
+
+ // Each input should be interpreted as follows:
+ //
+ // 0 -> input0 Tensor Index
+ // 1 -> input1 Tensor Index
+ operand::IndexSet inputs{init_param.inputs[0], init_param.inputs[1]};
+
+ operation::ComparisonNode::Param param;
+ param.comparison_type = operation::ComparisonNode::ComparisonType::Less;
+
+ // Output operand type must be boolean
+ replaceDataType(operands, outputs.at(0), operand::DataType::TENSOR_BOOL8);
+
+ return new operation::ComparisonNode{inputs, outputs, param};
+ };
+
_map[ANEURALNETWORKS_REDUCE_MAX_EX] = [](const OperationFactory::Param &init_param,
neurun::model::operand::Set &) {
assert(init_param.input_count == 2 && init_param.output_count == 1);
diff --git a/tests/nnapi/nnapi_gtest.skip.armv7l-linux b/tests/nnapi/nnapi_gtest.skip.armv7l-linux
index 344beb362..27a18d35d 100644
--- a/tests/nnapi/nnapi_gtest.skip.armv7l-linux
+++ b/tests/nnapi/nnapi_gtest.skip.armv7l-linux
@@ -1,3 +1,5 @@
+GeneratedTests.greater_equal_ex*
+GeneratedTests.less_ex*
GeneratedTests.lsh_projection
GeneratedTests.lsh_projection_2
GeneratedTests.lsh_projection_weights_as_inputs
diff --git a/tests/nnapi/nnapi_gtest.skip.armv7l-linux.neurun.cpu b/tests/nnapi/nnapi_gtest.skip.armv7l-linux.neurun.cpu
index f04f13059..630e98ab6 100644
--- a/tests/nnapi/nnapi_gtest.skip.armv7l-linux.neurun.cpu
+++ b/tests/nnapi/nnapi_gtest.skip.armv7l-linux.neurun.cpu
@@ -27,10 +27,12 @@ GeneratedTests.embedding_lookup_4d_nnfw
GeneratedTests.equal_ex*
GeneratedTests.exp_ex*
GeneratedTests.floor_
+GeneratedTests.greater_equal_ex*
GeneratedTests.hashtable_lookup*
GeneratedTests.l2_normalization*
GeneratedTests.l2_pool*
GeneratedTests.local_response_norm*
+GeneratedTests.less_ex*
GeneratedTests.logical_and_ex*
GeneratedTests.logical_or_ex*
GeneratedTests.logistic*
diff --git a/tests/nnapi/nnapi_gtest.skip.armv7l-tizen b/tests/nnapi/nnapi_gtest.skip.armv7l-tizen
index 2859a02b3..a188c2882 100644
--- a/tests/nnapi/nnapi_gtest.skip.armv7l-tizen
+++ b/tests/nnapi/nnapi_gtest.skip.armv7l-tizen
@@ -1,5 +1,7 @@
GeneratedTests.add_broadcast_quant8
GeneratedTests.add_quant8
+GeneratedTests.greater_equal_ex*
+GeneratedTests.less_ex*
GeneratedTests.logical_and_ex*
GeneratedTests.logical_not_ex*
GeneratedTests.logical_or_ex*
diff --git a/tests/nnapi/specs/Ex/greater_equal_ex.mod.py b/tests/nnapi/specs/Ex/greater_equal_ex.mod.py
new file mode 100644
index 000000000..7c62d568b
--- /dev/null
+++ b/tests/nnapi/specs/Ex/greater_equal_ex.mod.py
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
+# Copyright (C) 2018 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.
+#
+
+# model
+model = Model()
+i1 = Input("op1", "TENSOR_FLOAT32", "{2, 1}")
+i2 = Input("op2", "TENSOR_FLOAT32", "{2}")
+i3 = Output("op3", "TENSOR_QUANT8_ASYMM", "{2, 2}, 1.0, 0")
+model = model.Operation("GREATER_EQUAL_EX", i1, i2).To(i3)
+
+# Example 1. Input in operand 0,
+input0 = {i1: # input 0
+ [5, 10],
+ i2: # input 1
+ [10, 5]}
+
+output0 = {i3: # output 0
+ [0, 255, 255, 255]}
+
+# Instantiate an example
+Example((input0, output0))
diff --git a/tests/nnapi/specs/Ex/less_ex.mod.py b/tests/nnapi/specs/Ex/less_ex.mod.py
new file mode 100644
index 000000000..3ae15b62f
--- /dev/null
+++ b/tests/nnapi/specs/Ex/less_ex.mod.py
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
+# Copyright (C) 2018 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.
+#
+
+# model
+model = Model()
+i1 = Input("op1", "TENSOR_FLOAT32", "{2, 1}")
+i2 = Input("op2", "TENSOR_FLOAT32", "{2}")
+i3 = Output("op3", "TENSOR_QUANT8_ASYMM", "{2, 2}, 1.0, 0")
+model = model.Operation("LESS_EX", i1, i2).To(i3)
+
+# Example 1. Input in operand 0,
+input0 = {i1: # input 0
+ [5, 10],
+ i2: # input 1
+ [10, 5]}
+
+output0 = {i3: # output 0
+ [255, 0, 0, 0]}
+
+# Instantiate an example
+Example((input0, output0))