diff options
author | Gunes Bayir <gunes.bayir@arm.com> | 2023-08-23 23:28:31 +0100 |
---|---|---|
committer | Gunes Bayir <gunes.bayir@arm.com> | 2023-08-29 11:07:48 +0000 |
commit | 806b8e856911e6691ede6725c7e2a0e7e0dd6e95 (patch) | |
tree | 2430af238e9494a1b7012b05a3b49b2eef548cd2 /compute_kernel_writer/include/ckw | |
parent | b7aefd71d07d56b001e795410700cae71a518eca (diff) | |
download | ComputeLibrary-806b8e856911e6691ede6725c7e2a0e7e0dd6e95.tar.gz |
Add declare_constant_tile API function in CKW
Resolves: COMPMID-6535
Change-Id: I07d8aca96a0fcbd624f828b24513ee0500a14a74
Signed-off-by: Gunes Bayir <gunes.bayir@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10200
Reviewed-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'compute_kernel_writer/include/ckw')
-rw-r--r-- | compute_kernel_writer/include/ckw/KernelWriter.h | 22 | ||||
-rw-r--r-- | compute_kernel_writer/include/ckw/types/ConstantData.h | 89 |
2 files changed, 108 insertions, 3 deletions
diff --git a/compute_kernel_writer/include/ckw/KernelWriter.h b/compute_kernel_writer/include/ckw/KernelWriter.h index d59867fa6f..022ae83999 100644 --- a/compute_kernel_writer/include/ckw/KernelWriter.h +++ b/compute_kernel_writer/include/ckw/KernelWriter.h @@ -27,6 +27,7 @@ #include "ckw/TensorOperand.h" #include "ckw/TileOperand.h" +#include "ckw/types/ConstantData.h" #include "ckw/types/ConvertPolicy.h" #include "ckw/types/Operators.h" @@ -37,13 +38,13 @@ namespace ckw { -class Kernel; - /** Forward Declerations */ +class Kernel; class TensorInfo; class TensorSampler; class TileInfo; +enum class DataType; enum class TargetArchitecture; enum class TargetLanguage; @@ -175,10 +176,19 @@ public: * @param[in] name Name of the tile * @param[in] tile_info Shape and data type of the tile * - * @returns The created tile operand + * @return The created tile operand */ virtual TileOperand declare_tile(const std::string &name, const TileInfo &tile_info) = 0; + /** Declare a constant tile given a @ref:ConstantData object + * + * @param[in] data a @ref ckw::ConstantData object that has the values and the + * underlying data type of the constant tile + * + * @return The created constant tile operand + */ + virtual TileOperand declare_constant_tile(const ConstantData &data) = 0; + /** Load the data from the tensor memory to the tile using the sampling information. * * @param[in] tile_op The tile to be loaded. @@ -240,6 +250,12 @@ protected: /** Get the reference to tensor object from the tensor operand. */ static ITensor &get_tensor(const TensorOperand &operand); + /** Get the values of a constant data object. */ + static const std::vector<std::vector<std::string>> &get_values(const ConstantData &data); + + /** Get the data type of a constant data object. */ + static DataType get_data_type(const ConstantData &data); + private: int32_t _id_space{ 0 }; }; diff --git a/compute_kernel_writer/include/ckw/types/ConstantData.h b/compute_kernel_writer/include/ckw/types/ConstantData.h new file mode 100644 index 0000000000..95425b2c65 --- /dev/null +++ b/compute_kernel_writer/include/ckw/types/ConstantData.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2023 Arm Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef CKW_INCLUDE_CKW_TYPES_CONSTANTDATA_H +#define CKW_INCLUDE_CKW_TYPES_CONSTANTDATA_H + +#include "ckw/Error.h" +#include "ckw/types/DataType.h" + +#include <algorithm> +#include <cstdint> +#include <initializer_list> +#include <iomanip> +#include <iterator> +#include <sstream> +#include <string> +#include <type_traits> +#include <vector> + +namespace ckw +{ +// Forward Declarations +class KernelWriter; + +class ConstantData +{ + using String = std::string; + using StringVector = std::vector<String>; + +public: + /** Templated constructor */ + template<typename T> + ConstantData(std::initializer_list<std::initializer_list<T>> values, DataType data_type); + +private: + /** Validate the given data type and the template type + * + * @param[in] data_type data type + * + * @return true if user provided data type and the template type are conformant + */ + template<typename T> + bool validate(DataType data_type); + + /** Get the constant data as a 2d vector of string values + * + * @return a 2d vector of strings that has the string-converted values + */ + const std::vector<StringVector>& values() const; + + /** Get the underlying data type of the constant values + * + * @return a @ref ckw::DataType object that represents the underlying data type + */ + DataType data_type() const; + + // Friends + friend class KernelWriter; + +private: + // Data members + std::vector<StringVector> _values{}; + DataType _data_type{}; +}; + +} // namespace ckw + +#endif // CKW_INCLUDE_CKW_TYPES_CONSTANTDATA_H |