From cf6ffbcaeb1c833b91f638a827efe037f3815209 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EA=B9=80=EC=88=98=EC=A7=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Engineer/=EC=82=BC=EC=84=B1=EC=A0=84?= =?utf8?q?=EC=9E=90?= Date: Wed, 8 Aug 2018 14:55:20 +0900 Subject: [PATCH] [neurun] Change parameters for TensorConversion kernels (#2187) Related : #2142 This commit changes parameters for TensorConversion kernels. - Introduce Tensor Shape parameter for iterating tensors by shape info - Change CPU Data parameter from a pointer to Tensor Signed-off-by: sjsujinkim --- .../neurun/src/backend/acl_cl/StageGenerator.cc | 26 +++++++++++++++------- runtimes/neurun/src/backend/cpu/StageGenerator.cc | 26 +++++++++++++++------- .../kernel/acl_cl/TensorConvertFromCommonLayer.cc | 4 +++- .../kernel/acl_cl/TensorConvertFromCommonLayer.h | 5 ++++- .../kernel/acl_cl/TensorConvertToCommonLayer.cc | 4 +++- .../src/kernel/acl_cl/TensorConvertToCommonLayer.h | 5 ++++- .../cpufallback/TensorConvertFromCommonLayer.cc | 10 +++++---- .../cpufallback/TensorConvertFromCommonLayer.h | 10 ++++++--- .../cpufallback/TensorConvertToCommonLayer.cc | 10 +++++---- .../cpufallback/TensorConvertToCommonLayer.h | 10 ++++++--- 10 files changed, 76 insertions(+), 34 deletions(-) diff --git a/runtimes/neurun/src/backend/acl_cl/StageGenerator.cc b/runtimes/neurun/src/backend/acl_cl/StageGenerator.cc index 047eae3..73d022a 100644 --- a/runtimes/neurun/src/backend/acl_cl/StageGenerator.cc +++ b/runtimes/neurun/src/backend/acl_cl/StageGenerator.cc @@ -529,12 +529,16 @@ Stage StageGenerator::generate( struct Param { int ifm_index; + + internal::tflite::operand::Shape shape{1}; }; Param param; param.ifm_index = ifm_index.asInt(); + param.shape = _ctx.at(ifm_index).shape(); + auto tensors = _tensor_builder; _common_tensor_builder->mark(ifm_index); @@ -542,14 +546,15 @@ Stage StageGenerator::generate( auto common_tensor_builder = _common_tensor_builder; return [tensors, common_tensor_builder, param](IExecutionBuilder &builder) { - auto input_alloc = tensors->at(::internal::tflite::operand::Index{param.ifm_index}).get(); - auto common_tensor = - common_tensor_builder->at(::internal::tflite::operand::Index{param.ifm_index}); + const ::internal::tflite::operand::Index ifm_index{param.ifm_index}; + + auto input_alloc = tensors->at(ifm_index).get(); + auto common_tensor = common_tensor_builder->at(ifm_index); std::unique_ptr<::neurun::kernel::acl_cl::TensorConvertFromCommonLayer> fn{ new ::neurun::kernel::acl_cl::TensorConvertFromCommonLayer}; - fn->configure(common_tensor.get(), input_alloc); + fn->configure(common_tensor.get(), input_alloc, param.shape); builder.append(std::move(fn)); }; @@ -562,12 +567,16 @@ Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::AclT struct Param { int ofm_index; + + internal::tflite::operand::Shape shape{1}; }; Param param; param.ofm_index = ofm_index.asInt(); + param.shape = _ctx.at(ofm_index).shape(); + auto tensors = _tensor_builder; _common_tensor_builder->mark(ofm_index); @@ -575,14 +584,15 @@ Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::AclT auto common_tensor_builder = _common_tensor_builder; return [tensors, common_tensor_builder, param](IExecutionBuilder &builder) { - auto output_alloc = tensors->at(::internal::tflite::operand::Index{param.ofm_index}).get(); - auto common_tensor = - common_tensor_builder->at(::internal::tflite::operand::Index{param.ofm_index}); + const ::internal::tflite::operand::Index ofm_index{param.ofm_index}; + + auto output_alloc = tensors->at(ofm_index).get(); + auto common_tensor = common_tensor_builder->at(ofm_index); std::unique_ptr<::neurun::kernel::acl_cl::TensorConvertToCommonLayer> fn{ new ::neurun::kernel::acl_cl::TensorConvertToCommonLayer}; - fn->configure(output_alloc, common_tensor.get()); + fn->configure(output_alloc, common_tensor.get(), param.shape); builder.append(std::move(fn)); }; diff --git a/runtimes/neurun/src/backend/cpu/StageGenerator.cc b/runtimes/neurun/src/backend/cpu/StageGenerator.cc index a3b882d..0993bda 100644 --- a/runtimes/neurun/src/backend/cpu/StageGenerator.cc +++ b/runtimes/neurun/src/backend/cpu/StageGenerator.cc @@ -516,12 +516,16 @@ Stage StageGenerator::generate( struct Param { int ifm_index; + + internal::tflite::operand::Shape shape{1}; }; Param param; param.ifm_index = ifm_index.asInt(); + param.shape = _ctx.at(ifm_index).shape(); + auto tensors = _tensor_builder; _common_tensor_builder->mark(ifm_index); @@ -529,14 +533,15 @@ Stage StageGenerator::generate( auto common_tensor_builder = _common_tensor_builder; return [tensors, common_tensor_builder, param](IExecutionBuilder &builder) { - auto input_alloc = tensors->at(::internal::tflite::operand::Index{param.ifm_index}).get(); - auto common_tensor = - common_tensor_builder->at(::internal::tflite::operand::Index{param.ifm_index}); + const ::internal::tflite::operand::Index ifm_index{param.ifm_index}; + + auto input_alloc = tensors->at(ifm_index).get(); + auto common_tensor = common_tensor_builder->at(ifm_index); std::unique_ptr<::neurun::kernel::cpu::TensorConvertFromCommonLayer> fn{ new ::neurun::kernel::cpu::TensorConvertFromCommonLayer}; - fn->configure(common_tensor.get(), input_alloc->buffer()); + fn->configure(common_tensor.get(), input_alloc, param.shape); builder.append(std::move(fn)); }; @@ -549,12 +554,16 @@ Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::CpuT struct Param { int ofm_index; + + internal::tflite::operand::Shape shape{1}; }; Param param; param.ofm_index = ofm_index.asInt(); + param.shape = _ctx.at(ofm_index).shape(); + auto tensors = _tensor_builder; _common_tensor_builder->mark(ofm_index); @@ -562,14 +571,15 @@ Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::CpuT auto common_tensor_builder = _common_tensor_builder; return [tensors, common_tensor_builder, param](IExecutionBuilder &builder) { - auto output_alloc = tensors->at(::internal::tflite::operand::Index{param.ofm_index}).get(); - auto common_tensor = - common_tensor_builder->at(::internal::tflite::operand::Index{param.ofm_index}); + const ::internal::tflite::operand::Index ofm_index{param.ofm_index}; + + auto output_alloc = tensors->at(ofm_index).get(); + auto common_tensor = common_tensor_builder->at(ofm_index); std::unique_ptr<::neurun::kernel::cpu::TensorConvertToCommonLayer> fn{ new ::neurun::kernel::cpu::TensorConvertToCommonLayer}; - fn->configure(output_alloc->buffer(), common_tensor.get()); + fn->configure(output_alloc, common_tensor.get(), param.shape); builder.append(std::move(fn)); }; diff --git a/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.cc b/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.cc index 87165fd..7469fc6 100644 --- a/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.cc +++ b/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.cc @@ -33,10 +33,12 @@ bool TensorConvertFromCommonLayer::convert() } void TensorConvertFromCommonLayer::configure(::internal::common::Tensor *inputTensor, - ::arm_compute::ICLTensor *outputTensor) + ::arm_compute::ICLTensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape) { _inputTensor = inputTensor; _outputTensor = outputTensor; + _tensorShape = tensorShape; } void TensorConvertFromCommonLayer::run() { convert(); } diff --git a/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.h b/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.h index fb509c6..c193015 100644 --- a/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.h +++ b/runtimes/neurun/src/kernel/acl_cl/TensorConvertFromCommonLayer.h @@ -40,13 +40,16 @@ public: public: bool convert(); - void configure(::internal::common::Tensor *inputTensor, ::arm_compute::ICLTensor *outputTensor); + void configure(::internal::common::Tensor *inputTensor, ::arm_compute::ICLTensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape); void run(); private: ::internal::common::Tensor *_inputTensor; ::arm_compute::ICLTensor *_outputTensor; + + ::internal::tflite::operand::Shape _tensorShape{1}; }; } // namespace acl_cl diff --git a/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.cc b/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.cc index a9538ac..2e0851e 100644 --- a/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.cc +++ b/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.cc @@ -33,10 +33,12 @@ bool TensorConvertToCommonLayer::convert() } void TensorConvertToCommonLayer::configure(::arm_compute::ICLTensor *inputTensor, - ::internal::common::Tensor *outputTensor) + ::internal::common::Tensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape) { _inputTensor = inputTensor; _outputTensor = outputTensor; + _tensorShape = tensorShape; } void TensorConvertToCommonLayer::run() { convert(); } diff --git a/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.h b/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.h index 07fe06e..fca1681 100644 --- a/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.h +++ b/runtimes/neurun/src/kernel/acl_cl/TensorConvertToCommonLayer.h @@ -40,13 +40,16 @@ public: public: bool convert(); - void configure(::arm_compute::ICLTensor *inputTensor, ::internal::common::Tensor *outputTensor); + void configure(::arm_compute::ICLTensor *inputTensor, ::internal::common::Tensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape); void run(); private: ::arm_compute::ICLTensor *_inputTensor; ::internal::common::Tensor *_outputTensor; + + ::internal::tflite::operand::Shape _tensorShape{1}; }; } // namespace acl_cl diff --git a/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.cc b/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.cc index 5835256..18e2644 100644 --- a/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.cc +++ b/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.cc @@ -32,11 +32,13 @@ bool TensorConvertFromCommonLayer::convert() return true; } -void TensorConvertFromCommonLayer::configure(::internal::common::Tensor *inputData, - uint8_t *outputData) +void TensorConvertFromCommonLayer::configure(::internal::common::Tensor *inputTensor, + ::internal::cpu::Tensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape) { - _inputData = inputData; - _outputData = outputData; + _inputTensor = inputTensor; + _outputTensor = outputTensor; + _tensorShape = tensorShape; } void TensorConvertFromCommonLayer::run() { convert(); } diff --git a/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.h b/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.h index 9b4e6a3..2fad500 100644 --- a/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.h +++ b/runtimes/neurun/src/kernel/cpufallback/TensorConvertFromCommonLayer.h @@ -23,6 +23,7 @@ #include "internal/Model.h" #include "internal/common/Tensor.h" +#include "internal/cpu.h" namespace neurun { @@ -39,13 +40,16 @@ public: public: bool convert(); - void configure(::internal::common::Tensor *inputData, uint8_t *outputData); + void configure(::internal::common::Tensor *inputTensor, ::internal::cpu::Tensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape); void run(); private: - ::internal::common::Tensor *_inputData; - uint8_t *_outputData; + ::internal::common::Tensor *_inputTensor; + ::internal::cpu::Tensor *_outputTensor; + + ::internal::tflite::operand::Shape _tensorShape{1}; }; } // namespace cpu diff --git a/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.cc b/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.cc index 5fa3453..a19a5cf 100644 --- a/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.cc +++ b/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.cc @@ -32,11 +32,13 @@ bool TensorConvertToCommonLayer::convert() return true; } -void TensorConvertToCommonLayer::configure(uint8_t *inputData, - ::internal::common::Tensor *outputData) +void TensorConvertToCommonLayer::configure(::internal::cpu::Tensor *inputTensor, + ::internal::common::Tensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape) { - _inputData = inputData; - _outputData = outputData; + _inputTensor = inputTensor; + _outputTensor = outputTensor; + _tensorShape = tensorShape; } void TensorConvertToCommonLayer::run() { convert(); } diff --git a/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.h b/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.h index 0e4dc2b..10edac5 100644 --- a/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.h +++ b/runtimes/neurun/src/kernel/cpufallback/TensorConvertToCommonLayer.h @@ -23,6 +23,7 @@ #include "internal/Model.h" #include "internal/common/Tensor.h" +#include "internal/cpu.h" namespace neurun { @@ -39,13 +40,16 @@ public: public: bool convert(); - void configure(uint8_t *inputData, ::internal::common::Tensor *outputData); + void configure(::internal::cpu::Tensor *inputTensor, ::internal::common::Tensor *outputTensor, + const ::internal::tflite::operand::Shape &tensorShape); void run(); private: - uint8_t *_inputData; - ::internal::common::Tensor *_outputData; + ::internal::cpu::Tensor *_inputTensor; + ::internal::common::Tensor *_outputTensor; + + ::internal::tflite::operand::Shape _tensorShape{1}; }; } // namespace cpu -- 2.7.4