在处理器不同类型线程中分配内核资源的方法、装置及其处理器的制造方法

文档序号:6521110阅读:210来源:国知局
在处理器不同类型线程中分配内核资源的方法、装置及其处理器的制造方法
【专利摘要】本发明涉及一种在处理器不同类型线程中分配内核资源的方法,所述方法还包括如下步骤:判断所述硬件线程管理单元中登记的线程数量是否大于由所述操作系统登记到所述硬件线程管理单元中的线程数量,如是,执行步骤B);否则,返回;分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,该内核直接由硬件线程管理单元控制,并配置给在所述硬件线程管理单元中等待的GPU线程。本发明还涉及一种实现上述方法的装置及其处理器。实施本发明的在处理器不同类型线程中分配内核资源的方法、装置及其处理器,具有以下有益效果:使得不同类型的线程之间能够到达动态的负载平衡。
【专利说明】在处理器不同类型线程中分配内核资源的方法、装置及其处理器
【技术领域】
[0001]本发明涉及处理器,更具体地说,涉及一种在处理器不同类型线程中分配内核资源的方法、装置及其处理器。
【背景技术】
[0002]在典型的多功能计算机平台(处理器)中,CPU和GPU是单独的硬件,其间通过并行的总线连接,并分别通过各自的软件驱动。这两个硬件之间,对于一个或多个任务而言,并没有共享的成分。这是由于这两个硬件是单独的。当执行一个CPU任务时(这些任务最后将分解为线程执行),由该CPU的操作系统对其进行操作;当执行一个GPU任务(这些任务最后同样将分解为线程执行),由该GPU内部的硬件控制执行。因此,在传统的多功能计算机平台上,可能出现上述CPU和GPU中任何一个较忙,而另一个空闲的状态。这使得其出现在不同类型的线程之间负载不平衡的情况。

【发明内容】

[0003]本发明要解决的技术问题在于,针对现有技术的上述在不同类型的任务或线程之间出现负载不平衡的缺陷,提供一种在不同的任务或线程之间达到较好的负载平衡的在处理器不同类型线程中分配内核资源的方法、装置及其处理器。
[0004]本发明解决其技术问题所采用的技术方案是:构造一种在处理器不同类型线程中分配内核资源的方法,所述处理器中并行运行CPU任务和GPU任务,所述CPU任务由操作系统分解为CPU线程并分配内核进行处理,所述CPU线程还登记到用于控制处理GPU线程的硬件线程管理单元中,GPU任务被分解为GPU线程并登记排列在所述硬件线程管理单元中等待分配内核进行处理;所述方法还包括如下步骤:
A)判断所述硬件线程管理单元中登记的线程数量是否大于由所述操作系统登记到所述硬件线程管理单元中的线程数量,如是,执行步骤B);否则,返回处理CPU线程;
B)分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,该内核直接由硬件线程管理单元控制,并配置给在所述硬件线程管理单元中等待的GPU线程。
[0005]更进一步地,还包括如下步骤:
C)当在所述硬件线程管理单元中等待的GPU线程执行完成或所述GPU线程需要返回数据到操作系统时,当前所述CPU线程返回的内核由所述操作系统分配,不再直接由在硬件线程管理单元控制。
[0006]更进一步地,所述UPU在上电引导之后,分配设定数量的内核用于操作系统控制的CPU线程;每个线程在运行时均在所述硬件线程管理单元中登记。
[0007]更进一步地,所述设定数量为UPU内核总数的一半。
[0008]更进一步地,所述GPU任务通过GPU API或GPU DRIVER产生多个在硬件线程管理单元中等待的GPU线程,所述GPU线程同时登记在硬件线程管理单元中。
[0009]更进一步地,所述步骤A)中,包括比较由所述操作系统登记到所述硬件线程管理单元的有效线程数量和登记到所述硬件线程管理单元的总的有效线程数量是否相等。
[0010]本发明还涉及一种实现上述方法的装置,所述处理器中并行运行CPU任务和GPU任务,所述CPU任务由操作系统分解为CPU线程并分配内核进行处理,所述CPU线程还登记到用于控制处理GPU线程的硬件线程管理单元中,GPU任务被分解为GPU线程并登记排列在所述硬件线程管理单元中等待分配内核进行处理;所述装置包括:
线程数量判断模块:用于判断所述硬件线程管理单元中登记的线程数量是否大于由所述操作系统登记到所述硬件线程管理单元中的线程数量,如是,调用空闲线程分配模块;空闲线程分配模块:用于分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,该内核直接由硬件线程管理单元控制,并配置给在所述硬件线程管理单元中等待的GPU线程。
[0011]更进一步地,还包括线程释放判断模块,用于当在所述硬件线程管理单元中等待的GPU线程执行完成或所述GPU线程需要返回数据到操作系统时,当前所述CPU线程返回的内核由所述操作系统分配,不再直接由硬件线程管理单元控制。
[0012]更近一步地,还包括初始CPU线程设置模块和GPU线程产生模块;所述初始CPU线程设置模块用于在UPU在上电引导之后,分配设定数量的内核用于操作系统控制的CPU线程;每个线程在运行时均在所述硬件线程管理单元中登记;所述GPU线程产生模块用于GPU任务通过GPU API或GPU DRIVER产生多个在硬件线程管理单元中等待的GPU线程,所述GPU线程同时登记在硬件线程管理单元中。
[0013]本发明还涉及一种处理器,所述处理器为在CPU任务和GPU任务之间动态共享其硬件资源的UPU,所述处理器采用上述方法中的任意一项分配其内核资源。
[0014]实施本发明的在处理器不同类型线程中分配内核资源的方法、装置及其处理器,具有以下有益效果:由于在处理器上电时,所有的内核资源均由操作系统控制,且在GPU线程出现时分配一定数量的内核资源对所述GPU线程进行处理;同时,在GPU线程队列不断增加的情况下,使用原先配置到CPU线程的内核资源对GPU线程进行处理,使得整个处理器的内核资源在GPU线程和CPU线程之间动态地配置,从而使得不同类型的线程之间能够到达动态的负载平衡。
【专利附图】

【附图说明】
[0015]图1是本发明在处理器不同类型线程中分配内核资源的方法、装置及其处理器实施例中分配内核的方法流程图;
图2是所述实施例中登记的线程示意图;
图3是所述实施例中装置结构示意图。
【具体实施方式】
[0016]下面将结合附图对本发明实施例作进一步说明。
[0017]如图1所示,在本发明的在处理器不同类型线程中分配内核资源的方法、装置及其处理器实施例中,该在处理器不同类型线程中分配内核资源的方法包括如下步骤: 步骤SlOl处理器上电、引导,操作系统控制所有内核资源:在本实施例中,处理器中具有多个独立的内核(由硬件构成的、用于对线程进行计算或处理的内核),这些内核可以分配给不同的线程(进行线程处理),并同时运行。在本实施例中,处理器中可能存在两种线程,一种是传统意义上由CPU进行处理的任务得到的线程,称为CPU线程;一种是传统意义上由GPU进行处理的任务得到的线程,称为GPU线程。当然,在本实施例中,并不刻意区分线程的类型,从处理器的角度而言,所有的任务都是一样的,只不过调用不同的功能模块处理而已。当处理器中并行运行CPU任务和GPU任务时,CPU任务由操作系统分解为CPU线程并分配内核进行处理,这些CPU线程还登记到用于控制处理GPU线程的硬件线程管理单元中;GPU任务一开始也是被视为CPU任务处理,当操作系统发现其实际上是GPU任务时,调用不同的功能模块将其分解为GPU线程并登记排列在所述硬件线程管理单元中等待分配内核进行处理。在本步骤中,当系统上电引导后,一般来讲,系统中马上要执行任务都是通常的CPU任务,因此,所有的内核资源都是处于操作系统的控制之下的。
[0018]步骤S102分解CPU任务为CPU线程,在操作系统中排列,等待处理:在本步骤中,执行CPU任务,将其分解为CPU线程,并形成队列,在操作系统中等待分配内核资源并处理。这些动作均是在操作系统的控制之下进行的,分配在操作系统控制下的内核资源处理上述(PU线程。由于内核资源如何处理一个线程与本实施例中描述的内容关系不大,所以在此不再对其进行详细描述。
[0019]步骤S103将上述线程登记到硬件线程管理和控制单元:在本步骤中,在本步骤中,上述得到的CPU线程除了在操作系统中形成队列并处理之外,还将上述步骤中得到的CPU线程登记到处理器的硬件线程管理和控制单元(THDC)中。
[0020]步骤S104是否有GPU任务:在本步骤中,判断是否存在GPU任务需要处理,也就是说,判断当前处理的任务是否GPU任务,如是,执行步骤S105 ;否则,执行步骤S106。判断一个任务是否是GPU任务的具体方法包括判断该线程是否调用了专用于产生GPU线程的功能模块,例如,GPU API或GPU DRIVER。这是由于一个GPU任务必然需要类似的模块来产生GPU线程。
[0021]步骤S105产生GPU线程,使其在硬件线程管理和控制单元中形成队列等待处理,同时,将其登记:在本步骤中,调用上述的GPU API (GPU应用接口)或GPU DRIVER (GPU驱动器)使得GPU任务分解为GPU线程,得到的GPU线程在硬件线程管理和控制单元中形成队列等待处理,同时,将其在THDC登记;也就是说,GPU任务通过GPU API或GPU DRIVER产生多个在硬件线程管理单元中等待的GPU线程,这些GPU线程同时登记在硬件线程管理单元中。
[0022]步骤S106登记的线程数是否大于来自系统的线程数:判断硬件线程管理单元中登记的总的线程数量是否大于由操作系统登记到所述硬件线程管理单元中的线程数量,如是,执行下一步骤;否则,返回执行步骤S102,也就是仍然回到处理CPU线程或任务中,并不会使得内核资源重新配置;在本步骤中,判断登记的总的线程数量是否大于由操作系统登记而来的线程数量的具体方法是比较由操作系统登记到所述硬件线程管理单元的有效线程数量和登记到硬件线程管理单元的总的有效线程数量是否相等。请参见图2,图2中给出了一个登记线程的结构示意图,由图2中可以得知,登记总的有效线程数量只能大于或等于由操作系统登记的有效线程数量,不可能小于该值,所以,只要比较其是否相等,就可以判断出是否由GPU线程存在。二者相等时,必然不存在GPU线程,而二者不等时,必然有GPU线程存在。
[0023]步骤S107分配空闲的内核给GPU线程,并在CPU线程释放内核资源时,将释放的内核配置到GPU线程:分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,将该内核配置给在所述硬件线程管理单元中等待的GPU线程。也就是说,在本步骤中,当存在空闲的内核资源由THDC控制时,自然先将这些内核资源分配到GPU线程,对其进行处理。当已经没有空闲内核资源或本来THDC就没有控制内核资源时,首先是等待现在正在运行的内核被释放,即使是CPU线程释放的内核支援,且有其他的CPU线程在等待执行,这些被释放的内核资源也不会被分配到CPU线程,而是使得CPU线程等待,将这些内核的控制权由原先的操作系统转移到上述THDC,使得THDC能够控制该内核,并将其分配到GPU线程,使得该内核资源处理GPU线程。从而实现内核资源在不同的类型的线程之间的重新配置,使得处理器在处理不同的类型的线程时能够实现动态的内核调整,进而达到动态的负载平衡。
[0024]在本实施例中,上述处理器通常是UPU,其上电后可以将所有的内核交给操作系统控制,等到GPU任务开始执行时再对这些内核进行分配。其好处是对于传统的CPU任务处理较快,但是,由于在执行GPU任务时需要重新分配,所以其对于GPU任务的处理速度稍慢。为了加快GPU任务的处理速度,在本实施例中,一种情况下,也可以在处理器上电引导之后,分配设定数量的内核用于操作系统控制的CPU线程;同样地,每个线程在等待时均在所述硬件线程管理单元中登记。这个设定数量可以为UPU内核总数的一半,以兼顾CPU任务和GPU任务的处理速度。
[0025]总之,在本实施例中,该UPU的调度器具有CPU特殊内核功能,即利用UPU的独特硬件特性,动态地调度操作系统软件队列能够CPU任务和UPU硬件线程管理和控制单元(THDC)中的GPU任务。当UPU上电引导之后,所有的硬件线程资源(即内核资源)均由操作系统控制,同时,所有的线程(包括CPU和GPU线程)均会送入到THDC中。当只有CPU任务(或线程)运行时,THDC仅仅继续保持这些记录了送入线程的记录,所有的内核资源均作为SMP核由操作系统控制。当一个GPU任务被作为一个CPU任务开始运行时(这是UPU的一个重要特点),该任务通过GPU ADI CALLS或GPU DRIVER,创建多个GPU线程到THDC中;使得在THDC中的记载线程数量的清单上所记载的线程多于原先记载的线程数量(原先可能只有CPU线程)。这样,当一个由操作系统本身控制的SMP核运行线程完成或由用户空间返回内核空间时,该线程将释放上述内核,同时,标记该线程的、在THDC中的线程清单将进入等待的状态,该内核资源的控制权将由操作系统转移到THDC,THDC将不再将该内核资源分配给其他CPU线程或原先的CPU线程,而是将其分配到在THDC中等待的GPU线程,使得该GPU线程得到该内核的处理时隙。当在THDC中的GPU目录(或清单)变得越来越多的时候,越来越多的退出的CPU线程所占用的内核资源被按照上述的方法配置到GPU线程中,以便对其进行处理,直到GPU的队列减少或CPU线程出现瓶颈(例如,有返回CPU的数据等等),才会有内核资源被分配到CPU线程。
[0026]请参见图3,在本实施例中,还涉及一种实现上述方法的装置,该装置包括:线程数量判断模块31、空闲线程分配模块32、线程释放判断模块33、初始CPU线程设置模块34和GPU线程产生模块35。其中线程数量判断模块31用于判断所述硬件线程管理单元中登记的线程数量是否大于由所述操作系统登记到所述硬件线程管理单元中的线程数量,如是,调用空闲线程分配模块;空闲线程分配模块32用于分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,将该内核配置给在所述硬件线程管理单元中等待的GPU线程;线程释放判断模块33用于当在所述硬件线程管理单元中等待的GPU线程执行完成或所述GPU线程需要返回数据到操作系统时,当前所述CPU线程返回的内核由所述操作系统分配,不再直接分配给在硬件线程管理单元中等待的GPU线程;初始CPU线程设置模块34用于在UPU在上电引导之后,分配设定数量的内核用于操作系统控制的CPU线程;每个线程在运行时均在所述硬件线程管理单元中登记;GPU线程产生模块35用于GPU任务通过GPU API或GPU DRIVER产生多个在硬件线程管理单元中等待的GPU线程,所述GPU线程同时登记在硬件线程管理单元中。
[0027]此外,本实施例还涉及一种处理器,所述处理器为在CPU任务和GPU任务之间动态共享其硬件资源的UPU,所述处理器采用上述方法中的任意一项分配其内核资源。
[0028]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.一种在处理器不同类型线程中分配内核资源的方法,其特征在于,所述处理器中并行运行CPU任务和GPU任务,所述CPU任务由操作系统分解为CPU线程并分配内核进行处理,所述CPU线程还登记到用于控制处理GPU线程的硬件线程管理单元中,GPU任务被分解为GPU线程并登记排列在所述硬件线程管理单元中等待分配内核进行处理;所述方法还包括如下步骤: A)判断所述硬件线程管理单元中登记的线程数量是否大于由所述操作系统登记到所述硬件线程管理单元中的线程数量,如是,执行步骤B);否则,返回处理CPU线程; B)分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,该内核直接由硬件线程管理单元控制,并配置给在所述硬件线程管理单元中等待的GPU线程。
2.根据权利要求1所述的在处理器不同类型线程中分配内核资源的方法,其特征在于,还包括如下步骤: C)当在所述硬件线程管理单元中等待的GPU线程执行完成或所述GPU线程需要返回数据到操作系统时,当前所述CPU线程返回的内核由所述操作系统分配,不再直接由硬件线程管理单元控制。
3.根据权利要求2所述的在处理器不同类型线程中分配内核资源的方法,其特征在于,所述UPU在上电引导之后,分配设定数量的内核用于操作系统控制的CPU线程;每个线程在运行时均在所述硬件线程管理单元中登记。
4.根据权利要求3所述的在处理器不同类型的线程中分配内核资源的方法,其特征在于,所述设定数量为UPU内核总数的一半。
5.根据权利要求4所述 的在处理器不同类型线程中分配内核资源的方法,其特征在于,所述GPU任务通过GPU API或GPU DRIVER产生多个在硬件线程管理单元中等待的GPU线程,所述GPU线程同时登记在硬件线程管理单元中。
6.根据权利要求5所述的在处理器不同类型线程中分配内核资源的方法,其特征在于,所述步骤A)中,包括比较由所述操作系统登记到所述硬件线程管理单元的有效线程数量和登记到所述硬件线程管理单元的总的有效线程数量是否相等。
7.一种实现如权利要求1所述方法的在处理器不同类型线程中分配内核资源的装置,其特征在于,所述处理器中并行运行CPU任务和GPU任务,所述CPU任务由操作系统分解为(PU线程并分配内核进行处理,所述CPU线程还登记到用于控制处理GPU线程的硬件线程管理单元中,GPU任务被分解为GPU线程并登记排列在所述硬件线程管理单元中等待分配内核进行处理;所述装置包括: 线程数量判断模块:用于判断所述硬件线程管理单元中登记的线程数量是否大于由所述操作系统登记到所述硬件线程管理单元中的线程数量,如是,调用空闲线程分配模块; 空闲线程分配模块:用于分配空闲的内核对所述登记在硬件线程管理单元中的GPU线程进行处理,当空闲线程分配完且有CPU线程释放其内核时,该内核直接由硬件线程管理单元控制,并配置给在所述硬件线程管理单元中等待的GPU线程。
8.根据权利要求7所述的装置,其特征在于,还包括线程释放判断模块,用于当在所述硬件线程管理单元中等待的GPU线程执行完成或所述GPU线程需要返回数据到操作系统时,当前所述CPU线程返回的内核由所述操作系统分配,不再直接由硬件线程管理单元控制。
9. 根据权利要求8所述的装置,其特征在于,还包括初始CPU线程设置模块和GPU线程产生模块;所述初始(PU线程设置模块用于在UPU在上电引导之后,分配设定数量的内核用于操作系统控制的CPU线程;每个线程在运行时均在所述硬件线程管理单元中登记;所述GPU线程产生模块用于GPU任务通过GPU API或GPU DRIVER产生多个在硬件线程管理单元中等待的GPU线程,所述GPU线程同时登记在硬件线程管理单元中。
10.一种处理器,所述处理器为在CPU任务和GPU任务之间动态共享其硬件资源的UPU,其特征在于,所述处理器采用如权利要求1-6中任意一项的方法分配其内核资源。
【文档编号】G06F9/50GK103617088SQ201310619787
【公开日】2014年3月5日 申请日期:2013年11月29日 优先权日:2013年11月29日
【发明者】梅思行, 廖畅, 卢佳文, 冀谦祥 申请人:深圳中微电科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1