Как проверить существование NEON на руке?

Как определить, существует ли двигатель NEON на данном процессоре ARM? Любой регистр состояния/флага может быть запрошен для этой цели?

Ответ 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.