From: 박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 Date: Tue, 2 Oct 2018 10:03:36 +0000 (+0900) Subject: [coco] Introduce KernelLayout interface (#1725) X-Git-Tag: nncc_backup~1639 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=499b43bc2fec77ad431d210a278562a33bd45f25;p=platform%2Fcore%2Fml%2Fnnfw.git [coco] Introduce KernelLayout interface (#1725) This commit introduces KernelLayout interface, and rewrites KernelObject to use this interface instead of GenericKernelLayout. Signed-off-by: Jonghyun Park --- diff --git a/contrib/coco/core/include/coco/IR/GenericKernelLayout.h b/contrib/coco/core/include/coco/IR/GenericKernelLayout.h index 14b6d4d..4073973 100644 --- a/contrib/coco/core/include/coco/IR/GenericKernelLayout.h +++ b/contrib/coco/core/include/coco/IR/GenericKernelLayout.h @@ -17,7 +17,7 @@ #ifndef __COCO_IR_GENERIC_KERNEL_LAYOUT_H__ #define __COCO_IR_GENERIC_KERNEL_LAYOUT_H__ -#include "coco/IR/ElemID.h" +#include "coco/IR/KernelLayout.h" #include @@ -26,16 +26,16 @@ namespace coco { -class GenericKernelLayout +class GenericKernelLayout final : public KernelLayout { public: GenericKernelLayout(const nncc::core::ADT::kernel::Shape &shape); public: - const nncc::core::ADT::kernel::Shape &shape(void) const { return _shape; } + const nncc::core::ADT::kernel::Shape &shape(void) const override { return _shape; } ElemID &at(uint32_t n, uint32_t ch, uint32_t row, uint32_t col); - ElemID at(uint32_t n, uint32_t ch, uint32_t row, uint32_t col) const; + ElemID at(uint32_t n, uint32_t ch, uint32_t row, uint32_t col) const override; void reorder(const nncc::core::ADT::kernel::Layout &l); template void reorder(void) { reorder(LayoutImpl{}); } diff --git a/contrib/coco/core/include/coco/IR/KernelLayout.h b/contrib/coco/core/include/coco/IR/KernelLayout.h new file mode 100644 index 0000000..09cc743 --- /dev/null +++ b/contrib/coco/core/include/coco/IR/KernelLayout.h @@ -0,0 +1,43 @@ +/* + * 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. + */ + +#ifndef __COCO_IR_KERNEL_LAYOUT_H__ +#define __COCO_IR_KERNEL_LAYOUT_H__ + +#include "coco/IR/ElemID.h" + +#include + +namespace coco +{ + +/** + * @brief A KernelLayout connectes each kernel index to an element (in a bag) + * + * NOTE KernelLayout is an immutable interface + */ +struct KernelLayout +{ + virtual ~KernelLayout() = default; + + virtual const nncc::core::ADT::kernel::Shape &shape(void) const = 0; + + virtual ElemID at(uint32_t n, uint32_t ch, uint32_t row, uint32_t col) const = 0; +}; + +} // namespace coco + +#endif // __COCO_IR_KERNEL_LAYOUT_H__ diff --git a/contrib/coco/core/include/coco/IR/KernelObject.h b/contrib/coco/core/include/coco/IR/KernelObject.h index bc9d3c0..587f8bc 100644 --- a/contrib/coco/core/include/coco/IR/KernelObject.h +++ b/contrib/coco/core/include/coco/IR/KernelObject.h @@ -52,11 +52,11 @@ public: ElemID at(uint32_t n, uint32_t ch, uint32_t row, uint32_t col) const; public: - const GenericKernelLayout *layout(void) const { return _layout.get(); } - void layout(std::unique_ptr &&l) { _layout = std::move(l); } + const KernelLayout *layout(void) const { return _layout.get(); } + void layout(std::unique_ptr &&l) { _layout = std::move(l); } private: - std::unique_ptr _layout; + std::unique_ptr _layout; }; } // namespace coco