CN101482831B - 对工作线程与辅助线程进行相伴调度的方法和设备 - Google Patents
对工作线程与辅助线程进行相伴调度的方法和设备 Download PDFInfo
- Publication number
- CN101482831B CN101482831B CN2008100022700A CN200810002270A CN101482831B CN 101482831 B CN101482831 B CN 101482831B CN 2008100022700 A CN2008100022700 A CN 2008100022700A CN 200810002270 A CN200810002270 A CN 200810002270A CN 101482831 B CN101482831 B CN 101482831B
- Authority
- CN
- China
- Prior art keywords
- worker thread
- thread
- worker
- relevant
- move
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 101
- 239000000284 extract Substances 0.000 claims description 6
- 238000012217 deletion Methods 0.000 claims 2
- 230000037430 deletion Effects 0.000 claims 2
- 238000000605 extraction Methods 0.000 claims 1
- 230000008569 process Effects 0.000 description 42
- 238000010586 diagram Methods 0.000 description 30
- 238000004590 computer program Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 239000003550 marker Substances 0.000 description 5
- 230000015572 biosynthetic process Effects 0.000 description 4
- 238000013144 data compression Methods 0.000 description 4
- 238000002360 preparation method Methods 0.000 description 3
- 230000000739 chaotic effect Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
Abstract
本发明提供了一种在多线程处理器系统中对工作线程和与该工作线程相关的辅助线程进行相伴调度的方法和设备。所述方法包括:在准备运行/调度所述工作线程时,查找与运行该工作线程相关的一个或多个辅助线程;运行所查找到的一个或多个辅助线程;在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程。根据本发明,提高了单个线程运行的速度、节省了CPU的系统资源。
Description
技术领域
本发明涉及计算机技术领域,特别地,涉及用于在多核/多线程计算机系统中对多个共存线程(Commensal Thread),例如工作线程和与其相关的辅助线程进行相伴调度(Concomitance Scheduling)的方法和设备。
背景技术
随着计算机应用的日益普及,用户对计算机的处理能力的需求也在成指数级增长。在现代处理器设计中,多核/多线程技术日渐变为主流的技术。当前主流的CPU制造商在其更高性能商业芯片中都采用多核/多线程体系结构。例如,IBM Power系列、Intel Core Duo系列,AMD Barcelona系列等都是多线程处理器的例子。其中,一种TLP(Thread Level Paramllesim,线程级并行)技术,可以通过共享处理器的执行资源,同时执行多个线程,提高CPU的利用率,让处理单元获得更高的吞吐量。
多核/多线程处理器和传统多处理器的主要区别在于:多核/多线程处理器具有多个硬件线程。系统可以同时执行多个线程。另一个区别在于:大多数多核/多线程处理器在不同的核之间共享L2或L3高速缓存,以及在不同的硬件线程之间共享L1高速缓存。
对顺序程序进行加速的各种方法正逐渐发展起来,并且线程级别上并行化顺序代码(thread-level parallelization of sequential code)的方法通常被认为是在多核/多线程平台上的一个重要方式。例如参见2002年10月22日递交美国专利申请US2004/0078780A1,对于从原始的顺序线程(sequential thread)中提取多个线程来说,该专利文献对 为顺序执行而编码的应用中的一个或多个代码块进行标记,对已产生标记的代码,在所述一个或多个块的每一个上插入标记符(marker),以表明该块用于可能的协同执行处理(concurrent execution)。根据标记符的块持续时间权重(block duration weight of the marker)以及块的路径长度,估计被标记的块的执行时间。将每个被标记的块的估计执行时间与调度协同线程(concurrent thread)的开销进行比较,然后根据含有标记符的相关度信息(dependency information)来产生协同代码(concurrent code),将一个或多个被标记的块转换成相应的协同执行任务(线程)。
从顺序码中提取线程的另一种方式是自动线程分割技术(automatic thread partition)。通常,线程分割编译器提供串行应用程序的自动多线程转换。编译器在编译串行应用代码的时候,确定该串行的应用代码是否可以被至少分成两个不同的功能,然后根据数据的相关度检查完整性。最后,将代码自动分成多个任务,并产生相应的线程。一旦多个应用程序线程被分割,则该多个应用程序线程就被作为多线程体系结构的各个线程而被协同执行。
无论采用以上提到的哪种辅助线程,他们都是功能性的而且是独立的。对于调度这些辅助线程,操作系统不需要任何改变,并且如对待通常线程那样进行操作。但是另一种辅助线程可被用于预先提取(prefetch)不适当(delinquent)的存储器操作,或者可以预测那些难以预测的分支指令,或者在原始线程之前推测计算后面的代码等。实际上,这些推测或辅助线程都是与原始顺序线程紧密耦合的,并且希望能同时调度这些随机或辅助线程。这些随机或辅助线程也被称为共存线程。例如,当执行原始工作线程时,如果切换出(switched out)预先提取线程,则不会得到性能增益。
参考图1,其中示出了在执行数据压缩过程中通过具有推测功能的辅助线程来执行顺序代码的过程的示意图。其中,首先在系统运行过程中为该数据压缩的进程定义了一些辅助线程,例如通过散列函数“=hash[hash-function(c)]”来定义,如图1中的(a)部分所示。 在执行数据压缩的过程中,当开始运行该数据压缩进程的工作线程后,开始运行其辅助线程。在图1中(b)部分所示出的情况中,辅助线程必须与其所属的工作线程一起被协同调度。否则,如果辅助线程与其工作线程不一起被协同调度的话,辅助线程会变得无用,甚至引起错误。
另一种在多核/多线程平台上加速单个线程应用的方式是利用不同核/硬件线程之间的共享高速缓存。图2示出了在工作线程需要辅助线程之前从内存中预先提取出该工作线程的辅助线程的例子。具体地,当开始运行一个程序时,操作系统为运行该程序所生成的辅助线程,例如辅助线程0、辅助线程1、辅助线程2、辅助线程3及运行该程序的负载被随机排列在运行队列中等待调度。根据图2所示的方法,预先将辅助线程0、辅助线程1、辅助线程2、辅助线程3以及负载提取出来并保存在一个共享高速缓存中;在随后开始运行工作线程时,从共享高速缓存直接获取该工作线程的辅助线程和负载数据,而不是从较低频率的存储器系统中获取数据来加速工作线程。但是,该方法也需要辅助线程与其工作线程一起协同运行。否则,工作线程的性能将不会得到提升,甚至是变坏。
通过以上关于现有技术中调度辅助线程的技术的描述,可以理解,不管采用如上所述的哪一种辅助线程调度方法,都需要辅助线程与其工作线程一起运行或调度。但是,在当前的主流操作系统中,因为每个核/线程构建单独的运行队列,而每个运行队列单独调度线程,并且由于受负载平衡策略的影响,难以保证工作线程与其辅助线程之间的紧密结合关系。
图3A-3E示出了在传统操作系统中由于工作线程和其辅助线程之间的随机调度结果,造成的一种混乱的调度情形。其中示意性示出了在第二列运行队列中,线程1及其辅助线程同时出现的情形。在多核/多线程操作系统中,当按照操作系统的任务列表运行线程时,运行队列如图3A-3D的顺序正常操作,但是当在下一个时刻,线程1进入队列2的预备线程队列中准备运行时,如图3E所示,线程1和其辅 助线程同时出现在队列2中,由此造成了混乱情形。
不利的是,在当前的研究中,很少考虑这种与操作系统有关的问题在实际设计中所起的作用。
通过以上对现有技术的线程调度技术的描述,可以知道,现有技术中使用的线程调度方法:1)对工作线程和与工作线程相关的辅助线程的调度是随机的,也就是说,操作系统在运行工作线程时,对该工作线程的辅助线程的调度是随机的;2)工作线程开始运行后,其辅助线程才开始运行,并且辅助线程的运行是随机的。这样,就会造成线程调度混乱的情况出现。
发明内容
为解决现有技术中存在的上述缺陷,本发明的基本设计思想是:基于工作线程和与其辅助线程之间的关联性,在准备开始运行和/或调度一个工作线程时,操作系统首先使该工作线程的辅助线程先行运行,然后才开始运行该工作线程。这样,根据本发明这种使工作线程和与该工作线程相关的辅助线程进行相伴调度的方法,提高了单个线程运行的速度、节省了CPU的系统资源。
具体地,为解决现有技术中存在的上述缺陷,本发明提供了一种在多核平台上相伴调度多个共存线程的方法和设备。
根据本发明,提供了一种在多线程处理器系统中对工作线程和与所述工作线程相关的辅助线程进行相伴调度的方法,所述方法包括:在准备运行/调度所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程;运行查找到的一个或多个辅助线程;在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程。
根据本发明,还提供了一种在多线程处理器系统中对工作线程和与所述工作线程相关的辅助线程进行相伴调度的设备,所述设备包括:查找装置,用于在准备运行/调度所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程;调度装置,用于运行查找到 的一个或多个辅助线程;其中所述调度装置还被配置用于在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程。
附图说明
以下通过结合附图阅读参考下述对说明性实施例的详细描述时,将更好地理解本发明本身、优选使用模式、其它目标及其优点。在附图中:
图1是现有技术中使用推测性辅助线程进行工作线程调度方案的示意图;
图2是现有技术中使用预先提取辅助线程进行工作线程调度方案的示意图;
图3A-3E是根据现有技术出现工作线程调度混乱情形的操作时序图;
图4是根据本发明的在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的方法的示意流程图;
图5A是根据本发明的一个具体实施例说明在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的系统架构示意图;
图5B是图5A所示系统架构中进行相伴调度的调度模块的局部示意图;
图6是根据本发明图5的实施例在操作系统的任务列表中修改的任务结构的示意图;
图7是根据本发明图5的实施例在辅助线程堆区中创建的辅助线程结构的示意图;
图8是根据本发明图5的实施例创建辅助线程的操作的流程图;
图9是根据本发明图5的实施例去除辅助线程的操作的流程图;
图10A-I是根据本发明在多核/多线程处理器系统中操作系统对 单个工作线程和与该工作线程相关的辅助线程进行相伴调度过程中运行队列的示意图;
图11是根据本发明在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的方法中的运行队列的操作流程图;以及
图12是根据本发明在多核/多线程处理器系统中停止工作线程运行的流程图。
具体实施方式
以下将参照附图对本发明的优选实施方式进行详细说明。
参考附图4,其中示出了根据本发明在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的方法的示意流程图。
当在步骤S405准备开始运行一个工作线程时,启动根据本发明的在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的方法。
过程进入到步骤S410,查找与运行该工作线程相关的一个或多个辅助线程。
在查找到与运行该工作线程相关的一个或多个辅助线程后,本发明的方法进入到步骤S415,开始运行所查找到的一个或多个辅助线程。根据本发明的优选实施方式,在开始运行一个辅助线程后,操作系统会判断该工作线程是否还有其他的辅助线程,以及接着开始运行下一个辅助线程。当操作系统判断出:与运行所述工作线程相关的一个或多辅助线程都开始运行后,开始运行所述工作线程,如步骤S420所示。运行辅助线程的方式是:使与运行该工作线程相关的所有辅助线程都被首先调度到操作系统的运行队列上优先运行,之后再开始运行该工作线程。以下将结合附图和优选实施方式,对运行工作线程和辅助线程的操作进行详细描述。
相应地,根据本发明的另一方面,提供了一种在多核/多线程处理 器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的设备,所述设备包括:查找装置,用于在准备运行所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程。调度装置,用于运行查找到的一个或多个辅助线程;以及所述调度装置还被配置用于在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程。
根据本发明这种使工作线程和与该工作线程相关的辅助线程进行相伴调度的方法和相应的调度设备,提高了单个线程运行的速度、节省了CPU的系统资源。
根据本发明,优选地还包括:由操作系统预先设置每个工作线程的结构和与该工作线程相关的辅助线程的结构,以使该工作线程和与其相关的辅助线程相关联。本领域技术人员可以理解,在为工作线程生成辅助线程的过程中,实际上已经使工作线程和辅助线程之间具有关联关系。但是,为了进一步加速单个线程运行的速度、节省CPU的系统资源,根据本发明的优选实施方式,为了加强工作线程与辅助线程之间的这种关联关系,还对工作线程和辅助线程的结构进行进一步限定。
以下结合附图5-9来说明根据本发明的第一优选实施例。在该优选实施方式中,预先设置每个工作线程的结构和与该工作线程相关的辅助线程的结构,以在运行/调度工作线程时能相伴调度与该工作线程相关的辅助线程。
图5A是根据本发明的一个具体实施例说明在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的系统架构示意图;图5B是图5A所示系统架构中进行相伴调度的调度模块的局部示意图。该调度模块基于传统操作系统的调度模块构建。本领域技术人员可以理解,对要运行的多个应用,例如应用1、应用2...应用M来说,基于多核/多线程的操作系统通过SMT(同时多线程)处理器,在硬件线程之间利用L2和L3高速缓存共享数据。 如图5A所示,根据本发明的调度模块包括:用于在创建工作线程时,为该工作线程创建相应的任务结构的任务列表子模块501、用于为工作线程的辅助线程创建相应的任务结构的辅助线程堆区子模块505和用于指示和调度工作线程和与其运行相关辅助线程的运行队列510。
其中,根据本发明,对于每个任务结构,根据本发明的任务列表子模块501例如增加了如下几个新的字段来帮助操作系统管理和调度该工作线程的辅助线程。具体地,参见图6,其中图6是根据本发明图5的实施例在操作系统的任务列表中修改的任务结构的示意图。在该实施例中,所修改的任务结构列表包括:
用于以布尔逻辑值表示的该线程是否是辅助线程的IsAT字段。其中若布尔值“IsAT”为“真(true)”,则表明在创建该线程时,该线程是辅助线程;否则,如果布尔值“IsAT”为“假(false)”,则表明在创建该线程时,该线程不是辅助线程而是工作线程。特别地,当所创建的线程是辅助线程时,则相应地执行创建辅助线程的结构的操作,以下详述。当所创建的线程是工作线程时,继续执行创建工作线程的结构的操作。
用于以布尔逻辑值表示的该工作线程是否具有辅助线程的HasAT字段。其中若布尔值“HasAT”为“真”,则表明在创建该工作线程时,该工作线程具有辅助线程;否则,如果布尔值“HasAT”为“假”,则表明在创建该工作线程时,该工作线程不具有辅助线程。
用于以布尔逻辑值表示的属于该工作线程的辅助线程的数量的ATnum字段。特别地,当HasAT的值为“假”时,ATnum的值等于零。在图6中,ATnum字段的值为3,表明属于该工作线程的辅助线程的数量为3个。更优选地,在根据本发明的工作线程的任务结构列表中,还可以包括:用于以布尔逻辑值表示的运行该工作线程时所实际需要的辅助线程的数量的RunATnum字段。在图6中,RunATnum字段的值为2,表明运行该工作线程时所实际需要的辅助线程的数量为2个。
用于以布尔逻辑值指示该工作线程是否需要辅助线程的 ForceAT字段。如果ForceAT的值为“假”,则操作系统在某些情况下不开始辅助线程。相反,如果ForceAT的值为“真”,则操作系统将在任何情况下开始调用辅助线程。
用于指示工作线程的第一个辅助线程结构的指针“AT*HelperTHead”字段。
另外,如在现有技术中的任务列表中一样,根据本发明的工作线程的任务列表还包括用于指示工作线程所在的运行的队列中的指针“AT*RunATQueue”字段。
参见图7,图7是根据本发明图5的实施例在辅助线程堆区505中创建的辅助线程结构的示意图。应该理解,在辅助线程堆区中存储了所有辅助线程的任务结构。并且,每个辅助线程和其相关的工作线程之间被定义了关联关系,以便于操作系统在运行工作线程时能方便、迅速地调用和管理其辅助线程。具体地,为每个辅助线程创建的辅助线程的新的结构包括:
用于以布尔逻辑值表示的该线程是否是辅助线程的IsAT字段。其中若布尔值“IsAT”为“真(true)”,则表明在创建该线程时,该线程是辅助线程;否则,如果布尔值“IsAT”为“假(false)”,则表明在创建该线程时,该线程不是辅助线程而是工作线程。特别地,当所创建的线程是辅助线程时,继续执行创建辅助线程的结构的操作。
用于以布尔逻辑值指示的该辅助线程所属的工作线程的OwnerThread字段。通过该字段,可以很容易地找到该辅助线程所属的工作线程。
用于以布尔逻辑值指示的属于同一工作线程的另一个辅助线程的NextAT字段。通过该字段,可以很容易地找到同一工作线程的其他辅助线程。
本领域技术人员应该理解:辅助线程不同于常规的工作线程。辅助线程只对工作线程的性能产生很大影响而不会引起正确性与否的问题。因此,当诸如存储器或处理器等的系统资源贫乏时,操作系统 能很容易地释放该存储有辅助线程的存储器,例如在本实施例中,释放掉辅助线程堆区中的资源。
图8是根据本发明图5的实施例创建辅助线程的操作的流程图。针对一个工作线程,根据本发明,首先在步骤S805由操作系统为该工作线程创建相应的任务结构,并将所创建的工作线程的任务结构添加到操作系统的任务列表中。接下来,在步骤S810,操作系统将检查该工作线程是否具有辅助线程。如果步骤S810的检查结果是“否”,则结束创建辅助线程的操作,该流程结束。如果步骤S810的检查结果是“是”,则表明该工作线程具有辅助线程。在这种情况下,过程前进到步骤S815,由操作系统在辅助线程堆区中为该工作线程的其中一个辅助线程创建一个新的任务结构。接下来,在步骤S820进一步判断,该工作线程是否还有辅助线程,如果“否”,则结束创建辅助线程的操作,该流程结束。否则的话,如果当前工作线程还具有辅助线程,则重复步骤S815,由操作系统在辅助线程堆区中为该工作线程的下一个辅助线程创建一个新的任务结构,直到创建完所有属于该工作线程的辅助线程为止。
相应地,图9是根据本发明图5的实施例去除辅助线程的操作的流程图。当针对一个工作线程希望去除其辅助线程时,首先,操作系统在步骤S905中检查该工作线程是否具有辅助线程。如果步骤S905的检查结果表明该工作线程不具有辅助线程,则结束去除辅助线程的操作,该流程结束。否则,如果步骤S905的检查结果表明该工作线程具有辅助线程,则过程前进到步骤S910,操作系统从辅助线程堆区中去除辅助线程结构。接下来,在步骤S915进一步判断,该工作线程是否还有辅助线程,如果“否”,则结束去除辅助线程的操作,该流程结束。否则的话,如果当前工作线程还具有辅助线程,则重复步骤S910,由操作系统从辅助线程堆区中去除该工作线程的下一个辅助线程的任务结构,直到步骤S915的判断结果表明当前工作线程已经不具有辅助线程为止。在这种情况下,过程前进到步骤S920,操作系统从任务列表中最终去除该工作线程任务结构。
以上结合图5-9详细描述了根据本发明的第一种优选实施例,在操作系统的任务列表中预先设置每个工作线程的结构和在操作系统中的辅助线程堆区中设置与该工作线程相关的辅助线程的结构,以使该工作线程和与其相关的辅助线程进行相关联的操作的模块结构图和方法流程图。通过针对单个工作线程,预先提取其辅助线程并在辅助线程堆区中创建相应的辅助线程任务结构,提高了单个线程运行的速度、节省了CPU的系统资源。
在本发明的第二实施例中,采用了以查找表的形式保存工作线程和其相应的辅助线程之间的关联关系的方式,来实现工作线程和与该工作线程相关的辅助线程之间的相伴调度。根据该第二实施例,没有象第一实施例那样,采取预先提取辅助线程,并将所创建的辅助线程结构单独存储在辅助线程堆区的方式。根据第二实施例,在操作系统创建工作线程及相关的辅助线程时,所采用的工作线程和辅助线程的结构仍旧如第一实施例,所不同的是,根据第二实施例,使用查找表来保存工作线程和其辅助线程之间的关联关系,例如为一工作线程保存其辅助线程的地址信息。根据第二实施例,同样可以提高单个线程运行的速度、节省CPU的系统资源。
相应地,在去除辅助线程时,通过查找该查找表中工作线程和辅助线程之间的关联关系而去除辅助线程并最终去除工作线程。
图10A-I是根据本发明在多核/多线程处理器系统中操作系统对单个工作线程和与该工作线程相关的辅助线程进行相伴调度过程中运行队列状态转移图。根据本发明,在操作系统的运行队列中,维护指向不同任务的指针序列。操作系统将构建用于每个处理器核/线程的运行队列。图10A-I示出了包括两个索引的运行队列。第一索引(图上显示为“当前”)指向在运行队列中正在运行的线程。第二索引(图上显示为“下一个”)指向在运行队列中将被调度的线程。每个运行队列还包括指示在该处理器核/硬件线程上正在运行哪种线程(工作线程或辅助线程)的标签。
下面结合图11对图10A-I的状态转移图进行说明。图11是根据 本发明在多核/多线程处理器系统中对单个工作线程和与该工作线程相关的辅助线程进行相伴调度的方法的操作流程图。在开始运行/调度一个工作线程时:
在步骤S1105,首先判断该工作线程是否具有辅助线程。如果步骤S1105的判断结果为“否”,则表明不需要进行该工作线程的调度,相伴调度方法结束,工作线程如通常线程那样开始运行。否则,如果骤S1105的判断结果为“是”,则过程进入到步骤S1110。
在步骤S1110,进一步判断该工作线程的辅助线程是否可以被调度。如果步骤S1110的判断结果为“否”,则表明不允许调度该工作线程的辅助线程,相伴调度方法结束。否则,如果步骤S1110的判断结果为“是”,则过程进入到步骤S1115。
在步骤S1115,用与运行所述工作线程相关的辅助线程中的一个辅助线程替换运行队列中要运行的所述工作线程,并运行所述辅助线程。
再次参考图10。如图10A所示,以工作线程1为例,并且以基于四个核的处理器系统进行说明。当第二索引指示工作线程1作为运行队列(第一运行队列)中要被调度的线程时,开始本发明的辅助线程调度操作。
当运行队列中的正在运行的线程(图10A中的线程7)运行结束,线程1即将在该运行队列中被运行时,用与运行所述工作线程1相关的辅助线程中的一个辅助线程,例如第一辅助线程替换运行队列中要运行的工作线程1,并运行所述第一辅助线程,如图10B所示。
接着,过程进入到步骤S1120,将该工作线程1放置在下一个运行队列(即第二运行队列)的要被调度的线程的位置。参见图10C,此时将工作线程1置于下一个运行队列(第二运行队列)的要被调度的线程的位置,以使该工作线程在下一时刻能首先被运行。也就是,将当前工作线程1插入到下一个运行队列作为第一预备线程。
然后,过程进入到步骤S1125,进一步判断该工作线程是否还有更多的辅助线程。
当步骤S1125的判断结果是“是”时,过程重复步骤S1115、1120,直到与运行所述工作线程相关的所有辅助线程都开始运行。
参见图10D-10H所示,当该工作线程1将要在下一个运行队列(即第二运行队列)中被运行时,用与运行所述工作线程相关的辅助线程中的下一个辅助线程替换下一个运行队列(即第二运行队列)中要运行的所述工作线程1,并运行所述下一个辅助线程。其中,通过所创建的辅助线程结构中的“NextAt”字段,可以很容易找到当前辅助线程后的下一个辅助线程。从图10D-10H可以看出,当工作线程1依次被置于第三、第四运行队列的头部时,相应地依次用与运行所述工作线程相关的辅助线程中的接下来的第三、第四辅助线程替换位于第三、第四运行队列头部的工作线程,并运行相应辅助线程。直到与运行所述工作线程相关的所有辅助线程都开始运行时,开始运行所述工作线程1,如图10I所示。
当步骤S1125的判断结果是“否”时,过程结束。
相应地,当工作线程停止运行后,系统将从每个运行队列中去除所有辅助线程并将下一个指针指向下一个工作线程,然后工作线程退出运行。
图12是根据本发明的工作线程停止运行的流程图。图12是工作线程被调度模块切换掉的过程。当调度模块准备切换掉工作线程时(由于另一个线程中断或时间超时),调度模块将从每个运行队列中删除所有辅助线程,并让下一个指针指向下一个工作线程。具体地,该过程包括:
在步骤S1205,首先判断运行的工作线程是否具有辅助线程。如果“否”,则结束该过程。否则,如果步骤S1205的判断结果是“是”,则过程进入到步骤S1210,从运行队列中去除该工作线程的辅助线程。并进入到步骤S1215,进一步判断,当前工作线程是否还有更多的辅助线程。如果是,则从运行队列中去除该工作线程的下一个辅助线程。直到步骤S1215的判断结果表明,当前工作线程已经没有辅助线程时,停止工作线程运行的过程结束。
应当理解,给出这种示意只是为了便于本领域技术人员理解本发明的原理,不应当将其理解为对本发明的任何限制。
本领域技术人员会认识到,可以以方法、系统或计算机程序产品的形式提供本发明的实施例。因此,本发明可采取全硬件实施例、全软件实施例,或者组合软件和硬件的实施例的形式。硬件和软件的典型的结合可以是带有计算机程序的通用计算机系统,当程序被加载并被执行时,控制计算机系统,从而可以执行上述的方法。
本发明可以嵌入在计算机程序产品中,它包括使此处描述的方法得以实施的所有特征。所述计算机程序产品被包含在一个或多个计算机可读存储介质(包括,但不限于,磁盘存储器、CD-ROM、光学存储器等)中,所述计算机可读存储介质具有包含于其中的计算机可读程序代码。
已参考根据本发明的方法、系统及计算机程序产品的流程图和/或方框图说明了本发明。流程图和/或方框图中的每个方框,以及流程图和/或方框图中的方框的组合显然可由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、嵌入式处理器或者其他可编程的数据处理设备的处理器,以产生一台机器,从而指令(所述指令通过计算机或者其他可编程数据处理设备的处理器)产生用于实现在流程图和/或方框图的一个或多个方框中规定的功能的装置。
这些计算机程序指令也可保存在一个或多个计算机的读存储器中,每个这种存储器能够指挥计算机或者其他可编程数据处理设备按照特定的方式发挥作用,从而保存在计算机可读存储器中的指令产生一种制造产品,所述制造产品包括实现在流程图和/或方框图的一个或多个方框中规定的功能的指令装置。
计算机程序指令也可被加载到一个或多个计算机或者其他可编程数据处理设备上,使得在所述计算机或者其他可编程数据处理设备上执行一系列的操作步骤,从而在每个这样的设备上产生计算机实现 的过程,以致在该设备上执行的指令提供用于实现在流程图和/或方框图的一个或多个方框中规定的步骤。
以上结合本发明的优选实施方式对本发明的原理进行了说明,但这些说明只是示例性的,不应理解为对本发明的任何限制。本领域技术人员可以对本发明进行各种改变和变形,而不会背离由随附权利要求所限定的本发明的精神和范围。
Claims (16)
1.一种在多线程处理器系统中对工作线程和与所述工作线程相关的辅助线程进行相伴调度的方法,所述方法包括:
在准备运行/调度所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程;
运行查找到的一个或多个辅助线程;
在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程;
其中所述运行一个或多个辅助线程的步骤进一步包括:
i)用与运行所述工作线程相关的辅助线程中的一个辅助线程替换运行队列中要运行的所述工作线程,并运行所述一个辅助线程;
ii)将所述工作线程放置在下一个运行队列的要被调度的线程的位置;
iii)当所述工作线程将要在所述下一个运行队列被运行时,用与运行所述工作线程相关的辅助线程中的下一个辅助线程替换要运行的所述工作线程,并运行所述下一个辅助线程;
重复上述步骤,直到与运行所述工作线程相关的所有辅助线程都已经运行。
2.根据权利要求1所述的方法,还包括:
由操作系统预先设置工作线程的结构和与所述工作线程相关的辅助线程的结构,以使所述工作线程和与所述工作线程相关的所述辅助线程相关联。
3.根据权利要求2所述的方法,其中,由操作系统预先设置工作线程的结构的步骤进一步包括在操作系统的任务列表中为每个所述工作线程增加如下信息:
所述工作线程是否具有辅助线程以及属于所述工作线程的辅助线程的数量;
运行所述工作线程时是否需要辅助线程以及所需要的辅助线程的数量;以及
指向与运行所述工作线程相关的辅助线程中的第一个辅助线程的指针。
4.根据权利要求2所述的方法,其中,由操作系统预先设置与所述工作线程相关的辅助线程的结构的步骤进一步包括为每个辅助线程增加如下信息:
指向该辅助线程所属的工作线程的指针;以及
指向同属于所述工作线程的下一个辅助线程的指针。
5.根据权利要求1至4中任意一个所述的方法,还包括:
预先确定与所述工作线程相关的辅助线程;
提取确定的与所述工作线程相关的辅助线程;以及
将提取的与所述工作线程相关的辅助线程存储在操作系统中的单独的辅助线程存储区中。
6.根据权利要求1至4中任意一个所述的方法,还包括:
预先确定与所述工作线程相关的辅助线程;
将确定的与所述工作线程相关的辅助线程的物理地址增加到一个查找表中。
7.根据权利要求1所述的方法,进一步包括:
在所述工作线程停止运行后,从每个运行队列中删除与所述工作线程相关的辅助线程。
8.根据权利要求1所述的方法,其中所述多线程处理器系统为多核处理器系统。
9.一种在多线程处理器系统中对工作线程和与所述工作线程相关的辅助线程进行相伴调度的设备,所述设备包括:
查找装置,用于在准备运行/调度所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程;
调度装置,用于运行查找到的一个或多个辅助线程;
其中所述调度装置还被配置用于在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程;
其中所述调度装置进一步被配置用于:
i)用与运行所述工作线程相关的辅助线程中的一个辅助线程替换运行队列中要运行的所述工作线程,并运行所述一个辅助线程;
ii)将所述工作线程放置在下一个运行队列的要被调度的线程的位置;
iii)当所述工作线程将要在所述下一个运行队列被运行时,用与运行所述工作线程相关的辅助线程中的下一个辅助线程替换要运行的所述工作线程,并运行所述下一个辅助线程;
重复上述操作,直到与运行所述工作线程相关的所有辅助线程都已经运行。
10.根据权利要求9所述的设备,所述调度装置还包括:
预先设置装置,用于使操作系统预先设置所述工作线程的结构和与所述工作线程相关的辅助线程的结构,以使所述工作线程和与所述工作线程相关的所述辅助线程相关联。
11.根据权利要求10所述的设备,其中,所述预先设置装置被进一步配置用于在操作系统的任务列表中为每个所述工作线程增加如下信息:
所述工作线程是否具有辅助线程以及属于所述工作线程的辅助线程的数量;
运行所述工作线程时是否需要辅助线程以及所需要的辅助线程的数量;以及
指向与运行所述工作线程相关的辅助线程中的第一个辅助线程的指针。
12.根据权利要求10所述的设备,其中,所述预先设置装置被进一步配置用于为每个辅助线程增加如下信息:
指向该辅助线程所属的工作线程的指针;以及
指向同属于所述工作线程的下一个辅助线程的指针。
13.根据权利要求9至12中任意一个所述的设备,还包括:
确定装置,用于预先确定与所述工作线程相关的辅助线程;
提取装置,用于提取确定的与所述工作线程相关的辅助线程;以及
辅助线程堆区,位于操作系统的一个单独存储区中,用于保存提取的与所述工作线程相关的辅助线程。
14.根据权利要求9至12中任意一个所述的设备,还包括:
确定装置,用于预先确定与所述工作线程相关的辅助线程;
查找表装置,用于保存确定的与所述工作线程相关的辅助线程的地址。
15.根据权利要求9所述的设备,还包括:
在所述工作线程停止运行后,用于从每个运行队列中删除与所述工作线程相关的辅助线程的装置。
16.根据权利要求9所述的设备,其中所述多线程处理器系统为多核处理器系统。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100022700A CN101482831B (zh) | 2008-01-08 | 2008-01-08 | 对工作线程与辅助线程进行相伴调度的方法和设备 |
US12/348,933 US8490098B2 (en) | 2008-01-08 | 2009-01-06 | Concomitance scheduling commensal threads in a multi-threading computer system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100022700A CN101482831B (zh) | 2008-01-08 | 2008-01-08 | 对工作线程与辅助线程进行相伴调度的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101482831A CN101482831A (zh) | 2009-07-15 |
CN101482831B true CN101482831B (zh) | 2013-05-15 |
Family
ID=40845626
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100022700A Expired - Fee Related CN101482831B (zh) | 2008-01-08 | 2008-01-08 | 对工作线程与辅助线程进行相伴调度的方法和设备 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8490098B2 (zh) |
CN (1) | CN101482831B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8959517B2 (en) * | 2009-06-10 | 2015-02-17 | Microsoft Corporation | Cancellation mechanism for cancellable tasks including stolen task and descendent of stolen tasks from the cancellable taskgroup |
CN102117222A (zh) * | 2010-01-04 | 2011-07-06 | 朗讯科技公司 | 多线程启动方法 |
US8880485B2 (en) * | 2011-03-30 | 2014-11-04 | Sap Se | Systems and methods to facilitate multi-threaded data retrieval |
US8862918B2 (en) * | 2011-07-01 | 2014-10-14 | Intel Corporation | Efficient frequency boost operation |
US10649810B2 (en) | 2015-12-28 | 2020-05-12 | Advanced Micro Devices, Inc. | Data driven scheduler on multiple computing cores |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567241A (zh) * | 2003-07-10 | 2005-01-19 | 英业达股份有限公司 | 连续声音资料的记录方法 |
GB0502796D0 (en) * | 2002-09-17 | 2005-03-16 | Intel Corp | Post-pass binary adaptation for software-based speculative precomputation |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6247027B1 (en) * | 1999-05-17 | 2001-06-12 | Sun Microsystems, Inc. | Facilitating garbage collection during object versioning for space and time dimensional computing |
US6732363B1 (en) * | 2000-02-28 | 2004-05-04 | Sun Microsystems, Inc. | Supporting inter-process communication through a conditional trap instruction |
US6704862B1 (en) * | 2000-03-06 | 2004-03-09 | Sun Microsystems, Inc. | Method and apparatus for facilitating exception handling using a conditional trap instruction |
US6721944B2 (en) * | 2000-05-31 | 2004-04-13 | Sun Microsystems, Inc. | Marking memory elements based upon usage of accessed information during speculative execution |
US6684398B2 (en) * | 2000-05-31 | 2004-01-27 | Sun Microsystems, Inc. | Monitor entry and exit for a speculative thread during space and time dimensional execution |
US6928645B2 (en) * | 2001-03-30 | 2005-08-09 | Intel Corporation | Software-based speculative pre-computation and multithreading |
AU2002326378A1 (en) * | 2001-07-13 | 2003-01-29 | Sun Microsystems, Inc. | Facilitating efficient join operations between a head thread and a speculative thread |
US7313676B2 (en) * | 2002-06-26 | 2007-12-25 | Intel Corporation | Register renaming for dynamic multi-threading |
US7346902B2 (en) | 2002-10-22 | 2008-03-18 | Sun Microsystems, Inc. | System and method for block-based concurrentization of software code |
US20050071841A1 (en) * | 2003-09-30 | 2005-03-31 | Hoflehner Gerolf F. | Methods and apparatuses for thread management of mult-threading |
US20050071438A1 (en) | 2003-09-30 | 2005-03-31 | Shih-Wei Liao | Methods and apparatuses for compiler-creating helper threads for multi-threading |
US7328433B2 (en) * | 2003-10-02 | 2008-02-05 | Intel Corporation | Methods and apparatus for reducing memory latency in a software application |
US20050108695A1 (en) | 2003-11-14 | 2005-05-19 | Long Li | Apparatus and method for an automatic thread-partition compiler |
US7797691B2 (en) | 2004-01-09 | 2010-09-14 | Imec | System and method for automatic parallelization of sequential code |
US7458065B2 (en) * | 2004-09-21 | 2008-11-25 | Intel Corporation | Selection of spawning pairs for a speculative multithreaded processor |
US20070074217A1 (en) | 2005-09-26 | 2007-03-29 | Ryan Rakvic | Scheduling optimizations for user-level threads |
US7350027B2 (en) * | 2006-02-10 | 2008-03-25 | International Business Machines Corporation | Architectural support for thread level speculative execution |
-
2008
- 2008-01-08 CN CN2008100022700A patent/CN101482831B/zh not_active Expired - Fee Related
-
2009
- 2009-01-06 US US12/348,933 patent/US8490098B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0502796D0 (en) * | 2002-09-17 | 2005-03-16 | Intel Corp | Post-pass binary adaptation for software-based speculative precomputation |
CN1567241A (zh) * | 2003-07-10 | 2005-01-19 | 英业达股份有限公司 | 连续声音资料的记录方法 |
Also Published As
Publication number | Publication date |
---|---|
US8490098B2 (en) | 2013-07-16 |
CN101482831A (zh) | 2009-07-15 |
US20090178054A1 (en) | 2009-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104040491B (zh) | 微处理器加速的代码优化器 | |
CN100397347C (zh) | 用于smt处理器上的cpi调度的系统和方法 | |
CN101482831B (zh) | 对工作线程与辅助线程进行相伴调度的方法和设备 | |
CN104272256B (zh) | 任务处理装置 | |
CN103282874B (zh) | 用于增强分支预测效率的指令序列缓冲器 | |
CN101796487B (zh) | 虚拟队列处理电路以及任务处理器 | |
CN100549943C (zh) | 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器 | |
Bala et al. | Efficient instruction scheduling using finite state automata | |
CN102129390B (zh) | 片上多核计算平台的任务调度系统及进行任务并行化方法 | |
CN104040490A (zh) | 用于多引擎微处理器的加速的代码优化器 | |
CN103761182A (zh) | 一种死锁检测方法及装置 | |
CN101673223B (zh) | 基于片上多处理器的线程调度实现方法 | |
CN101529383A (zh) | 任务处理装置 | |
CN105095425B (zh) | 一种数据库的跨库结转方法及装置 | |
CN101833438A (zh) | 一种基于多重并行的数据通用处理方法 | |
CN103810035A (zh) | 智能上下文管理 | |
US11366669B2 (en) | Apparatus for preventing rescheduling of a paused thread based on instruction classification | |
JP2010211546A (ja) | 仮想マシン管理システム、仮想マシン管理方法、仮想マシン管理装置及び仮想マシン管理プログラム | |
WO2021218633A1 (zh) | Cpu指令处理方法、控制器和中央处理单元 | |
US20090249037A1 (en) | Pipeline processors | |
CN109308213A (zh) | 基于改进任务调度机制的多任务断点调试方法 | |
CN112346835A (zh) | 一种基于协程的调度处理方法及系统 | |
US20020112148A1 (en) | System and method for executing predicated code out of order | |
CN114116015B (zh) | 用于管理硬件命令队列的方法及系统 | |
CN113342886A (zh) | 数据交换方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130515 |
|
CF01 | Termination of patent right due to non-payment of annual fee |