DVFS及多核处理器功耗优化技术详解

2023-11-01 06:40

本文主要是介绍DVFS及多核处理器功耗优化技术详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  •     概述

        降低嵌入式系统功耗有多种方法,其中动态电源管理(DPM)和动态电压频率调整技术(DVFS)是降低系统功耗的两种关键技术。其中动态电源管理主要依据设备工作负载的变化切换器工作状态以达到系统功耗最小化。本篇博客则主要从DVFS技术做详细的介绍。DVFS(Dynamic Voltage and Frequency Scaling)动态电压频率调节本质上是一种低功耗技术,目的是根据的芯片当时的实际功耗需要设定工作电压和时钟频率,这样可以保证提供的功率既满足要求又不会性能过剩,从而可以降低功耗。

        DVFS技术利用了CMOS芯片的特性:CMOS芯片的能量消耗正比于电压的平方和时钟频率。DVFS技术是以延长任务执行时间为代价来达到减少系统能量消耗的目的,体现了功耗与性能之间的权衡。可以通过减少时钟频率来降低通用处理器功耗的。然而,仅仅降低时钟频率并不节约能量,因为性能的降低会带来任务执行时间的增加。调节电压需要以相同的比例调节频率以满足信号传播延迟要求。然而不管是电压调节还是频率调节,都会造成系统性能的损失,并增加系统的响应延迟。

动态功耗[55]、短路功耗[56] 和漏电流功耗[57] 是CMOS 电路的三个主要功耗,因此CMOS 电路的总功耗可由下面公式表示:
                       P = P_{Dynamic} + P_{Short} + P_{Leakage} = ACV^{2}f+ AVI_{Short}+VI_{Leakage}
        式中C 代表负载电容的容值,V 是工作电压,A 是当前频率下电路的平均翻转率,f 为工作频率,IShort 和ILeakage 分别为短路电流和漏电流。从公式中可知,C、V 、A、f 决定了整个CMOS 电路的功耗,而DVFS 技术就是主要通过改变频率f 和电压V 的值来调节系统功耗的。

        为了尽量减少可感知的系统性能负面影响同时又能最大程度地降低系统能耗,策略必须估计未来的工作负载并选择最合适的频率。准确地预测未来的工作负载对广泛使用的策略是至关重要的。预测错误可能会导致设置的频率太高降低节省能耗,或设置频率过低造成系统响应延迟过高。所以,要想降低功耗,需要选择合适的供电电压和时钟频率。


  • 硬件基础

为了实现供电电压可调节,目前的芯片电源模块都可以提供多级输出,本质上是多个不同输出电压的LDO通过选择开关桥接,DVFS控制逻辑输出所需电压的控制向量,电源管理模块会自动完成电压源切换。

                           http://www.eetop.cn/blog/attachments/2016/10/214199_201610102129311ju02.jpg

时钟频率的控制是目前已经很常见的,芯片内部一般都会集成CGU(Clock Generator Unit)负责时钟源的提供,可以对某个时钟源分频升频,为系统提供特定频率的时钟信号,这里不再赘述。


  • 调节顺序

目前的芯片实现工艺下,更高的频率则需要更高的供电电压。因为更高的频率意味着动态功率的消耗增加,而在芯片整体电容电阻值不变的前提下,更高的供电电压可以提供更高的电源功率。

所以安全的调节机制是:

当需要提升功率时,应先提升供电电压,然后提升时钟频率。

当需要降低功率时,应先降低时钟频率,再降低供电电压。

                         http://www.eetop.cn/blog/attachments/2016/10/214199_201610102129312hinp.jpg


  • DVFS调节策略

        一味的降频降压当然是不能降低功耗的,因为低频下运行可能使系统处理任务的时长增加,从而整体上可能增加了功耗。所以DVFS的核心是动态调整的策略,其目的是根据当时的系统负载实时调整,从而提供满足当时性能要求的最低功率,也就达到了最低功耗。

        制定调整策略前,需要先找出系统中的耗电大的部件,如CPU、GPU、DSP等硬件算法加速模块(结合逻辑规模);然后统计出这些模块的负载情况,基本的策略当然是工作负载增加则升频升压,工作负载降低则降频降压。工作负载的粗略模型是在一个时间窗口内,统计模块工作的时间长度,设定不同阈值,高阈值对应高电压高频率,低阈值对应低电压低频率。每次统计值穿过阈值边界,触发DVFS转换。

                          http://www.eetop.cn/blog/attachments/2016/10/214199_201610102129313ZXcx.jpg

实际的系统中,每个CPU,DSP也许有自己独立的DVFS调节系统,所以可以根据本模块的特点制定出更精确的负载模型,从而取得更优的功耗表现。

至于调节算法的实现,可以软件也可硬件,看资源消耗情况和DVFS响应时间要求而定。

这篇关于DVFS及多核处理器功耗优化技术详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321167

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解