一种面向异构多核体系的任务调度方法

xiaoxiao2020-10-23  13

一种面向异构多核体系的任务调度方法
【技术领域】
[0001]本发明涉及计算机体系结构领域,尤其涉及一种面向主从式异构多核体系的任务调度方法。
【背景技术】
[0002]随着时间的推移,人们对计算性能和能效的要求在不断提升。早期单核处理器性能的提升,得益于半导体技术和大规模集成电路技术飞速的发展。而现今,受制于功耗和设计复杂度的约束,单核处理器的性能提升已经跟不上时代的需求。
[0003]同构多核处理器的出现为突破单核处理器的性能瓶颈提供了很好的解决方案。现今同构多核处理器已成为处理器设计和制造技术发展的主流,无论是在移动计算平台,桌面计算平台,还是大型机计算平台,同构多核处理器都发挥着其至关重要的作用。
[0004]与此同时,人们对处理器在专用领域计算性能的需求也提升到一个新的高度,比如超高清视频的播放,大型游戏的实时渲染,大数据的并行计算等等。而不同体系结构的处理器擅长应用场景不同,这些面向特定应用领域的需求,推动了异构多核处理器的发展。另夕卜,处理器之间异构特性可以实现不同体系结构间的指令隔离,也有助于解决计算机领域的安全问题。
[0005]由于不同体系结构的处理核间差异较大,如何高效地完成任务调度,减少调用开销,都给异构多核体系的交互机制、内存划分等设计带来极大的挑战。
[0006]根据各个处理核的地位,目前异构多核体系主要分为主从式的异构多核和非主从式的异构多核。主从式异构多核体系中操作系统只运行在主核上,其他处理核作为辅助核,协助主核完成任务。非主从式异构多核体系中各个处理核的地位相同,操作系统可能运行在任意一个处理核上。
[0007]非主从式异构多核体系的实现复杂,并且技术成熟度不高,其中一个实例是由AMD公司推动的HSA架构(Heterogeneous System Architecture),目前还没有被广泛应用。相比之下,主从式异构多核体系则有很多成功的实例,如CPU+DSPs和CPU+GPU的异构多核结构,它们的可移植性强,并且拥有很多成熟的编程模型(OpenCL、CUDA等)。

【发明内容】

[0008]本发明要解决的技术问题是:提出一种在主从模式的异构多核体系下的高效的任务调度方法。
[0009]本发明所采用的技术方案为:一种面向异构多核体系的任务调度方法,多核间通过共享内存的方式实现数据的传递,通过中断和轮询的方式实现信息的传递;共享内存划分为命令区、结果区、数据输入区和数据输出区,并且根据各个区域的功能设计高效的数据结构,建立异构多核间交互的内存模型;任务调度采用多个环形队列实现优先级任务队列,实现高效、公平的任务调度机制;
[0010]具体步骤包括:
[0011]I)在引导启动阶段,核间中断作为多核间的交互方式,使得多核各自内存初始化、引导程序自拷贝和修改总线路由的初始化操作同步;
[0012]2)在任务调度阶段,主核与辅助核之间通过共享内存的方式实现数据传递;主核与辅助核在此基础上,通过轮询的方式实现任务信息的传递。
[0013]2.根据权利要求1所述的一种面向异构多核体系的任务调度方法,其特征在于:所述的任务调度的驱动一方面为应用程序提供抽象的调用接口,接收并管理应用程序提交的异构任务计算请求;另一方面,任务调度驱动以轮询的方式与共享内存进行交互,完成主核与辅助核之间信息和数据的传递,以高效、公平的任务调度机制将任务调度至辅助核。
[0014]本发明具有主从式的异构多核体系:主核运行操作系统以及任务调度驱动,任务调度驱动负责任务的调度和结果的接收,多个辅助核运行监视器程序,监视器负责协助主核执行被调度的任务。
[0015]本发明的有益效果是:为主从式异构多核体系提供了一种高效、可扩展性好、可移植性强的任务调度方法;采用本发明可以大幅降低主核负载,均衡系统芯片上的整体负载;并且该任务调度方法调用开销小,不仅可以高效地满足单任务的调度需求,还可以同时满足多任务的实时调度需求。
【附图说明】
[0016]下面结合附图和实施例对本发明进一步说明。
[0017]图1是本发明的异构多核体系下的多核引导启动流程图;
[0018]图2是本发明的异构多核体系下的任务交互框架图;
[0019]图3是本发明的异构多核体系下的交互流程图;
[0020]图4是本发明的异构多核体系下的任务调度机制的框架图;
[0021]图5是本发明的异构多核体系下的任务调度的设计图。
【具体实施方式】
[0022]现在结合附图和优选实施例对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
[0023]图1展示了异构多核引导启动的流程图:在系统芯片上电之后,各个处理器核会跳转至引导启动地址开始取指执行。
[0024]由于辅助核的引导启动过程中需要进行自拷贝,会产生访存操作,并且该操作需在主核完成内存初始化之后,才能进行。因此,主核与辅助核之间不能独立地完成各自的引导启动流程,需要建立一套交互机制保障以下操作顺利进行:(I)辅助核在主核完成内存初始化之后,才能进行访存操作。(2)主核需等待辅助核完成引导启动程序自拷贝之后,才能修改总线路由。
[0025]为了保证以上的同步操作,本发明通过核间中断GP1以满足异构多核在引导启动阶段的交互需求。主核在完成内存初始化操作之后,将GP1的寄存器置为高。辅助核则通过检查该寄存器是否置高,来判断内存初始化是否完成,进行引导启动程序的自拷贝操作。在主核将GP1寄存器置为高之后,它的引导启动程序也会完成自拷贝访存操作。在主核完成自拷贝后,需修改配置总线路由。为了避免总线路由修改后,辅助核无法访问引导启动程序,所以,主核需等待辅助核完成自拷贝之后,才能修改配置总线路由。这里也是通过核间中断GP1来保证该同步。辅助核在完成自拷贝后,将GP1的寄存器置为低。主核通过检查该寄存器是否置低,来判断是否可以配置修改总线路由。之后,异构多核可以独立的完成各自后续的初始化过程。
[0026]完成异构多核初始化启动之后,主核与辅助核之间通过共享内存的方式来完成数据的传递。共享内存区域被划分为引导启动程序区、监视器区、命令区、结果区、数据输入区、数据输出区和保留区组成:(I)引导启动程序区:用于存放辅助核自拷贝的引导启动程序;(2)监视器区:用于存放运行在辅助核上的监视程序,它负责与主核进行数据交互,以及管理辅助核上的任务执行;(3)命令区:用于存放主核向辅助核发送的任务命令,它采用环形队列的数据结构进行维护;(4)结果区:用于存放辅助核向主核返回的结果状态,它采用环形队列的数据结构进行维护;(5)数据输入区:用于存放于任务相关的数据;(6)数据输出区:用于存放于结果相关的数据;(7)保留区:作为保留,用于后续扩展。当主核向辅助核发送任务时,辅助核需要及时地做出相应并对命令和结果进行读写,因此命令区和结果区都是被配置为Non-Cacheable的状态。而其他区域为了读写的高效性,都被配置为Cacheable 的状态。
[0027]图2展示了异构多核的交互框架进行任务的交互,在该框架中,辅助核作为主核的辅助计算设备,接收由主核通过共享内存发送过来的任务。从主核的角度,整个交互框架符合“任务发送/结果接收”逻辑:主核向辅助核发送需要执行的任务,同时从辅助核接收任务执行产 生的结果。整个交互框架建立在之前介绍的内存模型之上。在主核和辅助核各自调用端的层次抽象如下:(I)主核端层次抽象:主核的调用层次是由上至下的。应用程序中需要辅助核来协助完成的部分,通过异构任务库产生相应的系统调用。系统调用陷入内核态的任务调度驱动,将相应任务迀移需求转换为一系列任务发送操作,由任务调度器以轮询的方式将任务提交至共享内存中的对应区域。而在主核应用程序需要接收辅助核执行完成的结果的部分,同样通过异构任务库产生相应的系统调用。系统调用陷入内核态的任务调度驱动,由任务调度器以轮询的方式,将相应的执行结果从共享内存的对应区域读取回来,最后,经过一系列封装返回给应用程序。(2)辅助核端层次抽象:辅助核的调用层次是由下至上的。监视程序通过轮询的方式读取并解析共享内存中的任务,获取任务对应的数据。然后通过查找任务列表,将任务交给函数库中的对应函数来执行,并且将执行结果和状态返回给监视程序。监视程序在对执行结果和状态进行检查和封装后,将结果和状态放至相应的共享内存区域。
[0028]图3展示了异构多核的交互流程:辅助核完成启动初始化之后,进入轮询等待状态,通过轮询指定内存标志位,判断是否需要加载监视器程序。此时主核不受辅助核影响,正常独立工作,运行操作系统。当主核需要辅助核协助完成异构计算任务时,由驱动将在主核上交叉编译完成的监视器二进制程序,拷贝至指定共享内存监视器区,并且修改相应标志位。辅助核在检测到标志位被修改后,便跳转至指定共享内存监视器区,取指令,运行监视器程序。监视器程序通过轮询检查命令区,来判断是否有任务到来。主核在完成标志位修改时候,检查返回状态是否正确,如果正确则证明监视器程序加载完成,可以通过驱动进行任务调度。辅助核上运行的监视器程序一旦检测到有任务到达命令区后,便读取该任务,然后交给函数库中的相应函数来执行该任务,最后将执行结果返回给驱动。主核上的驱动程序将接收到的执行结果返回给应用程序,从而完成异构多核任务调度流程。
[0029]图4展示了异构多核任务调度机制的框架图,任务调度器通过系统调用和共享内存交互两个层面分别与应用程序和辅助核进行交互,从而完成异构多核的任务调度。无论是在系统调用层面,还是在共享内存交互层面,任务调度器所需要处理的主要逻辑都是任务的“任务发送/结果接收”逻辑:(I)系统调用:任务调度器作为系统层的抽象,需要为应用程序提供系统调用接口,并且支持多个程序的同时调用。从应用程序的角度,它通过简单的抽象接口,可以方便高效的完成任务的发送和结果的接收操作。从任务调度器的角度,它需要完成抽象接口的内部实现。在任务发送时,抽象接口的内部实现包括系统调用的封装,任务的封装以及任务队列的维护。这部分包括了任务内容由用户态到内核态的内存拷贝,任务队列的内存初始化以及入队操作原子性的维护等操作。在接收结果时,抽象接口的内部实现包括系统调用的封装,内存结果的封装以及进程队列的维护。这部分包括了用户进程的睡眠和唤醒控制,结果与用户进程的匹配,结果内容由内核态到用户态的内存拷贝等操作。(2)共享内存交互:任务调度器作为向辅助核发送任务和从辅助核接收结果的中间抽象,需要完成大量的共享内存交互操作,从而完成与辅助核的交互。在发送任务时,任务调度器需要完成任务队列中任务的调度,并且将任务封装,拷贝至共享内存的命令区和数据输入区。这部分包括了出队操作原子性的维护,任务由内核态内存到I/O内存的拷贝等操作。在结果接收时,任务调度器需要完成结果从共享内存的结果区和数据输出区的提取,进程队列的维护。这部分包括了结果有I/O内存到内核态内存的拷贝,进程队列的唤醒和睡眠控制等操作。
[0030]图5是展示了异构多核体系下的任务调度的设计图,本发明采用的是优先级调度的调度策略,利用多任务队列的结构来表示多优先级,每一个队列对应于一个优先级,其具体设计如下:多任务队列有多个由任务调度器维护的环形队列构成,且每一个任务队列对应与一个任务优先级。任务可以属于O?i之一的i+Ι个优先级,每个优先级j对应于一个任务队列queue_j。而每个任务队列最多可以同时存放k个任务。如果任务队列已满,新进的任务则会入队失败:如果是非阻塞式访问的进程,会立即返回相应的状态码;如果是阻塞式访问的进程,则会等待队列非空后,按照FIFO顺序放人任务。
[0031]在上一节多任务队列的结构的基础上,详细设计四个关键操作:(I)任务队列的选择:任务完成封装进入任务调度器时,直接根据其优先级选择对应的任务队列即可。该操作的时间复杂度为0(1)。(2)任务的入队操作:查看环形队列状态,然后直接将任务放入环形队列写指针指向的内存区域,并且更新写指针。该操作的时间复杂度为0(1)。(3)下一任务的选择:从最高优先级的队列依次遍历至最低优先级的队列,直到找到的非空的队列,该队列即为下一任务的选择队列。该操作的时间复杂度为0(1)。(4)下一任务的取出:从上一操作选好的环形队列中,取出当前读指针指向的任务,并且更新读指针。该操作的时间复杂度为0(1)。
[0032]以上说明书中描述的只是本发明的【具体实施方式】,各种举例说明不对本发明的实质内容构成限制,所属技术领域的普通技术人员在阅读了说明书后可以对以前所述的【具体实施方式】做修改或变形,而不背离本发明的实质和范围。
【主权项】
1.一种面向异构多核体系的任务调度方法,其特征在于:多核间通过共享内存的方式实现数据的传递,通过中断和轮询的方式实现信息的传递;共享内存划分为命令区、结果区、数据输入区和数据输出区,并且根据各个区域的功能设计高效的数据结构,建立异构多核间交互的内存模型;任务调度采用多个环形队列实现优先级任务队列,实现高效、公平的任务调度机制; 具体步骤包括: 1)在引导启动阶段,核间中断作为多核间的交互方式,使得多核各自内存初始化、引导程序自拷贝和修改总线路由的初始化操作同步; 2)在任务调度阶段,主核与辅助核之间通过共享内存的方式实现数据传递;主核与辅助核在此基础上,通过轮询的方式实现任务信息的传递。2.根据权利要求1所述的一种面向异构多核体系的任务调度方法,其特征在于:所述的任务调度的驱动一方面为应用程序提供抽象的调用接口,接收并管理应用程序提交的异构任务计算请求;另一方面,任务调度驱动以轮询的方式与共享内存进行交互,完成主核与辅助核之间信息和数据的传递,以高效、公平的任务调度机制将任务调度至辅助核。
【专利摘要】本发明涉及一种面向异构多核体系的任务调度方法,多核间通过共享内存的方式实现数据的传递,通过中断和轮询的方式实现信息的传递;共享内存划分为命令区、结果区、数据输入区和数据输出区,并且根据各个区域的功能设计高效的数据结构,建立异构多核间交互的内存模型;任务调度采用多个环形队列实现优先级任务队列,实现高效、公平的任务调度机制。本发明为主从式异构多核体系提供了一种高效、可扩展性好、可移植性强的任务调度方法;采用本发明可以大幅降低主核负载,均衡系统芯片上的整体负载;并且该任务调度方法调用开销小,不仅可以高效地满足单任务的调度需求,还可以同时满足多任务的实时调度需求。
【IPC分类】G06F9/50, G06F9/48
【公开号】CN104899089
【申请号】CN201510270127
【发明人】程旭, 刘锋, 张晟
【申请人】常州北大众志网络计算机有限公司, 北京北大众志微系统科技有限责任公司
【公开日】2015年9月9日
【申请日】2015年5月25日

最新回复(0)