blob: e517fa4b8a837473783df5fca2cf0f605f16115a [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa01c577f2c2018-08-31 09:22:23 +01004//
5
6#pragma once
7
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00008#include <Instrument.hpp>
telsoa01c577f2c2018-08-31 09:22:23 +01009
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010010#include <arm_compute/runtime/CL/CLScheduler.h>
11#include <arm_compute/core/CL/OpenCL.h>
telsoa01c577f2c2018-08-31 09:22:23 +010012
13#include <vector>
14#include <list>
15
16namespace armnn
17{
18
19/// OpenClTimer instrument that times all OpenCl kernels executed between calls to Start() and Stop().
20class OpenClTimer : public Instrument
21{
22public:
23 OpenClTimer();
24 ~OpenClTimer() = default;
25
26 /// Start the OpenCl timer
27 void Start() override;
28
29 /// Stop the OpenCl timer
30 void Stop() override;
31
Kevin May251fd952022-10-05 14:42:55 +010032 /// Return true if this Instrument has kernels for recording measurements
33 bool HasKernelMeasurements() const override;
34
telsoa01c577f2c2018-08-31 09:22:23 +010035 /// Get the name of the timer
36 /// \return Name of the timer
37 const char* GetName() const override { return "OpenClKernelTimer"; }
38
39 /// Get the recorded measurements. This will be a list of the execution durations for all the OpenCl kernels.
40 /// \return Recorded measurements
41 std::vector<Measurement> GetMeasurements() const override;
42
43private:
44 using CLScheduler = arm_compute::CLScheduler;
45 using CLSymbols = arm_compute::CLSymbols;
46 using ClEvent = cl::Event;
47 using ClEnqueueFunc = decltype(CLSymbols::clEnqueueNDRangeKernel_ptr);
48
49 /// Stores info about the OpenCl kernel
50 struct KernelInfo
51 {
52 KernelInfo(const std::string& name, cl_event& event) : m_Name(name), m_Event(event) {}
53
54 std::string m_Name;
55 ClEvent m_Event;
56 };
57
58 std::list<KernelInfo> m_Kernels; ///< List of all kernels executed
59 ClEnqueueFunc m_OriginalEnqueueFunction; ///< Keep track of original OpenCl function
60};
61
62} //namespace armnn