cpuinfo
Библиотека для программного определения характеристик процессора во время выполнения. Она предоставляет API для получения детальной информации о CPU: производителе, модели, микроархитектуре, количестве ядер, размерах кэша, поддержке наборов инструкций (SIMD, виртуализация) и топологии процессорной системы. Библиотека использует низкоуровневые методы доступа к регистрам процессора, системным таблицам (ACPI, SMBIOS) и операционной системе для сбора максимально точных данных о процессорной архитектуре.
Особенности
- кроссплатформенность (Linux, Windows, macOS, Android, iOS, BSD);
- определение производителя (Intel, AMD, ARM, Apple Silicon) и микроархитектуры;
- обнаружение поддержки расширений инструкций (SSE, AVX, NEON, SVE и др.);
- анализ топологии процессора (ядра, потоки, NUMA-узлы, кэш-память);
- минимальные зависимости и высокая производительность работы.
Основные компоненты
Библиотека предоставляет набор функций и структур данных для доступа к информации о процессоре (подробнее с документацией можно ознакомиться здесь):
Инициализация и базовые функции
API для первичной настройки библиотеки, включающий функции сбора процессорной информации через низкоуровневые интерфейсы (CPUID, системные вызовы, таблицы ACPI/SMBIOS). Обеспечивает базовые операции: инициализацию внутренних структур, освобождение ресурсов, получение количества логических процессоров и физических ядер системы:
cpuinfo_initialize()— инициализация библиотеки и сбор информации о процессоре;cpuinfo_deinitialize()— освобождение ресурсов библиотеки;cpuinfo_processors_count()— получение общего количества логических процессоров;cpuinfo_cores_count()— получение количества физических ядер.
Информация о процессорах и ядрах
Интерфейс доступа к структурированным данным о процессорных элементах, включая массивы структур cpuinfo_processor (логические процессоры) и cpuinfo_core (физические ядра). Предоставляет детальную информацию о производителе, микроархитектуре, частотах и взаимосвязях между компонентами системы:
cpuinfo_get_processors()— получение массива структурcpuinfo_processorдля всех логических процессоров;cpuinfo_get_cores()— получение массива структурcpuinfo_coreдля физических ядер;cpuinfo_get_packages()— получение информации о физических процессорных пакетах (сокетах).
Характеристики процессора
Функции идентификации специфических параметров CPU: определение вендора и микроархитектуры, получение размеров и ассоциативности кэш-памяти всех уровней (L1-L4), частотных диапазонов работы процессора и поддержки технологий виртуализации:
cpuinfo_get_vendor()— определение производителя процессора (Intel, AMD, ARM и др.);cpuinfo_get_uarch()— получение микроархитектуры процессора;cpuinfo_get_cache()— информация об уровнях кэш-памяти (L1, L2, L3);cpuinfo_get_max_frequency()иcpuinfo_get_min_frequency()— максимальная и минимальная частоты процессора.
Поддержка инструкций
API детекции расширений наборов инструкций через проверку флагов CPUID и системных регистров. Включает проверки для векторных (SSE/AVX/NEON/SVE), криптографических (AES-NI/SHA), битовых (BMI) расширений и технологий безопасности (SGX/TrustZone):
cpuinfo_has_x86_*()— семейство функций для проверки поддержки x86-инструкций (SSE, AVX, AESNI, BMI и др.);cpuinfo_has_arm_*()— семейство функций для проверки поддержки ARM-инструкций (NEON, SVE, Cryptography Extensions);cpuinfo_has_riscv_*()— функции для проверки RISC-V расширений.
Топология системы
Интерфейс анализа иерархической организации процессора: определение кластеров ядер, топологии кэш-памяти (разделяемые/эксклюзивные кэши), распределения по NUMA-узлам и связей между физическими ядрами и кэш-памятью разных уровней:
cpuinfo_get_clusters_count()— количество кластеров (групп ядер с одинаковой микроархитектурой);cpuinfo_get_l1i_cache(),cpuinfo_get_l1d_cache(),cpuinfo_get_l2_cache(),cpuinfo_get_l3_cache()— информация о кэш-памяти разных уровней;cpuinfo_get_max_cache_size()— максимальный размер совместно используемого кэша.