From e6b20f82f68bcd28ae484a6db64941c812a7df1d Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EA=B9=80=EC=A0=95=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Senior=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Mon, 16 Apr 2018 16:14:39 +0900 Subject: [PATCH] [NNOP] Introduce VectorInputAccessor (#717) this commit introduces VectorInputAccessor to get input for FC-FC. Signed-off-by: Junghyun Kim --- src/kernel/acl/src/IO_accessor.cpp | 23 +++++++++++++++++++++++ src/kernel/acl/src/IO_accessor.h | 14 ++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/kernel/acl/src/IO_accessor.cpp b/src/kernel/acl/src/IO_accessor.cpp index b3c8f8d..da58e47 100644 --- a/src/kernel/acl/src/IO_accessor.cpp +++ b/src/kernel/acl/src/IO_accessor.cpp @@ -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(tensor.ptr_to_element(id)) = + *(_inputData + offset); + }); + return true; +} + bool WeightAccessor::access_tensor(arm_compute::ITensor &tensor) { arm_compute::Window window; diff --git a/src/kernel/acl/src/IO_accessor.h b/src/kernel/acl/src/IO_accessor.h index 7c94386..4fc52a4 100644 --- a/src/kernel/acl/src/IO_accessor.h +++ b/src/kernel/acl/src/IO_accessor.h @@ -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: -- 2.7.4