Как получить информацию о ЦП на Android.
Через
Константы можно посмотреть здесь: arm cputype, arm64 cputype, julia/processor_arm.cpp - расширенный список, включает ЦП для IoT.
То же самое можно получить через getauxval() с AT_HWCAP и AT_HWCAP2.
Через
По максимальной частоте можно сгруппировать ядра по типу производительности:
* высокопроизводительные (X1, X2)
* производительные (A78)
* энергоэффективные (A55)
Либо через параметр
#blog #arm #cpu_prof
Через
/proc/cpuinfo
можно узнать количество ядер и их описание.processor
- номер ядра.CPU implementer
- производитель ЦП (`ARM_CPU_IMP_*`).CPU part
- номер модели ЦП (`*_CPU_PART_*`).Константы можно посмотреть здесь: arm cputype, arm64 cputype, julia/processor_arm.cpp - расширенный список, включает ЦП для IoT.
Features
- список расширенных инструкций ЦП, расшифровка есть здесь: Arm CPU features tableТо же самое можно получить через getauxval() с AT_HWCAP и AT_HWCAP2.
BogoMIPS
- мера производительности, но часто выдает одинаковые значения для всех типов ядер.Через
/sys/devices/system/cpu/cpu[x]
доступна дополнительная информация:cpufreq/cpuinfo_min_freq
, cpufreq/cpuinfo_max_freq
- минимальная и максимальная частота ядра.cpufreq/scaling_cur_freq
- текущая частота ядра, используется как замена cpuinfo_cur_freq
, который недоступен.По максимальной частоте можно сгруппировать ядра по типу производительности:
* высокопроизводительные (X1, X2)
* производительные (A78)
* энергоэффективные (A55)
Либо через параметр
/sys/devices/system/cpu/cpu[x]/cpu_capacity
- чем он больше, тем производительнее ядро.#blog #arm #cpu_prof
Как получить информацию о ЦП на Windows.
IsProcessorFeaturePresent - для проверки поддерживаемых инструкций типа SSE, то же самое возвращает и
GetSystemCpuSetInformation - возвращает подробную информацию о ЦП, например
CallNtPowerInformation - с параметром
GetLogicalProcessorInformationEx - с параметром
NtQuerySystemInformation - с параметром
Счетчики обновляются не так часто, при 100Гц дельта может быть 0, лучше обновлять каждую секунду. Так можно рассчитать % использования ЦП:
С параметром
#blog #cpu_prof
IsProcessorFeaturePresent - для проверки поддерживаемых инструкций типа SSE, то же самое возвращает и
__cpuid()
.GetSystemCpuSetInformation - возвращает подробную информацию о ЦП, например
EfficiencyClass
позволит обнаружить энергоэффективные ядра на новых Intel.CallNtPowerInformation - с параметром
ProcessorInformation
позволяет получить частоту ядра ЦП, но параметр CurrentMhz
не меняется.GetLogicalProcessorInformationEx - с параметром
RelationCache
позволяет получить информацию о кэше, но часто информация неполная.NtQuerySystemInformation - с параметром
SystemProcessorPerformanceInformation
позволяет получить значения счетчиков для каждого ядра, в WinAPI структуры определены без полей, но есть информация на сторонних ресурсах SYSTEM_PROCESSOR_PERFORMANCE_INFORMATIONСчетчики обновляются не так часто, при 100Гц дельта может быть 0, лучше обновлять каждую секунду. Так можно рассчитать % использования ЦП:
LONGLONG idle_time = next.IdleTime - prev.IdleTime;
LONGLONG kernel_time = next.KernelTime - prev.KernelTime;
LONGLONG user_time = next.UserTime - prev.UserTime;
LONGLONG total_time = idle_time + kernel_time + user_time;
float user_usage = float(user_time) / float(total_time);
float kernel_usage = float(kernel_time) / float(total_time);
С параметром
SystemPerformanceInformation
возвращается структура SYSTEM_PERFORMANCE_INFORMATION, где есть дополнительные счетчики производительности.#blog #cpu_prof
Инструменты профилирования для Android.
Есть стандартные инструменты: Google AGI, Adreno GPU profiler, Mali profiler, но поддержка устройств ограничена и у меня ни один профайлер не стал работать с Vulkan.
Остается прямой доступ к счетчикам, для этого есть несколько библиотек:
HWCPipe - счетчики для ARM CPU и Mali GPU. Не поддерживается на Qualcomm CPU (Kryo) и некоторых ARM CPU, даже если в названии Cortex Axx. Пример использования можно посмотреть в Vulkan samples.
hardware-perfcounter - счетчики для Mali и Adreno, доступно намного больше счетчиков, в том числе специфичные для Adreno 5xx и 6xx.
Прямой доступ к счетчикам позволяет написать алгоритм для самооптимизации, когда идет переключение между разными алгоритмами, подгонка итераций/констант и тд.
#blog #gpu_prof #cpu_prof
Есть стандартные инструменты: Google AGI, Adreno GPU profiler, Mali profiler, но поддержка устройств ограничена и у меня ни один профайлер не стал работать с Vulkan.
Остается прямой доступ к счетчикам, для этого есть несколько библиотек:
HWCPipe - счетчики для ARM CPU и Mali GPU. Не поддерживается на Qualcomm CPU (Kryo) и некоторых ARM CPU, даже если в названии Cortex Axx. Пример использования можно посмотреть в Vulkan samples.
hardware-perfcounter - счетчики для Mali и Adreno, доступно намного больше счетчиков, в том числе специфичные для Adreno 5xx и 6xx.
Прямой доступ к счетчикам позволяет написать алгоритм для самооптимизации, когда идет переключение между разными алгоритмами, подгонка итераций/констант и тд.
#blog #gpu_prof #cpu_prof