如何检查手臂上是否存在NEON?

Tho*_*son 12 arm neon

如何确定给定ARM处理器上是否存在NEON引擎?是否可以为此目的查询任何状态/标志寄存器?

Pet*_*r M 11

我相信unixsmurf的答案与使用具有特权内核的操作系统一样好.对于通用功能检测,似乎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__来确保在编译时一切正常.
  • 无论微软做什么,或者你正在使用其他一些RTOS ......我不知道......

实际上你会看到很多Android实现只是解析/ proc/cpuinfo以实现android_getCpuFeatures()....嘿.但它似乎仍在改进,最新版本使用getauxval方法.

  • iOS 5 及更高版本支持的所有 iOS 硬件都具有 NEON;您可以简单地假设 NEON 存在,无需进行任何检查(但如果您确实愿意,可以使用“sysctl”动态检查)。 (2认同)
  • 在 Android NDK 上检查是否 (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM &amp;&amp; (android_getCpuFeatures() &amp; ANDROID_CPU_ARM_FEATURE_NEON) != 0) (2认同)