xref: /aosp_15_r20/external/armnn/src/backends/aclCommon/ArmComputeTuningUtils.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #pragma once
6*89c4ff92SAndroid Build Coastguard Worker 
7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/BackendOptions.hpp>
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/IRuntime.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Logging.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/runtime/CL/CLTuner.h>
12*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/runtime/CL/CLTunerTypes.h>
13*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/runtime/CL/CLGEMMHeuristicsHandle.h>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker namespace armnn
16*89c4ff92SAndroid Build Coastguard Worker {
17*89c4ff92SAndroid Build Coastguard Worker 
18*89c4ff92SAndroid Build Coastguard Worker enum class TuningLevel
19*89c4ff92SAndroid Build Coastguard Worker {
20*89c4ff92SAndroid Build Coastguard Worker     None,
21*89c4ff92SAndroid Build Coastguard Worker     Rapid,
22*89c4ff92SAndroid Build Coastguard Worker     Normal,
23*89c4ff92SAndroid Build Coastguard Worker     Exhaustive
24*89c4ff92SAndroid Build Coastguard Worker };
25*89c4ff92SAndroid Build Coastguard Worker 
ParseTuningLevel(const BackendOptions::Var & value,TuningLevel defaultValue)26*89c4ff92SAndroid Build Coastguard Worker inline TuningLevel ParseTuningLevel(const BackendOptions::Var& value, TuningLevel defaultValue)
27*89c4ff92SAndroid Build Coastguard Worker {
28*89c4ff92SAndroid Build Coastguard Worker     if (value.IsInt())
29*89c4ff92SAndroid Build Coastguard Worker     {
30*89c4ff92SAndroid Build Coastguard Worker         int v = value.AsInt();
31*89c4ff92SAndroid Build Coastguard Worker         if (v > static_cast<int>(TuningLevel::Exhaustive) ||
32*89c4ff92SAndroid Build Coastguard Worker             v < static_cast<int>(TuningLevel::None))
33*89c4ff92SAndroid Build Coastguard Worker         {
34*89c4ff92SAndroid Build Coastguard Worker             ARMNN_LOG(warning) << "Invalid GpuAcc tuning level ("<< v << ") selected. "
35*89c4ff92SAndroid Build Coastguard Worker                                   "Using default(" << static_cast<int>(defaultValue) << ")";
36*89c4ff92SAndroid Build Coastguard Worker         } else
37*89c4ff92SAndroid Build Coastguard Worker         {
38*89c4ff92SAndroid Build Coastguard Worker             return static_cast<TuningLevel>(v);
39*89c4ff92SAndroid Build Coastguard Worker         }
40*89c4ff92SAndroid Build Coastguard Worker     }
41*89c4ff92SAndroid Build Coastguard Worker     return defaultValue;
42*89c4ff92SAndroid Build Coastguard Worker }
43*89c4ff92SAndroid Build Coastguard Worker 
ConfigureTuner(arm_compute::CLTuner & tuner,TuningLevel level)44*89c4ff92SAndroid Build Coastguard Worker inline void ConfigureTuner(arm_compute::CLTuner &tuner, TuningLevel level)
45*89c4ff92SAndroid Build Coastguard Worker {
46*89c4ff92SAndroid Build Coastguard Worker     tuner.set_tune_new_kernels(true); // Turn on tuning initially.
47*89c4ff92SAndroid Build Coastguard Worker 
48*89c4ff92SAndroid Build Coastguard Worker     switch (level)
49*89c4ff92SAndroid Build Coastguard Worker     {
50*89c4ff92SAndroid Build Coastguard Worker         case TuningLevel::Rapid:
51*89c4ff92SAndroid Build Coastguard Worker             ARMNN_LOG(info) << "Gpu tuning is activated. TuningLevel: Rapid (1)";
52*89c4ff92SAndroid Build Coastguard Worker             tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);
53*89c4ff92SAndroid Build Coastguard Worker             break;
54*89c4ff92SAndroid Build Coastguard Worker         case TuningLevel::Normal:
55*89c4ff92SAndroid Build Coastguard Worker             ARMNN_LOG(info) << "Gpu tuning is activated. TuningLevel: Normal (2)";
56*89c4ff92SAndroid Build Coastguard Worker             tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);
57*89c4ff92SAndroid Build Coastguard Worker             break;
58*89c4ff92SAndroid Build Coastguard Worker         case TuningLevel::Exhaustive:
59*89c4ff92SAndroid Build Coastguard Worker             ARMNN_LOG(info) << "Gpu tuning is activated. TuningLevel: Exhaustive (3)";
60*89c4ff92SAndroid Build Coastguard Worker             tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);
61*89c4ff92SAndroid Build Coastguard Worker             break;
62*89c4ff92SAndroid Build Coastguard Worker         case TuningLevel::None:
63*89c4ff92SAndroid Build Coastguard Worker         default:
64*89c4ff92SAndroid Build Coastguard Worker             tuner.set_tune_new_kernels(false); // Turn off tuning. Set to "use" only mode.
65*89c4ff92SAndroid Build Coastguard Worker             break;
66*89c4ff92SAndroid Build Coastguard Worker     }
67*89c4ff92SAndroid Build Coastguard Worker }
68*89c4ff92SAndroid Build Coastguard Worker 
69*89c4ff92SAndroid Build Coastguard Worker class ClTunedParameters : public IGpuAccTunedParameters
70*89c4ff92SAndroid Build Coastguard Worker {
71*89c4ff92SAndroid Build Coastguard Worker public:
72*89c4ff92SAndroid Build Coastguard Worker     ClTunedParameters(IGpuAccTunedParameters::Mode mode, IGpuAccTunedParameters::TuningLevel tuningLevel);
73*89c4ff92SAndroid Build Coastguard Worker 
74*89c4ff92SAndroid Build Coastguard Worker     virtual void Load(const char* filename);
75*89c4ff92SAndroid Build Coastguard Worker     virtual void Save(const char* filename) const;
76*89c4ff92SAndroid Build Coastguard Worker 
77*89c4ff92SAndroid Build Coastguard Worker     Mode m_Mode;
78*89c4ff92SAndroid Build Coastguard Worker     TuningLevel m_TuningLevel;
79*89c4ff92SAndroid Build Coastguard Worker 
80*89c4ff92SAndroid Build Coastguard Worker     arm_compute::CLTuner m_Tuner;
81*89c4ff92SAndroid Build Coastguard Worker     arm_compute::CLGEMMHeuristicsHandle m_HeuristicsHandle;
82*89c4ff92SAndroid Build Coastguard Worker };
83*89c4ff92SAndroid Build Coastguard Worker 
84*89c4ff92SAndroid Build Coastguard Worker }