Как определить, существует ли двигатель NEON на данном процессоре ARM? Любой регистр состояния/флага может быть запрошен для этой цели?
Как проверить существование NEON на руке?
Ответ 1
Я верю unixsmurf answer примерно так же хорошо, как вы получите, если используете ОС с привилегированным ядром. Для обнаружения функции общего назначения кажется, что ARM потребовало получить это от ОС, и поэтому вы должны использовать OS API для его получения.
- В Android NDK используйте
#include <cpu-features.h>
с(android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
. Обратите внимание, что это для 32-битного ARM. ARM 64 бит имеет разные флаги, но идея такая же. См. источники/документы. - В Linux, если доступно, используйте
#include <sys/auxv.h>
и#include <asm/hwcap.h>
сgetauxval(AT_HWCAP) & HWCAP_NEON
. - В iOS я не уверен, что есть динамический вызов, кажется, что методология заключается в том, что вы создаете приложение для таргетинга NEON, а затем убедитесь, что ваше приложение отмечено как NEON, поэтому оно будет установлено только на устройствах, которые его поддерживают, Конечно, вы должны использовать предопределенный флаг препроцессора
__ARM_NEON__
, чтобы все было в порядке во время компиляции. - О том, что делает Microsoft, или если вы используете другие RTOS... Я не знаю...
На самом деле вы увидите множество реализаций Android, которые просто анализируют /proc/cpuinfo для реализации android_getCpuFeatures().... Хех. Но все же кажется, что он улучшается, а новейшие версии используют метод getauxval.