为什么有的手机a9处理器频率 核数上去了 频率下来了

如何获取 Android 设备的CPU核数、时钟频率以及内存大小 - 简书
下载简书移动应用
写了3088字,被64人关注,获得了59个喜欢
如何获取 Android 设备的CPU核数、时钟频率以及内存大小
因项目需要,分析了一下 Facebook 的开源项目 - 。
Device Year Class 的主要功能是根据 CPU核数、时钟频率 以及 内存大小 对设备进行分级。代码很简单,只包含两个类:
DeviceInfo -& 获取设备参数,
YearClass -& 根据参数进行分级。
下表是 Facebook 公司提供的,其中 Year 栏表示分级结果。
关于输出年份的计算方法可以参考,本文只把一些比较常用的功能抽取出来做一个简要介绍。
获取 CPU 核数
我们都知道,Linux 中的设备都是以文件的形式存在,CPU 也不例外,因此 CPU 的文件个数就等价与核数。
Android 的 CPU 设备文件位于 /sys/devices/system/cpu/ 目录,文件名的的格式为 cpu\d+。
root@generic_x86_64:/sys/devices/system/cpu # lscpu0cpufreqcpuidlekernel_maxmodaliasofflineonlinepossiblepowerpresentuevent
统计一下文件个数便可以获得 CPU 核数。
public static int getNumberOfCPUCores() {
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.GINGERBREAD_MR1) {
// Gingerbread doesn't support giving a single application access to both cores, but a
// handful of devices (Atrix 4G and Droid X2 for example) were released with a dual-core
// chipset and G that can let an app in the background run without impacting
// the foreground application. But for our purposes, it makes them single core.
cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).
} catch (SecurityException e) {
cores = DEVICEINFO_UNKNOWN;
} catch (NullPointerException e) {
cores = DEVICEINFO_UNKNOWN;
private static final FileFilter CPU_FILTER = new FileFilter() {
public boolean accept(File pathname) {
String path = pathname.getName();
//regex is slow, so checking char by char.
if (path.startsWith("cpu")) {
for (int i = 3; i & path.length(); i++) {
if (path.charAt(i) & '0' || path.charAt(i) & '9') {
获取时钟频率
获取时钟频率需要读取系统文件 - /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 或者 /proc/cpuinfo。
我的 Android 模拟器中并没有 cpuinfo_max_freq 文件,因此只能读取 /proc/cpuinfo。
/proc/cpuinfo 包含了很多 cpu 数据。
: 0vendor_id
: GenuineIntelcpu family
: 70model name
: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHzstepping
: 1cpu MHz
: 0.000cache size
: 1024 KBfdiv_bug
: nohlt_bug
: nof00f_bug
: nocoma_bug
: yesfpu_exception
: yescpuid level
代码如下:
public static int getCPUMaxFreqKHz() {
int maxFreq = DEVICEINFO_UNKNOWN;
for (int i = 0; i & getNumberOfCPUCores(); i++) {
String filename =
"/sys/devices/system/cpu/cpu" + i + "/cpufreq/cpuinfo_max_freq";
File cpuInfoMaxFreqFile = new File(filename);
if (cpuInfoMaxFreqFile.exists()) {
byte[] buffer = new byte[128];
FileInputStream stream = new FileInputStream(cpuInfoMaxFreqFile);
stream.read(buffer);
int endIndex = 0;
//Trim the first number out of the byte buffer.
while (buffer[endIndex] &= '0' && buffer[endIndex] &= '9'
&& endIndex & buffer.length) endIndex++;
String str = new String(buffer, 0, endIndex);
Integer freqBound = Integer.parseInt(str);
if (freqBound & maxFreq) maxFreq = freqB
} catch (NumberFormatException e) {
//Fall through and use /proc/cpuinfo.
} finally {
stream.close();
if (maxFreq == DEVICEINFO_UNKNOWN) {
FileInputStream stream = new FileInputStream("/proc/cpuinfo");
int freqBound = parseFileForValue("cpu MHz", stream);
freqBound *= 1000; //MHz -& kHz
if (freqBound & maxFreq) maxFreq = freqB
} finally {
stream.close();
} catch (IOException e) {
maxFreq = DEVICEINFO_UNKNOWN; //Fall through and return unknown.
return maxF
获取内存大小
如果 SDK 版本大于等于 JELLY_BEAN ,可以通过 ActivityManager 来获取内从大小。
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);
am.getMemoryInfo(memInfo);
如果版本低于 JELLY_BEAN ,则只能读取系统文件了。
FileInputStream stream = new FileInputStream("/proc/meminfo");
totalMem = parseFileForValue("MemTotal", stream);
完整代码如下:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static long getTotalMemory(Context c) {
// memInfo.totalMem not supported in pre-Jelly Bean APIs.
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.JELLY_BEAN) {
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);
am.getMemoryInfo(memInfo);
if (memInfo != null) {
return memInfo.totalM
return DEVICEINFO_UNKNOWN;
long totalMem = DEVICEINFO_UNKNOWN;
FileInputStream stream = new FileInputStream("/proc/meminfo");
totalMem = parseFileForValue("MemTotal", stream);
totalMem *= 1024;
} finally {
stream.close();
} catch (IOException e) {
return totalM
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
欢迎与我交流Android 开发和互联网项环内容。
欢迎关注我的微信公众号:AndroidMate
· 3572人关注
干货技术文。
· 2581人关注
it技术交流
· 815人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:对于移动设备,为什么相同的核心数,相同的主频,不同公司的CPU在使用体验上会有如此大差别?
举个栗子:红米和小米
按投票排序
对桌面的设备不太懂,移动端的CPU出现上述问题的原因是:架构不同!而且一般来说CPU性能影响因素:架构是排在第一位的,核心和主频是具体看任务需求了。我也不是很懂,只知道上述的皮毛,建议你去谷歌上去看看。最早的时候,cpu输出的是通用性能,也就是游戏,上网,文档处理,视频等各种不同的任务一脚踢。比较cpu性能的时候,比的是快慢,每秒能执行多少个指令,单位就是mips,million instruction per second,每秒执行了多少个百万次的指令。可以参考: klose fu的回答。但是由于指令有很多种,为了方便对比,于是统一以整数指令作为比较标准,于是就有了臭名昭著的干石测试Dhrystone,干石测试的单位是dmips/mhz,每一次震荡周期,cpu完成了多少个整数指令,简单说,就是搬砖的速度。——对应的另一个就是湿石测试, Whetstone,算的是浮点,单位是gflops。浮点性能,和搬砖的整数性能不同,其实就是除法,要精确到小数点后几位,搬砖快也没用,是画画的能力,需要画得精细,画得再快也是渣。cpu的通用能力,虽然能转化为浮点,但始终不是专职,在游戏需求崛起的时候,根本不能满足,于是有了一个专门输出浮点的机构,叫gpu。intel的奔腾一开始也是只有浮点,后来mmx和amd 3dnow!出现后,才有浮点能力。arm更惨,在xscale的mmx和arm v5te的vfp之后才出现浮点性能。无论以上哪种,和同期的gpu浮点比,连零头都不是。所以一般说cpu算整数或通用,gpu算浮点。干石的臭名在于:1,只塞进L1,1级缓存运行,与L2无关,如果遇上像高通krait一类的L2分离式设计,存在核间通信延迟问题的,无法反映出来。不能反映L2,L3的真实情况。2,用c语言编译,遇上个编译器好点的,跑分大涨,于是各家作弊。虽然不一定准确,经常被诟病,dmips作为基本入门级常识,还是很多时候能用到,arm的架构都是平均dmips来标示,如下图划线部分。连高通自己描述自己处理器的效能时还是用dmips。连高通自己描述自己处理器的效能时还是用dmips。毛病多多的dmips最大的好处是能快速估算出移动cpu性能。然后回到红米和小米2,相同的核心数——4,相同的主频——1.5,不同的架构,红米是mt6589t,a7架构,m2是apq9084,krait200架构。那么红米极限是4x1.7xdmips,每秒最多执行102亿个整数指令,米2是4x3.3xdmips,差不多快红米一倍。但实际上,红米极限并不刚刚好就是10200dmips,每个具体移动设备的cpu型号的具体dmips值不同,但不会偏离架构平均值太多。高通的架构由于二级缓存分离式设计,l2共享存在问题,连NVIDIA都公开嘲讽过,实际输出的dmips比理论值低。另外,有人喜欢用单线程比,1.7xx1500,也有人喜欢用稳定核数和频率比,如下图:另外,有人喜欢用单线程比,1.7xx1500,也有人喜欢用稳定核数和频率比,如下图:无论哪种,都体验出红米不如小米2。dmips不过是一个很入门级的单位,而且毛病多多,不过对快速比较性能还是很有效,尤其是买手机的小白。最后,对于三星伪八核,联发科真八核的说法表示——联发科就算真16核,32核,也就是三星伪八核的一半不到的性能,对于苹果双核秒x核,我只想说:1,先看看你swift的dmips是多少;2,单挑再牛,群殴也能把你揍出翔。以上神论です。
对移动设备的不太懂,桌面的CPU出现上述问题的原因是:架构不同!而且一般来说CPU性能影响因素:架构是排在第一位的,核心和主频是具体看任务需求了~
已有帐号?
无法登录?
社交帐号登录当前位置 & &
& 只谈核数没意义!带你重新认识手机SoC
只谈核数没意义!带你重新认识手机SoC
10:56:44&&出处:&&作者:
编辑:鲲鹏 &&)
让小伙伴们也看看:
首页上一页
文章内容导航第1页 CPU:手机的大脑
文章观点支持
当前平均分:0(0 次打分)
[09-29][09-29][09-28][09-28][09-28][09-28][09-28][09-28][09-27][09-27]
登录驱动之家
没有帐号?
用合作网站帐户直接登录}

我要回帖

更多关于 小米4s处理器频率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信