blob: 4a640cdf222079064d38f716be2b31f709fba954 [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
surmeh013537c2c2018-05-18 16:31:43 +01002// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
surmeh013537c2c2018-05-18 16:31:43 +01004//
5#pragma once
6
7#include "armnn/IRuntime.hpp"
8
surmeh013537c2c2018-05-18 16:31:43 +01009#include <arm_compute/runtime/CL/CLTuner.h>
Finn Williams40646322021-02-11 16:16:42 +000010#include <arm_compute/runtime/CL/CLGEMMHeuristicsHandle.h>
surmeh013537c2c2018-05-18 16:31:43 +010011
12namespace armnn
13{
14
telsoa01c577f2c2018-08-31 09:22:23 +010015// ARM Compute OpenCL context control.
surmeh013537c2c2018-05-18 16:31:43 +010016class ClContextControl
17{
18public:
19
Derek Lamberti836b27b2019-11-20 10:51:57 +000020 ClContextControl(arm_compute::CLTuner* = nullptr,
Finn Williams40646322021-02-11 16:16:42 +000021 arm_compute::CLGEMMHeuristicsHandle* = nullptr,
telsoa01c577f2c2018-08-31 09:22:23 +010022 bool profilingEnabled = false);
surmeh013537c2c2018-05-18 16:31:43 +010023
24 virtual ~ClContextControl();
25
26 void LoadOpenClRuntime();
27
28 // Users should call this (after freeing all of the cl::Context objects they use)
29 // to release the cached memory used by the compute library.
30 void UnloadOpenClRuntime();
31
telsoa01c577f2c2018-08-31 09:22:23 +010032 // Clear the CL cache, without losing the tuned parameter settings.
surmeh013537c2c2018-05-18 16:31:43 +010033 void ClearClCache();
34
35private:
36
Derek Lamberti836b27b2019-11-20 10:51:57 +000037 void DoLoadOpenClRuntime(bool updateTunedParameters);
surmeh013537c2c2018-05-18 16:31:43 +010038
Derek Lamberti836b27b2019-11-20 10:51:57 +000039 arm_compute::CLTuner* m_Tuner;
Finn Williams40646322021-02-11 16:16:42 +000040 arm_compute::CLGEMMHeuristicsHandle* m_HeuristicsHandle;
surmeh013537c2c2018-05-18 16:31:43 +010041
telsoa01c577f2c2018-08-31 09:22:23 +010042 bool m_ProfilingEnabled;
surmeh013537c2c2018-05-18 16:31:43 +010043};
44
telsoa01c577f2c2018-08-31 09:22:23 +010045class ClTunedParameters : public IGpuAccTunedParameters
surmeh013537c2c2018-05-18 16:31:43 +010046{
47public:
Ruomei Yan49937f32019-04-25 14:24:05 +010048 ClTunedParameters(armnn::IGpuAccTunedParameters::Mode mode, armnn::IGpuAccTunedParameters::TuningLevel tuningLevel);
surmeh013537c2c2018-05-18 16:31:43 +010049
50 virtual void Load(const char* filename);
51 virtual void Save(const char* filename) const;
52
53 Mode m_Mode;
Ruomei Yan49937f32019-04-25 14:24:05 +010054 TuningLevel m_TuningLevel;
surmeh013537c2c2018-05-18 16:31:43 +010055
surmeh013537c2c2018-05-18 16:31:43 +010056 arm_compute::CLTuner m_Tuner;
Finn Williams40646322021-02-11 16:16:42 +000057 arm_compute::CLGEMMHeuristicsHandle m_HeuristicsHandle;
surmeh013537c2c2018-05-18 16:31:43 +010058};
59
60} // namespace armnn