【问题标题】:Detecting FPU presence on Android在 Android 上检测 FPU 的存在
【发布时间】:2011-12-30 23:07:26
【问题描述】:

我想在 Android 上获得我的移动应用程序的最佳性能。我想知道是否有人知道检查手机是否具有 FPU 的技巧。

经过一些研究,似乎在拥有 FPU 的单元上使用 FloatMath 类会更慢,所以我希望两全其美。

大多数较新的手机都有 FPU,但我希望获得该设备所能提供的最高性能。

【问题讨论】:

  • 在过去的 15 年里有没有人制造过没有 FPU 的处理器?
  • 有些安卓手机没有,这就是重点。以 HTC Hero 为例
  • @gimpycpu 我叫恶作剧。我无法理解没有 FPU 的 CPU
  • 好吧,如果没人知道我会坚持使用 FloatMath 课程,除非我注意到在更主流类型的手机上性能不佳。
  • 请注意,至少有一款流行的早期安卓手机(G1)没有 FPU。 Google 的浮点建议中引用了这一事实:developer.android.com/guide/practices/design/…

标签: android optimization mobile fpu


【解决方案1】:

尽管它是一个非常古老的线程,但对于像我这样通过 google 登陆这里的人来说可能会发现它很有用。在这里,我将展示我们如何使用 NDK (C++) 来完成它,因为 Java 方式已经给出。

使用 NDK,通过包含 cpu-features.h,我们可以利用许多 API 和预定义的宏来检测 FPU 的可用性。

对于 32 位 处理器,您应该检查 android_getCpuFeatures() 的返回值上的 ANDROID_CPU_ARM_FEATURE_VFPv3ANDROID_CPU_ARM_FEATURE_VFPv2ANDROID_CPU_ARM_FEATURE_VFP_D32ANDROID_CPU_ARM_FEATURE_VFP_FP16ANDROID_CPU_ARM_FEATURE_VFP_FMA 之一,这将确保您的处理器配备了 FPU。

64位请查看ANDROID_CPU_ARM64_FEATURE_FP标志。

此外,调用android_getCpuFamily() 以获取 CPU 系列/架构(ARM/MIPS、32/64 位等)。

cpufeatures library manual 拥有一切可以在您的项目中包含和使用的东西。

【讨论】:

    【解决方案2】:

    它下面是一个Linux内核,至少默认的Android配置会挂载procfs。这意味着您可以查看/proc/cpuinfo,它在 ARM 系统上看起来像:

    # cat /proc/cpuinfo
    处理器:ARMv7 处理器版本 3 (v7l)
    BogoMIPS : 249.96
    特点:swp 半拇指 fastmult vfp edsp 霓虹灯 vfpv3
    CPU实现者:0x41
    CPU架构:7
    CPU变体:0x1
    CPU部分:0xc08
    CPU 修订版:3
    [ ... ]
    

    如果“Features”行至少列​​出了vfp,则 ARM SoC 具有 FPU。

    您应该能够通过 Dalvik/Java 接口读取/proc/cpuinfo,就像普通文件一样,无需特权访问或任何要求。我不是 Java 程序员,所以将其作为练习留给读者。

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      相关资源
      最近更新 更多