一种适用于Android游戏的处理器功耗优化方法与流程

文档序号:16133236发布日期:2018-12-01 00:34阅读:171来源:国知局

本发明涉及一种处理器功耗优化方法,具体地涉及一种适用于android游戏的处理器功耗优化方法。

背景技术

随着具有良好人机交互特性的智能手机的普及,移动游戏逐渐成为广受用户喜爱的一类应用,其中复杂3d游戏尤其受到青睐。这得益于智能手机cpu(centralprocessingunit)和gpu(graphicsprocessingunit)计算能力的提高。高性能往往带来高能耗,对于电池供电的智能手机平台,游戏应用对计算资源的高要求使得智能手机设备固有的功耗与电池容量之间的矛盾凸显出来。研究发现,当前android智能手机平台游戏应用运行时存在计算资源和能耗浪费的现象。

动态电压频率调节(dynamicvoltageandfrequencyscaling,简称dvfs),是当前被普遍采用进行功耗管理的一种有效机制。其核心思想是根据处理器负载变化信息动态调整处理器运行的电压和频率以达到节约能耗的目的,所以负载评估和电压频率调控算法是其实现策略中的关键内容。传统策略中,android平台普遍采用针对cpu的interactive策略和与之类似的相应gpudvfs策略。

传统dvfs策略适用于android游戏应用存在的问题是:(1)android游戏运行时具有显著的用户交互特性和cpu-gpu协作特性,传统框架难以利用这些特性进行功耗优化。(2)基于硬件利用率反馈的cpu/gpu负载评估方法无法满足android游戏负载评估的及时性和准确性要求,造成用户体验降低或能耗浪费问题。(3)完全独立的cpu/gpu电压频率调控逻辑无法利用android游戏运行时cpu-gpu之间的协作关系以进一步提高系统能效。



技术实现要素:

针对上述存在的技术问题,本发明目的是:提供了一种适用于android游戏应用的处理器功耗管理方法,本发明基于android系统特性和游戏特性构建适用于android游戏的功耗管理框架,收集游戏运行时的特性数据,为及时准确的cpu/gpu负载评估提供支持;在底层联通cpu和gpudvfs模块,提供统一的电压频率调控逻辑,基于cpu-gpu的协作关系对cpu和gpu的电压频率进行协同控制,在保证用户体验的前提下,进一步提高游戏运行时android系统的能效。

本发明的技术方案是:

一种适用于android游戏的处理器功耗优化方法,其特征在于,基于android系统的applicationframeworks层和linuxkernel层构建android游戏功耗管理框架,包括游戏特性参数追踪(parameterstracer)模块和cpu-gpu协同dvfs模块;

所述游戏特性参数追踪模块,采集游戏运行时的用户交互信息和gpu渲染游戏帧数据;

所述cpu-gpu协同dvfs模块,包含用户感知的cpu负载评估,基于游戏帧复杂度的gpu负载评估,利用层次状态机的参数描述和基于游戏中cpu-gpu协作关系的cpu-gpu协同电压频率调控部分,进行基于游戏特性的cpu-gpu协同功耗管理;

优选的技术方案中,所述在游戏特性参数追踪模块,在android系统的applicationframeworks层的主线程looper对象中进行用户交互消息的识别和采集,具体地,利用消息处理类choreographer对象处理的帧刷新消息android.view.choreographer$framehandler进行用户交互行为的判断和数据采集,为准确评估cpu负载提供数据支持。

优选的技术方案中,所述在游戏特性参数追踪模块,在android系统的applicationframeworks层的egl中进行gpu帧渲染数据的采集,采集的数据包括三类,分别是游戏帧画面构成中的顶点数据、纹理数据和控制命令数,它们都通过opengl|esapi和参数解析进行采集;具体地,基于android系统的trace机制,分别以gldrawelements()函数、gldrawarrays()函数获取顶点数据,以glteximage2d()函数、glbindtexture()函数获取纹理尺寸数据,通过trace机制中的tracegl()函数获取每次绘制当前帧所需的总命令数,为准确评估gpu负载提供数据支持。

优选的技术方案中,所述用户感知的cpu负载评估,通过公式1计算完成,具体将android游戏运行时用户交互独立出来进行评估,并将其与cpu利用率加权融合得到用户交互感知的cpu负载,提高android游戏运行时cpu负载评估的及时性和准确性。

公式1用于计算android游戏运行时cpu负载,涉及到通过权重系数wb和wu分别对cpu利用率和用户交互强度加权得到,delta_time和delta_idle分别为采样周期和采样周期内的cpuidle时间,∑msg_int为识别和采集的用户交互消息msg_int计数,m为归一化系数——用户一次交互最大消息数量,wb,wu∈[0,1],∑msg_int∈[0,m],wb,wu和m由实验确定。

优选的技术方案中,所述基于游戏帧复杂度的gpu负载评估,通过公式2计算完成,具体将android游戏运行时游戏帧对gpu的计算需求以方法中定义的游戏帧复杂度表征,同时用以评估gpu负载,利用游戏运行时cpu-gpu数据流上的生产者——消费者关系,在“上游”cpu处提前评估gpu负载,大大提高android游戏运行时gpu负载评估的及时性和准确性。

公式2fctot(v,t,c)=∑wj*fcj(xj),(j=v,t,c),用于计算android游戏运行时游戏帧复杂度fctot(v,t,c),同时作为gpu负载的评估值,涉及到通过权重系数wj(j=v,t,c)将帧构成三类数据复杂度fcj(xj)进行加权融合方式得到,其中xj表示三类数据统计值,具体权重值和三类分量复杂度的计算方法可以根据实际需求和限制计算。

优选的技术方案中,所述利用层次状态机进行用户体验变化和cpu/gpu负载变化的描述,将以游戏帧率表征的用户体验变化抽象为四个超态,分别是用户体验从满足到满足、从满足到不满足、从不满足到满足和从不满足到不满足,将引起这些超态原因的cpu/gpu负载变化抽象为对应的子态,有cpu和gpu负载均大于上限阈值、均小于下限阈值等,在特定情况下,如cpu和gpu负载均未大于或小于上限阈值和下限阈值,此时通过判断哪一个变化更大来抽象出子态的次态,通过类似方式的层次分类最终得到处理器电压频率调控的时机和调控方向。

优选的技术方案中,所述基于android游戏中cpu-gpu协作关系的gpu协同电压频率调控逻辑遵循以下四条原则:

(1)cpu和gpu运行电压频率协同变化;

(2)充分考虑对方运行状态进行电压频率调控;

(3)不同运行状态下设定不同的调控目标;

(4)兼容cpu/gpu独立的dvfs逻辑。

优选的技术方案中,cpu-gpu协同dvfs逻辑步骤描述如下:

(a)获取上次用户体验信息、cpu和gpu运行状态和负载信息;

(b)根据当前用户体验信息判断超态;并根据超态分别进行不同目标的cpu-gpu电压频率协同调控步骤(c)或(d)或(e)或(f);

(c)如果超态是用户体验从满足到满足,调控目标为尝试降频降低功耗,判断此时cpu和gpu负载是否小于电压频率调控的下限阈值,如果cpu负载小于下限阈值,二者协同降频,如果只有gpu小于下限阈值,仅gpu降频;

(d)如果超态是用户体验从满足到不满足,调控目标为尝试升频保证用户体验,首先判断超态是否由(c)中所述尝试降频逻辑导致,如果是,则恢复上次cpu和gpu电压频率值,如果不是,判断此时cpu和gpu负载是否大于电压频率调控的上限阈值,如果cpu负载大于上限阈值,二者协同升频,如果只有gpu大于上限阈值,仅gpu升频;如果二者负载值均不大于上限阈值,则通过判断变化大小确定cpu或gpu哪个是引起超态的主要变化因素,并对其进行升频操作;

(e)如果超态是用户体验从不满足到满足,调控目标为保持用户体验的满足状态,此时不进行电压频率调控操作;

(f)如果超态是用户体验从不满足到不满足,调控目标为尝试逐步频或直接升至最高频以保证用户体验,首先判断此超态是否已经累积多次,如果是,则直接将cpu和gpu电压频率值升至系统最高值,如果不是,则逐步提升cpu和gpu的电压频率值;

(g)更新用户体验变化信息、cpu和gpu负载变化信息和超态变化等信息;

(h)利用驱动提供的接口将协同调控结果,cpu频率和gpu频率分别输出至cpu和gpu的驱动模块,由驱动完成处理器的电压频率设置工作。

与现有技术相比,本发明的优点是:

1、适用于android游戏的处理器功耗管理方法完全在android操作系统层构建,可以面向商用闭源游戏应用。

2、相比传统处理器负载评估方法,用户交互感知的cpu负载评估方法和基于游戏帧复杂度的gpu负载评估方法降低了延迟、提高了准确度;

3、cpu-gpu协同的电压频率调控逻辑综合考虑用户体验和cpu-gpu运行状态,并以android游戏运行时cpu-gpu之间的协作关系进行电压频率调控逻辑的设计,相对当前系统默认方案,达到在保证用户体验前提下平均12%,最高34%的能效提升。

4、在实现上,适用于android游戏的处理器功耗管理方法充分复用传统相互独立的cpu/gpu功耗管理模块,充分利用上层android游戏特性和android系统特性进行功耗管理,可供用户配置选用,充分保证了其实用性。

附图说明

下面结合附图及实施例对本发明作进一步描述:

图1是适用于android游戏的处理器功耗管理方法的结构框架示意图;

图2是利用层次状态机描述用户体验变化和cpu-gpu变化示意图;

图3是基于android游戏中cpu-gpu协作关系的协同dvfs算法核心逻辑图;

图4是本发明基于odroid-xu3实验平台相对默认方案的能效提升效果图;

图5是本发明与其它研究成果的用户体验(以游戏平均帧率表征)和平均帧能耗横向对比图。

具体实施方式

以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。

如图1所示为适用于android游戏的处理器功耗管理方法的结构框架示意图,主要包括游戏特性数据采集(parameterstracer)模块和cpu-gpu协同电压频率调控(governor)模块;所述游戏特性数据采集模块完成两部分游戏特性数据采集,分别是游戏运行时用户交互产生的消息计数和gpu渲染帧画面所需的游戏帧画面构成数据,包含顶点数、纹理尺寸和控制命令数。所述cpu-gpu协同电压频率调控模块包含cpu负载评估计算、gpu负载评估计算、利用层次状态机(hierarchystatemachine,简称hsm)的参数变化描述和基于游戏中cpu-gpu协作关系的cpu-gpu协同dvfs算法;其中cpu负载评估计算方法为公式1所述的用户交互感知的cpu负载评估;gpu负载评估计算方法为公式2所述的基于游戏帧复杂度的gpu负载评估;参数变化描述对游戏运行状态和处理器负载进行综合描述以确定cpu和gpu电压频率调节的时机和方向,具体地,将帧率表征的用户体验的变化抽象为4个超态,将引起这些超态的cpu和gpu负载变化抽象为子态和次子态以明确时机和方向;所述基于android游戏中cpu-gpu之间的生产者——消费者协作关系的协同dvfs算法打破传统相互独立的处理器功耗管理算法,做到cpu-gpu协同的电压频率调控,进一步提高系统能效。

其中,游戏特性参数追踪为底层协同dvfs算法提供cpu和gpu负载评估的数据支撑,在充分利用android操作系统中applicationframeworks层的应用管理和linuxkernel层的资源管理功能完成。具体地,android游戏的用户交互特性和游戏帧画面特性数据的追踪如下:

1.在android系统的applicationframeworks层的主线程looper对象中进行用户交互消息的识别和采集,具体地,利用消息处理类choreographer对象处理的帧刷新消息android.view.choreographer$framehandler进行用户交互行为的判断和数据采集,为准确评估cpu负载提供数据支持。

2.在android系统的applicationframeworks层的egl中进行gpu帧渲染数据的采集,采集的数据包括三类,分别是游戏帧画面构成中的顶点数据、纹理数据和控制命令数,它们都通过opengl|esapi和参数解析进行采集;具体地,基于android系统的trace机制,分别以gldrawelements()函数、gldrawarrays()函数获取顶点数据,以glteximage2d()函数和glbindtexture()函数获取纹理尺寸数据,通过trace机制中的tracegl()函数获取总命令数,为准确评估gpu负载提供数据支持。

图中所示的cpu和gpu负载评估(cpu/gpuworkloadestimation)在追踪到的特性数据基础上,按照公式1和公式2计算得到,其中的参数根据游戏特性由实验得出。

图2所示为利用层次状态机(hsm)描述用户体验变化和cpu-gpu变化示意图,将以游戏帧率表征的用户体验变化抽象为四个超态,分别是用户体验从满足到满足(qos_meet_to_meet)、从满足到不满足(qos_meet_to_loss)、从不满足到满足(qos_loss_to_meet)和从不满足到不满足(qos_loss_to_loss),将引起这些超态原因的cpu/gpu负载变化抽象为对应的子态,有cpu和gpu负载均大于上限阈值、均小于下限阈值等,在特定情况下,如cpu和gpu负载均未大于或小于上限阈值和下限阈值,此时通过判断哪一个变化更大来抽象出子态的次态,通过类似方式的层次分类最终得到处理器电压频率调控的时机和调控方向。

图3所示基于android游戏中cpu-gpu协作关系的协同dvfs算法核心逻辑图,具体流程描述如下:

(a)获取上次用户体验信息、cpu和gpu运行状态和负载信息;

(b)根据当前用户体验信息判断超态;并根据超态分别进行不同目标的cpu-gpu电压频率协同调控步骤(c)或(d)或(e)或(f);

(c)如果超态是用户体验从满足到满足,调控目标为尝试降频降低功耗,判断此时cpu和gpu负载是否小于电压频率调控的下限阈值,如果cpu负载小于下限阈值,二者协同降频,如果只有gpu小于下限阈值,仅gpu降频;

(d)如果超态是用户体验从满足到不满足,调控目标为尝试升频保证用户体验,首先判断超态是否由(c)中所述尝试降频逻辑导致,如果是,则恢复上次cpu和gpu电压频率值,如果不是,判断此时cpu和gpu负载是否大于电压频率调控的上限阈值,如果cpu负载大于上限阈值,二者协同升频,如果只有gpu大于上限阈值,仅gpu升频;如果二者负载值均不大于上限阈值,则通过判断变化大小确定cpu或gpu哪个是引起超态的主要变化因素,并对其进行升频操作;

(e)如果超态是用户体验从不满足到满足,调控目标为保持用户体验的满足状态,此时不进行电压频率调控操作;

(f)如果超态是用户体验从不满足到不满足,调控目标为尝试逐步频或直接升至最高频以保证用户体验,首先判断此超态是否已经累积多次,如果是,则直接将cpu和gpu电压频率值升至系统最高值,如果不是,则逐步提升cpu和gpu的电压频率值;

(g)更新用户体验变化信息、cpu和gpu负载变化信息和超态变化等信息;

(h)利用驱动提供的接口将协同调控结果,cpu频率和gpu频率分别输出至cpu和gpu的驱动模块,由驱动完成处理器的电压频率设置工作。

图4所示为适用于android游戏的处理器功耗优化方法(图中简记为coopfsm)按照对cpu和gpu需求高低覆盖不同类别游戏应用,与当前android平台默认功耗管理方案(图中简记为org)的对比情况;比较的指标是能效收益(q)。在保证用户体验的情况下,从图4所示的数据中可以看出,coopfsm相对org有不同程度的能效收益,对于高cpu和高gpu计算需求的游戏应用(图中编号为18、19、22、27、30和36号测试样本)效果更好,尤其是对于高gpu计算需求的游戏应用可以达到7%~34%的能效收益。对cpu和gpu需求低的游戏应用(图中编号为8、9、23和29号应用)几乎没有能效收益。

图5所示为本发明与其它成果的横向对比情况,选取发表在islped'16的相关研究成果进行横向比较。org、pat15、co-cap16和hicap为原文中进行对比的四种方案,其中org是android系统默认方案,原文中表述为default,hicap是作者提出的基于fsm和cpu/gpu密集性在co-cap16基础上的改进成果。pat15是较早的成果。比较的方式是将org的fps数据和平均帧能耗(energyperframe,epf)作为基准(归一化为100),其它方案按照相对效果计算对应数值。本发明(记为coopfsm)的对应数值绘制在图中作为一项。从图中可以看出,所述适用于android游戏的处理器功耗优化方法在功耗收益(epf)上由优于org、pat15和co-cap16,略差于hicap,但在用户体验(fps)上优于pat15和hicap,并且相对org和co-cap16只有微小(1%)差距。从横向对比来看,所述适用于android游戏的处理器功耗优化方法达到了较好的效果。

综上所述,适用于android游戏的处理器功耗优化方法相对默认方法,在保证游戏用户体验的前提下有明显的性能提升。

上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1