【问题标题】:Detecting number of CPU cores on Android from native code从本机代码中检测 Android 上的 CPU 内核数
【发布时间】:2013-11-04 07:18:19
【问题描述】:

我正在使用sysconf( _SC_NPROCESSORS_ONLN )(我相信这是推荐的方式)来获取 CPU 内核的数量。它可以正常工作或 Mac 和 Linux,但在我的 4 核 Android 平板电脑上它返回 2。如何从本机代码获取 Android 上的实际内核数(不使用 JNI 调用 Java Android API)?

【问题讨论】:

  • 您使用的是哪个 CPU 架构?而且,您检查过 Linux 吗?
  • 我记得在 Android 上看到过这个错误,它在第一次调用该方法时返回活动 CPU 的数量,而不是设备上存在的 CPU 数量:code.google.com/p/android/issues/detail?id=26490
  • @rakib:ARM。检查什么?
  • 是 big.LITTLE 吗?你通过 /proc/cpuinfo 找到 4 核了吗?
  • @rakib:我怀疑它是 big.LITTLE,它应该只是一个普通的 4 核 ARMv7a。我没有看/proc/cpuinfo,我只知道CPU有4个核心。如果我硬编码 4 的线程数,我可以看到 100% 的 CPU 负载和适当的性能提升。

标签: android c++ linux multithreading android-ndk


【解决方案1】:

sysconf( _SC_NPROCESSORS_ONLN )sysconf( _SC_NPROCESSORS_CONF ) 都不起作用,但来自 cpufeatures NDK 库的 android_getCpuCount() 可以正常工作。

【讨论】:

  • b.android.com/26490 中所述,从 NDK r7c 开始,sysconf() 调用应该返回合理的值。它们都返回 2 而 android_getCpuCount() 返回 4 吗?如果是这样,请使用该信息和“adb shell cat /proc/cpuinfo”的输出提交一个错误。
  • @fadden:我正在使用 NDK r9,sysconf( _SC_NPROCESSORS_ONLN )sysconf( _SC_NPROCESSORS_CONF ) 返回 2,而 android_getCpuCount() 返回 4。
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多