【问题标题】:How can Java code check for the number of floating point registers?Java 代码如何检查浮点寄存器的数量?
【发布时间】:2013-12-15 08:19:40
【问题描述】:

我们有一个内置于两个不同版本的原生库(一个完整的游戏引擎和游戏代码)。一个版本支持带有 32 个浮点寄存器和 Neon SIMD 指令的 armeabi-v7a,另一个版本支持带有 16 个浮点寄存器的 armeabi-v7a(用于例如 Tegra 2 设备),因此不使用 Neon SIMD 指令,因为那样不会工作。

当我们的游戏开始时,我们在 Java 领域进行一些设置,然后加载正确的库。现在,我如何找出要加载的库?一种解决方案是添加另一个本机库,除了上面提到的两个,它只有一个方法可以调用 JNI 以使用 NDK 检查硬件支持......但肯定有办法从 Java 中检查这个?

我尝试打印在 android.os.Build 类中找到的所有内容并得到了这些,但我看不到在这里使用什么:

BOARD: EeePad
BOOTLOADER: unknown
BRAND: asus
CPU_ABI: armeabi-v7a
CPU_ABI2: armeabi
DEVICE: TF101
DISPLAY: IML74K.WW_epad-9.2.1.27-20120615
FINGERPRINT: asus/WW_epad/TF101:4.0.3/IML74K/WW_epad-9.2.1.27-20120615:user/release-keys
HARDWARE: ventana
HOST: Mars
ID: IML74K
MANUFACTURER: asus
MODEL: Transformer TF101
PRODUCT: WW_epad
RADIO: unknown
SERIAL: 037c708543204317
TAGS: release-keys
TYPE: user
USER: unknown

【问题讨论】:

标签: java android cpu-registers neon


【解决方案1】:

您可以尝试阅读/proc/cpuinfo,其中应该包含一行Features :,告诉您您正在使用的内核的功能。

例如在我的 Xperia Z1 上显示:

Features    : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt

从Android/Java层处理该行的内容应该很容易..

这也是NDK 在您调用android_getCpuFeatures() 时所做的。

【讨论】:

  • 我最终使用了 pi4j 中的一些代码,它是 Raspberry Pie 的 Java 实现。它确实按照您的建议进行,并且效果很好。 pi4j.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多