39 return "SchedulerTimer";
46 Interceptor(std::list<SchedulerTimer::kernel_info> &kernels,
IScheduler &real_scheduler,
ScaleFactor scale_factor)
47 : _kernels(kernels), _real_scheduler(real_scheduler), _timer(scale_factor), _prefix()
51 void set_num_threads(
unsigned int num_threads)
override 53 _real_scheduler.set_num_threads(num_threads);
56 unsigned int num_threads()
const override 58 return _real_scheduler.num_threads();
61 void set_prefix(std::string prefix)
63 _prefix = std::move(prefix);
66 void schedule(
ICPPKernel *kernel,
unsigned int split_dimension)
override 69 _real_scheduler.schedule(kernel, split_dimension);
76 _kernels.push_back(std::move(info));
80 std::list<SchedulerTimer::kernel_info> &_kernels;
87 : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr)
98 Interceptor *scheduler =
nullptr;
99 if(dynamic_cast<Interceptor *>(this->_interceptor.get()) !=
nullptr)
101 scheduler = arm_compute::utils::cast::polymorphic_downcast<Interceptor *>(_interceptor.get());
102 if(task.node !=
nullptr && !task.node->name().empty())
104 scheduler->set_prefix(task.node->name() +
"/");
108 scheduler->set_prefix(
"");
112 this->_real_graph_function(task);
114 if(scheduler !=
nullptr)
116 scheduler->set_prefix(
"");
126 _interceptor = std::make_shared<Interceptor>(_kernels, *_real_scheduler, _scale_factor);
127 Scheduler::set(std::static_pointer_cast<IScheduler>(_interceptor));
141 _real_scheduler =
nullptr;
142 _interceptor =
nullptr;
144 _real_graph_function =
nullptr;
150 unsigned int kernel_number = 0;
151 for(
auto kernel : _kernels)
153 measurements.emplace(kernel.prefix + kernel.name +
" #" +
support::cpp11::to_string(kernel_number++), kernel.measurements.begin()->second);
Instrument::MeasurementsMap measurements() const override
Return the latest measurements.
static Type get_type()
Returns the type of the active scheduler.
void start() override
Start measuring.
Common interface for all kernels implemented in C++.
std::string to_string(T &&value)
Convert integer and float values to string.
Scheduler interface to run kernels.
static void set(std::shared_ptr< IScheduler > scheduler)
Sets the user defined scheduler and makes it the active scheduler.
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
src info() -> set_format(Format::S16)
This file contains all available output stages for GEMMLowp on OpenCL.
void test_start() override
Start of the test.
std::string prefix
Kernel prefix.
std::string id() const override
Identifier for the instrument.
std::map< std::string, Measurement > MeasurementsMap
Map of measurements.
std::string name
Kernel name.
static TaskExecutor & get()
Task executor accessor.
SchedulerTimer(ScaleFactor scale_factor)
Construct a Scheduler timer.
void test_stop() override
End of the test.
Implementation of an instrument to measure elapsed wall-clock time in milliseconds.
Instrument::MeasurementsMap measurements
Time it took the kernel to run.
virtual const char * name() const =0
Name of the kernel.
std::function< decltype(execute_task)> execute_function
Function that is responsible for executing tasks.
static IScheduler & get()
Access the scheduler singleton.