gpt4 book ai didi

android - 是否有任何 API 可以判断 Android 设备是否是双核设备?

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:52 27 4
gpt4 key购买 nike

我是通过多线程做双核优化,是这样工作的:如果设备有双核处理器,则创建两个线程来进行计算,如果设备只有一个核处理器,则只创建一个线程来进行计算。

我的问题是:我的程序如何知道设备是否是双核的?我只想拥有一个可以在双核和单核设备上运行的程序,因此它必须能够知道该信息。

代码如下:

    if( xxx_API_is_device_dual_core() )  // Inside if() is the expected API
{
saveThread = new SaveThread[2];
}
else
{
saveThread = new SaveThread[1];
}

非常感谢您的帮助!

最佳答案

Runtime.availableProcessors() 似乎无法在所有 Android 设备上正常工作(例如,它只在我的双核 Galaxy S II 上返回“1”)。物理 CPU 和虚拟 CPU(也称为核心)之间可能存在一些混淆。

我找到的最可靠的方法是 described in this forum post .基本上,您必须统计/sys/devices/system/cpu/中的虚拟 CPU 设备。这将适用于双核和四核设备,无需修改。

我已经在我的 Galaxy S II(2 核)和 Asus Transformer Prime(4 核)上测试了这个方法,它报告正确。这是一些示例代码(取自 my answer to this question ):

/**
* Gets the number of cores available in this device, across all processors.
* Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu"
* @return The number of cores, or 1 if failed to get result
*/
private int getNumCores() {
//Private Class to display only CPU devices in the directory listing
class CpuFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
//Check if filename is "cpu", followed by a single digit number
if(Pattern.matches("cpu[0-9]", pathname.getName())) {
return true;
}
return false;
}
}

try {
//Get directory containing CPU info
File dir = new File("/sys/devices/system/cpu/");
//Filter to only list the devices we care about
File[] files = dir.listFiles(new CpuFilter());
//Return the number of cores (virtual CPU devices)
return files.length;
} catch(Exception e) {
//Default to return 1 core
return 1;
}
}

关于android - 是否有任何 API 可以判断 Android 设备是否是双核设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7592843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com