如何检查当前ARM CPU是否支持ISA扩展?

问题描述 投票:0回答:1

当 x86 上的用户空间程序需要确定例如是否支持AVX扩展,可以使用CPUID指令。是否有任何类似的独立于操作系统的方法来检查 ARM 中对 ISA 扩展(例如 NEON)的支持?

arm instruction-set cpuid platform-detection
1个回答
1
投票

您可以使用cpuinfo,这是一个跨平台的CPU信息库

检查主机CPU是否支持ARM NEON

cpuinfo_initialize();
if (cpuinfo_has_arm_neon()) {
    neon_implementation(arguments);
}

检查线程是否运行在 Cortex-A53 内核上

cpuinfo_initialize();
switch (cpuinfo_get_current_core()->uarch) {
    case cpuinfo_uarch_cortex_a53:
        cortex_a53_implementation(arguments);
        break;
    default:
        generic_implementation(arguments);
        break;
}

获取处理器中最快内核(例如 big.LITTLE ARM 系统中的大内核)上的 1 级数据缓存的大小:

cpuinfo_initialize();
const size_t l1_size = cpuinfo_get_processor(0)->cache.l1d->size;

将线程固定到与当前核心(Linux 或 Android)共享二级缓存的核心

cpuinfo_initialize();
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
const struct cpuinfo_cache* current_l2 = cpuinfo_get_current_processor()->cache.l2;
for (uint32_t i = 0; i < current_l2->processor_count; i++) {
    CPU_SET(cpuinfo_get_processor(current_l2->processor_start + i)->linux_id, &cpu_set);
}
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpu_set);
© www.soinside.com 2019 - 2024. All rights reserved.