CN103136035B - 用于混合线程模式的程序的线程管理的方法和装置 - Google Patents
用于混合线程模式的程序的线程管理的方法和装置 Download PDFInfo
- Publication number
- CN103136035B CN103136035B CN201110391185.XA CN201110391185A CN103136035B CN 103136035 B CN103136035 B CN 103136035B CN 201110391185 A CN201110391185 A CN 201110391185A CN 103136035 B CN103136035 B CN 103136035B
- Authority
- CN
- China
- Prior art keywords
- thread
- work item
- virtual
- program
- belonging
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及混合线程模式的程序的线程管理,尤其涉及非抢占性体系结构的多核计算机系统中运行混合线程编程的程序时的线程管理提供一种用于混合线程模式的程序的线程管理的方法和装置,其中,所述程序的线程以非抢占方式共享多个硬件资源,该方法包含:建立与多个硬件资源分别相关联的多个虚拟线程;截获来自程序的线程的一个工作项;分析工作项所属线程与其它线程之间的关系;根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
Description
技术领域
本发明涉及混合线程模式的程序的线程管理,尤其涉及非抢占性(non-preemptive)体系结构的多核计算机系统(multi-coresystem)中运行混合线程编程的程序时的线程管理。
背景技术
高性能计算HPC(HighPerformanceComputing)越来越多地以来多核计算机系统。这种计算机系统采用多核处理器(例如双核和四核的CPU)。在多核处理器系统上上运行并行的多线程,可以提高多核处理器系统的效率。因此,在HPC应用中普遍采用多线程程序设计。
多线程程序设计的一个例子,是采用混合的POSIX线程模式(pthreadmodel)和OpenMP模式(OpenMPmodel)。
POSIX线程(POSIXthread)是一种POSIX标准的线程,简称为“Pthread”。POSIX标准定义内部API创建和操纵线程。POSIX标准采用一个用来产生、控制线程的函数库。按照POSIX线程模式,可以为程序产生多个线程,由一个主线程把工作拆开,分给各子线程去执行,最后由主线程同步各线程执行的结果。
OpenMP是为在多处理机上编写并行程序而设计的一个应用编程接口(API)。它包括一套编译指导语句(compilerdirective)和一个用来支持它的函数库。OpenMP提供了对并行算法的高层的抽象描述,程序员通过在程序的源代码中加入专用的指令来指明自己的意图,由此编译器可以自动将程序进行并行化。
按照采用混合的POSIX线程模式和OpenMP模式的多线程程序设计编写的程序,在非抢占性体系结构(non-preemptivearchitecture)中执行,容易产生线程死锁的问题。在按照采用混合的POSIX线程模式和OpenMP模式的多线程程序设计编写的程序中,Pthread和OpenMP线程彼此都不知道同时地存在着的对方。而在非抢占性(亦称“独占性”)体系结构中,多个线程共享计算资源,线程之间对计算资源的控制,是非抢占性的。例如,假设当前某个资源S被某个线程Ta控制,另一个线程Tb需要访问资源S。线程Tb不能抢占资源S,而是只有当线程Ta主动放弃对资源S的控制后,线程Tb才能取得对资源S的控制。但是,如果线程Ta是一个Pthread,线程Tb是一个OpenMP线程,线程Tb将试图占用资源S,从而产生冲突,导致程序的死循环或程序的退出。
发明内容
一方面,提供一种用于混合线程模式的程序的线程管理的方法,其中,所述程序的线程以非抢占方式共享多个硬件资源,该方法包含:建立与多个硬件资源分别相关联的多个虚拟线程VT;截获来自程序的线程的一个工作项;分析工作项所属线程与其它线程之间的关系;根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
另一方面,一种用于混合线程模式的程序的线程管理的装置,其中,所述程序的线程以非抢占方式共享多个硬件资源,该装置包含:虚拟线程创建模块,被配置以建立与多个硬件资源分别相关联的多个虚拟线程VT;工作项截获模块,被配置以截获来自程序的线程的一个工作项;线程关系分析模块,被配置以分析工作项所属线程与其它线程之间的关系;虚拟线程分配模块,被配置以根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
利用本发明,可以增强或替代OpenMP动态库和pthread动态库的进程管理功能,同时继承OpenMPI运行时库和pthread运行时库的其它功能。
附图说明
结合附图并参考以下详细说明,本发明各实施方式的特征、优点及其他方面将变得更加明显,在此以示例性而非限制性的方式示出了本发明的若干实施方式。在附图中:
图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图;
图2A和2B表示一例采用混合的POSIX线程模式和OpenMP模式的源程序的流程图;
图2C示意性表示图2A和2B所示的程序在执行时可能产生的线程冲突;
图3是按照本发明一个实施例的方法的流程图;
图4示意性表示按照本发明一个实施例的装置的框图;
图5示意性表示按照本发明一个实施例的方法的操作。
具体实施方式
附图中的流程图和框图,图示了按照本发明各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为备选的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依据所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算系统100可以包括:CPU(中央处理单元)101、RAM(随机存取存储器)102、ROM(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU101、RAM102、ROM103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。例如,计算系统100可以配置网络适配器,以便具有访问计算机网络的功能。
首先,说明按照现有技术,采用混合的POSIX线程模式和OpenMP模式编程的程序在运行时,程序的不同种类线程之间可能存在的资源冲突。
图2A示意性表示一例采用混合的POSIX线程模式和OpenMP线程模式的程序200。图2B表示图2A所示的程序200的线程结构。
图2B中显示了下列线程:主线程210、POSIX线程(下文简称“P线程”)P线程230和231、OpenMP线程(下文简称为“omp线程”250、251、252和253。其中主线程210是主程序Main(m)对应的线程。
P线程230、P线程231是主线程210的两个同类子线程,它们是通过主程序的线程操纵函数Pthread_create()创建的。图2B中的竖线示意性地表示,函数Pthread_create()创建了两个并行的执行区。
omp线程250和omp线程251是P线程230的两个异类子线程,即与P线程不同类型的子线程,它们是通过OpenMPparallel语句创建的。omp线程250和omp线程251是并行的兄弟线程,有共同的父线程230。
omp线程252和omp线程253是P线程231的两个异类子线程,它们是通过ompparallel语句创建的。omp线程252和omp线程253是并行的兄弟线程,有共同的父线程231。
图2C示意性表示图2A和2B所示的程序200在执行时可能产生的线程冲突。
图2C中示出了四个硬件资源291、292、293和294,例如四个CPU核。
框201、202、203表示三组线程。其中,框201表示主线程210及其子线程230和231,它们之间互相可见;框202表示父线程230及其子线程250和251,它们之间互相可见;框202表示父线程231及其子线程252和253,它们之间互相可见。
程序200被执行时,操作系统首先将硬件资源291分配给程序的主线程210。
P线程运行时库知道系统中有四个硬件资源291、292、293和294,于是将硬件资源292和293分配给pthread_0230和pthread_1231。
在P线程230所生成的并行工作区中,包含两个omp线程和250和251。
omp线程运行时库知道系统中有四个硬件资源291、292、293和294,在为omp线程250和251分配硬件资源时,认为当前程序的主线程为线程230,按照omp线程运行时库的线程管理策略,将omp线程250分配到与线程230的相同的硬件资源292。
由于pthread线程与openMP线程彼此互不可见,omp线程运行时库并不知道硬件资源291已经被分配给线程210,于是将线程251顺序地分配到硬件资源291。此时,线程251已经与程序真正的主线程210发生了硬件资源冲突。
在P线程231所生成的另一个并行工作区中,包含两个omp线程和252和253。
类似地,omp线程运行时库在为omp线程252和253分配硬件资源时,认为当前程序的主线程为线程231,按照omp线程运行时库的线程管理策略,将omp线程252分配到与线程230的相同的硬件资源293。由于两个并行区271与272分别是由两个不同的P线程230和231生成的,彼此不知道对方的线程是如何分配硬件资源的,omp线程运行时库除了知道硬件资源293已经被分配外,并不知道硬件资源291和292已经被分配,因此将线程253顺序地分配到硬件资源291。这样,线程253也与主线程210发生硬件资源冲突。
发明人经实验发现,上述的线程管理,还存在线程253得不到执行,而硬件资源294却不被使用的情况。
为此,本发明提出一种用于混合线程模式的程序的线程管理的方法和装置。本发明的总体构思,是对程序的不同种类的线程的工作项在虚拟线程中重新排列,通过虚拟线程的任务在独占式硬件资源上的执行,实现对硬件资源的共享,使来自不同类型的线程的工作项都能获得执行的机会。
以下参照附图3-5,详细说明本发明的各种实施方式。首先参看图3,该图表示按照本发明一个实施例的方法的流程图。
概括来说,图3所示的是一种用于混合线程模式的程序的线程管理的方法,其中,所述程序的线程以非抢占方式共享多个硬件资源,该方法包含以下步骤:建立与多个硬件资源分别相关联的多个虚拟线程VT;截获来自程序的线程的一个工作项;分析工作项所属线程与其它线程之间的关系;根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
现在参照附图,详细说明各个步骤的操作。为了方便说明,以下以图2A所示的程序200作为本发明实施例中的程序的例子。需要指出的是,程序200是采用混合的POSIX线程模式和OpenMP模式编程的程序,然而,所属技术领域的技术人员应当清楚,说明书以此为例,并不仅仅意味着本发明仅仅限于混合的POSIX线程模式和OpenMP模式编程的程序。
如图2B所示,程序200运行时产生的线程包括主线程210、P线程230和231以及omp线程250、251、252和253,如图2C所示,可供使用的硬件资源有硬件资源291、292、293和294。硬件资源也称硬件线程,执行计算机指令代码所需的部件,例如CPU核,内存等。
转看图3,本发明实施例的方法的过程,从步骤390开始。
作为初始化,步骤390建立与多个硬件资源分别相关联的多个虚拟线程VT(VirtualThread)。
步骤390建立的多个虚拟线程如图5所示。图5中显示了在步骤390中建立的四个虚拟线程581、582、583和584,它们与硬件资源291、292、293和294分别关联。虚拟线程581、582、583和584具有一般线程的功能,只不过并不是程序200的执行而产生的。
在步骤391,截获来自程序的线程的一个工作项。
所属技术领域的技术人员知道,工作项是一个线程所要完成的工作,在目标程序中,一个工作项就是一段二进制代码,由一个指针指示其起始地址。一个线程,可以有多个工作项;执行线程时,任何时候只执行一个当前工作项,当前工作项执行完后,再执行另一个工作项。
在不同的线程模型中,可能用不同的名称来表示工作项,例如,在OpenMP线程模型中,也将线程的工作项称为”工作”(workitem)。
所属技术领域的技术人员知道,不同类型的线程的工作项,都要通过相应的API接口提交给运行时库执行。P线程的工作项和omp线程的工作项,也是要通过P线程运行时库和omp线程运行时库执行。因此,按照本发明一个实施例,可以从API接口截获程序的线程向运行时库提交的工作项。
图2B中用带方框的标记例示了程序200中的线程的工作项。例如,带方框的标记w101表示主线程210的工作项。类似地,标记w201和w202分别表示P线程230和231的工作项;标记w301、w302、w303和w304分别表示omp线程250、251、252和253的工作项。
执行步骤391的结果,例如是截获了来自主线程210的工作项w101。
在步骤392,分析工作项所属线程与其它线程之间的关系。
线程之间的关系,包括父子关系,兄弟关系;创建一个子线程的线程,是被创建线程的父线程,被同一个线程创建的多个子线程,具有兄弟关系。
线程之间的关系,也包括同类关系和异类关系。例如,P线程与omp线程,具有异类关系。
按照本发明一个实施例,例如,对于工作项w101,根据程序语义,可以分析其所属的线程210是一个主线程。
如果步骤391截获的是工作项w201,根据程序语义,可以得知工作项w201所属的线程230是由主程序中的工作项Pthread_create()函数创建的,因此,工作项w201所属的线程230是主线程210的子线程。同样,如果步骤391截获的是工作项w202,也可以分析出其所属的线程230是主线程210的子线程。
按照本发明一个实施例,可以根据工作项的上下文信息,分析工作项所属线程与其它线程之间的关系。工作项的上下文信息包含下述内容:
-工作项所属线程的父线程的标识和种类;
-工作项所属线程兄弟线程的标识;
-工作项的起始地址;
-工作项的状态。
因此,通过工作项所属线程的父线程的标识和种类和所属线程兄弟线程的标识,可以分析工作项所属线程与其它线程之间的关系。
在步骤393,根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。分配到该虚拟线程的工作项,将成为该虚拟线程的一个任务。
下面参看2B和图5,说明如何根据分析结果将工作项分配到虚拟线程的各种方式。
例如,在步骤391截获了来自主线程210的工作项w101,在步骤392分析出工作项w101所属的线程210是一个主线程。
操作系统通常都会将主线程分配到第一个可用硬件资源。本发明遵循同样的原则,在步骤393,将工作项w101分配到与第一个可用硬件资源291相关联的虚拟线程581,作为虚拟线程581的一个任务。具体来说,如图5所示,通过将工作项w101放置到虚拟线程581的任务队列Q581中,把工作项w101分配给虚拟线程581。由于虚拟线程581是与硬件资源291相关联的,把工作项w101分配给虚拟线程581,相当于工作项w101的执行,可以占用硬件资源291。
再例如,在步骤391截获了来自P线程230的工作项w201,在步骤392分析出工作项w201所属的线程230是主线程210的子线程。在步骤393,将工作项w201分配到虚拟线程582,作为虚拟线程582的一个任务。具体来说,将工作项w201放置到虚拟线程582的任务队列Q582中。由于虚拟线程582是与硬件资源292相关联的,因此,工作项w201的执行,可以占用硬件资源292。
再例如,在步骤391截获了来自P线程231的工作项w202,在步骤392分析出工作项w202所属的线程231是主线程210的子线程,是线程230的兄弟线程,由于线程210的工作项w101和线程230的工作项w201分别被分配给虚拟线程291和292,在步骤393,将工作项w202分配到虚拟线程583,即把工作项w202作为一个任务放置到虚拟线程583的任务队列Q583中。由此,工作项w202的执行,可以占用硬件资源293。
上述为工作项w101、w201和w202分配虚拟线程的过程中,遵循的是P线程的一个分配规则,即:父线程的工作项,不与子线程的工作项分配在同一个虚拟线程。
当omp型线程250的工作项w301到来时,该工作项w301在步骤391被截获。在步骤392分析出工作项w301所属的线程250是一个omp线程,并且是P线程230的子线程,在步骤393,将工作项w301分配到虚拟线程582,即把工作项w301作为一个任务放置到任务队列Q582中。
上述为omp型线程250的工作项w301分配虚拟线程的过程中,遵循的是Omp线程的一个分配规则,即:父线程的工作项要与一个子线程的工作项分配在同一个虚拟线程。
按照本发明一个实施例,在将工作项分配到多个虚拟线程中的一个虚拟线程时,如果父线程与子线程是不同类型的线程,则工作项的分配按照子线程所属线程类型的分配规则,将工作项分配到多个虚拟线程中的一个虚拟线程。例如,工作项w301所属的线程250是omp型线程,而线程230是P线程,二者的线程类型不同。因此,在为工作项w301分配虚拟线程时,遵循工作项w301所属线程的线程类型的分配规则,即Omp线程的分配规则:父线程的工作项要与一个子线程的工作项分配在同一个虚拟线程。
要是相反的话,父线程是omp线程,子线程是P线程,则要遵循上述的P线程的分配规则,即:父线程的工作项,不与子线程的工作项分配在同一个虚拟线程。
返回图2B和图5,继续说明如何为来自其它线程的工作项分配虚拟线程。
当omp型线程250的工作项w302到来时,该工作项w301在步骤391被截获。在步骤392分析出,工作项w302所属的线程251,是一个omp线程,并且与线程250是兄弟线程,同为P线程230的子线程。
如上文所述,Omp线程的分配规则包含:父线程的工作项要与一个子线程的工作项分配在同一个虚拟线程。
按照本发明一个实施例,Omp线程的分配规则进一步包含:将负责兄弟线程之间的同步的子线程的工作项,与父线程的工作项分配在同一个虚拟线程的子线程。所属技术领域的技术人员知道,由工作项中的barrier函数,可以确定工作项所属的线程是否是负责同步的线程。
在步骤393,根据Omp线程的分配规则,判断线程251是否是一个负责兄弟线程(251、252)之间的同步的线程。如果是,则要将工作项320分配到虚拟线程582。
按照本发明一个实施例,omp线程的分配规则进一步包含:一个omp线程的工作项,不与负责兄弟线程之间的同步的omp型的子线程的工作项分配在同一个虚拟线程。
因此,假若同时截获到工作项301和302,而工作项302所属线程251是负责同步的线程,则要将工作项302分配到虚拟线程582,而不同时将工作项301分配到虚拟线程582。如果工作项301所属线程250是负责同步的线程,则要将工作项301分配到虚拟线程582,而不同时将工作项302分配到虚拟线程582。
这里,假设线程251不是负责同步的线程,而工作项301已经被分配给虚拟线程582,因此,不把工作项302分配给虚拟线程582。
按照符合平衡原则,将工作项w301分配到虚拟线程584,即把工作项w301作为一个任务放置到任务队列Q584中。
最后,如果在步骤截获到工作项w303和w304,由于工作项w303和w304与上文所述的w301和w302类似,分别属于两个omp线程252和253,而线程252和253都是P线程231的子线程,因此,对工作项w303和w304的分配方式,与对w301和w302的分配方式相似。如图所示,工作项w303和w304分别分配到虚拟线程583和584。
需要指出的是,在虚拟线程584的任务队列Q584中,工作项w304和工作项w302对应的任务之间,无需规定先后顺序,这是因为工作项w304和工作项w302之间没有直接依赖关系。
按照本发明一个实施例,可以根据工作项所属线程与其它线程的关系,确定工作项与所分配到的虚拟线程中的其它工作项之间的优先关系。例如,由于工作项w201所属的线程230是工作项w301所属的线程250的父线程,因此可以在任务队列Q582中,规定工作项w201对应的任务比工作项w301对应的任务具有更高的优先级。
以上说明了步骤390到步骤393的建立虚拟线程和为程序的线程的工作项分配虚拟线程的动态过程。如图3中标记为394的虚框所示,工作项作为任务分配到虚拟线程后,就可以访问虚拟线程相关联的硬件资源,而不会出现图2C所示的死锁现象。
以上说明了本发明的用于混合线程模式的程序的线程管理的方法的各种实施方式。按照相同的发明构思,本发明也提供一种用于混合线程模式的程序的线程管理的装置。
图4是按照本发明一个实施例的用于混合线程模式的程序的线程管理的装置的框图。
图4所示的装置400,可用于混合线程模式的程序的线程管理,所述程序的线程以非抢占方式共享多个硬件资源。该装置包含虚拟线程创建模块490、工作项截获模块491、线程关系分析模块492和虚拟线程分配模块493。
虚拟线程创建模块490被配置以建立与多个硬件资源分别相关联的多个虚拟线程VT。
工作项截获模块491被配置以截获来自程序的线程的一个工作项。
线程关系分析模块492被配置以分析工作项所属线程与其它线程之间的关系。
虚拟线程分配模块493被配置以根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
按照本发明一个实施例,工作项所属线程与其它线程之间的关系包含下列的任何一个或多个:父子关系;兄弟关系;同类关系;异类关系。
按照本发明一个实施例,线程关系分析模块492被进一步配置,以根据程序语义,分析工作项所属线程与其它线程之间的关系。
按照本发明一个实施例,线程关系分析模块492被进一步配置,以根据工作项的上下文信息,分析工作项所属线程与其它线程之间的关系。
按照本发明一个实施例,所述程序的线程包含P线程和omp线程,其中,虚拟线程分配模块493被进一步配置,以在父线程和子线程的线程类型不同时,按照子线程所属线程类型的分配规则,将工作项分配到多个虚拟线程中的一个虚拟线程。
按照本发明一个实施例,P线程的分配规则包含:父线程的工作项,不与子线程的工作项分配在同一个虚拟线程;omp线程的分配规则包含:将父线程的工作项和父线程的其中一个子线程的工作项分配到同一个虚拟线程。
按照本发明一个实施例,omp线程的分配规则进一步包含:将负责兄弟线程之间的同步的omp型的子线程的工作项,与父线程的工作项分配在同一个虚拟线程的子线程。
按照本发明一个实施例,omp线程的分配规则进一步包含:一个omp线程的工作项,不与负责兄弟线程之间的同步的omp型的子线程的工作项分配在同一个虚拟线程。
按照本发明一个实施例,工作项截获模块491被配置以通过API接口截获程序的线程向运行时库提交的工作项。
按照本发明一个实施例,虚拟线程分配模块被进一步配置,以根据工作项所属线程与其它线程的关系,确定工作项与所分配到的虚拟线程中的其它工作项之间的优先关系。
以上描述了按照本发明实施例的用于混合线程模式的程序的线程管理的装置,由于上文已经详细地描述了按照本发明各种实施例的用于混合线程模式的程序的线程管理的方法,在上述对装置的描述中,省略了明显与对方法的描述重复、或者很容易从对方法的描述中引申得出的内容。
应指出的是,以上描述仅为示例,而不是对本发明的限制。在本发明的其他实施例中,该方法可具有更多、更少或不同的步骤,对步骤的编号,是为了使说明更加简明,而不是对各步骤之间的顺序关系的严格限定,各步骤与步骤之间的顺序可以与所描述的不同。
因此,在本发明的一些实施例中,可以没有上述一个或多个可选步骤。每个步骤的具体执行方式可以与所描述的不同。所有这些变化都处于本发明的精神和范围之内。
本发明可以采取硬件实施方式、软件实施方式或既包含硬件组件又包含软件组件的实施方式的形式。在优选实施方式中,本发明实现为软件,其包括但不限于固件、驻留软件、微代码等。
而且,本发明还可以采取可从计算机可用或计算机可读介质访问的计算机程序产品的形式,这些介质提供程序代码以供计算机或任何指令执行系统使用或与其结合使用。出于描述目的,计算机可用或计算机可读机制可以是任何有形的装置,其可以包含、存储、通信、传播或传输程序以由指令执行系统、装置或设备使用或与其结合使用。
介质可以是电的、磁的、光的、电磁的、红外线的、或半导体的系统(或装置或器件)或传播介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可移动计算机磁盘、随机访问存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。目前光盘的例子包括紧凑盘-只读存储器(CD-ROM)、压缩盘-读/写(CD-R/W)和DVD。
适合于存储/或执行程序代码的数据处理系统将包括至少一个处理器,其直接地或通过系统总线间接地耦合到存储器元件。存储器元件可以包括在程序代码的实际执行期间所利用的本地存储器、大容量存储器、以及提供至少一部分程序代码的临时存储以便减少执行期间从大容量存储器必须取回代码的次数的高速缓存存储器。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备等等)可以直接地或通过中间I/O控制器耦合到系统。
网络适配器也可以耦合到系统,以使得数据处理系统能够通过中间的私有或公共网络而耦合到其他数据处理系统或远程打印机或存储设备。调制解调器、线缆调制解调器以及以太网卡仅仅是当前可用的网络适配器类型的几个例子。
从上述描述应当理解,在不脱离本发明真实精神的情况下,可以对本发明各实施方式进行修改和变更。本说明书中的描述仅仅是说明性的,而不应被认为是限制性的。本发明的范围仅受所附权利要求书的限制。
Claims (18)
1.一种用于混合线程模式的程序的线程管理的方法,其中,所述程序的线程以非抢占方式共享多个硬件资源,该方法包含:
建立与多个硬件资源分别相关联的多个虚拟线程;
截获来自程序的线程的一个工作项;
分析工作项所属线程与其它线程之间的关系,其中,工作项所属线程与其它线程之间的关系包含下列的任何一个或多个:父子关系、兄弟关系、同类关系、异类关系;
根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
2.按照权利要求1的方法,其中,所述分析工作项所属线程与其它线程之间的关系,包含根据程序语义,分析工作项所属线程与其它线程之间的关系。
3.按照权利要求1的方法,其中,所述分析工作项所属线程与其它线程之间的关系,包含根据工作项的上下文信息,分析工作项所属线程与其它线程之间的关系。
4.按照权利要求2或3的方法,其中,所述程序的线程包含POSIX线程和OpenMP线程,其中,所述根据分析结果将工作项分配到多个虚拟线程中的一个虚拟线程包含,如果父线程和子线程的线程类型不同,则按照子线程所属线程类型的分配规则,将工作项分配到多个虚拟线程中的一个虚拟线程。
5.按照权利要求4的方法,其中,
POSIX线程的分配规则包含:父线程的工作项,不与子线程的工作项分配在同一个虚拟线程;
OpenMP线程的分配规则包含:将父线程的工作项和父线程的其中一个子线程的工作项分配到同一个虚拟线程。
6.按照权利要求5的方法,其中,OpenMP线程的分配规则进一步包含:将负责兄弟线程之间的同步的OpenMP型子线程的工作项,与父线程的工作项分配在同一个虚拟线程的子线程。
7.按照权利要求6的方法,其中,OpenMP线程的分配规则进一步包含:一个OpenMP线程的工作项,不与负责兄弟线程之间的同步的OpenMP型子线程的工作项分配在同一个虚拟线程。
8.按照权利要求1的方法,其中,所述截获来自程序的线程的一个工作项,包含通过应用编程接口API截获程序的线程向运行时库提交的工作项。
9.按照权利要求1的方法,进一步包含:根据工作项所属线程与其它线程的关系,确定工作项与所分配到的虚拟线程中的其它工作项之间的优先关系。
10.一种用于混合线程模式的程序的线程管理的装置,其中,所述程序的线程以非抢占方式共享多个硬件资源,该装置包含:
虚拟线程创建模块,被配置以建立与多个硬件资源分别相关联的多个虚拟线程;
工作项截获模块,被配置以截获来自程序的线程的一个工作项;
线程关系分析模块,被配置以分析工作项所属线程与其它线程之间的关系,其中,工作项所属线程与其它线程之间的关系包含下列的任何一个或多个:父子关系、兄弟关系、同类关系、异类关系;
虚拟线程分配模块,被配置以根据分析结果,将工作项分配到多个虚拟线程中的一个虚拟线程。
11.按照权利要求10的装置,其中,线程关系分析模块被进一步配置以根据程序语义,分析工作项所属线程与其它线程之间的关系。
12.按照权利要求10的装置,其中,线程关系分析模块被进一步配置以根据工作项的上下文信息,分析工作项所属线程与其它线程之间的关系。
13.按照权利要求11或12的装置,其中所述程序的线程的类型包含POSIX线程和OpenMP线程,其中,虚拟线程分配模块被进一步配置,以在父线程和子线程的线程类型不同时,按照子线程所属线程类型的分配规则,将工作项分配到多个虚拟线程中的一个虚拟线程。
14.按照权利要求13的装置,其中,POSIX线程的分配规则包含:父线程的工作项,不与子线程的工作项分配在同一个虚拟线程;OpenMP线程的分配规则包含:将父线程的工作项和父线程的其中一个子线程的工作项分配到同一个虚拟线程。
15.按照权利要求14的装置,其中,OpenMP线程的分配规则进一步包含:将负责兄弟线程之间的同步的OpenMP子线程的工作项,与父线程的工作项分配在同一个虚拟线程的子线程。
16.按照权利要求15的装置,其中,OpenMP线程的分配规则进一步包含:一个OpenMP线程的工作项,不与负责兄弟线程之间的同步的OpenMP子线程的工作项分配在同一个虚拟线程。
17.按照权利要求10的装置,其中,所述截获来自程序的线程的一个工作项,包含通过应用编程接口API截获程序的线程向运行时库提交的工作项。
18.按照权利要求10的装置,其中,虚拟线程分配模块被进一步配置,以根据工作项所属线程与其它线程的关系,确定工作项与所分配到的虚拟线程中的其它工作项之间的优先关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110391185.XA CN103136035B (zh) | 2011-11-30 | 2011-11-30 | 用于混合线程模式的程序的线程管理的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110391185.XA CN103136035B (zh) | 2011-11-30 | 2011-11-30 | 用于混合线程模式的程序的线程管理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103136035A CN103136035A (zh) | 2013-06-05 |
CN103136035B true CN103136035B (zh) | 2015-11-25 |
Family
ID=48495899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110391185.XA Expired - Fee Related CN103136035B (zh) | 2011-11-30 | 2011-11-30 | 用于混合线程模式的程序的线程管理的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103136035B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103713938A (zh) * | 2013-12-17 | 2014-04-09 | 江苏名通信息科技有限公司 | 虚拟化环境下基于OpenMP的多GPU协同计算方法 |
CN103617091B (zh) * | 2013-12-18 | 2017-06-16 | 深圳市道通科技股份有限公司 | 硬件资源动态分配的实现方法及装置 |
US9588811B2 (en) * | 2015-01-06 | 2017-03-07 | Mediatek Inc. | Method and apparatus for analysis of thread latency |
CN106933534B (zh) * | 2015-12-31 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101097514A (zh) * | 2006-06-27 | 2008-01-02 | 国际商业机器公司 | 启用同时多线程(smt)的系统及其管理方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8332852B2 (en) * | 2008-07-21 | 2012-12-11 | International Business Machines Corporation | Thread-to-processor assignment based on affinity identifiers |
JP5173714B2 (ja) * | 2008-09-30 | 2013-04-03 | ルネサスエレクトロニクス株式会社 | マルチスレッドプロセッサ及びその割り込み処理方法 |
US9021483B2 (en) * | 2009-04-27 | 2015-04-28 | International Business Machines Corporation | Making hardware objects and operations thread-safe |
-
2011
- 2011-11-30 CN CN201110391185.XA patent/CN103136035B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101097514A (zh) * | 2006-06-27 | 2008-01-02 | 国际商业机器公司 | 启用同时多线程(smt)的系统及其管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103136035A (zh) | 2013-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wu et al. | Flep: Enabling flexible and efficient preemption on gpus | |
US9098918B2 (en) | Graphics processor with non-blocking concurrent architecture | |
Krömer et al. | Many-threaded implementation of differential evolution for the CUDA platform | |
US8601486B2 (en) | Deterministic parallelization through atomic task computation | |
US11163677B2 (en) | Dynamically allocated thread-local storage | |
Tillenius | Superglue: A shared memory framework using data versioning for dependency-aware task-based parallelization | |
CN103136035B (zh) | 用于混合线程模式的程序的线程管理的方法和装置 | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
Dalmia et al. | Improving the Scalability of GPU Synchronization Primitives | |
Khasanov et al. | Implicit data-parallelism in kahn process networks: Bridging the macqueen gap | |
Zheng et al. | Hiwaylib: A software framework for enabling high performance communications for heterogeneous pipeline computations | |
Skrzypczak et al. | Efficient parallel implementation of crowd simulation using a hybrid CPU+ GPU high performance computing system | |
Berezovskyi et al. | Faster makespan estimation for GPU threads on a single streaming multiprocessor | |
CN107239334B (zh) | 处理不规则应用的方法及装置 | |
Vo et al. | HyperFlow: A Heterogeneous Dataflow Architecture. | |
Chandrashekhar et al. | Performance analysis of parallel programming paradigms on CPU-GPU clusters | |
Li et al. | Concurrent query processing in a GPU-based database system | |
Dubrulle et al. | A low-overhead dedicated execution support for stream applications on shared-memory CMP | |
Jani et al. | Hpcfolder: a simple tool used to parallelize algorithms using the message passing interface (MPI) | |
Wimmer | Variations on task scheduling for shared memory systems | |
Knorr et al. | Automatic Discovery of Collective Communication Patterns in Parallelized Task Graphs | |
US9547522B2 (en) | Method and system for reconfigurable virtual single processor programming model | |
Evripidou et al. | Data-flow vs control-flow for extreme level computing | |
Kode et al. | Analysis of Synchronization Mechanisms in Operating Systems | |
Chen et al. | Communication Awareness |
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: 20151125 Termination date: 20201130 |
|
CF01 | Termination of patent right due to non-payment of annual fee |