/* * Copyright (c) 2019-2021 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 ARM_COMPUTE_EXAMPLES_GEMM_TUNER_COMMON_GEMM_EXAMPLE_OPTIONS #define ARM_COMPUTE_EXAMPLES_GEMM_TUNER_COMMON_GEMM_EXAMPLE_OPTIONS #include "arm_compute/core/Types.h" #include "arm_compute/core/Utils.h" #include "arm_compute/runtime/CL/CLTuner.h" #include "utils/command_line/CommandLineOptions.h" #include "utils/command_line/CommandLineParser.h" #include "utils/TypePrinter.h" namespace gemm_tuner { /** Structure holding all the common gemm example parameters */ struct CommonGemmExampleParams { size_t M{100}; /**< Number of lhs matrix rows */ size_t N{100}; /**< Number of rhs matrix columns */ size_t K{50}; /**< Number of lhs matrix columns/rhs matrix rows */ size_t B{1}; /**< Batch size */ arm_compute::DataType data_type{arm_compute::DataType::F32}; /**< Data type */ arm_compute::CLTunerMode tuner_mode{arm_compute::CLTunerMode::RAPID}; /**< OpenCL tuner mode */ }; /** Formatted output of the CommonGemmExampleParams type * * @param[out] os Output stream. * @param[in] common_params Common parameters to output * * @return Modified output stream. */ ::std::ostream &operator<<(::std::ostream &os, const CommonGemmExampleParams &common_params); /** Common command line options used to configure the gemm examples * * The options in this object get populated when "parse()" is called on the parser used to construct it. * The expected workflow is: * * CommandLineParser parser; * CommonOptions options( parser ); * parser.parse(argc, argv); */ class CommonGemmExampleOptions { public: /** Constructor * * @param[in,out] parser A parser on which "parse()" hasn't been called yet. * @param[in] default_data_type Default data type if unspecified. */ CommonGemmExampleOptions(arm_compute::utils::CommandLineParser &parser, arm_compute::DataType default_data_type = arm_compute::DataType::F32); /** Prevent instances of this class from being copied (As this class contains pointers) */ CommonGemmExampleOptions(const CommonGemmExampleOptions &) = delete; /** Prevent instances of this class from being copied (As this class contains pointers) */ CommonGemmExampleOptions &operator=(const CommonGemmExampleOptions &) = delete; /** Allow instances of this class to be moved */ CommonGemmExampleOptions(CommonGemmExampleOptions &&) = default; /** Allow instances of this class to be moved */ CommonGemmExampleOptions &operator=(CommonGemmExampleOptions &&) = default; /** Default destructor */ ~CommonGemmExampleOptions() = default; arm_compute::utils::ToggleOption *help; /**< Show help option */ arm_compute::utils::SimpleOption *M; /**< Number of lhs matrix rows option */ arm_compute::utils::SimpleOption *N; /**< Number of rhs matrix columns option */ arm_compute::utils::SimpleOption *K; /**< Number of lhs matrix columns/rhs matrix rows option */ arm_compute::utils::SimpleOption *B; /**< Batch size option */ arm_compute::utils::EnumOption *data_type; /**< Data type */ arm_compute::utils::EnumOption *tuner_mode; /**< OpenCL tuner mode */ }; /** Consumes the common gemm example options and creates a structure containing all information * * @param[in] options Options to consume * * @return Structure containing the common gemm example parameters */ CommonGemmExampleParams consume_common_gemm_example_parameters(const CommonGemmExampleOptions &options); } // namespace gemm_tuner #endif /* ARM_COMPUTE_EXAMPLES_GEMM_TUNER_COMMON_GEMM_EXAMPLE_OPTIONS */