diff options
Diffstat (limited to 'src/backends/aclCommon/ArmComputeTuningUtils.hpp')
-rw-r--r-- | src/backends/aclCommon/ArmComputeTuningUtils.hpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/backends/aclCommon/ArmComputeTuningUtils.hpp b/src/backends/aclCommon/ArmComputeTuningUtils.hpp new file mode 100644 index 0000000000..6d99d3f08e --- /dev/null +++ b/src/backends/aclCommon/ArmComputeTuningUtils.hpp @@ -0,0 +1,84 @@ +// +// Copyright © 2023 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include <armnn/BackendOptions.hpp> +#include <armnn/IRuntime.hpp> +#include <armnn/Logging.hpp> + +#include <arm_compute/runtime/CL/CLTuner.h> +#include <arm_compute/runtime/CL/CLTunerTypes.h> +#include <arm_compute/runtime/CL/CLGEMMHeuristicsHandle.h> + +namespace armnn +{ + +enum class TuningLevel +{ + None, + Rapid, + Normal, + Exhaustive +}; + +inline TuningLevel ParseTuningLevel(const BackendOptions::Var& value, TuningLevel defaultValue) +{ + if (value.IsInt()) + { + int v = value.AsInt(); + if (v > static_cast<int>(TuningLevel::Exhaustive) || + v < static_cast<int>(TuningLevel::None)) + { + ARMNN_LOG(warning) << "Invalid GpuAcc tuning level ("<< v << ") selected. " + "Using default(" << static_cast<int>(defaultValue) << ")"; + } else + { + return static_cast<TuningLevel>(v); + } + } + return defaultValue; +} + +inline void ConfigureTuner(arm_compute::CLTuner &tuner, TuningLevel level) +{ + tuner.set_tune_new_kernels(true); // Turn on tuning initially. + + switch (level) + { + case TuningLevel::Rapid: + ARMNN_LOG(info) << "Gpu tuning is activated. TuningLevel: Rapid (1)"; + tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID); + break; + case TuningLevel::Normal: + ARMNN_LOG(info) << "Gpu tuning is activated. TuningLevel: Normal (2)"; + tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL); + break; + case TuningLevel::Exhaustive: + ARMNN_LOG(info) << "Gpu tuning is activated. TuningLevel: Exhaustive (3)"; + tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE); + break; + case TuningLevel::None: + default: + tuner.set_tune_new_kernels(false); // Turn off tuning. Set to "use" only mode. + break; + } +} + +class ClTunedParameters : public IGpuAccTunedParameters +{ +public: + ClTunedParameters(IGpuAccTunedParameters::Mode mode, IGpuAccTunedParameters::TuningLevel tuningLevel); + + virtual void Load(const char* filename); + virtual void Save(const char* filename) const; + + Mode m_Mode; + TuningLevel m_TuningLevel; + + arm_compute::CLTuner m_Tuner; + arm_compute::CLGEMMHeuristicsHandle m_HeuristicsHandle; +}; + +}
\ No newline at end of file |