基于Android***的嵌入式GPU动态调频方法及装置
技术领域
本发明涉及基于Android***的嵌入式GPU动态调频方法及装置。
背景技术
随着移动互联网技术的发展,移动终端,例如,手机、平板电脑、电子书等已经越来越深入人们的生活。目前,电池容量是制约移动终端发展的一个重要因素,因此低功耗技术对提高移动终端的可用性至关重要。
功耗分为静态功耗和动态功耗,其中动态功耗根据公式Pdynamic=λCV2f计算得出,式中Pdynamic代表动态功耗,λ为常数,C为负载电容,V为供电电压,f为工作频率。从公式中可以看出,在负载电容一定的情况下,动态功耗与供电电压的平方成正比,与工作频率成正比。
动态电压频率调整(Dynamic Voltage and Frequency Scaling,DVFS)是降低动态功耗的常用方法。该方法根据处理器所运行的任务对计算能力的不同需求,动态调节处理器的工作频率和电压从而达到节能的目的,其中,电压与频率是固定的对应关系,频率越高,需要的电压也越高。DVFS可以基于硬件或软件来实现。针对CPU和桌面图形处理器(Desktop Graphic Processing Unit)的各种DVFS方法已经屡见不鲜。
嵌入式图形处理器(Embedded Graphic Processing Unit,为简便记,本文中出现的GPU均指嵌入式图形处理器)设计公司并不直接从事芯片生产,而是将GPU架构授权给***级芯片(System on Chip,SOC)设计公司。GPU的工作频率和工作电压根据SOC的制造工艺、设计目标等有所不同,工作频率还与***时钟模块的设计有关。GPU的性能除了与工作频率有直接的关系外,还受到CPU、内存、总线带宽等因素的影响,因此即使两款SOC采用了相同的GPU架构,GPU性能也不完全相同。综上所述,GPU动态调频的实现与SOC的具体设计密切相关,因此目前GPU设计公司既没有在硬件上也没有在软件上提供DVFS功能。
如果GPU始终以固定的频率运行,会出现两种情况:对于低复杂度的任务,GPU运行在高频,性能过剩,造成功耗的浪费;对于高复杂度的任务,如果GPU没有运行在足够高的频率,又会造成性能不足。
目前已有两种调整GPU频率的优化策略,一种是在***设置中增加性能模式选项,例如低功耗模式、正常模式、高性能模式,由用户手动选择不同的模式来切换GPU的运行频率;另外一种是在GPU驱动中判断应用程序的名字来选择GPU的运行频率。第一种方法的缺点是,用户在对应用程序缺乏先验知识的情况下,无法判断使用哪种性能模式。第二种方法的缺点是,GPU驱动无法针对所有的应用程序做出正确的判断。而且实际中某一个应用程序对于GPU的性能需求也是不断在变化的,将GPU固定在某个频率运行,依然会出现性能过剩或性能不足的情况。以上两种方法都并没有真正做到动态地根据应用对GPU的性能需求去调整GPU频率。
发明内容
本发明提供一种基于Android***的嵌入式GPU动态调频方法,包括:S1、获取GPU的N个工作频率点fi,i=1,2,...,N;S2、计算每个工作频率点的平均性能上限S3、每隔一时段T统计时段T内GPU工作时间Tworking所占比例,根据公式L=100%*α*Tworking/T,α为硬件利用效率,计算出负载百分比L,根据公式计算出第n个时段T内GPU负载W[n];S4、根据公式计算第n+1个时段的预测GPU负载W[n+1],其中h[k]为预测系数,0≤h[K-1]<h[K-2]...<h[0]<1且S5、设定一性能门限值β,将预测GPU负载W[n+1]与i=1,2,…,N依次进行比较,当时终止比较并设定下一时段GPU工作在工作频率点为fi,其中0<β<1且i=1,2,…,N-1。
其中,所述步骤S2具体包括:S21、测量GPU分别工作在工作频率点时的平均帧率,根据平均帧率得出每个工作频率点的性能上限Pi,i=1,2,...,N,使用多个GPU性能测试单元重复执行步骤;S22、根据公式ai=Pi/P1*f1/fi,i=1,2,…,N计算工作频率点系数ai,计算每个工作频率点对应的平均工作频率点系数其中0<aN<aN-1<...<a2<a1=1;S23、根据公式i=1,2,…,N计算每个工作频率点对应的平均性能上限
其中,所述时段T包括GPU工作时间Tworkin和空闲时间Tidle。
其中,所述时段T值为20ms~50ms。
其中,所述β值为0.9~1。
本发明还提供的一种基于Android***的嵌入式GPU动态调频装置,包括GPU以及GPU驱动单元,所述GPU驱动单元包括:工作频率点获取单元,用于获取GPU的工作频率点fi,i=1,2,...,N;平均性能上限生成单元,用于计算工作频率点的平均性能上限GPU负载统计单元,用于每隔一时段T统计时段T内GPU工作时间Tworking所占比例,根据公式L=100%*α*Tworking/T计算出负载百分比L,根据公式计算出第n个时段T内GPU负载W[n];GPU负载预测单元,用于根据公式计算第n+1个时段的预测GPU负载W[n+1],其中h[k]为预测系数,0≤h[K-1]<h[K-2]...<h[0]<1且工作频率点调整单元,用于根据设定的性能门限值β,将预测GPU负载W[n+1]与i=1,2,…,N依次进行比较,当时终止比较并设定下一时段GPU工作在工作频率点为fi,其中0<β<1且i=1,2,…,N-1。
其中,所述平均性能上限生成单元还包括:多个GPU性能测试单元,用于测量GPU分别工作在工作频率点时的平均帧率,根据平均帧率得出每个工作频率点的性能上限Pi,i=1,2,...,N;工作频率点系数运算单元,用于根据公式ai=Pi/P1*f1/fi,i=1,2,…,N计算工作频率点系数ai以及计算每个工作频率点对应的平均工作频率点系数其中0<aN<aN-1<...<a2<a1=1;平均性能上限运算单元,用于根据公式i=1,2,…,N计算每个工作频率点对应的平均性能上限
其中,所述时段T包括GPU工作时间Tworking和空闲时间Tidle。
其中,所述时段T值为20ms~50ms。
其中,所述β值为0.9~1。
本发明的有益效果是:根据Android***对GPU性能的需求,本发明通过GPU的历史负载预测GPU未来的负载,自适应地调节GPU的频率和电压。具体地,首先确定GPU的各个工作频率点并计算出每个工作频率点的性能上限;然后通过统计一段时间内GPU的工作时间所占的比例,估计出GPU的负载;通过GPU历史负载值的加权平均值预测GPU未来的负载值,并将此负载值和每个工作频率点的门限值做比较,判断GPU未来将工作在哪个频率点最合适。通过上述方案实现在GPU驱动单元中增加DVFS的功能,使GPU根据不同的任务需求,自适应地快速调节运行频率和电压,在保证充足性能的同时,有效地降低了功耗,延长移动终端的使用时间。
附图说明
图1是本发明一实施方式中一种基于Android***的嵌入式GPU动态调频装置的功能模块图;
图2是为GPU性能频率关系图;
图3是本发明一实施方式中一种基于Android***的嵌入式GPU动态调频方法的流程图。
主要元件符号说明
100、基于Android***的嵌入式GPU动态调频装置;10、GPU;
20、GPU驱动单元;21、工作频率点获取单元;
22、平均性能上限生成单元;23、GPU负载统计单元;
24、GPU负载预测单元;25、工作频率点调整单元;
221、GPU性能测试单元;222、工作频率点系数运算单元;
223、平均性能上限运算单元。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
Android***中使用到GPU的任务主要有:主界面的划动、动态壁纸、应用程序的3D效果、3D游戏以及GPU性能测试等,各种任务对于GPU性能的需求大不相同,例如,划动主界面的整个过程只有1秒左右,要达到流畅的效果,即GPU绘图的帧率达到LCD显示的频率60fps,需要GPU在短时间内迅速提高频率;动态壁纸的帧率可能只需要保持在15~20fps左右,GPU只需要提供合适的性能;3D游戏对于GPU性能的需求随着场景的变化相差很大;GPU性能测试用于测试GPU的最高性能,需要GPU工作在最高频率上。根据以上分析,GPU的理想工作状态是运行在满足性能需求的最低频率上,并能根据任务的需求快速地调整频率。
参阅图1,是本发明第一实施方式中一种基于Android***的嵌入式GPU动态调频装置的功能模块图。一种基于Android***的嵌入式GPU动态调频装置100,包括GPU 10以及GPU驱动单元20,所述GPU驱动单元20包括工作频率点获取单元21、平均性能上限生成单元22、GPU负载统计单元23、GPU负载预测单元24以及工作频率点调整单元25。
所述工作频率点获取单元21用于获取GPU的N个工作频率点fi,i=1,2,..,N。工作频率点是时钟模块能为GPU提供的位于最低频率和最高频率之间的频率,包括最高频率和最低频率。每个工作频率点应是运行某些典型应用时GPU的最佳工作频率。各个工作频率点之间需要保持一定的间隔,否则GPU容易在相邻两个频率点之间反复切换频率。GPU最低频率是时钟模块为GPU提供的所有频率中,满足对GPU性能需求最低的任务能够流畅运行的最低频率。GPU最高频率是时钟模块为GPU提供的所有频率中,根据SOC设计GPU所能正常工作的最高频率。如果产品的设计目标只要求GPU达到某种性能指标,那么GPU的最高频率就是满足该性能指标的最低频率。请参阅图2,为GPU性能频率关系图,假设GPU总共有N个工作频率点,分别为fi,i=1,2,...,N,每个频率点对应的性能上限为Pi,i=1,2,...,N,根据图2,每个频率点的性能上限可以表示为Pi=aiP1*fi/f1,i=1,2,…,N,其中其中常数ai是频率点fi所对应的频率点系数。
所述平均性能上限生成单元22用于计算每个工作频率点fi,i=1,2,...,N的平均性能上限其中,所述平均性能上限生成单元22还包括多个GPU性能测试单元221、工作频率点系数运算单元222以及平均性能上限运算单元223。所述多个GPU性能测试单元221用于测量GPU 10分别工作在工作频率点fi,i=1,2,...,N时的平均帧率,根据平均帧率得出每个工作频率点的性能上限Pi,i=1,2,...,N。所述工作频率点系数运算单元222用于根据公式ai=Pi/P1*f1/fi,i=1,2,…,N计算工作频率点系数ai以及计算每个工作频率点对应的平均工作频率点系数其中0<aN<aN-1<...<a2<a1=1。所述平均性能上限运算单元223用于根据公式i=1,2,…,N计算每个工作频率点对应的平均性能上限
所述GPU负载统计单元23用于每隔一时段T统计时段T内GPU工作时间Tworking所占比例,根据公式L=100%*α*Tworking/T计算出负载百分比L,根据公式计算出第n个时段T内GPU负载W[n],其中,所述时段T包括工作时间Tworking和空闲时间Tidle,α为GPU硬件利用效率,在本实施方式中,所述时段T值为20ms~50ms。由于GPU都是按照流水线的方式设计的,力图做到当GPU在工作时,流水线上所有硬件模块都处于满负载工作中,这样才能最大程度地发挥GPU的性能,缩短处理时间。实际中GPU的绝对硬件利用效率是无法达到100%的,但是假设GPU在工作中的绝对硬件利用率最高只能达到某一数值,并且在工作中始终保持在这一利用率,即相对的硬件利用率为100%,所以L=100%*Tworking/(Tworking+Tidle)。
GPU动态调频算法必须同时考虑预测精确度和复杂度两个因素。如果预测的GPU性能需求与实际需求偏差太大,那么就没有实用意义;如果算法的复杂度太高,那么算法的计算开销会导致预测的收敛速度太慢或带来额外的功耗损失。在Android***中,GPU的负载在时间上具有相关性。例如,动态壁纸的画面变化较小,对GPU的性能需求基本维持在同一个水平上;3D游戏在不同场景下对GPU的性能需求可能相差很大,但在同一个场景下的一段时间内GPU的负载比较稳定;运行GPU性能测试软件时,GPU基本上始终需要运行在最高频率。因此可以根据当前和过去的GPU负载来推测未来的GPU性能需求。本发明采用一种基于历史值加权平均的GPU动态调频算法:所述GPU负载预测单元24用于根据公式计算第n+1个时段的预测GPU负载W[n+1],其中h[k]为预测系数,0≤h[K-1]<h[K-2]...<h[0]<1且W[n-k],k=0,1,..K-1为前K个时段的GPU负载,K为大于0的常数。这样离当前时段越近的GPU负载值的权重越大,通过对GPU历史负载值的加权平均,可以平滑GPU负载在某些时段的剧烈波动,避免频繁、无意义地调频,基于算法复杂度的考虑,采用线性预测算法,即h[k]为常数,且K的取值不应太大。其中,h[k]的具体取值根据GPU的特点及***设计而定。
所述工作频率点调整单元25用于根据设定的性能门限值β,将预测GPU负载W[n+1]与i=1,2,…,N依次进行比较,当时终止比较并设定下一时段GPU工作在工作频率点为fi,其中0<β<1且i=1,2,…,N-1,β值是一个固定的系数值,其含义是工作频率点性能上限的百分比,在本实施方式中,所述时段β值为0.9~1。GPU在调整频率时,对电压也要进行相应的调整。为了保证GPU在调整频率时正常工作,需要遵循以下原则:在提高频率时,应先提高电压再提高GPU频率;在降低频率时,应先降低频率再降低电压。为了使GPU在调整频率时性能的变化较为缓和,所述GPU驱动控制GPU每次只能向相邻的工作频率点切换频率。
参阅图2,是本发明第一实施方式中一种基于Android***的嵌入式GPU动态调频方法在图1中的装置的执行流程图。
一种基于Android***的嵌入式GPU动态调频方法,包括:
步骤S1、获取GPU的工作频率点fi,i=1,2,..,N;
步骤S2、计算工作频率点的平均性能上限
步骤S3、每隔一时段T统计时段T内GPU工作时间Tworking所占比例,根据公式L=100%*α*Tworking/T计算出负载百分比L,根据公式计算出第n个时段T内GPU负载W[n],其中,所述时段T包括工作时间Tworking空闲时间Tidle,在本实施方式中,所述时段T值为20ms~50ms;
步骤S4、根据公式计算第n+1个时段的预测GPU负载W[n+1],其中h[k]为预测系数,0≤h[K-1]<h[K-2]...<h[0]<1且
步骤S5、设定一性能门限值β,将预测GPU负载W[n+1]与i=1,2,…,N依次进行比较,当时终止比较并设定下一时段GPU工作在工作频率点为fi,其中0<β<1且i=1,2,…,N-1,在本实施方式中,所述β值为0.9~1。
其中,所述步骤S2具体包括:
步骤S21、测量GPU分别工作在工作频率点时的平均帧率,根据平均帧率得出每个工作频率点的性能上限Pi,i=1,2,...,N,使用多个GPU性能测试单元重复执行步骤;
步骤S22、根据公式ai=Pi/P1*f1/fi,i=1,2,…,N计算工作频率点系数ai,其中0<aN<aN-1<...<a2<a1=1;
步骤S23、计算每个工作频率点对应的平均工作频率点系数根据公式i=1,2,…,N计算每个工作频率点对应的平均性能上限
本发明的有益效果是:根据Android***对GPU性能的需求,本发明通过GPU的历史负载预测GPU未来的负载,自适应地调节GPU的频率和电压。具体地,首先确定GPU的各个工作频率点并计算出每个工作频率点的性能上限;然后通过统计一段时间内GPU的工作时间所占的比例,估计出GPU的负载;通过GPU历史负载值的加权平均值预测GPU未来的负载值,并将此负载值和每个工作频率点的门限值做比较,判断GPU未来将工作在哪个频率点最合适。通过上述方案实现在GPU驱动单元中增加DVFS的功能,使GPU根据不同的任务需求,自适应地快速调节运行频率和电压,在保证充足性能的同时,有效地降低了功耗,延长移动终端的使用时间。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。