首页 / 专利库 / 电脑零配件 / 多核处理器 / 多核处理器的调度方法、装置及终端

多核处理器的调度方法、装置及终端

阅读:464发布:2020-05-12

专利汇可以提供多核处理器的调度方法、装置及终端专利检索,专利查询,专利分析的服务。并且本 申请 公开了一种 多核处理器 的调度方法、装置及终端,属于 电子 技术领域。所述方法包括:将终端运行的 进程 中对所述多核处理器的负载贡献最高的作为目标进程;根据目标进程对第二类核心的调用信息,计算得到第二类核心在运行目标进程时的第一负载;当第一负载超过负载 阈值 时,根据第一负载计算得到需要开启的第一类核心的第一数量;开启第一数量的第一类核心。本申请通过计算得到第二类核心在运行目标进程时的第一负载,通过第一负载确定是否开启第一类核心,以及需要开启的第一数量,由于第一负载是基于目标进程计算得到,解决了相关技术中基于运行的多个进程的总负载确定是否开启第一类核心在某些场合下并不准确从而导致功耗较高的问题。,下面是多核处理器的调度方法、装置及终端专利的具体信息内容。

1.一种多核处理器的调度方法,其特征在于,所述方法由终端执行,所述终端包括多核处理器,所述多核处理器包括至少两个处理核心,所述处理核心包括第一类核心和第二类核心,所述第一类核心的运算能强于所述第一类核心,所述终端中运行有至少一个进程,所述方法包括:
将所述进程中对所述多核处理器的负载贡献最高的作为目标进程;
根据所述目标进程对所述第二类核心的调用信息,计算得到所述第二类核心在运行所述目标进程时的第一负载;
当所述第一负载超过负载阈值时,根据所述第一负载计算得到需要开启的所述第一类核心的第一数量;
开启所述第一数量的所述第一类核心,关闭所述第二类核心。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标进程对所述第二类核心的调用信息,计算得到所述第二类核心在运行所述目标进程时的第一负载,包括:
根据所述调用信息,计算得到每个第二类核心的负载;
根据所述每个第二类核心的负载、所述第一类核心的运算能力以及所述第二类核心的运算能力,计算得到所述每个第二类核心的相对负载,所述相对负载用于表示所述第二类核心相当于所述第一类核心的运算能力运行进程时的负载;
将所述每个第二类核心的相对负载相加,得到所述第一负载。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述第一负载计算得到需要开启的所述第一类核心的第一数量,包括:
将所述第一负载除以述负载阈值,得到第一商数,将所述第一商数向上取整数,得到所述第一数量。
4.根据权利要求1或2所述的方法,其特征在于,所述根据所述第一负载计算得到需要开启的所述第一类核心的第一数量,包括:
将所述第一负载除以所述负载阈值,得到第一商数,将所述第一商数向下取整数,得到所述第一数量;
将所述第一数量乘以所述负载阈值,得到所述第一类核心需要承担的第二负载;
将所述第一负载减去所述第二负载,得到剩余负载;
将所述剩余负载除以所述负载阈值,得到第二商数,将所述第二商数向上取整数,得到需要开启的所述第二类核心的第二数量;
所述开启所述第一数量的所述第一类核心,关闭所述第二类核心,还包括:
开启所述第二数量的所述第二类核心,关闭除所述第二数量的第二类核心以外的其它第二类核心。
5.根据所述权利要求4所述的方法,其特征在于,所述开启所述第一数量的所述第一类核心之后,还包括:
当所述多核处理器中第二类核心的数量小于所述第二数量时,将所述第二数量减去所述多核处理器中第二类核心的数量,得到第三数量;
开启所述第三数量的所述第一类核心。
6.根据权利要求2至5任一所述的方法,其特征在于,所述根据所述调用信息,计算得到每个第二类核心的负载,包括:
获取所述终端调用第一函数的第一信息,以及所述终端调用第二函数的第二信息,确定所述目标进程调用所述每个第二类核心的时间,所述第一函数用于表示所述终端调用的处理核心,所述第二函数用于表示所述终端放弃调用的处理核心;
根据所述目标进程调用所述每个第二类核心的时间计算得到所述每个第二类核心的负载。
7.根据权利要求2所述的方法,其特征在于,所述根据所述每个第二类核心的负载、所述第一类核心的运算能力以及所述第二类核心的运算能力,计算得到所述每个第二类核心的相对负载,包括:
根据所述第二类核心的运算能力、所述第一类核心的最高工作频率以及所述第二类核心的最高工作频率,计算得到所述第一类核心的运算能力;
对于所述每个第二类核心中任一第二类核心,根据所述第二类核心的负载、所述第二类核心的当前工作频率、所述第二类核心的最高工作频率、所述第二类核心的运算能力以及所述第一类核心的运算能力,计算得到所述第二类核心的相对负载。
8.一种多核处理器的调度装置,其特征在于,所述装置应用于终端中,所述终端包括多核处理器,所述多核处理器包括至少两个处理核心,所述处理核心包括第一类核心和第二类核心,所述第一类核心的运算能力强于所述第一类核心,所述终端中运行有至少一个进程,所述装置包括:
处理模,用于将所述进程中对所述多核处理器的负载贡献最高的作为目标进程;
计算模块,用于根据所述目标进程对所述第二类核心的调用信息,计算得到所述第二类核心在运行所述目标进程时的第一负载;当所述第一负载超过负载阈值时,根据所述第一负载计算得到需要开启的所述第一类核心的第一数量;
所述处理模块,还用于开启所述第一数量的所述第一类核心,关闭所述第二类核心。
9.一种终端,其特征在于,所述终端包括处理器和存储器;所述存储器存储有至少一条指令,所述至少一条指令用于被所述处理器执行以实现如权利要求1至7任一所述的多核处理器的调度方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如权利要求1至7任一所述的多核处理器的调度方法。

说明书全文

多核处理器的调度方法、装置及终端

技术领域

[0001] 本申请涉及电子技术领域,特别涉及一种多核处理器的调度方法、装置及终端。

背景技术

[0002] 多核处理器(Multi-core processor)是指在一枚处理器中集成至少两个处理核心(Core)的中央处理器(Central Processing Unit,CPU)。多核处理器支持系统总线上的多个处理核心,由总线控制器提供所有总线控制信号和命令信号。
[0003] 多核处理器的热拔插(hot-plugging)是指终端将多核处理器中的处理核心由休眠状态中唤醒,进入工作状态;和/或,将处理核心由工作状态进入休眠状态的过程。终端可通过热拔插,使部分处理核心处于休眠状态以降低多核处理器的功耗。
[0004] 多核处理器中可包括不同运算能的处理核心,例如,一个8核的多核处理器中包括4个英国ARM公司的A15型号的第一类核心,以及4个英国ARM公司的A7型号的第二类核心,其中,A15型号的第一类核心的运算能力强于A7型号的第二类核心。
[0005] 相关技术中,多核处理器的调度方法为:终端获取得到多核处理器的总负载,当多核处理器的总负载大于负载阈值时,确定当前运行的进程为大任务,启动第一类核心;当多核处理器的总负载不大于负载阈值时,确定当前运行的进程为小任务,启动第二类核心,其中,第一类核心的运算能力强于第二类核心。发明内容
[0006] 本申请实施例提供了一种多核处理器的调度方法、装置及终端用以解决相关技术中多核处理器的调度方法在某些情况下导致多核处理器的功耗较大的问题。所述技术方案如下:
[0007] 一方面,本申请实施例提供了一种多核处理器的调度方法,所述方法由终端执行,所述终端包括多核处理器,所述多核处理器包括至少两个处理核心,所述处理核心包括第一类核心和第二类核心,所述第一类核心的运算能力强于所述第一类核心,所述终端中运行有至少一个进程,所述方法包括:
[0008] 将所述进程中对所述多核处理器的负载贡献最高的作为目标进程;
[0009] 根据所述目标进程对所述第二类核心的调用信息,计算得到所述第二类核心在运行所述目标进程时的第一负载;
[0010] 当所述第一负载超过负载阈值时,根据所述第一负载计算得到需要开启的所述第一类核心的第一数量;
[0011] 开启所述第一数量的所述第一类核心,关闭所述第二类核心。
[0012] 一方面,本申请实施例提供了一种多核处理器的调度装置,所述装置应用于终端中,所述终端包括多核处理器,所述多核处理器包括至少两个处理核心,所述处理核心包括第一类核心和第二类核心,所述第一类核心的运算能力强于所述第一类核心,所述终端中运行有至少一个进程,所述装置包括:
[0013] 处理模,用于将所述进程中对所述多核处理器的负载贡献最高的作为目标进程;
[0014] 计算模块,用于根据所述目标进程对所述第二类核心的调用信息,计算得到所述第二类核心在运行所述目标进程时的第一负载;当所述第一负载超过负载阈值时,根据所述第一负载计算得到需要开启的所述第一类核心的第一数量;
[0015] 所述处理模块,还用于开启所述第一数量的所述第一类核心,关闭所述第二类核心。
[0016] 一方面,本申请实施例提供了一种终端,其特征在于,所述终端包括处理器和存储器;所述存储器存储有至少一条指令,所述至少一条指令用于被所述处理器执行以实现如上所述的多核处理器的调度方法。
[0017] 一方面,本申请实施例提供了一种计算机可读存储介质,其特征在于,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如上所述的多核处理器的调度方法。
[0018] 本申请实施例提供的技术方案带来的有益效果至少为:
[0019] 通过计算得到每个处理核心的相对负载以及负载阈值,确定需要开启的第一类核心的数目,由于相对负载是表示处理核心在单位时间内相对于第一类核心的运算能力担负的工作量,因此能够直观的反应调用处理内核的是否是对运算能力要求较高的任务,从而解决了相关技术中通过统计多核处理器的总负载确定开启第一类核心在某些场合下并不准确从而导致功耗较高的问题,从而降低了终端的功耗。附图说明
[0020] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0021] 图1是本申请一个示例性实施例提供的终端的结构示意图;
[0022] 图2是本申请一个示例性实施例提供的终端的结构示意图;
[0023] 图3终端中应用层与Linux内核层交互过程的示意图;
[0024] 图4是本申请另一个示例性实施例提供的终端的结构示意图;
[0025] 图5是本申请一个示例性实施例提供的多核处理器的调度方法的流程图
[0026] 图6是本申请一个示例性实施例提供的多核处理器的调度方法的流程图;
[0027] 图7是本申请一个示例性实施例提供的多核处理器的调度装置的结构框图

具体实施方式

[0028] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0029] 首先,对本申请实施例涉及的若干个名词进行简单介绍:
[0030] 大小核(big.LITTLE):是英国ARM公司提出的一种多核处理器架构。使用该架构的多核处理器包括至少两种类型的处理核心,分别为第一类核心和第二类核心,其中,第一类核心的运算能力强于第二类核心,第一类核心侧重于处理负载较高的任务(例如浏览网页、运行游戏等),第二类核心侧重于处理负载较低的任务(例如一些在后台运行的任务)。终端可通过多核处理器的调度方法确定需要开启的第一类核心和/或第二类核心。
[0031] 负载:是用于表示处理核心在单位时间内担负的工作量的参数。可选的,负载是单位时间内处理核心的工作时间和单位时间的比值。
[0032] 工作频率:是处理核心的时钟频率,即处理核心运算时的工作的频率(1秒内发生的同步脉冲数)的简称,其单位是Hz,其定义了处理核心的运算速度。调度:是终端确定多核处理器中需要开启和/或关闭处理核心的方法。例如,多核处理器中具有4个第一类核心和4个第二类核心,终端确定需要开启2个第一类核心和3个第二类核心,则将2个第一类核心处于工作状态,将2个第二类核心处于休眠状态,将3个第二类核心处于工作状态,将1个第二类核心处于休眠状态。
[0033] 每秒计算能力(Dhrystone Million Instructions executed Per Second,DMIPS):是测试得到的不同类型的处理核心在单位时间内的运算能力。
[0034] 相关技术中,多核处理器的调度方法为:终端获取得到多核处理器的总负载,当多核处理器的总负载大于负载阈值时,确定当前运行的进程为大任务,启动第一类核心;当多核处理器的总负载不大于负载阈值时,确定当前运行的进程为小任务,启动第二类核心,其中,第一类核心的运算能力强于第二类核心。
[0035] 示例性的,多核处理器包括4个第一类核心和4个第二类核心,终端获取得到4个第一类核心和4个第二类核心的总负载为200%,若负载阈值为180%,则确定终端中当前运行的进程为大任务,确定需要开启4个第一类核心;若4个第一类核心和4个第二类核心的总负载为150%,则确定终端中当前运行的进程为小任务,确定需要开启4个第二类核心。
[0036] 由于终端获取得到的多核处理器的总负载反应的是终端中正在运行的多个进程的负载,当终端中运行有多个小任务时,导致多核处理器的总负载较高,终端会将多个小任务误判为大任务,从而开启第一类处理核心,由于终端只需要开启与小任务适配的第二类核心即可满足任务需求,因为误判开启了功耗较高的第一类核心,进而导致终端在这种情况下的功耗较高。
[0037] 请参考图1,其示出了本申请一个实施例提供的终端的结构方框图。该终端可以是智能手机、平板电脑等电子设备。本申请中的终端可以包括一个或多个如下部件:处理器110、存储器120和输入输出装置130。
[0038] 处理器110利用各种接口和线路连接整个终端内的各个部分,通过运行或执行存储在存储器120内的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行终端的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器110可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通信芯片进行实现。
[0039] 如图2所示,处理器110为多核处理器,该多核处理器包括第一类核心1110以及第二类核心1120,其中第一类核心1110的运算能力要强于第二类核心1120。其中,第一类核心1110侧重于处理负载较高的任务(例如浏览网页、运行游戏等),第二类核心1120侧重于处理负载较低的任务(例如一些在后台运行的任务),其中,第一类核心的功耗大于第二类核心。终端可通过以下实施例中的多核处理器的调度方法确定需要开启的第一类核心1110和/或第二类核心1120的数量。
[0040] 存储器120可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选地,该存储器120包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等,该操作系统可以是安卓(Android)系统(包括基于Android系统深度开发的系统)、苹果公司开发的IOS系统(包括基于IOS系统深度开发的系统)或其它系统。存储数据区还可以存储终端在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
[0041] 以操作系统为Android系统为例,存储器120中存储的程序和数据如图3所示,存储器120中可存储有Linux内核层220、系统运行库层240、应用框架层260和应用层280,其中,Linux内核层220、系统运行库层240和应用框架层260属于操作系统空间,应用层280属于用户空间。Linux内核层220为终端100的各种硬件提供了底层的驱动,如显示驱动、音频驱动、摄像头驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。系统运行库层240通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。在系统运行库层240中还提供有安卓运行时库(Android Runtime),它主要提供了一些核心库,能够允许开发者使用Java语言来编写Android应用。应用框架层260提供了构建应用程序时可能用到的各种API,开发者也可以通过使用这些API来构建自己的应用程序,比如活动管理、窗口管理、视图管理、通知管理、内容提供者、包管理、通话管理、资源管理、定位管理。应用层280中运行有至少一个应用程序,这些应用程序可以是操作系统自带的原生应用程序,比如联系人程序、短信程序、时钟程序、相机应用等;也可以是第三方开发者所开发的第三方应用程序,比如游戏类应用程序、即时通信程序、相片美化程序、购物程序等。
[0042] 为了使应用层的应用程序和Linux内核层进行交互,如图4所示,Linux内核层220提供了一系列具备预定功能的内核函数,并通过接口的形式呈现给应用层280,应用层280的应用程序可以通过该接口调用内核函数以访问硬件设备和其他操作系统资源。可选的,应用程序通过应用框架层的应用程序接口(Application Programming Interface,API)调用上述接口以访问Linux内核层使其完成应用程序的请求
[0043] 输入输出装置130可以包括触摸显示屏,该触摸显示屏用于接收用户使用手指、触摸笔等任何适合的物体在其上或附近的触摸操作,以及显示各个应用程序的用户界面。触摸显示屏通常设置在终端的前面板。触摸显示屏可被设计成为全面屏、曲面屏或异型屏。触摸显示屏还可被设计成为全面屏与曲面屏的结合,异型屏与曲面屏的结合,本申请实施例对此不加以限定。
[0044] 除此之外,本领域技术人员可以理解,上述附图所示出的终端的结构并不构成对终端的限定,终端可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。比如,终端中还包括射频电路、输入单元、传感器、音频电路、无线保真(Wireless Fidelity,WiFi)模块、电源、蓝牙模块等部件,在此不再赘述。
[0045] 请参考图5,其示出了本申请一个实施例提供的多核处理器的调度方法的流程图。该方法由终端执行,该终端可以是图1至图4中的终端,该方法包括:
[0046] 步骤501,将终端运行的进程中,对多核处理器的负载贡献最高的作为目标进程。
[0047] 其中,负载用于表示处理核心在单位时间内担负的工作量。可选的,负载是单位时间内处理核心的工作时间和单位时间的比值。例如,单位时间为1秒,在1秒内处理核心的实际工作时间为0.8秒,则该处理核心的负载为80%。
[0048] 终端获取得到正在运行的每个进程对多核处理器贡献的负载,将对多核处理器的负载贡献最高的进程作为目标进程。可选的,终端通过获取每个进程对处理核心的调用信息,计算得到每个进程对多核处理器贡献的负载。
[0049] 示例性的,终端中运行有进程1、进程2以及进程3,其中,终端在运行进程1时的负载为80%,在运行进程2时的负载为75%,在运行进程3时的负载为85%,则确定进程3为目标进程。
[0050] 步骤502,根据目标进程对第二类核心的调用信息,计算得到第二类核心在运行目标进程时的第一负载。
[0051] 示例性的,多核处理器中包括两个第二类核心,第二类核心B1和第二类核心B2,终端根据目标进程对第二类核心的调用信息,确定目标进程在时间T内调用第二类核心B1的时间为t1,在时间T内调用第二类核心B2的时间为t2,计算得到第二类核心B1的负载为t1/T,第二类核心B2的负载为t2/T,从而计算得到第一负载为(t1/T+t2/T)。
[0052] 步骤503,当第一负载超过负载阈值时,根据第一负载计算得到需要开启的第一类核心的第一数量。
[0053] 终端检测第一负载是否超过负载阈值,当第一负载超过负载阈值时,终端确定目标进程为大任务,将第一负载作为第一类核心需要承担的负载,计算得到需要开启的第一类核心的第一数量。
[0054] 可选的,第一类核心的负载上限为负载阈值,终端将第一负载除以负载阈值,将运算结果向上取整数,得到第一数量。例如,第一负载为120%,负载阈值为80%,Ceil(120%/80%)=2,得到第一数量为2,其中Ceil(*)表示对*向上取整数。
[0055] 步骤504,开启第一数量的第一类核心,关闭第二类核心。
[0056] 终端在计算得到第一数量后,开启第一数量的第一类核心以承担第一负载,并将第二类核心关闭。
[0057] 综上所述,本申请实施例中,通过将终端中运行的进程中负载最高的进程作为目标进程,计算得到第二类核心在运行目标进程时的第一负载,当第一负载大于负载阈值时,确定目标进程是需要第一类核心处理的大任务,从而开启第一类核心承担第一负载,由于确定大任务的依据是负载最高的进程对第二类核心贡献的第一负载超过负载阈值,从而解决了相关技术中基于运行的多个进程的总负载确定是否开启第一类核心在某些场合下并不准确从而导致功耗较高的问题,从而在一定程度上降低了终端的功耗。
[0058] 请参考图6,其示出了本申请一个实施例提供的多核处理器的调度方法的流程图。该方法由终端执行,该终端可以是图1至图4中的终端,该方法包括:
[0059] 步骤601,根据终端调用第一函数的第一信息,以及终端调用第二函数的第二信息,计算得到终端中运行的进程中每个进程对多核处理器贡献的负载。
[0060] 其中,第一函数用于表示终端调用的处理核心,第二函数用于表示终端放弃调用的处理核心,终端通过获取第一函数和第二函数的调用情况,得到每个进程在单位时间内调用和/或放弃每个处理核心的时间和次数,从而计算得到每个进程对每个处理核心贡献的负载,进而计算得到每个进程对多核处理器贡献的负载。
[0061] 示例性的,多核处理器中包括2个第一类核心A1、A2,2个第二类核心B1、B2,终端中运行有进程1和进程2。
[0062] 终端根据第一信息和第二信息,得到进程1在时间T内调用第一类核心A1的时间为t1,进程1在时间T内调用第一类核心A2的时间为t2,进程1在时间T内调用第二类核心B1的时间为t3,进程1在时间T内调用第二类核心B2的时间为t4,从而计算得到在运行进程1时,第一类核心A1的负载为t1/T,第一类核心A2的负载为t2/T,第二类核心B1的负载为t3/T,第二类核心B2的负载为t4/T,从而计算得到进程1对多核处理器贡献的负载为(t1/T+t2/T+t3/T+t4/T)。
[0063] 终端根据第一信息和第二信息,得到进程2在时间T内调用第一类核心A1的时间为t5,进程2在时间T内调用第一类核心A2的时间为t6,进程2在时间T内调用第二类核心B1的时间为t7,进程2在时间T内调用第二类核心B2的时间为t8,从而计算得到在运行进程2时,第一类核心A1的负载为t5/T,第一类核心A2的负载为t6/T,第二类核心B1的负载为t7/T,第二类核心B2的负载为t8/T,从而计算得到进程2对多核处理器贡献的负载为(t5/T+t6/T+t7/T+t8/T)。
[0064] 示例性的,第一函数是Linux调度器中的结构体sched_class中的enqueue_task函数和dequeue_task函数。其中,enqueue_task函数是处理核心被唤醒,状态变为可运行状态,加入到调度队列时的处理函数;dequeue_task函数是任务放弃处理内核的使用权,从队列上移除时调用的函数。终端通过在这两个函数上添加的代码获取得到终端中运行的任务对每个处理核心的调用情况。
[0065] 步骤602,将对多核处理器的负载贡献最高的作为目标进程。
[0066] 终端计算得到每个进程对多核处理器贡献的负载后,将贡献负载最高的作为目标进程。例如,上述进程1对多核处理器贡献的负载为(t1/T+t2/T+t3/T+t4/T),上述进程2对多核处理器贡献的负载为(t5/T+t6/T+t7/T+t8/T),若(t1/T+t2/T+t3/T+t4/T)>(t5/T+t6/T+t7/T+t8/T),则进程1为目标进程。
[0067] 步骤603,根据终端调用第一函数的第一信息,以及终端调用第二函数的第二信息,计算得到每个第二类核心在运行目标进程时的负载。
[0068] 示例性的,参考步骤601中的实施例,若进程1为目标进程,则第二类核心B1在运行目标进程时的负载为t3/T,第二类核心B2在运行目标进程时的负载为t4/T。
[0069] 步骤604,根据每个第二类核心在运行目标进程时的负载、第一类核心的运算能力以及第二类核心的运算能力,计算得到每个第二类核心的相对负载。
[0070] 其中,相对负载用于表示第二类核心相当于第一类核心的运算能力运行进程时的负载。例如,第二类核心B1在运行进程1时的负载为80%,由于第一类核心的运算能力强于第二类核心,因此第一类核心在运行进程1时的负载要低于第二类核心,假定第二类核心B1具有第一类核心的运算能力,在运行进程1时的负载为40%,则第二类核心B1在运行进程1时的相对负载为40%。
[0071] 可选的,步骤604包括但不限于以下子步骤:
[0072] 步骤604a,根据第二类核心的运算能力、第一类核心的最高工作频率以及第二类核心的最高工作频率,计算得到第一类核心的运算能力。
[0073] 示例性的,终端根据第二类核心的运算能力、第一类核心的最高工作频率、第二类核心的最高工作频率、第一类核心的DMIPS以及第二类核心的DMIPS,通过以下公式计算计算得到第一类核心的运算能力:
[0074]
[0075] capacity(big)表示第一类核心的运算能力,C表示第二类核心的运算能力,max_freq(big)表示第一类核心的最高工作频率,DMIPS(big)表示第一类核心的DMIPS,max_freq(small)表示第二类核心的最高工作频率,DMIPS(small)表示第二类核心的DMIPS。其中,C、max_freq(big)、DMIPS(big)、max_freq(small)以及DMIPS(small)为终端中预存的常数。
[0076] 步骤604b,对于每个第二类核心中任一第二类核心,根据第二类核心的负载、第二类核心的当前工作频率、第二类核心的最高工作频率、第二类核心的运算能力以及第一类核心的运算能力,计算得到所述第二类核心的相对负载。
[0077] 示例性的,终端根据以下公式计算得到处理核心的相对负载:
[0078]
[0079] 其中,scaled_load(core)表示该处理核心的相对负载,current_freq(core)表示该处理核心的当前工作频率,max_freq(core)表示该处理核心的最高工作频率,即第二类核心的最高工作频率,capacity(core)表示该处理核心的运算能力,即第二类核心的运算能力。
[0080] 步骤605,将每个第二类核心的相对负载相加,得到第一负载。
[0081] 示例性的,多核处理器中包括2个第二类核心B1、B2,第二类核心B1的相对负载为50%,第二类核心B2的相对负载为45%,则计算得到第一负载为(50%+45%)=95%。
[0082] 步骤606,检测第一负载是否大于负载阈值。
[0083] 终端检测第一负载是否大于负载阈值,当第一负载大于负载阈值时,确定目标进程为大任务,进入步骤607;当第一负载不大于负载阈值时,确定目标进程为小任务,步骤停止。
[0084] 步骤607,将第一负载除以负载阈值,得到第一商数,将第一商数向下取整数,得到第一数量。
[0085] 当第一负载大于负载阈值时,终端判断目标进程为大任务,需要开启第一类核心承担部分第一负载。终端将第一负载除以负载阈值,得到第一商数,将第一商数向下取整数,得到第一数量,该第一数量即为需要开启的第一类核心的数量。例如,第一负载为95%,负载阈值为80%,则Floor(95%/80%)=1,得到第一数量为1,其中,Floor(*)表示对*向下取整数。
[0086] 步骤608,根据第一负载和第一数量确定需要开启的第二类核心的第二数量。
[0087] 终端将第一数量乘以负载阈值,得到第一类核心需要承担的第二负载,将第一负载减去第二负载,得到剩余负载,将剩余负载除以负载阈值,得到第二商数,将第二商数向上取整数,得到需要开启的第二类核心的第二数量。
[0088] 示例性的,第一负载为95%,需要开启的第一类核心的第一数量为1,负载阈值为80%,则第一类核心需要承担的第二负载为80%×1=80%,剩余负载为(95%-80%)=
15%,则Ceil(15%/80%)=1,得到需要开启的第二类核心的第二数量为1。
[0089] 步骤609,检测多核处理器中第二类核心的数量是否小于第二数量。
[0090] 终端检测多核处理器中第二类核心的数量是否小于第二数量,当第二类核心的数量小于第二数量时,进入步骤610,当第二类核心的数量不小于第二数量时,进入步骤611。
[0091] 步骤610,将第二数量减去多核处理器中第二类核心的数量,得到第三数量,开启第四数量的第一类核心以及第二数量的第二类核心,关闭除第二数量的第二类核心以外的其它第二类核心,其中,第四数量是第一数量和第三数量的和。
[0092] 当多核处理器中第二类核心的数量小于第二数量时,需要调度第一类核心来处理多核处理器中所有第二核心无法承担的负载,故终端将第二数量减去多核处理器中第二类核心的数量,得到第三数量,确定最终需要开启的第一类核心的数目为第一数量和第三数量的和,即,第四数量;最终需要开启的第二类核心的数目为第二数量。终端开启第四数量的第一类核心,开启第二数量的第二类核心,关闭除第二数量的第二类核心以外的其它第二类核心,完成调度。
[0093] 步骤611,开启第一数量的第一类核心和第二数量的第二类核心,关闭除第二数量的第二类核心以外的其它第二类核心。
[0094] 当多核处理器中第二类核心的数量不小于第二数量时,多核处理器中的第二类核心可以承担剩余负载,终端开启第一数量的第一类核心和第二数量的第二类核心,关闭除第二数量的第二类核心以外的其它第二类核心,完成调度。
[0095] 综上所述,本申请实施例中,通过将终端中运行的进程中负载最高的进程作为目标进程,计算得到第二类核心在运行目标进程时的第一负载,当第一负载大于负载阈值时,确定目标进程为大任务,从而开启第一类核心承担第一负载,由于确定大任务的依据是负载最高的进程对第二类核心贡献的第一负载超过负载阈值,从而解决了相关技术中基于运行的多个进程的总负载确定是否开启第一类核心在某些场合下并不准确从而导致功耗较高的问题,从而在一定程度上降低了终端的功耗。
[0096] 可选的,本申请实施例中,通过根据每个第二类核心的负载计算得到每个第二类核心的相对负载,根据相对负载计算得到第二类核心承担的第一负载,从而根据第一负载确定是否开启第一类核心,以及需要开启第一类核心的第一数量,由于相对负载是第二类核心相当于第一类核心的运算能力运行进程时的负载,因此根据相对负载得到的第一负载能够更加准确计算需要开启的第一类核心的第一数量,提高了多核处理器的调度方法的准确度。
[0097] 可选的,本申请实施例中,通过将第一负载减去第一类核心需要承担的第二负载得到第二类核心需要承担的剩余负载,从而根据剩余负载和负载阈值确定需要开启的第二类核心,由于不需要通过开启第一类核心承担全部第一负载,将第一负载中的大部分负载由第一类核心承担,将剩余负载由第二类核心承担,在一定程度上降低了终端功耗。
[0098] 可选的,本申请实施例中,当需要开启的第二类核心的数目超过多核处理器中第二类核心的数目,则开启相应的第一类核心以适配剩余负载,从而避免了开启的处理核心数量不足以适配目标进程的负载所带来的运行不流畅的问题,提高了终端的运行流畅度。
[0099] 请参考图7,其示出了本申请一个示例性实施例提供的获取图像的主色调的装置的结构框图。该装置可以通过软件、硬件或者两者的结合实现成为图1至图4实施例中的终端。该装置包括处理模块710、计算模块720以及获取模块730。
[0100] 处理模块710,用于将终端运行的进程中,对多核处理器的负载贡献最高的作为目标进程。
[0101] 计算模块720,用于根据目标进程对第二类核心的调用信息,计算得到第二类核心在运行目标进程时的第一负载;当第一负载超过负载阈值时,根据第一负载计算得到需要开启的第一类核心的第一数量。
[0102] 处理模块710,还用于开启第一数量的第一类核心。
[0103] 在一个可选的实施例中,计算模块720,还用于根据调用信息,计算得到每个第二类核心的负载;根据每个第二类核心的负载、第一类核心的运算能力以及第二类核心的运算能力,计算得到每个第二类核心的相对负载,相对负载用于表示第二类核心相当于第一类核心的运算能力运行进程时的负载;将每个第二类核心的相对负载相加,得到第一负载。
[0104] 在一个可选的实施例中,计算模块720,还用于将第一负载除以负载阈值,得到第一商数,将第一商数向上取整数,得到第一数量。
[0105] 在一个可选的实施例中,计算模块720,还用于将第一负载除以负载阈值,得到第一商数,将第一商数向下取整数,得到第一数量;将第一数量乘以负载阈值,得到第一类核心需要承担的第二负载;将第一负载减去第二负载,得到剩余负载;将剩余负载除以负载阈值,得到第二商数,将第二商数向上取整数,得到需要开启的第二类核心的第二数量。
[0106] 处理模块710,还用于开启第二数量的第二类核心。
[0107] 在一个可选的实施例中,计算模块720,还用于当多核处理器中第二类核心的数量小于第二数量时,将第二数量减去多核处理器中第二类核心的数量,得到第三数量。
[0108] 处理模块710,还用于开启第三数量的第一类核心。
[0109] 在一个可选的实施例中,获取模块730,用于获取终端调用第一函数的第一信息,以及终端调用第二函数的第二信息,确定目标进程调用每个第二类核心的时间,第一函数用于表示终端调用的处理核心,第二函数用于表示终端放弃调用的处理核心。
[0110] 计算模块720,还用于根据目标进程调用每个第二类核心的时间计算得到每个第二类核心的负载。
[0111] 计算模块720,还用于根据第二类核心的运算能力、第一类核心的最高工作频率以及第二类核心的最高工作频率,计算得到第一类核心的运算能力;对于每个第二类核心中任一第二类核心,根据第二类核心的负载、第二类核心的当前工作频率、第二类核心的最高工作频率、第二类核心的运算能力以及第一类核心的运算能力,计算得到第二类核心的相对负载。
[0112] 本申请还提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述方法实施例提供的多核处理器的调度方法。
[0113] 可选地,本申请还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的多核处理器的调度方法。
[0114] 应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
[0115] 上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
[0116] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0117] 以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈