现在的处理器都支持DVFS - 动态频率电压调整,我们都知道DVFS的设计是为了low power,那么CPU频率和功耗之间的关系如何,运行在相同频率处理A任务和B任务功耗就一样吗?

同任务不同频率

在某Android平台,在单线程运行dhrystone的情况下, 可以看到随着DMIPS的增加(其实也就是频率的增加),Power数据前期相对平缓,后面就变陡了,越高频率功耗增加的越多(7000 DMIPS 功耗是400mW,频率加倍 14000 DMIPS 功耗1380mW,虽然性能是2倍,但是功耗变成了3.45倍)

关于CPU功耗和电压频率的关系有一个公式,可以看到电压是以 V2V^2V2 的级别来影响功耗的

P=C∗V2∗fP = C * V^2 * fP=C∗V2∗f

  • P是功耗
  • C可以简单看作一个常数,它由制程和设计等因素决定
  • V是电压
  • f是频率

从这里也可以看到一个程序功耗优化的方向 - 多线程

假设A程序原来是单线程,需要2GHz的频率来运行,现在把A程序改造成2个线程的,那理论上两个cpu 1GHz就够(参考某平台A53 2GHz-0.8V 1GHz-0.6V),而且处理时间相同
代入公式

  • 单线程 2GHz
    Psingle=C∗0.8V2∗2GHzP_{single} = C * 0.8V^2 * 2GHzPsingle​=C∗0.8V2∗2GHz

  • 2线程 1GHz
    Pmulti=2∗C∗0.6V2∗1GHzP_{multi} = 2 * C * 0.6V^2 * 1GHzPmulti​=2∗C∗0.6V2∗1GHz

  • 结果
    Psingle=1.78∗PmultiP_{single} = 1.78 * P_{multi}Psingle​=1.78∗Pmulti​

也就是说这种情况下, 维持效率不变, A程序的单线程会比双线程功耗高出78%

同频率不同任务

不同任务的场景相对复杂,比如有些任务是间断性性的,期间CPU可能处于空闲状态,当然功耗会低,为了比较方便,我们统一选取持续性负载的任务,测试期间一直占用CPU

在某Android平台上使用elephant stress的 分别使用单线程md5算法和sha-256算法,CPU都是处在最高频率,而且从trace信息也可以看到任务一直处于占用CPU的状态

  • 任务1 sha-256算法

systrace CPU占用

功耗430mA 4V

  • 任务2 md5算法

systrace CPU占用

功耗300mA 4V

从上面的实测数据可以看到,sha-256算法的功耗会比md5算法要高出45%, 虽然CPU都是在最高频率运行,中间也没有出现idle或者是空闲的情况。

关于这个问题有一篇知乎的文章知乎的文章讲的比较好,套用到上面的两个算法来看,可以简单理解为不同算法,CPU运行时候的指令是有很大差别的,不同的指令又对应不同数量和类型的晶体管,每条指令所要调动的晶体管数目不同(fetch,decode,excute,memory),而功耗是被调动晶体管功耗的总和。

所以虽然我们看到同样的频率,CPU的占用率也是满的,但是功耗是可以差别很大。

Android系统功耗优化之CPU - CPU功耗和频率的关系相关推荐

  1. X86 android r7 z3735,安卓工业平板电脑android系统下各大主流CPU性能大对比分析

    原标题:安卓工业平板电脑android系统下各大主流CPU性能大对比分析 针对工控领域客户在选择工业平板电脑时的困惑,南京研维组织多位业内专家,为大家连续推出10期工业平板电脑的选型要点分析,本文作为 ...

  2. android系统 修改优化,修改Android系统源代码,优化开机速度。

    通常情况下,Android系统开机保持在20s~25s应该算是合格比较好的状态. 最近几天在看关于Android系统开机启动过程的相关内容.做个笔记. 关于有话Android系统开机时间有话,采取三个 ...

  3. Android系统编译优化:使用Ninja加快编译

    背景 环境 关键编译阶段和耗时分析 阶段一:Soong bootstrap 阶段二:Kati遍历.mk搜集与ninja生成 阶段三:Ninja编译 编译优化 对比汇总 背景 Android系统模块代码 ...

  4. 安卓linux环境 查看进程,查看基于Android 系统单个进程内存、CPU使用情况的几种方法...

    一.利用Android API函数查看 1.1 ActivityManager查看可用内存. ActivityManager.MemoryInfo outInfo = new ActivityMana ...

  5. android系统电量优化,基于Android系统网络耗电量优化方法的.pdf

    基于Android系统网络耗电量优化方法的 2012年第10期,第 45卷 通 信 技 术 Vol.45,No.10,2012 总第250期 Communications Technology No. ...

  6. Android 功耗优化(13)---功耗基础知识

    SODI (screen on deep idle) 背景知识---SODI SODI跟deep idle类似,是SPM的另外一种工作模式 SODI:Screen On Deep Idle SODI的 ...

  7. Android功耗优化(10)---功耗基础知识

    SPM SPM以及时钟请求信号控制流程 因为整个系统不只是AP(MCU),还包括modem.connectivity等子系统: CPU进入WFI后,整个系统就依靠一颗SCP:SPM来控制睡眠/唤醒的流 ...

  8. android开发 wifi功率,一种基于Android系统的功耗计算方法与流程

    本发明涉及系统功耗 技术领域: ,尤其涉及一种基于Android系统的功耗计算方法. 背景技术: :为了细粒度实时分析系统各部件以及应用程序的功耗特性,并且进一步挖掘用户的日常行为,我们需要建立功耗模 ...

  9. Rockchip Android平台内存优化及系统裁剪

    Rockchip Android平台内存优化及系统裁剪 文章目录 Rockchip Android平台内存优化及系统裁剪 编译32bit的Android系统 启用Android GO的配置 系统裁剪 ...

  10. Android 系统(210)----Android的.so文件你需要知道那些知识

    Android的.so文件你需要知道那些知识 .so文件的前世今生 早期的Android系统几乎只支持ARMv5的CPU架构,而现在它可以支持7种,几乎涵盖了市面上大部分的CPU架构. Android ...

最新文章

  1. 服务国内超过70%游戏公司,腾讯游戏云发布游戏行业最全解决方案
  2. data stucture at the xuetang x
  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第23篇]写一个实现蒙哥马利算法的C程序
  4. 浅谈Object Pascal的指针[引用 Nicrosoft]
  5. 力扣93. 复原 IP 地址(JavaScript)
  6. Swoole HTTP 的应用
  7. 如何在 15 分钟内构建一个无服务器服务?
  8. aptio2018设置u盘启动_华硕笔记本重装系统时,BIOS内无法设置u盘启动怎么办?
  9. WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
  10. JS客户端学习笔记二
  11. 进程调度算法(c语言)
  12. 我的2018年考博英语复习计划Share
  13. 一文了解数据分析师与商业分析师的区别(一)
  14. 「自控原理」3.3 稳定性与稳态误差、时域校正
  15. LoRa网关和NS的那些事
  16. 强制类型转换运算符的优先级
  17. 自然语言处理技术(NLP)在推荐系统中的应用
  18. 正则化-最通俗的解释
  19. 条码软件如何制作矢量格式的条码文件
  20. Python测试Post请求

热门文章

  1. GNSS系列(2)------OneMO模组LBS定位使用方法全攻略
  2. BBS 与 BLog(博客)的区别到底是什么?[转载]
  3. IOS和Android开发的一些个人感受
  4. RC微分电路、积分电路和低通滤波电路LPF
  5. java cos90,Java Math.cosh() 方法
  6. Web安全—脚本木马工作原理(持续更新)
  7. 回溯(python)
  8. 解决“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”
  9. 89c51控制小车运行c语言,STC89C52单片机蓝牙遥控小车代码
  10. 基于javaweb的景区旅游管理系统(java+springboot+html+layui+bootstrap+jquery+mysql)