有没有办法在运行时检测iOS上的VFP / NEON / Thumb / ...

时间:2013-07-18 00:33:34

标签: ios floating-point arm neon thumb

所以通过查询sysctlbyname("hw.cpusubtype", ...)可以很容易地找出iOS设备运行的CPU类型,但似乎没有明显的方法来确定CPU实际具有哪些功能(想想VFP,NEON,Thumb) ,...)。有人可以想办法做到这一点吗?

基本上,我需要的东西类似于Linux / Android上的getauxval(AT_HWCAP),它返回了CPU支持的功能掩码。

有几点需要注意:

  1. 必须在运行时从操作系统中检索信息。没有预处理器定义。
  2. 胖二进制文件不是解决方案。我真的需要在ARM v6二进制文件中知道这些东西。
  3. 提前致谢!

3 个答案:

答案 0 :(得分:2)

sysctlbyname有“hw.optional.neon”。我没有看到VFP的名称,除了“hw.optional.vfp_shortvector”,这是一个不推荐使用的功能。

答案 1 :(得分:1)

通过accele.framework进行矩阵浮动多平面测量并测量执行时间。霓虹灯和VFP驱动的数学之间差异很大,你根本不能错过。

拇指始终存在,NEON的存在意味着armv7 = Thumb2。

答案 2 :(得分:0)

首先,请仔细考虑您是否真的需要支持iOS的armv6二进制文件。根据发布的版本份额统计,98.5%的iOS设备运行iOS 5.0或更高版本,不支持armv6设备(armv6二进制文件仍将在当前iOS版本上运行,显然,所有新应用程序应该真正针对armv7;您的客户今天基本上没有理由为iOS发送armv6二进制文件。)

同样,您对代码大小的担忧也是错误的。如果您提供了一个胖库,并且您的客户针对它构建了一个armv6二进制文件,则只会将库中的armv6位内置到其应用程序中。此外,代码大小通常几乎是应用程序包大小的一小部分;应用程序的大部分大小来自其他资源。

确定。除此之外,如果您真的想要追求这一点:所有iOS设备都支持VFP和拇指,因此无需检查支持。您可以使用Eric Postpischil建议的方法检查NEON和thumb-2(所有armv7 iOS设备都支持NEON,因此NEON的可用性与thumb-2的可用性完全一致)。