[NNOP] Introduce VectorInputAccessor (#717)
author김정현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh0822.kim@samsung.com>
Mon, 16 Apr 2018 07:14:39 +0000 (16:14 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 16 Apr 2018 07:14:39 +0000 (16:14 +0900)
this commit introduces VectorInputAccessor to get input for FC-FC.

Signed-off-by: Junghyun Kim <jh0822.kim@samsung.com>
src/kernel/acl/src/IO_accessor.cpp
src/kernel/acl/src/IO_accessor.h

index b3c8f8d..da58e47 100644 (file)
@@ -12,6 +12,12 @@ InputAccessor::InputAccessor(const float* inputData, const android::nn::Shape& i
 {
 }
 
+VectorInputAccessor::VectorInputAccessor(const float* inputData, const android::nn::Shape& inputShape)
+  : _inputData(inputData)
+  , _inputShape(inputShape)
+{
+}
+
 WeightAccessor::WeightAccessor(const float* filterData, const android::nn::Shape& filterShape)
   : _filterData(filterData)
   , _filterShape(filterShape)
@@ -119,6 +125,23 @@ bool InputAccessor::access_tensor(arm_compute::ITensor &tensor)
   return true;
 }
 
+bool VectorInputAccessor::access_tensor(arm_compute::ITensor &tensor)
+{
+  arm_compute::Window window;
+  window.use_tensor_dimensions(tensor.info()->tensor_shape());
+
+  assert(tensor.info()->tensor_shape().num_dimensions() == 1);
+
+  execute_window_loop(window, [&](const arm_compute::Coordinates& id)
+  {
+    uint32_t offset = id[0];
+
+    *reinterpret_cast<float *>(tensor.ptr_to_element(id)) =
+        *(_inputData + offset);
+  });
+  return true;
+}
+
 bool WeightAccessor::access_tensor(arm_compute::ITensor &tensor)
 {
   arm_compute::Window window;
index 7c94386..4fc52a4 100644 (file)
@@ -25,6 +25,20 @@ private:
     const android::nn::Shape& _inputShape;
 };
 
+class VectorInputAccessor : public arm_compute::graph::ITensorAccessor
+{
+public:
+    VectorInputAccessor(const float* inputData, const android::nn::Shape& inputShape);
+    VectorInputAccessor(VectorInputAccessor&&) = default;
+
+    // Inherited methods overriden:
+    bool access_tensor(arm_compute::ITensor& tensor) override;
+
+private:
+    const float* _inputData;
+    const android::nn::Shape& _inputShape;
+};
+
 class WeightAccessor : public arm_compute::graph::ITensorAccessor
 {
 public: