blob: 44cd000ada23a345ee2c5940c5c524cd620beb81 [file] [log] [blame]
Pablo Tello7fad9b12018-03-14 17:55:27 +00001/*
Georgios Pinitas45514032020-12-30 00:03:09 +00002 * Copyright (c) 2018-2021 Arm Limited.
Pablo Tello7fad9b12018-03-14 17:55:27 +00003 *
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
25#include "arm_compute/core/CPP/CPPTypes.h"
26
27#include "arm_compute/core/Error.h"
Georgios Pinitas08302c12021-06-09 10:08:27 +010028#include "src/common/cpuinfo/CpuInfo.h"
Pablo Tello7fad9b12018-03-14 17:55:27 +000029
Georgios Pinitas08302c12021-06-09 10:08:27 +010030namespace arm_compute
Pablo Tello7fad9b12018-03-14 17:55:27 +000031{
Georgios Pinitas08302c12021-06-09 10:08:27 +010032struct CPUInfo::Impl
33{
34 cpuinfo::CpuInfo info{};
35 unsigned int L1_cache_size = 32768;
36 unsigned int L2_cache_size = 262144;
37};
38
Michalis Spyrou20fca522021-06-07 14:23:57 +010039CPUInfo &CPUInfo::get()
40{
41 static CPUInfo _cpuinfo;
42 return _cpuinfo;
43}
44
Georgios Pinitas08302c12021-06-09 10:08:27 +010045CPUInfo::CPUInfo()
46 : _impl(std::make_unique<Impl>())
47{
48 _impl->info = cpuinfo::CpuInfo::build();
Pablo Tello7fad9b12018-03-14 17:55:27 +000049}
50
Georgios Pinitas08302c12021-06-09 10:08:27 +010051CPUInfo::~CPUInfo() = default;
Pablo Tello7fad9b12018-03-14 17:55:27 +000052
Anthony Barbier8914e322018-08-10 15:28:25 +010053unsigned int CPUInfo::get_cpu_num() const
54{
Georgios Pinitas08302c12021-06-09 10:08:27 +010055 return _impl->info.num_cpus();
Anthony Barbier8914e322018-08-10 15:28:25 +010056}
Pablo Marquez Telloa50f1932021-03-08 17:27:05 +000057
Pablo Tello7fad9b12018-03-14 17:55:27 +000058bool CPUInfo::has_fp16() const
59{
Georgios Pinitas08302c12021-06-09 10:08:27 +010060 return _impl->info.has_fp16();
61}
62
63bool CPUInfo::has_bf16() const
64{
65 return _impl->info.has_bf16();
Pablo Tello7fad9b12018-03-14 17:55:27 +000066}
67
Michalis Spyrou20fca522021-06-07 14:23:57 +010068bool CPUInfo::has_svebf16() const
69{
70 return _impl->info.has_svebf16();
71}
72
Pablo Tello7fad9b12018-03-14 17:55:27 +000073bool CPUInfo::has_dotprod() const
74{
Georgios Pinitas08302c12021-06-09 10:08:27 +010075 return _impl->info.has_dotprod();
Pablo Tello7fad9b12018-03-14 17:55:27 +000076}
77
Michalis Spyrou20fca522021-06-07 14:23:57 +010078bool CPUInfo::has_svef32mm() const
79{
80 return _impl->info.has_svef32mm();
81}
82
83bool CPUInfo::has_i8mm() const
84{
85 return _impl->info.has_i8mm();
86}
87
88bool CPUInfo::has_svei8mm() const
89{
90 return _impl->info.has_svei8mm();
91}
92
93bool CPUInfo::has_sve() const
94{
95 return _impl->info.has_sve();
96}
97
98bool CPUInfo::has_sve2() const
99{
100 return _impl->info.has_sve2();
101}
102
Pablo Tello7fad9b12018-03-14 17:55:27 +0000103CPUModel CPUInfo::get_cpu_model() const
104{
Georgios Pinitas08302c12021-06-09 10:08:27 +0100105 return _impl->info.cpu_model();
Pablo Tello7fad9b12018-03-14 17:55:27 +0000106}
Georgios Pinitas08302c12021-06-09 10:08:27 +0100107
108CPUModel CPUInfo::get_cpu_model(unsigned int cpuid) const
109{
110 return _impl->info.cpu_model(cpuid);
111}
112
113unsigned int CPUInfo::get_L1_cache_size() const
114{
115 return _impl->L1_cache_size;
116}
117
118unsigned int CPUInfo::get_L2_cache_size() const
119{
120 return _impl->L2_cache_size;
121}
122} // namespace arm_compute