在ARM平台上如何才能以节能方式来设计和编软件

发布者:psi33最新更新时间:2018-02-17 来源: eefocus关键字:ARM平台  节能方式 手机看文章 扫描二维码
随时随地手机看文章

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


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

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

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

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

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

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

    这里经常被人忽视的是数据通信(数据移动)。在大多数架构中(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位数据类型,尽管占用的存储空间较少,但是处理效率也较低。在v6和v7架构中,打包和接包指令以及S IM D操作一定程序上对此有些帮助,但是要注意,在主程序中无法从C访问这些指令。

    编写循环时要当心

    可以按照以下一些简单的规则来编写循环:使用无符号的整数计数器,向下倒数,并把是否等于零作为终止条件。这可以让循环更短,速度更快,使用的寄存器更少。还要记住,要采用矢量化来编写循环。即使在尝试展开和矢量化最简单的循环时,有关控制结构和数据声明的一些简单规则都可以让编译器的作业变得更简单。

     

     

    图5:循环展开

    图5显示了与一个特定循环优化有关的一些数据,这个循环优化就是循环展开(Brooks,2000)。按照预期,随着展开因子的增加,执行时间和指令数目会减少。我们看到了减少循环开销和减少地址计算的效果。功率结果更加有趣,但不太明显。因为预测器可用来训练其行为的分支更少且针对循环结束失败的最终错误预测比例大增,所以随着循环进一步展开,分支预测器的准确性出现下降。但是,因为顺序取指的连续数据流不经常被中断,所以取指阶段的效率可以提升。组合的结果是减少了每条指令的净能耗。

    因此尽管执行时间基本上低于展开因子4,但是因为功耗持续降低,所以所有重要的功耗时间积也随之降低。因此有能耗意识的编译器或开发人员与只考虑执行时间的编译器或开发人员相比,会更倾向于展开循环。

    精度满足需求即可

    还必须考虑输出要求的精度。即使有浮点硬件可用,定点实现的计算通常比浮点实现的计算更有效率。如果您正在渲染一个供屏幕查看的图像,可能并不需要完全符合标准,您只需要渲染出可以接受的图像。

    对标准M P E G- 4解码函数进行递进优化的一项研究(S h i n,2002)已经表明,把软浮点切换为定点二进制可以把能耗降低72%。精度损失意味着该结果不再符合标准,但是在所研究的系统上仍然足以满足渲染用途。

    关于Thumb

    T humb指令集专门设计用于改进代码密度,还可以提升窄内存系统的性能。但是,在代码密度确实改进的同时,指令数也同时增加了。这是因为,与A R M指令相比,减少了个别Thumb指令的功能。因此Thumb重新编译会造成能耗增加,这看起来是合理的,而我们看到的事实也的确是这样。

    上述研究表明,如果代码大小减少4%,指令执行数增加38%,而能耗增加28%。为了找到第三头大象,我们需要走出处理器及其内存的领域,着眼于范围更大的系统。我们这些天使用的系统已经被我们的硬件设计同事组合到了一起,这个系统提供了大量节能选项。

    更广系统中的节能

    显而易见,没有使用的组件应尽可能置于低功耗状态。这也是所有敏锐的设计系统不可分割的组成部分,这些组件应包括内存和缓存系统、甚至是处理器本身。在多核系统中,我们必须考虑在处理要求相对低时中止一个或多个内核运行的可能性。

    首先,一个很小但值得考虑的问题是:处理外设时,要始终尝试使用中断机制,而不是轮询机制。轮询循环只会耗用能量而无任何目的。几乎所有架构均包括了某种等待中断的指令,可以把这种情况下的系统置于待机状态。对于A R M系统,内核通常带有时钟门控,只保留静态漏电。

    通过设计中断架构来增加拖尾连锁,一般可以避免不必要的睡眠唤醒循环。ARM Cortex-M3架构可以自动实现这一点。

    对于个别计算单元,选择一种关机方案是很容易的。对于可以预测需要与否的单元,在不需要时通过应用程序或操作系统就可以停止运行这些单元。对于不可预测需要与否的单元,可以通过按需通电启动系统,也可以在空闲超过某段时间之后再自动断电。子系统断电的时标可以通过以下两方面来得出:通电但处于空闲状态时的功耗以及睡眠唤醒循环的能耗。从根本上讲,这取决于应用场合。但是,动力循环代码的简单循环计数将是最明显的起点。

 

    测量数据表明,N e o n引擎相比C o r tex-A9等内核的运行功率要高大约10%。但是,对于传统的信号处理算法,其性能提升了40% - 150%。在任务期间启用NeON而在不需要时切断Neon的好处很明显。很常见的是,不但N e o n引擎可以在任务完成时切断,而且整个处理器系统可以节省更多功耗。

    通常一个比较难的选择是启用计算组件提前完成计算(且因此切断时间更长)还是完成计算时及时降低处理器速度以减少功耗。图6显示了每次迭代的能耗数据,这是简单的基准(Domeika, 2009)。采用不同的指令缓存和浮点协处理器组合,对于两个时钟速度,每个时钟速度均要运行此基准四次。有两个清晰的重点。首先,尽管指令缓存和浮点单元均减少了能耗,但是浮点单元比指令缓存的表现更优异。

     

     

    图6:系统组件电源利用

    其次,对于所有配置而言,每次迭代的能耗从本质上讲是相同的,与时钟速度无关。因此,为了更快地完成任务而启用所有功能并全速运行要比调慢时钟速度更加高效。

    多重处理

    众所周知,与调高单核的功率相比,采用多核可以获得更高的性能和更好的能效。使用多核系统时,我们必须考虑在不需要时选择中止一个或多个内核。A R M的研究表明,S M PLinux系统中单核循环的成本是50000个周期(大部分周期用于清除一级缓存),这意味着此操作将在几百毫秒内完成,而不是更短的时间内完成,否则其能耗成本将超过其具有的优势。

    ARM是主动研究型架构,其包含两个内核,一个高性能的内核用于全功能操作,一个较小的配套内核则以较低的性能完成低功率操作。需要较高的处理功率时,系统运行较大的内核。任务完成时,系统可以把所有信息传递给小内核并关闭大内核。需要逆向信息移动时,再切换回大内核。如果这两个内核相连成为相关系统,则切换的能耗成本可降到最低。

    关于操作系统

    不巧的是,在操作系统上运行时,应用程序员无法这样灵活处理。缓存配置、S PM使用与否、组件的电源周期等很大程度上都是操作系统架构和设备驱动程序来专门决定的。但是,应用程序员仍然有很多东西需要考虑。

    研究已经表明,设计不良的进程间通信(I P C)会大大增加系统的能耗。一个简单的技术称为“矢量化”进程间通信,这种技术批量处理小的消息并把大量小的消息作为一个大的消息来发送,这样通常可以减少上下文的切换开销。另外,减少进程数量可明显降低进程间通信的需求。需要频繁通信的进程可以合并成一个进程。

    在嵌入式Linux中运行的最近研究(Tan, 2003)表明,分析和合理设计进程间通信2 可以潜在改进能耗多达60%。

    结论

    尽管我已经强调了许多领域仍然属于学术研究范围,但我们现在还是可以做许多工作。结果相对比较简单:减少外部内存存取,减少指令执行,并在不使用某些单元时关掉它们。

    在做出这个结论的同时,我想起了2 0 0 9年中期在一次培训课上与客户的一次谈话。这些客户关心如何在包含了N e o n的C or tex-A8平台上实现信号处理算法且想要知道个别指令的确切能耗。我解释说,实际上很多这种信息是未知的,而且不管在什么情况下,很难使用当前的工具得出这些信息。回顾上文,我们已经认识到在捕猎大象的这个长期任务中,这些信息都是无关紧要的。实际上,客户要捕猎的大象与房间中的其他大象相比,非常的小。不管是经过分析还是持续跟踪数据,都可以得出更好的建议,那就是估算每次实现中涉及的数据存取次数和类型。这样,再结合指令计数,可以做出更加明智的选择。与内存存取布置不良相比,个别指令的功耗几乎无关紧要。

    我们这些软件开发人员要继续对学术和工具供应商施加压力,让他们在下一代工具中构建出这些功能。这不容易但将会实现。

    最后,我必须提醒大家所有这些取决于您所用的系统、平台、应用程序、操作系统、电池和用户。就像俗话说的“优势各有不同”。


关键字:ARM平台  节能方式 引用地址:在ARM平台上如何才能以节能方式来设计和编软件

上一篇:ARM伪指令地址读取:ADR ADRL LDR
下一篇:基于ARM平台的数字滤波器的软件实现方法

推荐阅读最新更新时间:2024-03-16 15:55

平台安全架构:下一步实现安全物联网的行业通用框架
作者:Arm副总裁暨物联网设备IP事业群总经理Paul Williamson 核心信息: 首套针对广泛应用的物联网设备的PSA威胁模型和安全分析(TMSA)文档,将在2018年嵌入式世界大会(Embedded World)上正式发布 首个符合固件规范的开源参考Trusted Firmware-M将于3月底发布 安全,毋庸置疑是物联网行业面临的最为关键的问题。然而,如今众多供应商林林总总各自发布的一系列安全申明令人感到困惑,如何有效实施安全措施变得无从入手。2017年10月,Arm宣布了平台安全架构(PSA)——PSA是一个行业通用框架,允许物联网生态系统中的每位成员以更高的、可扩展的安全性以及更强大的信心向前迈进。 PSA
[嵌入式]
<font color='red'>平台</font>安全架构:下一步实现安全物联网的行业通用框架
Atmel与ARM合力打造物联网开发平台
采用ARM® mbed™ 平台为设计人员开发物联网应用提供了全面的硬件、软件和工具,范围遍及可穿戴设备到消费电子、工业电子以及白色家电 近日,全球微控制器(MCU)和触摸技术解决方案领导者Atmel®公司(NASDAQ:ATML)在ARM技术大会上宣布将与ARM就物联网(IoT)mbed设备平台开展合作。 对于使用Atmel安全、低功耗和低成本的无线连接解决方案,特别是Atmel SmartConnect Wi-Fi以及与802.15.4兼容解决方案的开发者来说,Atmel与ARM的此番合作将拓宽其生态系统。 此外,可穿戴智能设备、家庭自动化系统等物联网开发者也将会更快地把其产品推向市场。 建立在
[物联网]
Atmel与<font color='red'>ARM</font>合力打造物联网开发<font color='red'>平台</font>
交叉编译Python-2.7.13到ARM(aarch64)平台
方法跟交叉编译Python-2.7.13到ARM(aarch32)平台基本一样, 不同的地方只是把工具链换成编译aarch64的工具链,这里可以参考用qemu搭建aarch64学习环境. 创建目录: mkdir python2_7_13_for_aarch64 下面是配置、编译和安装的脚本: 1、配置: mk1_conf.sh 1 #!/bin/bash 2 3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH 4 5 ../Python-2.7.13
[单片机]
FPGA和ARM的Profibus-DP主站通信平台设计
引言     Profibus-DP是由西门子公司推出的一种开放式现场总线标准,用于现场级分布式自动化外设之间的高速数据传输。Profibus在2007年4月突破2000万节点大关。据PI(世界性的现场总线Profibus用户组织)称现在已经超过2 500万个节点,并希望在2012年突破5 000万个节点,年销售芯片450万个。     目前国内业界对于Profibus-DP的研究和相关产品的开发都是基于国外提供的专用协议芯片(主站多数采用西门子推出的ASPC2,从站多采用SPC3等智能通信芯片),而没有协议芯片样机开发的相关报道。对于主站的开发,国内一些科研院所(北航706教研室、中科院、浙大等)也曾利用可编程逻辑器件配合MCU
[单片机]
移植ethtool到arm平台
首先下载ethtool的源码包。 剩下的事情,几条命令搞定。 tar -xzf ethtool-3.15.tar.gz cd ethtool-3.15 ./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc LDFLAGS=-static make cp ethtool /path/to/rootfs/bin/
[单片机]
基于ARM-Linux平台及GPRS技术的家庭智能控制系统
  随着生活节奏的不断加快,人们希望即使在工作或外出时也能及时了解家中的情况并控制家中的各种设备。各种无线通信技术的不断发展,使家庭智能系统的远程控制成为一种现实。本文结合ARM9 处理器功能强大、GPRS 技术永远在线,接入范围广,功耗低以及ZigBee 无线组网技术等优点,设计实现了一种基于嵌入式系统的无线家庭智能控制系统。   1 系统体系结构及主要功能   系统主要由家庭智能控制模块、图像处理单元、ARM 中央控制平台、ZigBee 无线传输、GPRS 无线通信和以太网通信等部分组成,其体系结构如图1 所示。 图1 系统体系结构   其中家庭智能控制模块主要包括家电控制模块、窗帘控制模块、灯光控制模块及安防控制
[单片机]
基于<font color='red'>ARM</font>-Linux<font color='red'>平台</font>及GPRS技术的家庭智能控制系统
ARM推出全新开发套件协助业者缩短移动游戏平台上市时程
符合业界标准的ARM Mali SDK软件开发套件为绘图应用开发业者提供先进的软硬件及工具组合   ARM于日前在美国加州旧金山举办的游戏开发者大会中,发表其最新推出的ARM Mali 软件开发套件(Software Development Kit, SDK)。该套件能够协助游戏开发业者,从一般应用开发快速移转至能立即使用在各种手机上的设计方案。手持式装置制造商都希望在其新产品推出的同时,各种相关的游戏软件配套措施也已准备就绪。而Mali SDK的推出,正使开发业者能够在取得硅组件之前,便着手进行游戏软件的开发与测试,以确保新游戏能与手机同步问市,并延长游戏的销售周期。   Mali SDK为ARM绘图系列产品之最新力作,特别
[新品]
基于ARM9内核的软硬件平台设计
嵌入式应用系统设计包括硬件平台和软件平台两部分。前者是以嵌入式微控制器/微处理器为核心的硬件系统;后者则是围绕嵌入式操作系统构建的软件系统。两者在设计上是密不可分的,并且需要在设计之间进行权衡优化,根据实际应用进行外扩和裁剪。 基于ARM926EJS内核的LPC3180内部集成了丰富的外设资源,为嵌入式系统构建提供了很大的设计空间。本文结合笔者开发LPC3180嵌入式平台的实际经验,将具体介绍该系统的实现、结构组成和实验结果。 1LPC3180芯片特性介绍 LPC3180 是Philips公司新推出的一款ARM9微控制器。它采用90nm工艺技术,片内集成ARM9EJS处理器内核,具有高计算性能、低功耗的特性,这使得在很
[单片机]
基于<font color='red'>ARM</font>9内核的软硬件<font color='red'>平台</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved