多线程计算机系统中对共存线程相伴调度的方法和设备技术方案

技术编号:3763414 阅读:177 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种在多线程处理器系统中对工作线程和与该工作线程相关的辅助线程进行相伴调度的方法和设备。所述方法包括:在准备运行/调度所述工作线程时,查找与运行该工作线程相关的一个或多个辅助线程;运行所查找到的一个或多个辅助线程;在与运行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程。根据本发明专利技术,提高了单个线程运行的速度、节省了CPU的系统资源。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别地,涉及用于在多核/多线程计算机系统中对多个共存线程(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,对于从原始的顺序线程(s叫uential 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、辅助线程l、辅助线程2、辅助线程3及运行该程序的负载被随机排列在运行队列中等待调度。根据图2所示的方法,预先将辅助线程0、辅助线程l、辅助线程2、辅助线程3以及负载提取出来并保存在一个共享高速緩存中;在随后开始运行工作线程时,从共享高速緩存直接获取该工作线程的辅助线程和负栽数据,而不是从较低频率的存储器系统中获取数据来加速工作线程。但是,该方法也需要辅助线程与其工作线程一起协同运行。否则,工作线程的性能将不会得到提升,甚至是变坏。通过以上关于现有技术中调度辅助线程的技术的描述,可以理解,不管采用如上所述的哪一种辅助线程调度方法,都需要辅助线程与其工作线程一起运行或调度。但是,在当前的主流操作系统中,因为每个核/线程构建单独的运行队列,而每个运行队列单独调度线程,并且由于受负栽平衡策略的影响,难以保证工作线程与其辅助线程之间的紧密结合关系。图3A-3E示出了在传统操作系统中由于工作线程和其辅助线程之间的随机调度结果,造成的一种混乱的调度情形。其中示意性示出了在第二列运行队列中,线程l及其辅助线程同时出现的情形。在多核/多线程操作系统中,当按照操作系统的任务列表运行线程时,运行队列如图3A-3D的顺序正常操作,但是当在下一个时刻,线程1进入队列2的预备线程队列中准备运行时,如图3E所示,线程1和其辅8助线程同时出现在队列2中,由此造成了混乱情形。不利的是,在当前的研究中,很少考虑这种与操作系统有关的问题在实际设计中所起的作用。通过以上对现有技术的线程调度技术的描述,可以知道,现有技术中使用的线程调度方法1)对工作线程和与工作线程相关的辅助线程的调度是随机的,也就是说,操作系统在运行工作线程时,对该工作线程的辅助线程的调度是随机的;2)工作线程开始运行后,其辅助线程才开始运行,并且辅助线程的运行是随机的。这样,就会造成线程调度混乱的情况出现。
技术实现思路
为解决现有技术中存在的上述缺陷,本专利技术的基本设计思想是基于工作线程和与其辅助线程之间的关联性,在准备开始运行和/或调度一个工作线程时,操作系统首先使该工作线程的辅助线程先行运行,然后才开始运行该工作线程。这样,根据本专利技术这种使工作线程和与该工作线程相关的辅助线程进行相伴调度的方法,提高了单个线程运行的速度、节省了CPU的系统资源。具体地,为解决现有技术中存在的上述缺陷,本专利技术提供了一种在多核平台上相伴调度多个共存线程的方法和设备。根据本专利技术,提供了一种在多线程处理器系统中对工作线程和与所述工作线程相关的辅助线程进行相伴调度的方法,所述方法包括在准备运行/调度所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程;运行查找到的一个或多个辅助线程;在与运行所述工作线程相关的一本文档来自技高网
...

【技术保护点】
一种在多线程处理器系统中对工作线程和与所述工作线程相关的辅助线程进行相伴调度的方法,所述方法包括: 在准备运行/调度所述工作线程时,查找与运行所述工作线程相关的一个或多个辅助线程; 运行查找到的一个或多个辅助线程; 在与运 行所述工作线程相关的一个或多个辅助线程都运行后,运行所述工作线程。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈滢戈弋候锐刘亮钟虓
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1