任务调度方法、装置、计算机设备和存储介质
技术领域
本申请涉及处理器任务处理技术领域,特别是涉及一种任务调度方法、装置、计算机设备和存储介质。
背景技术
随着集成电路制造工艺不断逼近摩尔定律的极限,芯片的集成度也越来越高,仅仅从制程技术的角度来提升多核系统性能变得越来越困难,还需要对多核系统的任务分配方法进行改善。
传统的任务分配技术包括动态分配,动态分配是指任务分配发生在应用执行过程中的分配方法,其通常使用快速的启发式算法平衡系统资源和处理器负载,因为动态调度无法决定调用时间,因此无法从全局角度以获得全局最优调度结果,导致处理器在任务处理过程中容易出现死锁,降低了处理器的任务处理性能。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高处理器任务处理性能的任务调度方法、装置、计算机设备和存储介质。
一种任务调度方法,其特征在于,该任务调度方法包括:
根据映射关系,将任务集中的任务映射到处理器集中对应的处理器,所述任务集包括有两个以上的所述任务,所述处理器集包括两个以上的所述处理器;将映射到同一处理器的各个任务分别划分至对应的线程中;根据预设调度模式,获取划分到各个线程中的任务的执行顺序,其中,所述预设调度模式包括全局调度模式、局部调度模式和静态调度模式中的至少一种。
上述方法,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
在其中一个实施例中,根据预设调度模式,获取各个线程中任务的执行顺序,包括:
当预设调度模式为全局调度模式时,通过预设调度模型对各个处理器中的各个线程进行调度得到线程间调度结果;
根据线程间调度结果,获取各个线程中任务的执行顺序。
在其中一个实施例中,根据预设调度模式,获取各个线程中任务的执行顺序,还包括:
当预设调度模式为局部调度模式时,通过预设调度模型对同一线程中的各个任务进行调度得到任务间调度结果;
根据任务间调度结果,获取各个线程中任务的执行顺序。
在其中一个实施例中,根据预设调度模式,获取各个线程中任务的执行顺序,还包括:
当预设调度模式为静态调度模式时,通过预设调度模型对处理器集中的各个处理器进行调度得到处理器间调度结果;
根据处理器间调度结果,获取各个线程中任务的执行顺序。
在其中一个实施例中,将映射到同一处理器的各个任务分别划分至对应的线程中之后,根据预设调度模式,获取各个线程中的任务的执行顺序之前,包括:
获取各个处理器的各个线程中划分的任务,并根据各个线程中划分的任务,在各个线程中插入相应的线程间通信模块,线程通信模块用于线程与线程之间的数据通信。
在其中一个实施例中,获取任务集,并将任务集映射到对应的处理器之前,还包括:
获取处理器集中的处理器数量以及任务集中的任务数量,根据处理器数量和任务数量得到映射关系。
在其中一个实施例中,根据任务调度结果,获取各个线程中任务的执行顺序之后,还包括:
根据各个线程中任务的执行顺序,执行相应的任务。
一种任务调度装置,装置包括:
映射模块,用于根据映射关系,将任务集中的任务映射到处理器集中对应的处理器,任务集包括有两个以上的任务,处理器集包括两个以上的处理器;
划分模块,用于将映射到同一处理器的各个任务分别划分至对应的线程中;
调度模块,用于根据预设调度模式,获取各个线程中的任务的执行顺序,其中,预设调度模式包括全局调度模式、局部调度模式和静态调度模式中的至少一种。
上述装置,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
一种计算机设备,包括存储器和控制器,存储器存储有计算机程序,控制器执行计算机程序时实现上述的方法的步骤。
上述计算机设备,当控制器执行计算机程序时,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被控制器执行时实现上述的方法的步骤。
上述计算机可读存储介质上存储有对应的计算机程序,当计算机程序被控制器执行时,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
附图说明
图1为一个实施例中任务调度方法的流程示意图;
图2为又一个实施例中任务调度方法的流程示意图;
图3为另一个实施例中任务调度方法的流程示意图;
图4为另一个实施例中任务调度方法的流程示意图;
图5为一个实施例中任务调度装置的结构框图;
图6为一个实施例中计算机设备的内部结构图;
图7为一个实施例中任务分配示意图;
图8为一个实施例中线程划分示意图;
图9为一个实施例中嵌入式系统模型架构示意图;
图10为另一个实施例中嵌入式系统模型架构示意图;
图11为一实施例中静态调度模式时系统执行序列示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的任务调度方法,可以应用于计算机嵌入式系统中。其中,计算机嵌入式系统中具有多核处理器,不同的处理器会分配有不同的线程任务,又或者处理器与处理器之间还会进行通信,共同执行同一个线程任务,线程任务包括有中断和终止等等任务,在嵌入式系统中具有多核处理器时,为了能够保证性能的充分利用,需要对线程任务进行划分分配,保证多核处理器的性能能够充分发挥。
在一个实施例中,如图1所示,提供了一种任务分配方法,以该方法应用于计算机嵌入式系统为例进行说明,包括以下步骤:
步骤200,据映射关系,将任务集中的任务映射到处理器集中对应的处理器。具体的,任务集包括有两个以上的任务,处理器集包括两个以上的处理器;本实施例中的执行主体可以是控制器,该控制器用于对任务集中的任务进行调度,任务表征的是待执行的指令等,任务集中包括有多个待执行的指令,例如当用户在使用计算机时,按下开机键,即产生开机指令,处理器在接收到该开机指令时执行开机任务。
多个处理器可以集成形成多核处理器,在多核处理器执行任务时,每个处理器都能够处理多个任务集,但是任务集中的每个任务必须要映射到能够执行该任务的处理器上,即通过映射关系来实现,映射关系可以是每个任务自带映射关系标识符,例如当控制器在需要将这些任务映射到对应的处理器时,可以直接根据每个任务自带的映射关系标识符,对应的将每一个任务映射到对应的处理器上。进一步的,映射关系也可以是实时生成的,例如当任务集中出现有任务时,根据该任务的优先级以及出现的先后时间来生成一个映射关系,然后控制器根据实时生成的这个映射关系,将该任务映射到对应的处理器上。
步骤S300,将映射到同一处理器的各个任务分别划分至对应的线程中。
具体的,当完成将任务集中的任务映射到处理器集中对应的处理器之后,在一个处理器中将对应映射有多个任务,然后控制器将映射到同一处理器的任务划分为多个线程。
步骤S500,根据预设调度模式,获取划分到各个线程中的任务的执行顺序,具体的,预设调度模式包括全局调度模式、局部调度模式和静态调度模式中的至少一种,不同的调度模式所考虑的方向不同,全局调度模式用于多核系统各任务的统一调度,根据线程间调度结果进行调度分配,局部调度模式用于统一线程的任务调度,而静态调度模式则用于对各个处理器进行调度,在完成调度之后,即可确定出各个线程中的任务的执行顺序。
一般为了能够保证任务得到高效的执行,需要获取各个任务的执行顺序,例如在同一个线程中,需要在前置任务执行完毕之后,后置任务需要获取到前置任务得出的数据才能够继续执行,如果前置任务没有执行完毕,后置任务也将会被搁置,通过确定各个任务的执行顺序就可以保证整个线程的流畅执行。
上述方法,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
在一个实施例中,步骤S500包括步骤:当预设调度模式为全局调度模式时,通过预设调度模型对各个处理器中的各个线程进行调度得到线程间调度结果;根据线程间调度结果,获取各个线程中任务的执行顺序。
具体的,预设调度模型为ILP(integer linear programming整数线性规划) 模型,控制器可以根据输入的指令(例如用户输入的指令)来确定预设调度模式为全局调度模式和/或局部调度模式和/或静态调度模式,当控制器确定预设调度模式为全局调度模式时,直接通过ILP模型来对各个处理器中的各个线程进行调度,得到各个线程间调度结果,线程间调度结果表征了各个线程的执行信息,例如各个线程的执行顺序以及各个线程之间的数据交互关系等等,控制器通过各个线程的执行信息来进一步确定各个线程中任务的执行顺序。
进一步的,在一个实施例中,步骤S500还包括步骤:当预设调度模式为局部调度模式时,通过预设调度模型对同一线程中的各个任务进行调度得到任务间调度结果;根据任务间调度结果,获取各个线程中任务的执行顺序。
具体的,预设调度模型为ILP(integer linear programming整数线性规划) 模型,当控制器确定预设调度模式为局部调度模式时,则会对同一线程中各个任务进行调度得到任务间调度结果,任务间调度结果表征的是同一线程中各个任务的先后执行顺序,通过该任务间调度结果,即可直接得到任务的执行顺序。
进一步的,在一个实施例中,步骤S500还包括步骤:当预设调度模式为静态调度模式时,通过预设调度模型对处理器集中的各个处理器进行调度得到处理器间调度结果;根据处理器间调度结果,获取各个线程中任务的执行顺序。
具体的,预设调度模型为ILP(integer linear programming整数线性规划) 模型,当控制器确定预设调度模式为静态调度模式时,控制器将对处理器集中的各个处理器进行调度得到处理器间调度结果,其中处理器间调度结果表征的是各个处理器之间的执行顺序,通过处理器间调度结果即可得到处理器各个线程中任务的执行顺序。需要说明的是,预设调度模式可以是全局调度模式、局部调度模式和静态调度模式三种中的任意一种,也可以是三种中的任意两种或者预设调度模式可以包括同时为这三种,不论预设调度模式为何种情况,控制器只需要依据不同的情况对应的进行调度,得到线程间调度结果和/或任务间调度结果和/或处理器间调度结果。
在一个实施例中,如图2所示,步骤S300之后,还包括步骤S400,获取各个处理器的各个线程中划分的任务,并根据各个线程中划分的任务,在各个线程中插入相应的线程间通信模块,线程通信模块用于线程与线程之间的数据通信。
具体的,各个处理器中映射有多个任务,并划分有多个线程,不同的线程之间可以进行通信,例如一个线程的所有任务执行完毕之后,其需要将数据转移到下一个线程,即下一个线程在执行其中的任务时,需要将该数据作为起始数据,才能继续执行其中的任务,此时就需要通过线程通信模块来完成线程与线程之间的数据通信。
在一个实施例中,如图3所示,步骤S200之前还包括步骤S100,获取处理器集中的处理器数量以及任务集中的任务数量,根据处理器数量和任务数量得到映射关系。
具体的,任务集中具有多个任务,处理器集中也具有多个处理器,不同的处理器当前能够执行的任务数量是不相同的,当任务集中的任务数量较多时,需要根据当前处理器的数量以及任务数量来决定映射关系,避免出现映射到同一处理器中的任务较多的情况。
在一个实施例中,如图4所示,步骤S500之后还包括步骤S600,根据各个线程中任务的执行顺序,执行相应的任务。具体的,在获取到各个线程中任务的执行顺序之后,控制器将控制对应的处理器根据执行数据执行相应的任务,保证映射到处理器上的任务能够流程的被执行,避免出现任务锁死等情况。
应该理解的是,虽然图1-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种任务调度装置,包括:映射模块200、划分模块300和调度模块500,其中:
映射模块200,用于根据映射关系,将任务集中的任务映射到处理器集中对应的处理器。任务集包括有两个以上的任务,处理器集包括两个以上的处理器。
划分模块300,用于将映射到同一处理器的各个任务分别划分至对应的线程中。
调度模块500,用于根据预设调度模式,获取各个线程中的任务的执行顺序。其中,预设调度模式包括全局调度模式、局部调度模式和静态调度模式中的至少一种。
上述装置,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
在一个实施例中,调度模块500还用于当预设调度模式为全局调度模式时,通过预设调度模型对各个处理器中的各个线程进行调度得到线程间调度结果;根据线程间调度结果,获取各个线程中任务的执行顺序。
在一个实施例中,调度模块500还用于当预设调度模式为局部调度模式时,通过预设调度模型对同一线程中的各个任务进行调度得到任务间调度结果;根据任务间调度结果,获取各个线程中任务的执行顺序。
在一个实施例中,调度模块500还用于当预设调度模式为静态调度模式时,通过预设调度模型对处理器集中的各个处理器进行调度得到处理器间调度结果;根据处理器间调度结果,获取各个线程中任务的执行顺序。
在一个实施例中,该装置还包括通信模块,用于划分模块300将映射到同一处理器的各个任务分别划分至对应的线程中之后,调度模块500根据预设调度模式,获取各个线程中的任务的执行顺序之前,获取各个处理器的各个线程中划分的任务,并根据各个线程中划分的任务,在各个线程中插入相应的线程间通信模块,线程通信模块用于线程与线程之间的数据通信。
在一个实施例中,该装置还包括映射关系获取模块,用于映射模块200根据映射关系,将任务集中的任务映射到处理器集中对应的处理器之前,获取处理器集中的处理器数量以及任务集中的任务数量,根据处理器数量和任务数量得到映射关系。
在一个实施例中,该装置还包括执行模块,用于调度模块500根据处理器间调度结果,获取各个线程中任务的执行顺序之后,根据各个线程中任务的执行顺序,执行相应的任务。
关于任务调度装置的具体限定可以参见上文中对于任务调度方法的限定,在此不再赘述。上述任务调度装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的控制器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的控制器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被控制器执行时以实现一种任务分配方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
上述计算机设备,当控制器执行计算机程序时,通过将任务集中的任务映射到处理器集中对应的处理器上,然后将各个任务划分到对应的线程,并根据预设调度模式获取各个线程中的任务的执行顺序,使得处理器能够根据执行顺序对应的执行相应的任务,避免了处理器在任务处理过程中出现死锁的情况,能够最大化的提高处理器的任务处理性能。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
在一个实施例中,为了对本申请进行详细说明,请参阅图7至图11,图7 中示出了处理器1、处理器2以及任务F0、任务F1、任务F2、任务F3、任务 F4、任务F5、任务F6、任务F7、任务F8以及任务FF,每一个处理器能够处理多个任务,不同的任务处理器负责处理其对应的任务,例如处理器1负责处理任务F0、任务F1、任务F2、任务F3、任务F4、任务F5以及任务FF,处理器 2负责处理任务F6、任务F7和任务F8,每一个任务必须要映射到能执行该任务的处理器上,即任务F6、任务F7和任务F8必须要映射到处理器2上,如果映射出错导致映射到了处理器1上,则会出现任务无法完成的情况。图8中示出了将同一个处理器中的各个任务划分为对应的线程,其中处理器1包括有线程1以及线程2,线程1划分有任务F0、任务F1、任务F2、任务F3、任务F4 以及任务FF,线程2划分有任务F5,S0、S2、S3、R0、R2和R3则表示线程间通信模块,R2、R3、S2和S3用于线程1与线程3之间的数据通信,S0和 R0则用于线程2与线程4之间的数据通信,处理器2中线程3划分有任务F7 和任务F8,线程4划分有任务F6,R1和S1表示线程间通信模块,R1和S1用于线程3与线程4之间的数据通信。图9和图10示出了嵌入式系统的架构模型,其中,DMA(Direct Memory Access)为直接存储器访问,图9中处理器1在执行任务F0之后,通过线程间通信模块S0、DMA和线程间通信模块R0与处理器2进行数据通信,图10相对于图9则增加了线程划分示意,处理器1划分有两个线程,即线程1和线程2,而处理器2划分有线程3。需要说明的是,上述的附图7至附图10中仅仅作为简要示意图进行解释说明,而并非是对本申请的限制性描述。图11中示出了任务执行顺序,处理器1执行完F0[i+1]后主动进行线程切换,减少了处理器2的同步开销,本实施例通过任务分配处理单元(即上文的控制器)将任务映射到处理器上,并把映射到同一处理器的任务划分成多个线程,基于三层架构软件使用全局调度、局部调度和静态调度方法,保证系统既能较快获得全局最优调度结果同时不会产生死锁,同时保证最大化系统吞吐量,从而提升多核系统的性能。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。