diff options
author | Ashkan Aliabadi <ashkan.aliabadi@gmail.com> | 2020-05-08 20:40:33 -0700 |
---|---|---|
committer | David Reiss <dreiss@fb.com> | 2020-05-11 09:57:00 -0700 |
commit | c2092219e7c874783a00a62edb94ddc672f57ab3 (patch) | |
tree | 87c8ea93fb7e78de4243ae874fc0686c20ef26fc /src/api.c | |
parent | 2b14e445016dd46f7de821cdf3093e2823b9ab21 (diff) | |
download | cpuinfo-c2092219e7c874783a00a62edb94ddc672f57ab3.tar.gz |
Upstream cpuinfo updates in XNNPACK as of XNNPACK:d793f6c2ec145be3ddbffea951e6e5480f4646b8.
Diffstat (limited to 'src/api.c')
-rw-r--r-- | src/api.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -374,3 +374,33 @@ uint32_t CPUINFO_ABI cpuinfo_get_current_uarch_index(void) { return 0; #endif } + +uint32_t CPUINFO_ABI cpuinfo_get_current_uarch_index_with_default(uint32_t default_uarch_index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_uarch_index_with_default"); + } + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + #ifdef __linux__ + if (cpuinfo_linux_cpu_to_uarch_index_map == NULL) { + /* Special case: avoid syscall on systems with only a single type of cores */ + return 0; + } + + /* General case */ + unsigned cpu; + if CPUINFO_UNLIKELY(syscall(__NR_getcpu, &cpu, NULL, NULL) != 0) { + return default_uarch_index; + } + if CPUINFO_UNLIKELY((uint32_t) cpu >= cpuinfo_linux_cpu_max) { + return default_uarch_index; + } + return cpuinfo_linux_cpu_to_uarch_index_map[cpu]; + #else + /* Fallback: no API to query current core, use default uarch index. */ + return default_uarch_index; + #endif + #else + /* Only ARM/ARM64 processors may include cores of different types in the same package. */ + return 0; + #endif +} |