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