当前位置:首页 > 单片机 > 单片机
[导读] 内容摘要:在强调便携式设备的电池寿命时,看起来比较奇怪是,很少有软件工程师在其日常项目任务中真正做到了减少能耗。我猜想对这个课题有所想法的那些人可能都是本着荣辱自担的想法才关注此课题的。

内容摘要:在强调便携式设备的电池寿命时,看起来比较奇怪是,很少有软件工程师在其日常项目任务中真正做到了减少能耗。我猜想对这个课题有所想法的那些人可能都是本着荣辱自担的想法才关注此课题的。我们到了要做些改变的时期。随着电池寿命和性能要求的矛盾持续,我们作为软件工程师不得不要用更多时间来找出如何才能以节能方式来设计和编写我们的软件,至少在工具能满足我们要求之前需要这样做。


我们这些软件工程师都热衷于为我们遇到的问题找出完美的解决方案。但奇怪的是,我们会发现在这个特定的领域,没有一个完美的解决方案。聪明的技巧可能会节省一些功率,但是这个领域是由其他更简单的因素支配的。就象房间里有几头很大的大象,我们必须要先小心翼翼地猎取我们可以看到的大象,然后再花精力去猎捕体型小的动物。

在考量某个系统的功耗时,重要的是要弄清楚我们实际测量的对象是什么。我们说的“节省功耗”可能意味着几个方面。它意味着“功率”还是“能量”。实际上,我们既需要功率也需要能量。大多数手持便携式设备均具有以下两个不同的预算:功率预算——它管理着瞬间功耗、避免过热或产生热应力,而能量预算则管理着长期使用的能量总数。而软件则需要满足短期的功率预算和长期的能量预算。

很明显,我们可以把任何设备的功耗降低到接近零,只要不让它做任何操作或任何有意义的操作即可!不得已的是,实现有用的功能就需要耗费能量。因此,我们只能在有意义的操作和节能二者中不断采取折衷方案。为了实现所需的功能,我们必须耗能;但我们必须尽量确保以节能的方式来实现这些功能。

功耗时间积 有关该主题的学术材料中常用的更好度量方式是采用“功耗时间积”。尽管既没有标准单位也没有具体方法,但是这种度量方式将能耗和性能度量结合到了一起。增加能耗或降低性能会增加功耗时间积的值,因此我们的目标是找出最低的可接受的功耗时间积的值,换句话说,最低的能耗要与允许的时间内所需任务的执行保持一致。

能量去哪儿了? 所有计算器械均会执行两个基本功能。这两个功能都是必需的,没有这两个功能就不能完成任何有意义的任务。

我们首先想到的自然是计算或数据处理。通常,计算是对机器寄存器中保存的值实施的操作。为了尽可能高效地实施计算任务,我们需要在最短的时间内执行最少的指令。最重要的是,高效计算允许以下二选一:要么我们可以早点完成计算去睡觉,要么我们调慢时钟且仍然在规定时间内完成计算任务。

这里经常被人忽视的是数据通信(数据移动)。在大多数架构中(A R M采用加载/存储架构,也不例外),数据移动是必需的。如果不将信息从一个位置移动到另一个位置且经常返回原来的位置,用户就无法处理任何信息。例如,内存中的值需要移动到寄存器中进行处理,然后把结果写回到内存中。

但是哪个耗用的能量更多呢?最大的偿付在哪儿?

图1显示了普遍存在的事实,与程序有关的内存存取操作中有大约60%是指令抓取,另外40%才是数据存取。

图1:内存存取分布

图2:内存存取能耗

图2显示了A R M进行的一些研究。如果执行一条指令的能耗是1,那么,紧耦合存储器(TCM)存取的能耗约为1/25,缓存存取的能耗大约为1/6。而外部R A M存取的能耗则是指令执行能耗的7倍。

换言之,对于每次外部R A M存取所用的能耗,我们可以执行7条指令,40次缓存存取或大约170次TCM存取。

计算廉价但通信昂贵

因此,似乎数据移动要比数据处理更昂贵。因此,第一头大象就是数据效率。

我们可以为内存存取的能耗管理提出两个规则。

近距离 - 从能量角度讲,内存越靠近核心,访问内存的相对能耗越低。

少存取 - 减少内存存取次数比减少指令数量更加重要。

充分利用片上存储器

从我们的能量图可以清楚地看出,TCM是到目前为止系统具有的最高效存储器类型。不是所有的系统均具有A R M称为TCM的存储器(通过专用和优化的接口连接到内核),但是大部分系统至少具有某种片上快速存储器类型。为了便于讨论,我们指的是常见的片上存储器(SPM)。假定S PM单次存取能耗大约是外部R A M存取能耗的1/170,充分利用这种SPM存储器应该是首选。

图3:SPM的能量优势

图3中的图表显示了简单的“多类”基准,甚至128个字节的S PM区域都可以减少大约一半的功耗。1k字节的存储器最大可减少70%的功耗。本次研究(Mar wedel, 2004)中采用的方法是从外部R AM到S PM动态重定位代码和数据片段。甚至在按需移动各项开销方面,不仅降低了能耗,性能也提高了大约60%。

很显然,我们在某个点上正在损失回报。这种情况下,S PM超过1k时,性能提升幅度变缓,系统总能耗也会稍微升高。在这里,我们实际上在承担这种特定应用无法使用的S P M能耗,因为这种应用程序本身并不够大。

您还可以注意到,在结合了所使用的分配算法时,这种特定的应用无法使用小于64字节的S P M区域,因为没有足够小的可用片段与之相配。本次研究中还展示了一个更加成熟的算法,可以在最佳状况下节省能耗可以超过80%。

永远做缓存友好的事

分析缓存优点有时可能比分析S PM优点更加复杂。一方面,缓存基本上是自我管理的。另一方面,缓存不是对单个存储位置进行操作,而是对固定大小的“线路”进行操作。因此,访问单个可缓存的存储位置可能加载整条线路,从而造成突发的内存存取。如果该附加的数据从未被访问过,则所消耗的能量就浪费了。

另一个不利之处是缓存所需的其他逻辑成本(就硅片面积和功耗而言)。

图4:缓存的能量优势

图4摘自普林斯顿(Brooks,2000)一份论文,显示了针对某简单应用基准的三套数据。针对不同的缓存大小,这些条块分别代表性能IP C(单位周期指令数)、功耗和功耗时间积(ED P)。总的来说,性能会随着缓存大小的增加而提升。但是,系统的功耗也会增加,因为增大缓存单元会相应增加功耗。功耗时间积允许我们在性能和缓存大小之间取得平衡。在这个例子里,存在一个最佳点,即缓存大小为64k时,此时的功耗时间积最小。

最大限度减少数据内存存取

A RM架构的一个特性是其常量是不确定的,特别是,不可能用单条指令把一个任意32位常量放到一个寄存器中。实际上,所有内存存取必须按寄存器中的地址操作,这就意味着程序需要把这些地址和其他常量频繁地放到寄存器中,而这一点很难做到。解决此问题的标准方法是把常量作为文字数据嵌入到代码段中,在运行时使用PC相关的加载进行加载。

因此,这种最大限度减少常量影响的方法很实用。确保在编译时这些常量是已知的,如果可能,最好能把这些常量嵌入到单条ARM指令中。为了存取全局变量,尽可能减少加载基址指针的需求。这就需要确保全局变量在运行时都在内存中,这样才能使用单个指针存取多个变量。实现这个目标最简单的方式是将全局变量放到一个结构中。

尽管A R M的堆栈访问相对高效(堆栈访问可较好地加载和存储多条指令),但是程序员还可以通过很多方式来减少堆栈访问:减少活动变量、避免占用本地变量地址、可能时充分利用尾部调用优化、将传递到函数的参数数量减少到四个以下、允许编译器主动内联函数等。

递归情形和避免递归情形的做法更加复杂。通常编译器可以对归函数很好地进行尾部优化。实际上将所有数据存储到堆栈中可以比其他做法获得更好的局部性。或许建议可能最好表达为“除非其他做法让数据局部性更糟或您确信编译器可以对递归调用进行尾部优化,否则不要使用递归算法”。应编写异常处理程序,增加尾部连锁的机会,进而避免堆栈环境内不必要的保存和恢复。

现在我们把注意力转到这个问题的第二头大象,即指令执行。

最大限度减少指令数目

事实上,减少指令执行次数本质上与性能优化是相同的,执行的指令数越少,能耗就越低。另外,还要增加一些明显的指针。

首先,正确地配置工具。在编译器和链接器完全了解目标平台,甚至无法实施一些基本的优化。

编写代码时要保持敏锐,才能避免不必要的操作。对于A R M架构,32位数据类型是高效的:一般8位和16位数据类型,尽管占用的存储空间

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2024年4月22日 /美通社/ -- 恶性的攻击和意外事件总是防不胜防,提前部署灾备方案可以在遭遇意外时尽可能减少企业损失。那么面对无处不在的勒索病毒和潜在风险,为什么依然有很多企业还会遭遇数据丢失?

关键字: 勒索病毒 软件 电脑 群晖数据

SAP(思爱普)近日发出的裁员计划,不仅涉及全球范围内约8000个职位,更是在中国区造成了近1500名正式员工和合同工不续的情况。

关键字: 软件 互联网

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

在下述的内容中,小编将会对中央空调的节能措施予以介绍,如果中央空调的节能措施是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: 中央空调 节能 空调

德国埃朗根2024年4月16日 /美通社/ -- Elektrobit 今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成现代微控制器新一代硬件加速器的软件产品,可应用于先进的汽车电子/电气架...

关键字: 汽车 软件 硬件加速 通信网络

Windows Embedded Compact 7(简称WinCE)是一种专为嵌入式系统设计的操作系统,具有体积小、效率高、可定制性强的特点。在WinCE中设置自动运行软件,通常是为了满足设备在启动后自动执行特定任务的...

关键字: 嵌入式系统 软件 操作系统

业内消息,日前欧洲软件巨头SAP宣布了一项重组计划推动人工智能增长,该计划将涉及大约8000名员工的岗位调整,这些员工将被纳入自愿休假计划和内部再培训措施,即鼓励员工自愿离职或进行内部转岗。

关键字: AI 重组 软件 裁员 SAP

业内消息,国家工信部近日公布了今年前三季度我国软件和信息技术服务业的具体情况,整体运行态势平稳,软件业务收入两位数增长,利润总额保持较快增长,软件业务出口降幅收窄。

关键字: 工信部 软件

嵌入式系统是一种特殊的计算机系统,它被嵌入到其他设备中,以完成特定的任务。嵌入式系统的结构组成是由硬件和软件两部器、输入输出设备和总线等组件,而软件部分则包括操作系统、应用程序和驱动程序等。

关键字: 嵌入式 计算机 软件

嵌入式软件系统是现代技术中广泛应用的一种软件形式,它通常嵌入在各种设备中,如汽车、电子设备、医疗设备等。由于这些设备的功能和性能对人们的生活至关重要,因此对嵌入式软件系统进行全面而有效的测试非常重要。本文将介绍如何对嵌入...

关键字: 嵌入式 设备 软件
关闭
关闭