diff options
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/CpuContext.cpp | 67 | ||||
-rw-r--r-- | src/cpu/CpuContext.h | 14 |
2 files changed, 36 insertions, 45 deletions
diff --git a/src/cpu/CpuContext.cpp b/src/cpu/CpuContext.cpp index 18fa2e7469..a1c6413c98 100644 --- a/src/cpu/CpuContext.cpp +++ b/src/cpu/CpuContext.cpp @@ -90,67 +90,66 @@ AllocatorWrapper populate_allocator(AclAllocator *external_allocator) return is_valid ? AllocatorWrapper(*external_allocator) : AllocatorWrapper(default_allocator); } -CpuCapabilities populate_capabilities_legacy(const CPUInfo &cpu_info) +cpuinfo::CpuIsaInfo populate_capabilities_legacy(const CPUInfo &cpu_info) { - CpuCapabilities caps; + cpuinfo::CpuIsaInfo isa_caps; // Extract SIMD extension - caps.neon = true; -#ifdef SVE2 - caps.sve2 = true; -#endif /* SVE2 */ + isa_caps.neon = true; + isa_caps.sve = cpu_info.has_sve(); + isa_caps.sve2 = cpu_info.has_sve2(); + // Extract data-type support - caps.fp16 = cpu_info.has_fp16(); -#ifdef V8P6_BF - caps.bf16 = true; -#endif /* V8P6_BF */ + isa_caps.fp16 = cpu_info.has_fp16(); + isa_caps.bf16 = cpu_info.has_bf16(); + isa_caps.svebf16 = cpu_info.has_svebf16(); // Extract ISA extensions - caps.dot = cpu_info.has_dotprod(); -#ifdef MMLA_FP32 - caps.mmla_fp = true; -#endif /* MMLA_FP32 */ -#ifdef MMLA_INT8 - caps.mmla_int8 = true; -#endif /* MMLA_INT8 */ + isa_caps.dot = cpu_info.has_dotprod(); + isa_caps.i8mm = cpu_info.has_i8mm(); + isa_caps.svei8mm = cpu_info.has_svei8mm(); + isa_caps.svef32mm = cpu_info.has_svef32mm(); - return caps; + return isa_caps; } -CpuCapabilities populate_capabilities_flags(AclTargetCapabilities external_caps) +cpuinfo::CpuIsaInfo populate_capabilities_flags(AclTargetCapabilities external_caps) { - CpuCapabilities caps; + cpuinfo::CpuIsaInfo isa_caps; // Extract SIMD extension - caps.neon = external_caps & AclCpuCapabilitiesNeon; - caps.sve = external_caps & AclCpuCapabilitiesSve; - caps.sve2 = external_caps & AclCpuCapabilitiesSve2; + isa_caps.neon = external_caps & AclCpuCapabilitiesNeon; + isa_caps.sve = external_caps & AclCpuCapabilitiesSve; + isa_caps.sve2 = external_caps & AclCpuCapabilitiesSve2; + // Extract data-type support - caps.fp16 = external_caps & AclCpuCapabilitiesFp16; - caps.bf16 = external_caps & AclCpuCapabilitiesBf16; + isa_caps.fp16 = external_caps & AclCpuCapabilitiesFp16; + isa_caps.bf16 = external_caps & AclCpuCapabilitiesBf16; + // Extract ISA extensions - caps.dot = external_caps & AclCpuCapabilitiesDot; - caps.mmla_fp = external_caps & AclCpuCapabilitiesMmlaFp; - caps.mmla_int8 = external_caps & AclCpuCapabilitiesMmlaInt8; + isa_caps.dot = external_caps & AclCpuCapabilitiesDot; + isa_caps.i8mm = external_caps & AclCpuCapabilitiesMmlaInt8; + isa_caps.svef32mm = external_caps & AclCpuCapabilitiesMmlaFp; - return caps; + return isa_caps; } CpuCapabilities populate_capabilities(AclTargetCapabilities external_caps, int32_t max_threads) { - // Extract legacy structure - CPUInfo cpu_info; - CpuCapabilities caps; + + // Extract legacy structure + cpuinfo::CpuIsaInfo isa_caps; if(external_caps != AclCpuCapabilitiesAuto) { - caps = populate_capabilities_flags(external_caps); + isa_caps = populate_capabilities_flags(external_caps); } else { - caps = populate_capabilities_legacy(cpu_info); + isa_caps = populate_capabilities_legacy(CPUInfo::get()); } + caps.cpu_info = cpuinfo::CpuInfo(isa_caps, {}); // Set max number of threads #if defined(BARE_METAL) diff --git a/src/cpu/CpuContext.h b/src/cpu/CpuContext.h index e909767a7b..9a59af39c1 100644 --- a/src/cpu/CpuContext.h +++ b/src/cpu/CpuContext.h @@ -26,6 +26,7 @@ #include "src/common/AllocatorWrapper.h" #include "src/common/IContext.h" +#include "src/common/cpuinfo/CpuInfo.h" namespace arm_compute { @@ -34,17 +35,8 @@ namespace cpu /** Structure that encodes the CPU capabilities to be used */ struct CpuCapabilities { - bool neon{ false }; - bool sve{ false }; - bool sve2{ false }; - - bool fp16{ false }; - bool bf16{ false }; - bool dot{ false }; - bool mmla_int8{ false }; - bool mmla_fp{ false }; - - int32_t max_threads{ -1 }; + cpuinfo::CpuInfo cpu_info{}; + int32_t max_threads{ -1 }; }; /** CPU context implementation class */ |