当x86上的用户空间程序需要确定是否支持AVX扩展时,它可以使用CPUID指令。是否有任何类似的独立于操作系统的方式来检查 ARM 中对 ISA 扩展(例如 NEON(的支持?
您可以使用 cpuinfo,它是一个跨平台的 CPU 信息库
检查主机CPU是否支持ARM霓虹灯
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; }
在处理器中最快的内核上获取 1 级数据缓存的大小(例如,大内核中的大内核。小臂系统(:
cpuinfo_initialize(); const size_t l1_size = cpuinfo_get_processor(0)->cache.l1d->size;
将线程固定到与当前内核(Linux 或 Android(共享 L2 缓存的内核
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);