xref: /aosp_15_r20/external/armnn/src/backends/cl/OpenClTimer.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <Instrument.hpp>
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/runtime/CL/CLScheduler.h>
11*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/core/CL/OpenCL.h>
12*89c4ff92SAndroid Build Coastguard Worker 
13*89c4ff92SAndroid Build Coastguard Worker #include <vector>
14*89c4ff92SAndroid Build Coastguard Worker #include <list>
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker namespace armnn
17*89c4ff92SAndroid Build Coastguard Worker {
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker /// OpenClTimer instrument that times all OpenCl kernels executed between calls to Start() and Stop().
20*89c4ff92SAndroid Build Coastguard Worker class OpenClTimer : public Instrument
21*89c4ff92SAndroid Build Coastguard Worker {
22*89c4ff92SAndroid Build Coastguard Worker public:
23*89c4ff92SAndroid Build Coastguard Worker     OpenClTimer();
24*89c4ff92SAndroid Build Coastguard Worker     ~OpenClTimer() = default;
25*89c4ff92SAndroid Build Coastguard Worker 
26*89c4ff92SAndroid Build Coastguard Worker     /// Start the OpenCl timer
27*89c4ff92SAndroid Build Coastguard Worker     void Start() override;
28*89c4ff92SAndroid Build Coastguard Worker 
29*89c4ff92SAndroid Build Coastguard Worker     /// Stop the OpenCl timer
30*89c4ff92SAndroid Build Coastguard Worker     void Stop() override;
31*89c4ff92SAndroid Build Coastguard Worker 
32*89c4ff92SAndroid Build Coastguard Worker     /// Return true if this Instrument has kernels for recording measurements
33*89c4ff92SAndroid Build Coastguard Worker     bool HasKernelMeasurements() const override;
34*89c4ff92SAndroid Build Coastguard Worker 
35*89c4ff92SAndroid Build Coastguard Worker     /// Get the name of the timer
36*89c4ff92SAndroid Build Coastguard Worker     /// \return Name of the timer
GetName() const37*89c4ff92SAndroid Build Coastguard Worker     const char* GetName() const override { return "OpenClKernelTimer"; }
38*89c4ff92SAndroid Build Coastguard Worker 
39*89c4ff92SAndroid Build Coastguard Worker     /// Get the recorded measurements. This will be a list of the execution durations for all the OpenCl kernels.
40*89c4ff92SAndroid Build Coastguard Worker     /// \return Recorded measurements
41*89c4ff92SAndroid Build Coastguard Worker     std::vector<Measurement> GetMeasurements() const override;
42*89c4ff92SAndroid Build Coastguard Worker 
43*89c4ff92SAndroid Build Coastguard Worker private:
44*89c4ff92SAndroid Build Coastguard Worker     using CLScheduler = arm_compute::CLScheduler;
45*89c4ff92SAndroid Build Coastguard Worker     using CLSymbols = arm_compute::CLSymbols;
46*89c4ff92SAndroid Build Coastguard Worker     using ClEvent = cl::Event;
47*89c4ff92SAndroid Build Coastguard Worker     using ClEnqueueFunc = decltype(CLSymbols::clEnqueueNDRangeKernel_ptr);
48*89c4ff92SAndroid Build Coastguard Worker 
49*89c4ff92SAndroid Build Coastguard Worker     /// Stores info about the OpenCl kernel
50*89c4ff92SAndroid Build Coastguard Worker     struct KernelInfo
51*89c4ff92SAndroid Build Coastguard Worker     {
KernelInfoarmnn::OpenClTimer::KernelInfo52*89c4ff92SAndroid Build Coastguard Worker         KernelInfo(const std::string& name, cl_event& event) : m_Name(name), m_Event(event) {}
53*89c4ff92SAndroid Build Coastguard Worker 
54*89c4ff92SAndroid Build Coastguard Worker         std::string m_Name;
55*89c4ff92SAndroid Build Coastguard Worker         ClEvent m_Event;
56*89c4ff92SAndroid Build Coastguard Worker     };
57*89c4ff92SAndroid Build Coastguard Worker 
58*89c4ff92SAndroid Build Coastguard Worker     std::list<KernelInfo>                m_Kernels; ///< List of all kernels executed
59*89c4ff92SAndroid Build Coastguard Worker     ClEnqueueFunc                        m_OriginalEnqueueFunction; ///< Keep track of original OpenCl function
60*89c4ff92SAndroid Build Coastguard Worker };
61*89c4ff92SAndroid Build Coastguard Worker 
62*89c4ff92SAndroid Build Coastguard Worker } //namespace armnn