CN104793996A - 一种并行计算设备的任务调度方法及任务调度装置 - Google Patents
一种并行计算设备的任务调度方法及任务调度装置 Download PDFInfo
- Publication number
- CN104793996A CN104793996A CN201510213351.5A CN201510213351A CN104793996A CN 104793996 A CN104793996 A CN 104793996A CN 201510213351 A CN201510213351 A CN 201510213351A CN 104793996 A CN104793996 A CN 104793996A
- Authority
- CN
- China
- Prior art keywords
- task
- queue
- computing unit
- head
- result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种并行计算设备的任务调度方法及任务调度装置。其中,该方法包括:对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和该堆栈指针传给该计算单元,启动该计算单元对队首的任务进行处理,并标识该计算单元的状态为忙状态;当计算单元对队首的任务处理完毕后,释放堆栈指针并设置计算单元的状态为空闲状态。通过本发明,在单个处理器中通过多个计算单元并行处理任务,提高了处理器处理数据的速度。
Description
技术领域
本发明涉及终端技术领域,具体而言,涉及一种并行计算设备的任务调度方法及任务调度装置。
背景技术
目前,人们经常通过终端来处理数据,且人们对处理数据的速度要求越来越高,而终端实质上是通过处理器来处理数据。因此如何不断提高处理器的处理速度成为一个急需解决的问题。
当前,相关技术中提供了一种提高处理器的处理速度的方法,包括:将多个处理器组成多处理机系统,在通过该多处理机系统处理数据时,通过操作系统中的线程调度机制为该多处理机系统中的每个处理器分配处理任务。处理器对于分配的处理任务按照时间片分享方式进行处理,使各个处理任务在不同时间片内占用该处理器的资源。但是由于多个处理器同时进行处理,实现了多个处理器并行处理数据,从而提高了数据处理速度。
在实现本发明的过程中,发明人发现相关技术中至少存在以下问题:
处理器通过时间片分享方式来处理任务,在单个处理器中只有当一个任务处理完释放处理器的资源之后,才能处理下一个任务,如此串行处理数据,导致处理器处理数据的速度不高。
发明内容
有鉴于此,本发明实施例的目的在于提供一种并行计算设备的任务调度方法及任务调度装置,实现在处理器中通过多个计算单元并行处理任务,提高了处理器处理数据的速度。
第一方面,本发明实施例提供了一种并行计算设备的任务调度方法,所述方法包括:
对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;
当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和所述堆栈指针传给所述计算单元,启动所述计算单元对所述队首的任务进行处理,并标识所述计算单元的状态为忙状态;其中,所述任务队列中的每个任务由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成;
当所述计算单元对所述队首的任务处理完毕后,释放所述堆栈指针,设置所述计算单元的状态为空闲状态。
结合第一方面,本发明实施例提供了上述第一方面的第一种可能的实现方式,其中,所述为位于任务队列的队首的任务分配堆栈指针之前,还包括:
根据待处理数据、处理程序和存储空间地址信息,生成多个任务;
将生成的所述多个任务,通过硬件接口插入任务队列中。
结合第一方面,本发明实施例提供了上述第一方面的第二种可能的实现方式,其中,所述方法还包括:
当所述计算单元对所述队首的任务处理完毕后,若处理的结果不是最终结果,则根据所述处理的结果,生成新的任务,并将所述新的任务插入所述任务队列的队尾。
结合第一方面,本发明实施例提供了上述第一方面的第三种可能的实现方式,其中,所述方法还包括:
在所述计算单元对所述队首的任务进行处理的过程中,如果未获取到处理所述队首的任务所需的其它任务的处理结果,则挂起所述队首的任务,并将所述队首的任务插入到挂起任务队列的队尾。
结合第一方面的第三种可能的实现方式,本发明实施例提供了上述第一方面的第四种可能的实现方式,其中,所述将所述队首的任务插入到挂起任务队列的队尾之后,还包括:
当获取到所述队首的任务所需的其它任务的处理结果时,从所述挂起任务队列中取出所述队首的任务,将所述其它任务的处理结果添加到所述队首的任务中,将添加所述处理结果的所述队首的任务插入所述任务队列的队尾。
第二方面,本发明实施例提供了一种任务调度装置,所述装置包括:
监测模块,用于对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;
处理模块,用于当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和所述堆栈指针传给所述计算单元,启动所述计算单元对所述队首的任务进行处理,并标识所述计算单元的状态为忙状态;其中,所述任务队列中的每个任务由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成;
设置模块,用于当所述计算单元对所述队首的任务处理完毕后,释放所述堆栈指针,设置所述计算单元的状态为空闲状态。
结合第二方面,本发明实施例提供了上述第二方面的第一种可能的实现方式,其中,所述装置还包括:
第一生成模块,用于根据待处理数据、处理程序和存储空间地址信息,生成多个任务;将生成的所述多个任务,通过硬件接口插入任务队列中。
结合第二方面,本发明实施例提供了上述第二方面的第二种可能的实现方式,其中,所述装置还包括:
第二生成模块,用于当所述计算单元对所述队首的任务处理完毕后,若处理的结果不是最终结果,则根据所述处理的结果,生成新的任务,并将所述新的任务插入所述任务队列的队尾。
结合第二方面,本发明实施例提供了上述第二方面的第三种可能的实现方式,其中,所述装置还包括:
挂起模块,用于在所述计算单元对所述队首的任务进行处理的过程中,如果未获取到处理所述队首的任务所需的其它任务的处理结果,则挂起所述队首的,并将所述队首的任务插入到挂起任务队列的队尾。
结合第二方面的第三种可能的实现方式,本发明实施例提供了上述第二方面的第四种可能的实现方式,其中,所述装置还包括:
唤醒模块,当获取到所述队首的任务所需的其它任务的处理结果时,从所述挂起任务队列中取出所述队首的任务,将所述其它任务的处理结果添加到所述队首的任务中,将添加所述处理结果的所述队首的任务插入所述任务队列的队尾。
在本发明实施例中,由于处理器中包括多个计算单元,当监测到一计算单元的状态为空闲时,启动该计算单元对位于任务队列的队首的任务进行处理,如此可以通过多个计算单元并行处理任务队列中的任务,大大提高了处理器处理数据的速度。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例1所提供的一种并行计算设备的任务调度方法的流程图;
图2A示出了本发明实施例2所提供的第一种并行计算设备的任务调度方法的流程图;
图2B示出了本发明实施例2所提供的第二种并行计算设备的任务调度方法的流程图;
图2C示出了本发明实施例2所提供的第三种并行计算设备的任务调度方法的流程图;
图3A示出了本发明实施例3所提供的一种任务调度装置的结构示意图;
图3B示出了本发明实施例3所提供的另一种任务调度装置的结构示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
考虑到相关技术中处理器通过时间片分享方式来处理任务,如此串行处理数据,导致处理器处理数据的速度不高。基于此,本发明实施例提供了一种并行计算设备的任务调度方法及任务调度装置。下面通过实施例进行描述。
实施例1
参见图1,本发明实施例提供了一种并行计算设备的任务调度方法,该方法可以由任务调度装置来执行。该方法具体包括以下步骤:
步骤101:对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;
步骤102:当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和堆栈指针传给该计算单元,启动该计算单元对队首的任务进行处理,并标识计算单元的状态为忙状态;其中,该任务队列中的每个任务由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成;
步骤103:当该计算单元对队首的任务处理完毕后,释放该堆栈指针,设置计算单元的状态为空闲状态。
进一步地,为位于任务队列的队首的任务分配堆栈指针之前,还包括:
根据待处理数据、处理程序和存储空间地址信息,生成多个任务;
将生成的多个任务,通过硬件接口插入任务队列中。
进一步地,该方法还包括:
当计算单元对队首的任务处理完毕后,若处理的结果不是最终结果,则根据处理的结果,生成新的任务,并将新的任务插入任务队列的队尾。
进一步地,该方法还包括:
在计算单元对队首的任务进行处理的过程中,如果未获取到处理队首的任务所需的其它任务的处理结果,则挂起队首的任务,并将该队首的任务插入到挂起任务队列的队尾。
进一步地,将该队首的任务插入到挂起任务队列的队尾之后,还包括:
当获取到该队首的任务所需的其它任务的处理结果时,从挂起任务队列中取出该队首的任务,将该队首的任务所需的其它任务的处理结果添加到队首的任务中,将添加处理结果的队首的任务插入任务队列的队尾。
在本发明实施例中,由于在处理器中包括多个计算单元,当监测到一计算单元的状态为空闲时,启动该计算单元对位于任务队列的队首的任务进行处理,如此可以通过多个计算单元对任务队列中的任务进行并行处理,大大提高了处理器处理数据的速度。
实施例2
参见图2A,本发明实施例提供了一种并行计算设备的任务调度方法,该方法可以由任务调度装置来执行。该方法具体包括以下步骤:
步骤201:根据待处理数据、处理程序和存储空间地址信息,生成多个任务,将生成的多个任务,通过硬件接口插入任务队列中;
其中,待处理数据可以为用户或其它设备提交的需要处理的数据。处理程序是技术人员开发的用于对待处理数据进行处理的程序,处理程序中一般包括多个子程序,且技术人员在开发处理程序时,设定了处理程序中各个子程序的执行顺序。存储空间地址信息为根据待处理数据的大小为待处理数据分配的存储空间的地址信息。
其中,多个任务中每个任务都由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成。任务队列为硬件寄存器,任务队列通过硬件接口与软件程序进行数据传输。
本步骤具体为,获取用户或其它设备提交的数据,将获取的数据确定为待处理数据。根据待处理数据的大小为待处理数据分配存储空间。通过预设方式将待处理数据分割为多个容量较小的数据,根据分割得到的数据的容量对待处理数据对应的存储空间进行分割,得到多个容量较小的存储空间。从分割得到的多个数据中随机选择一个数据,从多个存储空间中选择一个存储空间,从处理程序中获取执行顺序为最先执行的子程序,将选择的数据、存储空间的地址信息以及该子程序的入口地址组成一个任务。同样地,按照上述方式生成多个任务。通过硬件接口将生成的多个任务插入任务队列中。
其中,由于处理程序中每个子程序都有预定的执行顺序,因此先根据执行顺序为最先执行的子程序来生成任务,这些任务中的任一任务执行完并得到执行结果之后,再根据执行结果以及执行顺序在该子程序之后的子程序来生成新的任务。
其中,分割待处理数据的预设方式可以为预先设置分割后每个数据的容量,将待处理数据分割为多个容量为该预设容量的数据。例如,假设预设容量为1k,待处理数据的容量为5k,则将待处理数据分割为5个1k的数据。或者,预设方式还可以为预先设置分割得到的数据的数量,将待处理数据分割为预设数量个数据,如此分割得到的每个数据的容量可以相同,也可以不同。例如,假设预设数量为4个,待处理数据的容量为5k,则可以将待处理数据分割为1个1k的数据和2个2k的数据。
进一步地,为了便于理解本步骤的操作,下面举例进行说明。例如,对于视频数据压缩编码处理,假设技术人员开发的压缩编码程序包括预处理子程序和压缩子程序,且执行顺序为先执行预处理子程序再执行压缩子程序,假设待处理数据为容量为5帧的视频数据,为该视频数据分配25M容量的存储空间。将这5帧视频数据分割为5个1帧的数据,以及将25M的存储空间分割为5个5M的存储空间,从5个1帧的数据中随机选择一个数据,从5个存储空间中随机选择一个存储空间,将选择的数据、选择的存储空间以及执行顺序为最先执行的预处理子程序的程序入口地址组成一个任务,同样地,按照上述方式一共生成5个任务,将生成的五个任务通过硬件接口插入任务队列中。假设这5个任务中某一任务执行结束之后,再根据执行结果和压缩子程序的程序入口生成新的任务,并将新的任务插入到任务队列中。
其中,在本步骤中将待处理数据分割为容量更小的数据,并根据分割得到的数据生成了多个任务,在后续操作中可以并行处理多个任务,从而缩短了处理该待处理数据的时间,提高了处理数据的速度和效率。
其中,为了并行处理本步骤生成的多个任务,可以通过如下步骤202-209的操作通过多个计算单元来并行处理多个任务。
步骤202:对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测,判断是否出现状态为空闲状态的计算单元,若是,则执行步骤203,若否,则继续执行本步骤的操作;
其中,计算单元为处理器中的物理线程。计算单元的状态可以为忙状态或空闲状态,可以通过状态标志位来标识计算单元的状态,如状态标志位为1时标识计算单元处于忙状态,状态标志位为0时标识计算单元处于空闲状态等。
本步骤具体为,对处理器包括的每个计算单元的状态标志位进行实时监测,根据每个计算单元的状态标志位分别确定每个计算单元的状态。
其中,当监测到一计算单元的状态为忙状态时,不对该计算单元进行任何操作。当监测到一计算单元的状态为空闲状态时,通过如下步骤203的操作为该计算单元调度任务,以使该计算单元进入忙状态。
步骤203:为位于任务队列的队首的任务分配堆栈指针,并把全局指针和该堆栈指针传给该计算单元,启动该计算单元对该队首的任务进行处理,并标识该计算单元的状态为忙状态;
其中,全局指针为全局变量的存储地址。另外,任务处理过程中可能会产生临时变量或者需要调用子函数等,此时需要存储临时变量以及保存调用子函数时任务处理的进度等现场信息。堆栈指针即为用于存储临时变量以及现场信息的存储空间的地址。其中,传给每个计算单元的全局指针均相同,而堆栈指针不相同。为每个任务分配不同的堆栈指针,实现处理各个任务时,相互之间不会出现干扰。
本步骤具体为,当监测到一计算单元的状态为空闲状态时,将位于任务队列队首的任务出队,为该队首的任务分配堆栈指针,并把该队首的任务、全局指针和该堆栈指针传给该计算单元。启动该计算单元根据全局指针获取全局变量,根据该队首的任务包括的程序的入口地址调用该任务采用的程序,对该队首的任务中包括的数据进行处理,同时修改该计算单元的状态标志位,将该计算单元的状态修改为忙状态。
另外,若对该队首的任务进行处理的过程中生成了临时变量或调用了子函数,则根据堆栈指针将临时变量和调用子函数时的现场信息存储在该堆栈指针对应的存储空间中。
其中,在本发明实施例中,由于任务对应的数据的处理需要存储空间,任务采用的程序的运行也需要存储空间,因此该任务对应的存储空间包括存放该任务采用的程序的空间、存放该任务对应的数据的空间以及运行程序所需的堆栈空间和存放全局变量的空间等。
其中,在本发明实施例中,只要监测到一计算单元处于空闲状态,就为该计算单元分配任务,使该计算单元处理分配的任务,如此可以通过多个计算单元同时处理任务,提高处理器处理数据的速度。
步骤204:在该计算单元对队首的任务进行处理的过程中,判断是否获取到处理该队首的任务所需的其它任务的处理结果,若是,则执行步骤207,若否,则执行步骤205;
其中,在本发明实施例中,任务队列中的多个任务之间可能存在相互依赖关系,即一个任务在处理过程中可能需要以另一个任务的处理结果作为中间变量。
在处理该队首的任务的过程中,该队首的任务可能需要获取其它任务的处理结果作为处理该队首的任务所需的中间数据。由于通过多个计算单元来并行处理任务队列中的任务,所以输出该中间数据的其它任务可能在该队首的任务之后被处理,因此在本步骤中需要判断是否获取到了该队首的任务所需的其它任务的处理结果,如果获取到了,则执行步骤207。如果没有获取到,则执行步骤205的操作来等待其它任务的处理结果。
步骤205:挂起该队首的任务,并将该队首的任务插入到挂起任务队列的队尾,并释放该计算单元;
其中,挂起任务队列也是一个硬件寄存器,通过硬件接口与软件程序进行数据传输。挂起任务队列用于存储被挂起的任务。
本步骤具体为,当正在运行的该队首的任务运行到需要其它任务的处理结果而未获取到所需的其它任务的处理结果时,该正在运行的队首的任务把程序所执行到的位置作为新的程序的入口地址,将该队首的任务所采用的程序的入口地址修改为该新的程序的入口地址,以及在该队首的任务中添加生成其所需的中间数据的其它任务的标识。然后正在运行的该队首的任务通过硬件接口把自己挂起并插入到挂起任务队列的队尾进行等待,然后释放该队首的任务占用的计算单元,并修改该计算单元的状态标志位,将该计算单元的状态修改为空闲状态。
进一步地,当正在运行的该队首的任务运行到需要其它任务的处理结果而未获取到所需的其它任务的处理结果时,还可以通过处理该队首的任务的计算单元发送一个中断信号给调度程序,调度程序把该队首的任务的程序所执行到的位置作为新的程序的入口地址,将该队首的任务所采用的程序的入口地址修改为该新的程序的入口地址,以及在该队首的任务中添加生成其所需的中间数据的其它任务的标识。然后调度程序通过硬件接口把该队首的任务挂起并插入到挂起任务队列的队尾进行等待,然后释放该队首的任务占用的计算单元,并修改该计算单元的状态标志位,将该计算单元的状态修改为空闲状态。
进一步地,当将该计算单元的状态修改为空闲状态之后,可以再将当前位于任务队列的队首的任务分配给该计算单元,使该计算单元继续处理别的任务。
步骤206:当获取到队首的任务所需的其它任务的处理结果时,从挂起任务队列中取出队首的任务,将该其它任务的处理结果添加到队首的任务中,将添加处理结果的队首的任务插入任务队列的队尾,然后执行步骤202的操作;
其中,当队首的任务所依赖的其它任务处理完毕并输出处理结果时,该其它任务对应的计算单元根据该其它任务的标识,通过硬件接口从挂起任务队列中获取包含该标识的任务,获取的任务即为需要该其它任务的处理结果的任务,其中包括该队首的任务。将该其它任务的处理结果添加到获取的任务中,将添加处理结果的任务插入到任务队列的队尾,以等待空闲的计算单元来处理。
步骤207:当该计算单元对队首的任务处理完毕后,判断处理的结果是否为最终结果,如果是,则执行步骤209,如果否,则执行步骤208;
其中,由于技术人员开发的处理程序中包括多个子程序,且多个子程序需要按照预设的执行顺序执行。在本发明实施例中是将待处理数据分割为多个较小的数据,需要按照预设的执行顺序依次根据处理程序中的各个子程序来处理分割得到的每个数据。对于任意任务中包括的数据来说,当处理程序包括的多个子程序没有依次执行完时,对该任务进行处理得到的结果都不是最终结果。因此,在本步骤中可以通过队首的任务中采用的程序的执行顺序,来判断处理该队首的任务的结果是否为最终结果。如果采用的程序为最后执行的子程序,则确定出处理的结果为最终结果,执行步骤209的操作。如果采用的程序不是最后执行的子程序,则确定出处理的结果不是最终结果,则执行步骤208的操作。
步骤208:根据处理的结果,生成新的任务,并将新的任务插入任务队列的队尾,然后执行步骤202的操作;
具体地,从处理程序中,选择执行顺序紧接在该队首的任务所采用的程序之后的子程序,将处理的结果的数据、选择的子程序的入口地址以及该队首的任务所占用的存储空间的地址信息组成一个新的任务,将该新的任务插入任务队列的队尾。然后释放该队首的任务所占用的计算单元,修改该计算单元的状态标志位,将该计算单元的状态修改为空闲状态。
进一步地,在本步骤中还可以先释放该队首的任务所占用的计算单元,修改该计算单元的状态标志位,将该计算单元的状态修改为空闲状态,可以通过该计算单元再去处理其它任务。然后通过调度程序按照上述方式来生成新的任务,并将新的任务插入任务队列的队尾。
步骤209:释放该队首的任务所占用的堆栈指针及计算单元,设置计算单元的状态为空闲状态,然后返回执行步骤202。
其中,当处理的结果为最终结果时,该队首的任务处理完毕,释放占用的堆栈指针及计算单元,修改该计算单元的状态标志位,设置该计算单元的状态为空闲状态。然后返回执行步骤202的操作,直到将所有的任务都处理完毕之后,结束操作。
其中,参见图2B所示的任务调度流程图,调度程序通过硬件接口,为任务配置全局指针、堆栈指针和程序入口指针,将任务压入任务队列中,一旦有空闲的计算单元,队列中的第一个任务会加载到该空闲的计算单元中执行。任务加载过程中,会将任务运行需要的全局指针和堆栈指针传给该计算单元,计算单元根据这两个指针初始化通用寄存器,然后从该任务采用的程序的入口地址处开始运行。在运行该采用的程序过程中,如果还需要等待其他任务输出的数据,则修改该任务包括的程序入口地址,将该任务压入挂起任务队列中,然后释放该计算单元。在该采用的程序运行结束时,如果还需要后续程序继续处理数据,则在该采用的程序退出之前调用调度程序,建立新任务,并将新的任务压入任务队列中,然后释放该计算单元。如果该采用的程序是数据处理的最后一道程序,则释放该计算单元以及占用的存储空间。其中,计算单元管理模块记录每个计算单元的状态,一旦计算单元被加载任务,设置计算单元的状态为忙状态,计算单元被释放时,设置计算单元的状态为空闲状态。
其中,参见图2C所示的任务调度流程图,当有待处理数据时,生成任务,将任务压入任务队列中,判断是否有空闲的计算单元,若有,将任务队列中队首的任务分配给该空闲的计算单元,该计算单元从该任务包含的程序入口开始执行程序,进行任务执行,判断该任务是否需要等待中间数据,如果是,则修改该任务的程序入口,将该任务压入挂起任务队列中,然后退出该计算单元,设置该计算单元的状态为空闲状态。如果不需要等待中间数据,则判断是否有挂起的任务需要被唤醒,如果有,则从挂起任务队列中获取需要唤醒的任务,将需要唤醒的任务压入任务队列中,如果没有需要唤醒的任务,则判断该任务是否处理完毕,如果没有,则继续处理该任务,如果处理完毕,则判断待处理数据是否全部被处理完毕,如果没有,则更改程序入口,生成新的任务。如果全部被处理完了,则退出计算单元,设置计算单元的状态为空闲状态。
其中,在本发明实施例中,单个处理器中可以通过多个计算单元来并行处理任务,提高了单个处理器处理数据的速度。在并行计算设备或调度装置中可以设置多个这样的处理器,通过多个这样的处理器来并行处理数据,大大提高了并行计算设备或调度装置处理数据的速度。
在本发明实施例中,由于处理器包括多个计算单元,当监测到一计算单元的状态为空闲时,启动该计算单元对位于任务队列的队首的任务进行处理,为之分配堆栈指针,并把全局指针和堆栈指针传给该计算单元,如此可以通过调度多个计算单元并行处理任务队列中的任务,大大提高了处理器处理数据的速度。
实施例3
参见图3A,本发明实施例提供了一种任务调度装置,该装置用于执行上述并行计算设备的任务调度方法。该装置具体包括:
监测模块301,用于对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;
处理模块302,用于当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和堆栈指针传给所述计算单元,启动计算单元对队首的任务进行处理,并标识计算单元的状态为忙状态;其中,该任务队列中的每个任务由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成;
设置模块303,用于当计算单元对队首的任务处理完毕后,释放堆栈指针,设置计算单元的状态为空闲状态。
进一步地,参见图3B,该装置还包括:
第一生成模块304,用于根据待处理数据、处理程序和存储空间地址信息,生成多个任务;将生成的多个任务,通过硬件接口插入任务队列中。
进一步地,如图3B所示,该装置还包括:
第二生成模块305,用于当计算单元对队首的任务处理完毕后,若处理的结果不是最终结果,则根据处理的结果,生成新的任务,并将新的任务插入任务队列的队尾。
进一步地,如图3B所示,该装置还包括:
挂起模块306,用于在计算单元对队首的任务进行处理的过程中,如果未获取到处理队首的任务所需的其它任务的处理结果,则挂起队首的任务,并将队首的任务插入到挂起任务队列的队尾。
进一步地,如图3B所示,该装置还包括:
唤醒模块307,用于当获取到队首的任务所需的其它任务的处理结果时,从挂起任务队列中取出队首的任务,将其它任务的处理结果添加到队首的任务中,将添加处理结果的队首的任务插入任务队列的队尾。
在本发明实施例中,由于处理器中包括多个计算单元,当监测到一计算单元的状态为空闲时,启动该计算单元对位于任务队列的队首的任务进行处理,如此可以通过多个计算单元并行处理任务队列中的任务,大大提高了处理器处理数据的速度。
本发明实施例所提供的任务调度装置可以为并行计算设备上的特定硬件或者安装于并行计算设备上的软件或固件,或三者皆有。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程。
在本申请所提供的几个实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种并行计算设备的任务调度方法,其特征在于,所述方法包括:
对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;
当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和所述堆栈指针传给所述计算单元,启动所述计算单元对所述队首的任务进行处理,并标识所述计算单元的状态为忙状态;其中,所述任务队列中的每个任务由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成;
当所述计算单元对所述队首的任务处理完毕后,释放所述堆栈指针,设置所述计算单元的状态为空闲状态。
2.根据权利要求1所述的方法,其特征在于,所述为位于任务队列的队首的任务分配堆栈指针之前,还包括:
根据待处理数据、处理程序和存储空间地址信息,生成多个任务;
将生成的所述多个任务,通过硬件接口插入任务队列中。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述计算单元对所述队首的任务处理完毕后,若处理的结果不是最终结果,则根据所述处理的结果,生成新的任务,并将所述新的任务插入所述任务队列的队尾。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述计算单元对所述队首的任务进行处理的过程中,如果未获取到处理所述队首的任务所需的其它任务的处理结果,则挂起所述队首的任务,并将所述队首的任务插入到挂起任务队列的队尾。
5.根据权利要求4所述的方法,其特征在于,所述将所述队首的任务插入到挂起任务队列的队尾之后,还包括:
当获取到所述队首的任务所需的其它任务的处理结果时,从所述挂起任务队列中取出所述队首的任务,将所述其它任务的处理结果添加到所述队首的任务中,将添加所述处理结果的所述队首的任务插入所述任务队列的队尾。
6.一种任务调度装置,其特征在于,所述装置包括:
监测模块,用于对处理器包括的多个计算单元中的每个计算单元的状态进行实时监测;
处理模块,用于当监测到一计算单元的状态为空闲状态时,为位于任务队列的队首的任务分配堆栈指针,并把全局指针和所述堆栈指针传给所述计算单元,启动所述计算单元对所述队首的任务进行处理,并标识所述计算单元的状态为忙状态;其中,所述任务队列中的每个任务由任务对应的数据、采用的程序的入口地址及任务对应的存储空间的地址组成;
设置模块,用于当所述计算单元对所述队首的任务处理完毕后,释放所述堆栈指针,设置所述计算单元的状态为空闲状态。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第一生成模块,用于根据待处理数据、处理程序和存储空间地址信息,生成多个任务;将生成的所述多个任务,通过硬件接口插入任务队列中。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第二生成模块,用于当所述计算单元对所述队首的任务处理完毕后,若处理的结果不是最终结果,则根据所述处理的结果,生成新的任务,并将所述新的任务插入所述任务队列的队尾。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
挂起模块,用于在所述计算单元对所述队首的任务进行处理的过程中,如果未获取到处理所述队首的任务所需的其它任务的处理结果,则挂起所述队首的任务,并将所述队首的任务插入到挂起任务队列的队尾。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
唤醒模块,用于当获取到所述队首的任务所需的其它任务的处理结果时,从所述挂起任务队列中取出所述队首的任务,将所述其它任务的处理结果添加到所述队首的任务中,将添加所述处理结果的所述队首的任务插入所述任务队列的队尾。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510213351.5A CN104793996A (zh) | 2015-04-29 | 2015-04-29 | 一种并行计算设备的任务调度方法及任务调度装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510213351.5A CN104793996A (zh) | 2015-04-29 | 2015-04-29 | 一种并行计算设备的任务调度方法及任务调度装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104793996A true CN104793996A (zh) | 2015-07-22 |
Family
ID=53558809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510213351.5A Pending CN104793996A (zh) | 2015-04-29 | 2015-04-29 | 一种并行计算设备的任务调度方法及任务调度装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104793996A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648839A (zh) * | 2015-10-30 | 2017-05-10 | 北京国双科技有限公司 | 数据处理的方法和装置 |
CN107491346A (zh) * | 2016-06-12 | 2017-12-19 | 阿里巴巴集团控股有限公司 | 一种应用的任务处理方法、装置及系统 |
CN108509257A (zh) * | 2017-02-28 | 2018-09-07 | 苏宁云商集团股份有限公司 | 一种基于多线程的消息处理方法及装置 |
WO2019136967A1 (zh) * | 2018-01-12 | 2019-07-18 | 江苏华存电子科技有限公司 | 一种应用在存储系统中的任务调度优化方法 |
CN110825342A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 存储调度器件和用于处理信息的系统、方法及装置 |
CN111104168A (zh) * | 2018-10-25 | 2020-05-05 | 杭州嘉楠耘智信息科技有限公司 | 一种计算结果提交方法及装置 |
CN112019322A (zh) * | 2019-05-30 | 2020-12-01 | 华为技术有限公司 | 密码流生成方法及其装置 |
CN112596884A (zh) * | 2020-12-26 | 2021-04-02 | 中国农业银行股份有限公司 | 一种任务调整方法及装置 |
WO2022078323A1 (en) * | 2020-10-13 | 2022-04-21 | International Business Machines Corporation | Parallel task initialization on dynamic compute resources |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901159A (zh) * | 2010-08-03 | 2010-12-01 | 中兴通讯股份有限公司 | 一种多核CPU加载Linux操作系统的方法及系统 |
CN102541640A (zh) * | 2011-12-28 | 2012-07-04 | 厦门市美亚柏科信息股份有限公司 | 一种集群gpu资源调度系统和方法 |
CN103064657A (zh) * | 2012-12-26 | 2013-04-24 | 深圳中微电科技有限公司 | 单个处理器上实现多应用并行处理的方法及装置 |
US20130103872A1 (en) * | 2011-10-20 | 2013-04-25 | Via Technologies, Inc. | Computer apparatus and method for distributing interrupt tasks thereof |
CN103488536A (zh) * | 2013-09-29 | 2014-01-01 | 华为技术有限公司 | 任务调度方法、装置及操作系统 |
WO2014108000A1 (zh) * | 2013-01-09 | 2014-07-17 | 苏州亿倍信息技术有限公司 | 一种任务分配处理的方法及系统 |
-
2015
- 2015-04-29 CN CN201510213351.5A patent/CN104793996A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901159A (zh) * | 2010-08-03 | 2010-12-01 | 中兴通讯股份有限公司 | 一种多核CPU加载Linux操作系统的方法及系统 |
US20130103872A1 (en) * | 2011-10-20 | 2013-04-25 | Via Technologies, Inc. | Computer apparatus and method for distributing interrupt tasks thereof |
CN102541640A (zh) * | 2011-12-28 | 2012-07-04 | 厦门市美亚柏科信息股份有限公司 | 一种集群gpu资源调度系统和方法 |
CN103064657A (zh) * | 2012-12-26 | 2013-04-24 | 深圳中微电科技有限公司 | 单个处理器上实现多应用并行处理的方法及装置 |
WO2014108000A1 (zh) * | 2013-01-09 | 2014-07-17 | 苏州亿倍信息技术有限公司 | 一种任务分配处理的方法及系统 |
CN103488536A (zh) * | 2013-09-29 | 2014-01-01 | 华为技术有限公司 | 任务调度方法、装置及操作系统 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648839B (zh) * | 2015-10-30 | 2020-06-05 | 北京国双科技有限公司 | 数据处理的方法和装置 |
CN106648839A (zh) * | 2015-10-30 | 2017-05-10 | 北京国双科技有限公司 | 数据处理的方法和装置 |
CN107491346A (zh) * | 2016-06-12 | 2017-12-19 | 阿里巴巴集团控股有限公司 | 一种应用的任务处理方法、装置及系统 |
CN108509257A (zh) * | 2017-02-28 | 2018-09-07 | 苏宁云商集团股份有限公司 | 一种基于多线程的消息处理方法及装置 |
WO2019136967A1 (zh) * | 2018-01-12 | 2019-07-18 | 江苏华存电子科技有限公司 | 一种应用在存储系统中的任务调度优化方法 |
CN110825342A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 存储调度器件和用于处理信息的系统、方法及装置 |
CN111104168A (zh) * | 2018-10-25 | 2020-05-05 | 杭州嘉楠耘智信息科技有限公司 | 一种计算结果提交方法及装置 |
CN112019322A (zh) * | 2019-05-30 | 2020-12-01 | 华为技术有限公司 | 密码流生成方法及其装置 |
WO2022078323A1 (en) * | 2020-10-13 | 2022-04-21 | International Business Machines Corporation | Parallel task initialization on dynamic compute resources |
US11455191B2 (en) | 2020-10-13 | 2022-09-27 | International Business Machines Corporation | Parallel task initialization on dynamic compute resources |
GB2615039A (en) * | 2020-10-13 | 2023-07-26 | Ibm | Parallel task initialization on dynamic compute resources |
CN112596884A (zh) * | 2020-12-26 | 2021-04-02 | 中国农业银行股份有限公司 | 一种任务调整方法及装置 |
CN112596884B (zh) * | 2020-12-26 | 2024-06-11 | 中国农业银行股份有限公司 | 一种任务调整方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104793996A (zh) | 一种并行计算设备的任务调度方法及任务调度装置 | |
CN111176852B (zh) | 资源分配方法、装置、芯片及计算机可读存储介质 | |
CN105718479B (zh) | 跨idc大数据处理架构下执行策略生成方法、装置 | |
US9015724B2 (en) | Job dispatching with scheduler record updates containing characteristics combinations of job characteristics | |
CN105808328B (zh) | 任务调度的方法、装置和系统 | |
US9501318B2 (en) | Scheduling and execution of tasks based on resource availability | |
CN107526645B (zh) | 一种通信优化方法及系统 | |
CN104252391B (zh) | 用于在分布式计算系统中管理多个作业的方法和装置 | |
US10108458B2 (en) | System and method for scheduling jobs in distributed datacenters | |
CN111459665A (zh) | 一种分布式边缘计算系统及分布式边缘计算方法 | |
CN104268018B (zh) | 一种Hadoop集群中的作业调度方法和作业调度器 | |
CN112416585A (zh) | 面向深度学习的gpu资源管理与智能化调度方法 | |
CN108021487B (zh) | 一种gpu图形处理性能监测与分析方法 | |
CN107656813A (zh) | 一种负载调度的方法、装置及终端 | |
CN110389843A (zh) | 一种业务调度方法、装置、设备及可读存储介质 | |
CN102135901A (zh) | 带有动态数量工作者的并行查询引擎 | |
CN114327894A (zh) | 资源分配方法、装置、电子设备及存储介质 | |
CN105808346A (zh) | 一种任务调度方法与装置 | |
CN105718318B (zh) | 一种基于辅助工程设计软件的集合式调度优化方法 | |
CN114237878A (zh) | 指令控制方法、电路、装置及相关设备 | |
CN116089477B (zh) | 分布式训练方法及系统 | |
CN104572275B (zh) | 一种进程加载方法、装置及系统 | |
CN113051049A (zh) | 任务调度系统、方法、电子设备及可读存储介质 | |
Netto et al. | Deciding when and how to move HPC jobs to the cloud | |
CN105471838B (zh) | 一种应用于l2tp中的数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150722 |