summaryrefslogtreecommitdiff
path: root/runtimes/pure_arm_compute/src/internal/Model.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtimes/pure_arm_compute/src/internal/Model.cc')
-rw-r--r--runtimes/pure_arm_compute/src/internal/Model.cc125
1 files changed, 125 insertions, 0 deletions
diff --git a/runtimes/pure_arm_compute/src/internal/Model.cc b/runtimes/pure_arm_compute/src/internal/Model.cc
new file mode 100644
index 000000000..3a31f9911
--- /dev/null
+++ b/runtimes/pure_arm_compute/src/internal/Model.cc
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * 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.
+ */
+
+#include "internal/Model.h"
+
+#include <cassert>
+
+namespace internal
+{
+namespace tflite
+{
+namespace operand
+{
+
+Shape::Shape(uint32_t rank) : nnfw::util::tensor::Shape(rank)
+{
+ // DO NOTHING
+}
+
+int32_t Shape::asVector(void) const
+{
+ assert(rank() == 1);
+
+ return dim(0);
+}
+
+nnfw::util::matrix::Shape Shape::asMatrix(void) const
+{
+ assert(rank() == 2);
+
+ const auto height = dim(0);
+ const auto width = dim(1);
+
+ return nnfw::util::matrix::Shape(height, width);
+}
+
+nnfw::util::feature::Shape Shape::asFeature(void) const
+{
+ assert(rank() == 4);
+
+ // Feature Map in NNAPI
+ // - Dimension(0) -> Batch
+ // - Dimension(1) -> Height
+ // - Dimension(2) -> Width
+ // - Dimension(3) -> Depth
+
+ const auto batch = dim(0);
+ const auto depth = dim(3);
+ const auto height = dim(1);
+ const auto width = dim(2);
+
+ return nnfw::util::feature::Shape(batch, depth, height, width);
+}
+
+nnfw::util::tensor::Shape Shape::asTensor(void) const
+{
+ return nnfw::util::tensor::Shape(*this); // this shape represents shape of NNAPI
+}
+
+nnfw::util::kernel::Shape Shape::asKernel(void) const
+{
+ assert(rank() == 4);
+
+ // Convolution Kernel in NNAPI
+ // - Dimension(0) -> Count
+ // - Dimension(1) -> Height
+ // - Dimension(2) -> Width
+ // - Dimension(3) -> Depth
+ const auto count = dim(0);
+ const auto depth = dim(3);
+ const auto height = dim(1);
+ const auto width = dim(2);
+
+ return nnfw::util::kernel::Shape(count, depth, height, width);
+}
+
+// Extended dimension is filled with 1.
+void Shape::extendRank(size_t to_rank)
+{
+ for (int i = rank() + 1; i <= to_rank; ++i)
+ {
+ prepend(1);
+ }
+}
+
+} // namespace operand
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace operand
+{
+
+Index Set::append(const Shape &shape, int32_t type, float scale, int32_t zeroPoint)
+{
+ int32_t index = _objects.size();
+
+ _objects.emplace_back(new Object{shape, type, scale, zeroPoint});
+
+ return Index{index};
+}
+
+const Object &Set::at(const Index &index) const { return *(_objects.at(index.asInt())); }
+
+Object &Set::at(const Index &index) { return *(_objects.at(index.asInt())); }
+
+} // namespace operand
+} // namespace tflite
+} // namespace internal