4

因此,通过查询来确定 iOS 设备运行哪种 CPU 相当容易sysctlbyname("hw.cpusubtype", ...),但似乎没有明显的方法可以确定 CPU 实际具有哪些功能(想想 VFP、NEON、Thumb 等)。有人能想出办法吗?

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

需要注意的几点:

  1. 必须在运行时从操作系统检索信息。没有预处理器定义。
  2. 胖二进制文件不是解决方案。我确实需要在 ARM v6 二进制文件中了解这些内容。

提前致谢!

4

3 回答 3

2

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

于 2013-07-18T14:42:58.003 回答
1

通过Accelerator.framework进行矩阵浮点乘法并测量执行时间。Neon 和 VFP 驱动的数学之间的差异将足够大,您绝对不能错过。

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

于 2013-07-18T03:28:42.677 回答
0

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

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

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

于 2013-07-18T15:07:46.497 回答