付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、如何在 ARM 平台上开发低功耗的软件系统我们这些软件工程师都热衷于为我们遇到的问题找出完美的解决方案。但奇怪的是,我们会发现在这个特定的领域,没有一个完美的解决方案。聪明的技巧可能会节省一些功率,但是这个领域是由其他更简单的因素支配的。就象房间里有几头很大的大象,我们必须要先小心翼翼地猎取我们可以看到的大象,然后再花精力去猎捕体型小的动物。在考量某个系统的功耗时,重要的是要弄清楚我们实际测量的对象是什么。我们说的节省功耗可能意味着几个方面。它意味着 功率”还是 能量”实际上,我们既需要功率也需要能 量。大多数手持便携式设备均具有以下两个不同的预算:功率预算一一它管理着瞬间功耗、避免过热或产生
2、热应力, 而能量预算则管理着长期使用的能量总数。而软件则需要满足短期的功率预算和长期的能量预算。很明显,我们可以把任何设备的功耗降低到接近零,只要不让它做任何操作或任何有意义的操作即可!不得已的是,实现有用的功能就需要耗费能量。因此,我们只能在有意义的操作和节能二者中不断采取折衷方案。为了实现所需的功能,我们必须耗能;但我们必须尽量确保以节能的方式来实现这些功能。功耗时间积有关该主题的学术材料中常用的更好度量方式是采用功耗时间积”尽管既没有标准单位也没有具体方法,但是这种度量方式将能耗和性能度量结合到了一起。增加能耗或降低性能会增加功耗时间积的值,因此我们的目标是找出最低的可接受的功耗时间积的
3、 值,换句话说,最低的能耗要与允许的时间内所需任务的执行保持一致。能量去哪儿了?所有计算器械均会执行两个基本功能。这两个功能都是必需的,没有这两个功能就不能完成任何有意义的任务。我们首先想到的自然是计算或数据处理。通常,计算是对机器寄存器中保存的值实施的操作。为了尽可能高效地实施计算任务,我们需要在最短的时间内执行最少的指令。最重要的是,高效计算允许以下二选一:要么我们可以早点完成计算去睡觉,要么我们调慢时钟且仍然在规定时间内完成计算任务。这里经常被人忽视的是数据通信(数据移动)。在大多数架构中(A A R R M M 采用加载/ /存储架构,也不例外),数据移动是必需的。 如果不将信息从一个
4、位置移动到另一个位置且经常返 回原来的位置,用户就无法处理任何信息。 例如,内存中的值需要移动到寄存器中进行处理, 然后把结果写回到内存中。但是哪个耗用的能量更多呢?最大的偿付在哪儿?图 1 1 显示了普遍存在的事实,与程序有关的内存存取操作中有大约60%60%是指令抓取,另外40%40%才是数据存取。Instruction Fetch Data Aocess图 i i :内存存取分布厂E norgy图 2 2:内存存取能耗图 2 2 显示了 A A R R M M 进行的一些研究。如果执行一条指令的能耗是 1 1,那么,紧耦合存储器(TCMTCM) 存取的能耗约为 1/251/25,缓存存取
5、的能耗大约为1/61/6。而外部 R R A A M M 存取的能耗则是指令执行能耗的 7 7 倍。换言之,对于每次外部 R R A A M M 存取所用的能耗,我们可以执行 7 7 条指令,4040 次缓存存取或 大约 170170 次 TCMTCM 存取。计算廉价但通信昂贵 因此,似乎数据移动要比数据处理更昂贵。因此,第一头大象就是数据效率。我们可以为内存存取的能耗管理提出两个规则。近距离- -从能量角度讲,内存越靠近核心,访问内存的相对能耗越低。少存取- -减少内存存取次数比减少指令数量更加重要。充分利用片上存储器从我们的能量图可以清楚地看出,TCMTCM 是到目前为止系统具有的最高效存
6、储器类型。不是所有的系统均具有 A A R R M M 称为 TCMTCM 的存储器(通过专用和优化的接口连接到内核),但是大部分系统至少具有某种片上快速存储器类型。为了便于讨论,我们指的是常见的片上存储器(SPM(SPM) )。假定 S S PMPM 单次存取能耗大约是外部 R R A A M M 存取能耗的 1/1701/170,充分利用这种 SPMSPM 存储器应该是首选。图 3 3: SPMSPM 的能量优势图 3 3 中的图表显示了简单的 多类”基准,甚至 128128 个字节的 S S PMPM 区域都可以减少大约一半 的功耗。1k1k 字节的存储器最大可减少70%70%的功耗。本
7、次研究(Mar(Mar wedel,wedel, 2004)2004)中采用的方法是从外部 R R AMAM 到 S S PMPM 动态重定位代码和数据片段。甚至在按需移动各项开销方面,不仅降低了能耗,性能也提高了大约60%60%。很显然,我们在某个点上正在损失回报。这种情况下,S S PMPM 超过 1k1k 时,性能提升幅度变缓,系统总能耗也会稍微升高。 在这里,我们实际上在承担这种特定应用无法使用的S S P P M M能耗,因为这种应用程序本身并不够大。您还可以注意到,在结合了所使用的分配算法时,这种特定的应用无法使用小于6464 字节的SPMSPM 区域,因为没有足够小的可用片段与之
8、相配。本次研究中还展示了一个更加成熟的算法,可以在最佳状况下节省能耗可以超过80%80%。永远做缓存友好的事分析缓存优点有时可能比分析 S S PMPM 优点更加复杂。一方面,缓存基本上是自我管理的。另一方面,缓存不是对单个存储位置进行操作,而是对固定大小的线路”进行操作。因此,访问单个可缓存的存储位置可能加载整条线路, 从未被访问过,则所消耗的能量就浪费了。另一个不利之处是缓存所需的其他逻辑成本(就硅片面积和功耗而言)。Chart Title EDP IPCPower图 4 4:缓存的能量优势图 4 4 摘自普林斯顿(BrooksBrooks,20002000 )份论文,显示了针对某简单应用
9、基准的三套数据。针对不同的缓存大小,这些条块分别代表性能IPIP C C (单位周期指令数)、功耗和功耗时间积(EDED P P)。总的来说,性能会随着缓存大小的增加而提升。但是,系统的功耗也会增加,因 为增大缓存单元会相应增加功耗。功耗时间积允许我们在性能和缓存大小之间取得平衡。在这个例子里,存在一个最佳点,即缓存大小为64k64k 时,此时的功耗时间积最小。最大限度减少数据内存存取A A RMRM 架构的一个特性是其常量是不确定的,特别是,不可能用单条指令把一个任意3232 位常量放到一个寄存器中。 实际上,所有内存存取必须按寄存器中的地址操作,这就意味着程序需要把这些地址和其他常量频繁地
10、放到寄存器中,而这一点很难做到。解决此问题的标准方法是把常量作为文字数据嵌入到代码段中,在运行时使用PCPC 相关的加载进行加载。因此,这种最大限度减少常量影响的方法很实用。确保在编译时这些常量是已知的,如果可能,最好能把这些常量嵌入到单条 ARMARM 指令中。为了存取全局变量,尽可能减少加载基址 指针的需求。这就需要确保全局变量在运行时都在内存中,这样才能使用单个指针存取多个变量。实现这个目标最简单的方式是将全局变量放到一个结构中。尽管 A A R R M M 的堆栈访问相对高效(堆栈访问可较好地加载和存储多条指令),但是程序员 还可以通过很多方式从而造成突发的内存存取。如果该附加的数据6
11、4k来减少堆栈访问:减少活动变量、避免占用本地变量地址、可能时充分利用尾部调用优化、将传递到函数的参数数量减少到四个以下、允许编译器主动内联函数等。递归情形和避免递归情形的做法更加复杂。通常编译器可以对归函数很好地进行尾部优化。实际上将所有数据存储到堆栈中可以比其他做法获得更好的局部性。或许建议可能最好表达为除非其他做法让数据局部性更糟或您确信编译器可以对递归调用进行尾部优化,否则不 要使用递归算法”。应编写异常处理程序,增加尾部连锁的机会,进而避免堆栈环境内不必 要的保存和恢复。现在我们把注意力转到这个问题的第二头大象,即指令执行。最大限度减少指令数目事实上,减少指令执行次数本质上与性能优化
12、是相同的,执行的指令数越少,能耗就越低。 另外,还要增加一些明显的指针。首先,正确地配置工具。在编译器和链接器完全了解目标平台,甚至无法实施一些基本的优化。编写代码时要保持敏锐,才能避免不必要的操作。对于A A R R M M 架构,3232 位数据类型是高效的:一般 8 8 位和 1616 位数据类型,尽管占用的存储空间较少,但是处理效率也较低。在v6v6和 v7v7 架构中,打包和接包指令以及 S S IMIM D D 操作一定程序上对此有些帮助,但是要注意, 在主程序中无法从 C C访问这些指令。编写循环时要当心可以按照以下一些简单的规则来编写循环:使用无符号的整数计数器,向下倒数,并把
13、是否等于零作为终止条件。这可以让循环更短,速度更快,使用的寄存器更少。还要记住,要采 用矢量化来编写循环。即使在尝试展开和矢量化最简单的循环时,有关控制结构和数据声明的一些简单规则都可以让编译器的作业变得更简单。10.90.80.7060.50.40.3图 5 5 :循环展开图 5 5 显示了与一个特定循环优化有关的一些数据,这个循环优化就是循环展开(BrooksBrooks ,20002000 )。按照预期,随着展开因子的增加,执行时间和指令数目会减少。我们看到了减少 循环开销和减少地址计算的效果。 功率结果更加有趣, 但不太明显。 因为预测器可用来训练 其行为的分支更少且针对循环结束失败的
14、最终错误预测比例大增,所以随着循环进一步展 开,分支预测器的准确性出现下降。 但是,因为顺序取指的连续数据流不经常被中断, 所以 取指阶段的效率可以提升。组合的结果是减少了每条指令的净能耗。因此尽管执行时间基本上低于展开因子4 4,但是因为功耗持续降低, 所以所有重要的功耗时间积也随之降低。 因此有能耗意识的编译器或开发人员与只考虑执行时间的编译器或开发人 员相比,会更倾向于展开循环。精度满足需求即可还必须考虑输出要求的精度。 即使有浮点硬件可用, 定点实现的计算通常比浮点实现的计算 更有效率。 如果您正在渲染一个供屏幕查看的图像, 可能并不需要完全符合标准, 您只需要 渲染出可以接受的图像。
15、对标准 M M P P E E G-G- 4 4 解码函数进行递进优化的一项研究 (S(S h h i i n,2002)n,2002) 已经表明,把软浮点切 换为定点二进制可以把能耗降低 72%72% 。精度损失意味着该结果不再符合标准,但是在所研 究的系统上仍然足以满足渲染用途。关于 ThumbThumbT T humbhumb 指令集专门设计用于改进代码密度,还可以提升窄内存系统的性能。但是,在代码 密度确实改进的同时,指令数也同时增加了。这是因为,与 A A R R M M 指令相比,减少了个别 ThumbThumb 指令的功能。 因此 ThumbThumb 重新编译会造成能耗增加,
16、这看起来是合理的, 而我们看 到的事实也的确是这样。上述研究表明,如果代码大小减少 4%4% ,指令执行数增加 38%38% ,而能耗增加 28%28% 。为了找 到第三头大象, 我们需要走出处理器及其内存的领域, 着眼于范围更大的系统。 我们这些天 使用的系统已经被我们的硬件设计同事组合到了一起,这个系统提供了大量节能选项。Power* Time* Instructions EOF更广系统中的节能显而易见,没有使用的组件应尽可能置于低功耗状态。这也是所有敏锐的设计系统不可 分割的组成部分,这些组件应包括内存和缓存系统、甚至是处理器本身。在多核系统中,我 们必须考虑在处理要求相对低时中止一个或
17、多个内核运行的可能性。首先, 一个很小但值得考虑的问题是:处理外设时,要始终尝试使用中断机制,而不是轮询 机制。轮询循环只会耗用能量而无任何目的。几乎所有架构均包括了某种等待中断的指令,可以把这种情况下的系统置于待机状态。对于 A A R R M M 系统,内核通常带有时钟门控,只保 留静态漏电。通过设计中断架构来增加拖尾连锁, 架构可以自动实现这一点。般可以避免不必要的睡眠唤醒循环。 ARMARM Cortex-M3Cortex-M3对于个别计算单元, 选择一种关机方案是很容易的。对于可以预测需要与否的单元,在不需要时通过应用程序或操作系统就可以停止运行这些单元。对于不可预测需要与否的单元,
18、可以通过按需通电启动系统, 也可以在空闲超过某段时间之后再自动断电。子系统断电的时标可以通过以下两方面来得出:通电但处于空闲状态时的功耗以及睡眠唤醒循环的能耗。从根本上讲,这取决于应用场合。但是,动力循环代码的简单循环计数将是最明显的起点。测量数据表明,N N e e onon 引擎相比 C C o o r r tex-A9tex-A9 等内核的运行功率要高大约10%10%。但是,对于传统的信号处理算法,其性能提升了 40%40% -150%-150%。在任务期间启用 NeONNeON 而在不需要时切断 NeonNeon 的好处很明显。很常见的是,不但N N e e onon 引擎可以在任务完
19、成时切断,而且整个处理器系统可以节省更多功耗。通常一个比较难的选择是启用计算组件提前完成计算(且因此切断时间更长)还是完成计算时及时降低处理器速度以减少功耗。图6 6 显示了每次迭代的能耗数据,这是简单的基准(Domeika,Domeika, 20092009)。采用不同的指令缓存和浮点协处理器组合,对于两个时钟速度,每个 时钟速度均要运行此基准四次。有两个清晰的重点。首先,尽管指令缓存和浮点单元均减少 了能耗,但是浮点单元比指令缓存的表现更优异。图 6 6 :系统组件电源利用其次,对于所有配置而言,每次迭代的能耗从本质上讲是相同的,与时钟速度无关。因此, 为了更快地完成任务而启用所有功能并全
20、速运行要比调慢时钟速度更加高效。多重处理众所周知,与调高单核的功率相比,采用多核可以获得更高的性能和更好的能效。使用多核系统时,我们必须考虑在不需要时选择中止一个或多个内核。A A R R M M 的研究表明,S S M M 13MH2PLinuxPLinux 系统中单核循环的成本是 5000050000 个周期(大部分周期用于清除一级缓存),这意味 着此操作将在几百毫秒内完成,而不是更短的时间内完成,否则其能耗成本将超过其具有的优势。ARMARM 是主动研究型架构,其包含两个内核,一个高性能的内核用于全功能操作,一个较小 的配套内核则以较低的性能完成低功率操作。 需要较高的处理功率时, 系统
21、运行较大的内核。 任务完成时, 系统可以把所有信息传递给小内核并关闭大内核。需要逆向信息移动时,再切 换回大内核。如果这两个内核相连成为相关系统,则切换的能耗成本可降到最低。关于操作系统不巧的是,在操作系统上运行时,应用程序员无法这样灵活处理。缓存配置、 S S PMPM 使用与 否、组件的电源周期等很大程度上都是操作系统架构和设备驱动程序来专门决定的。 但是,应用程序员仍然有很多东西需要考虑。研究已经表明, 设计不良的进程间通信 (I(I P P C)C) 会大大增加系统的能耗。 一个简单的技术称为 “矢量化 ”进程间通信, 这种技术批量处理小的消息并把大量小的消息作为一个大的消息来发 送,这样通常可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光学镜头制造工岗中技能评估考核试卷含答案
- 矿山设备运行协调员安全检查竞赛考核试卷含答案
- 宽带接入装维员岗前评优竞赛考核试卷含答案
- 草坪检测工基础常识考核试卷含答案
- 2026体育特色小镇建设中运动安全防护设施配套标准研究
- 2026葡萄产业助力乡村振兴长效机制构建研究
- 2026杯装饮料包装技术创新与环保材料应用趋势报告
- 2026地方政府充电基础设施专项债使用效益评估研究报告
- 2026量子计算芯片行业市场现状供需趋势及投资评估规划分析研究报告
- 2026工业自动化电缆系统需求变化与供应商转型报告
- 2026-2027学年五年级数学上册第一次月考综合测评卷人教版
- 2026年江西省中考英语试题卷参考答案
- 2026年重庆市高考物理试卷(含答案)
- 2026年幼儿园踢球公开课
- 这是我们班课件2025-2026学年统编版二年级上册道德与法治
- 亚硝酸盐检测方法培训
- 【昭通】2025年云南昭通市市直事业单位公开选调工作人员42人笔试历年典型考题及考点剖析附带答案详解
- 2025年河南大学研究生笔试及答案
- 活动礼品提供协议合同
- Unit 2 Helping at home 大单元教学任务单-2025外研版(三起)四年级英语上册
- 《中小学跨学科课程开发规范》
评论
0/150
提交评论