24.02.1
Utils.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2017-2020 Arm Limited.
3
*
4
* SPDX-License-Identifier: MIT
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the "Software"), to
8
* deal in the Software without restriction, including without limitation the
9
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
* sell copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in all
14
* copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*/
24
#include "
src/runtime/Utils.h
"
25
26
#include "
arm_compute/runtime/NEON/NEScheduler.h
"
27
28
#include <cmath>
29
#include <map>
30
#include <string>
31
32
namespace
arm_compute
33
{
34
namespace
utils
35
{
36
#ifndef DOXYGEN_SKIP_THIS
37
static
const
std::string information =
38
#include "arm_compute_version.embed"
39
;
40
#endif
/* DOXYGEN_SKIP_THIS */
41
42
const
std::string &
string_from_scheduler_type
(
Scheduler::Type
t
)
43
{
44
static
std::map<Scheduler::Type, const std::string> scheduler_type_map = {{
Scheduler::Type::ST
,
"Single Thread"
},
45
{
Scheduler::Type::CPP
,
"C++11 Threads"
},
46
{
Scheduler::Type::OMP
,
"OpenMP Threads"
},
47
{
Scheduler::Type::CUSTOM
,
"Custom"
}};
48
49
return
scheduler_type_map[
t
];
50
}
51
52
void
schedule_kernel_on_ctx
(
IRuntimeContext
*ctx,
ICPPKernel
*kernel,
const
IScheduler::Hints
&hints)
53
{
54
if
(ctx)
55
{
56
ARM_COMPUTE_ERROR_ON
(ctx->
scheduler
() ==
nullptr
);
57
ctx->
scheduler
()->
schedule
(kernel, hints);
58
}
59
else
60
{
61
NEScheduler::get
().
schedule
(kernel, hints);
62
}
63
}
64
65
unsigned
int
calculate_number_of_stages_only_x_axis
(
size_t
input_x_dimension,
unsigned
int
axis)
66
{
67
// We need only 1 stage for all axis except x-axis
68
if
(axis != 0)
69
{
70
return
1;
71
}
72
// Calculate number of WGs. 16 elements per thread, 8 threads per WG
73
const
auto
num_of_wg =
static_cast<
unsigned
int
>
(ceil(input_x_dimension / 128.f));
74
75
// Calculate number of stages. First stage performs op and the rest reduction sum
76
// depending on the size of the input. Last stage should have only 1 WG.
77
const
unsigned
int
num_of_stages = num_of_wg / 128 + 2;
78
return
num_of_stages;
79
}
80
}
// namespace utils
81
}
// namespace arm_compute
Utils.h
arm_compute::Scheduler::Type::ST
@ ST
Single thread.
arm_compute::Scheduler::Type::CPP
@ CPP
C++11 threads.
arm_compute::utils::calculate_number_of_stages_only_x_axis
unsigned int calculate_number_of_stages_only_x_axis(size_t input_x_dimension, unsigned int axis)
Calculate number of stages for parallel implementations.
Definition:
Utils.cpp:65
arm_compute::Scheduler::Type::CUSTOM
@ CUSTOM
Provided by the user.
ARM_COMPUTE_ERROR_ON
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Definition:
Error.h:466
arm_compute::utils::schedule_kernel_on_ctx
void schedule_kernel_on_ctx(IRuntimeContext *ctx, ICPPKernel *kernel, const IScheduler::Hints &hints)
Schedules a kernel using the context if not nullptr else uses the legacy scheduling flow.
Definition:
Utils.cpp:52
arm_compute::Scheduler::get
static IScheduler & get()
Access the scheduler singleton.
Definition:
Scheduler.cpp:94
arm_compute::ICPPKernel
Common interface for all kernels implemented in C++.
Definition:
ICPPKernel.h:38
arm_compute::Scheduler::Type
Type
Scheduler type.
Definition:
Scheduler.h:39
arm_compute::utils::string_from_scheduler_type
const std::string & string_from_scheduler_type(Scheduler::Type t)
Convert a Scheduler::Type into a string.
Definition:
Utils.cpp:42
arm_compute::IRuntimeContext::scheduler
virtual IScheduler * scheduler()=0
Scheduler accessor.
arm_compute::IRuntimeContext
Context interface.
Definition:
IRuntimeContext.h:34
arm_compute::IScheduler::schedule
virtual void schedule(ICPPKernel *kernel, const Hints &hints)=0
Runs the kernel in the same thread as the caller synchronously.
NEScheduler.h
arm_compute
Copyright (c) 2017-2024 Arm Limited.
Definition:
introduction.dox:24
tf_frozen_model_extractor.t
t
Definition:
tf_frozen_model_extractor.py:49
arm_compute::Scheduler::Type::OMP
@ OMP
OpenMP.
arm_compute::IScheduler::Hints
Scheduler hints.
Definition:
IScheduler.h:68
src
runtime
Utils.cpp
Generated on Mon Mar 18 2024 11:31:57 for Compute Library by
1.8.17