CN102520915A - 非统一内存访问系统中线程化串行程序的方法及装置 - Google Patents

非统一内存访问系统中线程化串行程序的方法及装置 Download PDF

Info

Publication number
CN102520915A
CN102520915A CN201110381862XA CN201110381862A CN102520915A CN 102520915 A CN102520915 A CN 102520915A CN 201110381862X A CN201110381862X A CN 201110381862XA CN 201110381862 A CN201110381862 A CN 201110381862A CN 102520915 A CN102520915 A CN 102520915A
Authority
CN
China
Prior art keywords
speculative threads
serial program
memory access
processor
threading
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.)
Granted
Application number
CN201110381862XA
Other languages
English (en)
Other versions
CN102520915B (zh
Inventor
李艳华
张悠慧
谭玺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Huawei Technologies Co Ltd
Original Assignee
Tsinghua University
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tsinghua University, Huawei Technologies Co Ltd filed Critical Tsinghua University
Priority to CN201110381862.XA priority Critical patent/CN102520915B/zh
Publication of CN102520915A publication Critical patent/CN102520915A/zh
Application granted granted Critical
Publication of CN102520915B publication Critical patent/CN102520915B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种非统一内存访问系统中线程化串行程序的方法及装置,涉及多线程技术领域,能够缓减在非统一内存访问系统中由于访存延时差异所导致的多核处理器执行串行程序时的性能的降低。本发明的方法包括:接收待处理的串行程序;获取多核处理器的信息,其中包括多核处理器的互联结构信息、每个所述处理器核的访存延时中的至少一项;将所述串行程序中的可用循环部分线程化为推测线程,将所述串行程序中的串行部分和非可用循环部分线程化为控制线程;根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。本发明用于支持推测多线程机制的非统一内存访问系统中线程化执行串行程序。

Description

非统一内存访问系统中线程化串行程序的方法及装置
技术领域
本发明涉及多线程技术领域,尤其涉及一种非统一内存访问系统中线程化串行程序的方法及装置。
背景技术
随着多核芯片(Chip Multi-Processor,CMP)技术的发展,多核处理器得到广泛应用。现有的多核处理器主要有UMA(Uniform Memory Access,统一内存访问)和NUMA(Non-Uniform Memory Access,非统一内存访问)这两种结构形式。
在UMA中,设备中有多个CPU(Central Processing Unit,中央处理器/处理器)对称工作,共享相同的物理内存,除CPU以外的所有资源都是共享的,每个CPU访问内存中的任何地址所需时间相同的;在NUMA中具有多个CPU模块,每个CPU模块由多个CPU核组成并且具有独立的本地内存、输入输出接口等。不同CPU模块可以进行连接和信息交互,故每个CPU模块可以访问其他CPU模块的内存。
在使用多核处理器处理传统的串行程序时,需要将串行程序线程化,从而加速串行程序在多核处理器上的执行速度,并使多核处理器的获取资源得到更充分的利用。推测多线程技术(Speculative Multithreading,SMT)就是线程化串行程序的一种方案。
推测多线程技术的基本思路是:将串行程序的串行部分和循环部分(循环部分包含串行程序中的多个循环体)划分为新的线程,并将这些线程分配至多个CPU(Central Processing Unit,中央处理器)核上执行。
在NUMA中实行推测多线程技术的方法与在UMA中实行推测多线程技术的方法基本相同。即将串行程序线程化为多线程程序,并将不同的线程随机分配至CPU核上执行;CPU核在执行线程的过程中,需要不断访问内存以支持CPU核的获取功能,具体的,就是CPU核在执行线程的过程中根据线程的具体执行代码,访问本地内存,或是通过NUMA中CPU模块之间的互联网络访问其他CPU模块中的内存,从而完成线程的执行过程。
在将上述方案应用在NUMA中时,CPU核在访问内存时存在访存延时,访存延时会影响推测多线程机制的执行效果,从而降低多核处理器的性能。
发明内容
本发明的实施例提供一种非统一内存访问系统中线程化串行程序的方法及装置,能够缓减在非统一内存访问系统中由于访存延时所导致的多核处理器性能的降低。
本发明的实施例采用如下技术方案:
一方面,本发明的实施例提供一种非统一内存访问系统中线程化串行程序的方法,包括:
接收待处理的串行程序;
获取多核处理器的信息,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项,所述延时信息包含每个所述处理器核的访存延时;
将所述串行程序中的循环部分线程化为推测线程,将所述串行程序中的串行部分线程化为控制线程;
根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
另一方面,本发明的实施例提供一种非统一内存访问系统中线程化串行程序的装置,包括:
接收模块,用于接收待处理的串行程序;
提取模块,获取多核处理器的信息,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项,所述延时信息包含每个所述处理器核的访存延时;
线程化模块,用于将所述串行程序中的循环部分线程化为推测线程,将所述串行程序中的串行部分线程化为控制线程;
分配模块,用于根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
本发明实施例提供的方法和装置,能够在非统一内存访问系统中,根据CPU核访问内存时的延迟信息、各多核处理器的互联结构信息和各CPU核的状态信息等对串行程序进行线程划分,并根据这些信息,通过相应的调度计划,将推测线程调度至CPU核上执行。与现有技术相比,本发明实施例能够对串行程序进行合理的线程划分,并将这些线程以最佳策略分配至CPU核上执行,从而缓减在非统一内存访问系统中由于访存延时所导致的多核处理器性能的降低。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图;
图1为本发明实施例1提供的非统一内存访问系统中线程化串行程序的方法的流程图;
图2为本发明实施例2提供的非统一内存访问系统中线程化串行程序的方法的流程图;
图3为本发明实施例1、实施例2提供的非统一内存访问系统中线程化串行程序的方法中的具体实例的流程图;
图4为本发明实施例2提供的非统一内存访问系统中线程化串行程序的方法中的具体实例的结构图;
图5为本发明实施例3提供的非统一内存访问系统中线程化串行程序的装置的结构示意图;
图6为本发明实施例4提供的非统一内存访问系统中线程化串行程序的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为使本发明技术方案的优点更加清楚,下面结合附图和实施例对本发明作详细说明。
实施例1
本发明实施例提供一种非统一内存访问系统中线程化串行程序的方法,如图1所示,该方法包括:
步骤101,接收待处理的串行程序。
具体的,在本实施例中,在NUMA系统中,计算机通过操作系统中的程序剖析工具接受待处理的串行程序,并对该串行程序的代码进行前段编译及优化,将串行程序的程序代码转化为中间代码,为进一步的代码剖析做准备,例如:
如图3所示,计算机通过程序剖析工具中的SUIF前端编译工具对串行程序的代码进行编译,得到中间代码,并通过SUIF优化器对该中间代码进行优化,得到优化的中间代码。
步骤102,获取多核处理器的信息。
其中,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项,所述延时信息包含所述所有处理器核的访存延时。
具体的,在本实施例中,在NUMA系统中,计算机可以建立两个数据结构:NUMA基本信息表和可用节点状态信息表。收集NUMA系统的互联结构信息(可以包括NUMA系统互联拓扑互联结构信息等)和延时信息(可以各核访问不同内存段的平均延时等),并保存在NUMA基本信息表中。同时,通过查询系统状态和运行测试程序,获取计算机中多核处理器的使用情况,
进一步的,将该多核处理器中所有CPU核的状态信息(可以包括CPU核使用率、CPU核之间的访存冲突的情况等)保存在可用节点状态信息表中,例如:
如图3所示,计算机通过操作系统中的信息收集工具收集诸如互联结构信息、延时信息、状态信息等NUMA系统信息,并将这些信息作为NUMA启发信息发送至线程生成器,从而使线程生成器能够根据互联结构信息、延时信息、状态信息等NUMA系统信息以更加合理的策略将串行程序线程化。
步骤103,将所述串行程序中的可用循环部分线程化为推测线程,将所述串行程序中的串行部分和非可用循环部分线程化为控制线程。
具体的,在本实施例中,将所述串行程序中的循环部分线程化为推测线程的过程可以是:计算机通过剖析工具对串行程序的中间代码进行剖析,收集循环部分的信息;对于循环部分中可被线程化的循环体,进行依赖分析,得到各个循环体之间的依赖信息;线程生成器根据循环部分的信息和循环体之间的数据传输信息,根据互联结构信息、延时信息、状态信息等NUMA系统信息所衍生的线程化的规则,通过SUIF后端编译工具将中间代码编译为线程化可执行代码,例如:
如图3所示,计算机通过剖析工具(GNU Prof)对优化的中间代码进行动态剖析,收集包括循环体起点-终点位置,循环次数,循环体大小等信息;并对于潜在的派生循环体,进行深入的依赖分析,包括数据依赖分析和控制依赖分析,并获得循环间依赖信息。线程生成器利用剖析信息和循环间依赖信息,根据从NUMA启发信息衍生得到启发式规则,确定适合派生为推测多线程的区域和派生线程数目,并在派生区域首尾加入多线程代码和控制信息,并对循环判定条件和推测线程的部分初始化数据进行预测赋值。最后,使用SUIF后端编译工具将线程生成器生成的代码编译为线程化可执行代码。
步骤104,根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
具体的,在本实施例中,计算机将串行程序经过线程化所得到的各个线程的执行代码,根据互联结构信息和/或延时信息所衍生的分配规则,以更加合理的策略分配至CPU核中。
本发明实施例提供的方法,能够在非统一内存访问系统中,根据CPU核的访问内存时的延迟信息、各多核处理器的互联结构信息和各CPU核的状态信息等对串行程序进行线程划分,并根据这些信息,通过相应的调度计划,将推测线程调度至CPU核上执行。与现有技术相比,本发明实施例能够对串行程序进行合理的线程划分,并将这些线程以最佳策略分配至CPU核上执行,从而缓减在非统一内存访问系统中由于访存延时所导致的多核处理器性能的降低。
实施例2
本发明实施例提供一种非统一内存访问系统中线程化串行程序的方法,如图2所示,该方法包括:
步骤201,接收待处理的串行程序。
步骤202,获取多核处理器的信息,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项。
其中,所述延时信息包含所述所有处理器核的访存延时。
步骤203,确定所述循环部分中的循环体,获取每一个循环体在每两次循环之间的数据传输量。
步骤204,判断所述数据传输量是否小于预设值。
其中,若所述数据传输量小于预设值,则所述循环体为串行程序中的可用循环体;若所述数据传输量不小于预设值,则所述循环体为不可用循环体。
关于预设值的设定可以由本领域技术人员根据实际需要进行,在此不再赘述。
进一步的,计算机可以根据线程提交时的时延自动反馈调节预设值。
步骤205,根据所述使用率获取可用处理器核的数量。
其中,所述多核处理器的信息还包括所有处理器核的状态信息,所述状态信息包含所有处理器的使用率。
具体的,在本实施例中,计算机可以从可用节点状态信息表里获取状态信息,该状态信息中包含的可用CPU核数目。
步骤206,获取所述串行程序中所有可用循环体所包含的循环次数。
具体的,在本实施例中,计算机可以通过剖析工具对中间代码进行剖析,并根据剖析所得到的信息获取循环体循环次数。
步骤207,取所述可用处理器核的数量和所述循环次数的最小值作为推测线程的数目。
具体的,在本实施例中,计算机取所述可用处理器核的数量和所述循环次数的最小值作为推测线程的数目,例如:
node表示可用CPU核的数目,loop表示计算机在通过剖析工具对中间代码进行剖析所得到的循环体循环次数,从而推测线程数目等于node和loop中的较小值,即推测线程数目=Min{node,loop},例如:可用CPU核数目node=2,循环体循环次数loop=3,则推测线程数目为2。
步骤208,依次获取所述串行程序中的可用循环体,并将获取到的可用循环体依次生成为推测线程。
具体的,在本实施例中,计算机可以通过线程生成器将可用循环体逐个依次生成为推测线程中。
步骤209,获取当前推测线程的执行时间,判断所述执行时间是否不小于阈值。
其中,所述阈值根据所有处理器核的访存延时的平均值获得。
其中,若所述执行时间小于所述阈值,则重复步骤208,获取下一个可用循环体并将其加入至当前的推测线程中,直至当前推测线程的执行时间不小于所述阈值。
具体的,在本实施例中,计算机可以通过线程生成器将一个可用循环体加入到推测线程中,并检测该推测线程执行时间是否大于等于所有处理器核的访存延时的平均值。如果这个条件不满足,则可以选取另一个可用循环体并加入到该推测线程中,并再次检测该推测线程执行时间是否大于等于所有处理器核的访存延时的平均值,直至推测线程执行时间大于等于所有处理器核的访存延时的平均值为止。从而,使该推测线程中包含了足够数量的循环体,以便该推测线程在CPU核上执行时,能够更多地利用CPU核的计算功能。
步骤210,将所有不可用循环体加入到控制线程中。
具体的,在本实施例中,计算机将经过步骤204所得到的不可用循环体加入到控制线程中,从而使包含了可用循环体的推测线程在CPU核上执行时,能够更多地利用CPU核的计算功能。
步骤211,根据所述延时信息,将所述控制线程分配至所述可用处理器核中延时时间最小的处理器核。
具体的,在本实施例中,计算机可以从可用节点状态信息表中所包含的延时信息中,锁定平均时延最小的CPU核,并将控制线程分配至该CPU核上。
步骤212,根据所述互联结构信息确定与控制线程所在的处理器核位于同一个处理器模块的处理器核。
具体的,在本实施例中,如图4所示,为一个16核NUMA结构的多核处理器。其中,该多核处理器由4个CPU模块组成,并且每个CPU模块都包含独立的4个CPU核、本地内存、I/O槽口等元件,同时这4个CPU模块共享一个高速缓冲存储器。由于各个CPU模块之间可以通过互联网络进行连接和信息交互,因此每个CPU核可以访问其他CPU模块的本地内存。但是,CPU核访问本地内存的速度将远高于访问系统内其它节点的本地内存的速度,并且访问其他CPU模块的本地内存的CPU核会产生较大的延时。
计算机可以根据互联结构信息确定与控制线程所在的CPU核位于同一个处理器模块的CPU核,例如:控制线程所在的CPU核为CPU模块1中的C1,计算机根据互联结构信息获知同样是CPU模块1中的C2、C3、C4为与控制线程所在的处理器核位于同一个处理器模块的处理器核。
步骤213,将推测线程优先分配至与控制线程所在的处理器核位于同一个处理器模块的处理器核。
步骤214,在没有被分配的推测线程中,获得相互间具有数据依赖关系的推测线程及具有数据依赖的推测线程的数据传输量。
具体的,在本实施例中,如图3所示,由于串行程序的源代码是前后连续的,所以在一个推测线程的执行过程中,会需要另一个推测线程的数据、程序代码或执行结果等,即推测线程中之间会存在数据依赖,计算机可以通过剖析工具对中间代码进行动态剖析,从而确定相互之间具有数据依赖的推测线程,并获取具有数据依赖的推测线程的数据传输量。
步骤215,将有具有数据依赖的推测线程中的数据传输量大的推测线程优先分配至位于同一个处理器模块中的处理器核。
具体的,在本实施例中,计算机将相互之间具有数据依赖的推测线程分配至位于同一个处理器模块中的处理器核,例如:
如图3所示,计算机可以通过剖析工具对中间代码进行动态剖析,并得知推测线程A和推测线程B之间、推测线程C和推测线程D之间、推测线程E和推测线程F之间存在数据依赖并获得了推测线程A和推测线程B之间的数据传输量1、推测线程C和推测线程D之间的数据传输量2、推测线程E和推测线程F之间的数据传输量3,并且数据传输量1大于数据传输量2,数据传输量2大于数据传输量3。
如图4所示,由于数据传输量1大于数据传输量2,数据传输量2大于数据传输量3,则计算机优先将推测线程A和推测线程B分别分配至CPU模块2中的C1和C2上;之后计算机采用相同方法,由于数据传输量2大于数据传输量3,则计算机优先将推测线程C和推测线程D分别分配至CPU模块2中的C3和C4上;对于推测线程E和推测线程F,若还有可以同时容纳推测线程E和推测线程F这两个推测线程的CPU模块,则将推测线程E和推测线程F分配至该CPU模块中,若已没有可以同时容纳两个推测线程的CPU模块,则将推测线程E和推测线程F归入其余没有被分配的推测线程,并采用步骤216的方法处理其余没有被分配的推测线程。
在线程的执行过程中,C1执行推测线程A,并将执行过程中推测线程A的信息储存至本地内存2中,同时,C2执行推测线程B的过程中需要读取推测线程A的信息,则C2能够直接从本地内存2读取C1储存在本地内存2中的推测线程A的信息,从而避免了CPU核在访问其他CPU模块的本地内存时所产生的延时,从而缓减了因延时导致的CPU执行多线程程序时的性能降低。
步骤216,将其余没有被分配的推测线程优先分配至延时时间与控制线程所在处理器核的延时时间的差值小的处理器核。
具体的,在本实施例中,计算机将控制线程所在处理器核的延时时间与剩余的可用CPU核的访存时延时间之间的差值由小到大排序,并将没有被分配的推测线程优先分配至差值小的处理器核上,从而保证了在每次分配CPU核的过程中,使用的都是与控制线程所在处理器核的延时时间的差值最小的那一部分CPU核,从而缓减了因延时导致的CPU执行多线程程序时的性能降低。
本发明实施例提供的方法,能够在非统一内存访问系统中,根据CPU核的访问内存时的延迟信息、各多核处理器的互联结构信息和各CPU核的状态信息等对串行程序进行线程划分,并根据这些信息,通过相应的调度计划,将推测线程调度至CPU核上执行。与现有技术相比,本发明实施例能够对串行程序进行合理的线程划分,并将这些线程以最佳策略分配至CPU核上执行,从而缓减在非统一内存访问系统中由于访存延时所导致的多核处理器性能的降低。
实施例3
本发明实施例提供一种非统一内存访问系统中线程化串行程序的装置,如图3所示,该装置包括:接收模块501、提取模块502、线程化模块503、分配模块504。
接收模块501,用于接收待处理的串行程序。
提取模块502,用于获取多核处理器的信息,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项。
其中,所述延时信息包含所述所有处理器核的访存延时。
线程化模块503,用于将所述串行程序中的循环部分线程化为推测线程,将所述串行程序中的串行部分线程化为控制线程。
分配模块504,用于根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
本发明实施例提供的装置,能够在非统一内存访问系统中,通过接收模块接受待处理的串行程序,并通过提取模块获取CPU核的访问内存时的延迟信息、各多核处理器的互联结构信息和各CPU核的状态信息等信息,再通过线程化模块根据这些信息对串行程序进行线程划分,并根据这些信息,使用分配模块,通过相应的调度计划,将推测线程调度至CPU核上执行。与现有技术相比,本发明实施例能够对串行程序进行合理的线程划分,并将这些线程以最佳策略分配至CPU核上执行,从而缓减在非统一内存访问系统中由于访存延时所导致的多核处理器性能的降低。
实施例4
本发明实施例提供一种非统一内存访问系统中线程化串行程序的装置,如图3所示,该装置50包括:接收模块501、提取模块502、线程化模块503、分配模块504,其中,线程化模块503包括:第一提取单元5031、第一检测单元5032、第二提取单元5033、第三提取单元5034、比较单元5035、第一添加单元5036、第二检测单元5037、第二添加单元5038;分配模块504包括:第一分配单元5041、定位单元5042、第二分配单元5043、筛选单元5044、第三分配单元5045、第四分配单元5046。
接收模块501,用于接收待处理的串行程序。
提取模块502,用于获取多核处理器的互联结构信息、所有处理器核的延时信息和所有处理器核的状态信息中的至少一项。
其中,所述延时信息包含所述所有处理器核的访存延时。
线程化模块503,用于将所述串行程序中的可用循环部分线程化为推测线程,将所述串行程序中的串行部分和非可用循环部分线程化为控制线程。
其中所述线程化模块503包括:
第一提取单元5031,用于确定所述循环部分中的循环体,获取每一个循环体在每两次循环之间的数据传输量。
第一检测单元5032,用于判断所述数据传输量是否小于预设值。
其中,若所述数据传输量小于预设值,则所述循环体为串行程序中的可用循环体;若所述数据传输量不小于预设值,则所述循环体为不可用循环体。
第二提取单元5033,用于根据所述使用率获取可用处理器核的数量。
其中,所述多核处理器的信息还包括所有处理器核的状态信息,所述状态信息包含所有处理器的使用率。
第三提取单元5034,用于获取所述串行程序中所有可用循环体所包含的循环次数。
比较单元5035,用于取所述可用处理器核的数量和所述循环次数的最小值作为推测线程的数目。
第一添加单元5036,用于依次获取所述串行程序中的可用循环体,并将获取到的可用循环体依次生成为推测线程,获取下一个可用循环体并加入到当前推测线程中,直至当前推测线程的执行时间不小于所述阈值。
第二检测单元5037,用于获取当前推测线程的执行时间,判断所述执行时间是否不小于阈值,所述阈值根据所有处理器核的访存延时的平均值获得。
若小于,则通过所述第一添加单元5036获取下一个可用循环体并加入到当前推测线程中,直至当前推测线程的执行时间不小于所述所有处理器核的访存延时的平均值。
第二添加单元5038,用于将所有不可用循环体加入到控制线程中。
分配模块504,用于根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
其中所述分配模块504包括:
第一分配单元5041,用于根据所述延时信息,将所述控制线程分配至所述可用处理器核中相互访存平均延时时间最小的处理器核。
定位单元5042,用于根据所述互联结构信息确定与控制线程所在的处理器核位于同一个处理器模块的处理器核。
第二分配单元5043,用于将推测线程优先分配至与控制线程所在的处理器核位于同一个处理器模块的处理器核。
筛选单元5044,用于在没有被分配的推测线程中,获取具有数据依赖的推测线程,并获取所述具有数据依赖的推测线程的数据传输量。
第三分配单元5045,用于将有具有数据依赖的推测线程中的数据传输量大的推测线程优先分配至位于同一个处理器模块中的处理器核。
第四分配单元5046,用于将其余没有被分配的推测线程优先分配至延时时间与控制线程所在处理器核的延时时间的差值小的处理器核。
本发明实施例提供的装置,能够在非统一内存访问系统中,通过接收模块接受待处理的串行程序,并通过提取模块获取CPU核的访问内存时的延迟信息、各多核处理器的互联结构信息和各CPU核的状态信息等信息,再通过线程化模块根据这些信息对串行程序进行线程划分,并根据这些信息,使用分配模块,通过相应的调度计划,将推测线程调度至CPU核上执行。与现有技术相比,本发明实施例能够对串行程序进行合理的线程划分,并将这些线程以最佳策略分配至CPU核上执行,从而缓减在非统一内存访问系统中由于访存延时所导致的多核处理器性能的降低。
本领域普通技术人员可以理解实现上述实施例装置中的全部或部分流程,是可以通过获取机程序来指令相关的硬件来完成,所述的程序可存储于一获取机可读取存储介质中,该程序在执行时,可包括如上述各装置的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (16)

1.一种非统一内存访问系统中线程化串行程序的方法,其特征在于,包括:
接收待处理的串行程序;
获取多核处理器的信息,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项,所述延时信息包含每个所述处理器核的访存延时;
将所述串行程序中的可用循环部分线程化为推测线程,将所述串行程序中的串行部分和非可用循环部分线程化为控制线程;
根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
2.根据权利要求1所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述将所述串行程序中的可用循环部分线程化为推测线程包括:
确定所述循环部分中的循环体,获取每一个循环体在每两次循环之间的数据传输量;
判断所述数据传输量是否小于预设值,若所述数据传输量小于预设值,则所述循环体为串行程序中的可用循环体,若所述数据传输量不小于预设值,则所述循环体为不可用循环体;
将可用循环体生成为推测线程,将不可用循环体加入到控制线程中。
3.根据权利要求2所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述多核处理器的信息还包括所有处理器核的状态信息,所述状态信息包含所有处理器的使用率,在所述将可用循环体生成为推测线程之前,所述方法还包括:
根据所述使用率获取可用处理器核的数量;
获取所述串行程序中所有可用循环体所包含的循环次数;
取所述可用处理器核的数量和所述循环次数的最小值作为推测线程的数目。
4.根据权利要求2所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述将可用循环体生成为推测线程包括:
依次获取所述串行程序中的可用循环体,并将获取到的可用循环体依次生成为推测线程,获取当前推测线程的执行时间,判断所述执行时间是否不小于阈值,所述阈值根据所有处理器核的访存延时的平均值获得;
若小于,则获取下一个可用循环体并加入到当前推测线程中,直至当前推测线程的执行时间不小于所述阈值。
5.根据权利要求1所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述将所述控制线程分配至处理器核为:根据所述延时信息,将所述控制线程分配至所述可用处理器核中相互访存平均延时时间最小的处理器核。
6.根据权利要求1至5任一项所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述根据所述互联结构信息和所述延时信息中的至少一项,将所述推测线程分配至处理器核包括:
根据所述互联结构信息确定与控制线程所在的处理器核位于同一个处理器模块的处理器核;
将推测线程优先分配至与控制线程所在的处理器核位于同一个处理器模块的处理器核。
7.根据权利要求6所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述根据所述互联结构信息和所述延时信息中的至少一项,将所述推测线程分配至处理器核还包括:
在没有被分配的推测线程中,获得推测线程相互间的数据依赖及数据传输量。
将有具有数据依赖的推测线程中的数据传输量大的推测线程优先分配至位于同一个处理器模块中的处理器核。
8.根据权利要求7所述的非统一内存访问系统中线程化串行程序的方法,其特征在于,所述根据所述互联结构信息和所述延时信息中的至少一项,将所述推测线程分配至处理器核还包括:
将其余没有被分配的推测线程优先分配至延时时间与控制线程所在处理器核的延时时间的差值小的处理器核。
9.一种非统一内存访问系统中线程化串行程序的装置,其特征在于,包括:
接收模块,用于接收待处理的串行程序;
提取模块,获取多核处理器的信息,所述多核处理器的信息包括所述多核处理器的互联结构信息、所有处理器核的延时信息中的至少一项,所述延时信息包含每个所述处理器核的访存延时;
线程化模块,用于将所述串行程序中的可用循环部分线程化为推测线程,将所述串行程序中的串行部分和非可用循环部分线程化为控制线程;
分配模块,用于根据所述互联结构信息和所述延时信息中的至少一项,将所述控制线程和所述推测线程分配至处理器核。
10.根据权利要求9所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述线程化模块包括:
第一提取单元,用于确定所述循环部分中的循环体,获取每一个循环体在每两次循环之间的数据传输量;
第一检测单元,用于判断所述数据传输量是否小于预设值,若所述数据传输量小于预设值,则所述循环体为串行程序中的可用循环体;若所述数据传输量不小于预设值,则所述循环体为不可用循环体;
第一添加单元,用于将可用循环体生成为推测线程;
第二添加单元,用于将所有不可用循环体加入到控制线程中。
11.根据权利要求10所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述多核处理器的信息还包括所有处理器核的状态信息,所述状态信息包含所有处理器的使用率,在所述第一添加单元之前,所述装置还包括:
第二提取单元,用于根据所述使用率获取可用处理器核的数量;
第三提取单元,用于获取所述串行程序中所有可用循环体所包含的循环次数;
比较单元,用于取所述可用处理器核的数量和所述循环次数的最小值作为推测线程的数目。
12.根据权利要求10所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述线程化模块还包括:
所述第一添加单元,用于将可用循环体生成为推测线程,所述将可用循环体加入至推测线程为:依次获取所述串行程序中的可用循环体,并将获取到的可用循环体依次生成为推测线程,获取下一个可用循环体并加入到当前推测线程中,直至当前推测线程的执行时间不小于所述阈值;
第二检测单元,用于获取当前推测线程的执行时间,判断所述执行时间是否不小于阈值,所述阈值根据所有处理器核的访存延时的平均值获得。
13.根据权利要求9所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述分配模块包括:
第一分配单元,用于根据所述延时信息,将所述控制线程分配至所述可用处理器核中相互访存平均延时时间最小的处理器核。
14.根据权利要求9至13任一项所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述分配模块包括:
定位单元,用于根据所述互联结构信息确定与控制线程所在的处理器核位于同一个处理器模块的处理器核;
第二分配单元,用于将推测线程优先分配至与控制线程所在的处理器核位于同一个处理器模块的处理器核。
15.根据权利要求14所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述分配模块包括:
筛选单元,用于在没有被分配的推测线程中,获取具有数据依赖的推测线程,并获取所述具有数据依赖的推测线程的数据传输量;
第三分配单元,用于将有具有数据依赖的推测线程中的数据传输量大的推测线程优先分配至位于同一个处理器模块中的处理器核。
16.根据权利要求15所述的非统一内存访问系统中线程化串行程序的装置,其特征在于,所述分配模块包括:
第四分配单元,用于将其余没有被分配的推测线程优先分配至延时时间与控制线程所在处理器核的延时时间的差值小的处理器核。
CN201110381862.XA 2011-11-25 2011-11-25 非统一内存访问系统中线程化串行程序的方法及装置 Active CN102520915B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110381862.XA CN102520915B (zh) 2011-11-25 2011-11-25 非统一内存访问系统中线程化串行程序的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110381862.XA CN102520915B (zh) 2011-11-25 2011-11-25 非统一内存访问系统中线程化串行程序的方法及装置

Publications (2)

Publication Number Publication Date
CN102520915A true CN102520915A (zh) 2012-06-27
CN102520915B CN102520915B (zh) 2014-04-02

Family

ID=46291858

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110381862.XA Active CN102520915B (zh) 2011-11-25 2011-11-25 非统一内存访问系统中线程化串行程序的方法及装置

Country Status (1)

Country Link
CN (1) CN102520915B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104111868A (zh) * 2013-04-22 2014-10-22 华为技术有限公司 一种推测多线程调度方法及装置
CN105045652A (zh) * 2015-07-07 2015-11-11 深圳市云舒网络技术有限公司 一种多终端共同处理多并行线程程序的方法和处理系统
CN105700946A (zh) * 2016-01-15 2016-06-22 华中科技大学 一种numa架构下平衡多线程间访存延迟的调度系统及方法
CN106991071A (zh) * 2017-03-31 2017-07-28 联想(北京)有限公司 内核调度方法及系统
CN111240845A (zh) * 2020-01-13 2020-06-05 腾讯科技(深圳)有限公司 一种数据处理方法、装置和存储介质
CN111756802A (zh) * 2020-05-26 2020-10-09 深圳大学 一种数据流任务在numa平台上的调度方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101807144A (zh) * 2010-03-17 2010-08-18 上海大学 一种前瞻多线程并行执行优化方法
CN102063291A (zh) * 2011-01-13 2011-05-18 上海大学 一种前瞻线程的多级并行执行方法
CN102081551A (zh) * 2011-01-28 2011-06-01 中国人民解放军国防科学技术大学 一种感知微体系结构信息的操作系统线程调度方法
US20110209154A1 (en) * 2010-02-24 2011-08-25 International Business Machines Corporation Thread speculative execution and asynchronous conflict events

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110209154A1 (en) * 2010-02-24 2011-08-25 International Business Machines Corporation Thread speculative execution and asynchronous conflict events
CN101807144A (zh) * 2010-03-17 2010-08-18 上海大学 一种前瞻多线程并行执行优化方法
CN102063291A (zh) * 2011-01-13 2011-05-18 上海大学 一种前瞻线程的多级并行执行方法
CN102081551A (zh) * 2011-01-28 2011-06-01 中国人民解放军国防科学技术大学 一种感知微体系结构信息的操作系统线程调度方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104111868A (zh) * 2013-04-22 2014-10-22 华为技术有限公司 一种推测多线程调度方法及装置
CN104111868B (zh) * 2013-04-22 2017-08-11 华为技术有限公司 一种推测多线程调度方法及装置
CN105045652A (zh) * 2015-07-07 2015-11-11 深圳市云舒网络技术有限公司 一种多终端共同处理多并行线程程序的方法和处理系统
CN105045652B (zh) * 2015-07-07 2018-11-13 深圳市云舒网络技术有限公司 一种多终端共同处理多并行线程程序的方法和处理系统
CN105700946A (zh) * 2016-01-15 2016-06-22 华中科技大学 一种numa架构下平衡多线程间访存延迟的调度系统及方法
CN105700946B (zh) * 2016-01-15 2019-03-05 华中科技大学 一种numa架构下平衡多线程间访存延迟的调度系统及方法
CN106991071A (zh) * 2017-03-31 2017-07-28 联想(北京)有限公司 内核调度方法及系统
CN106991071B (zh) * 2017-03-31 2021-05-18 联想(北京)有限公司 内核调度方法及系统
CN111240845A (zh) * 2020-01-13 2020-06-05 腾讯科技(深圳)有限公司 一种数据处理方法、装置和存储介质
CN111240845B (zh) * 2020-01-13 2023-10-03 腾讯科技(深圳)有限公司 一种数据处理方法、装置和存储介质
CN111756802A (zh) * 2020-05-26 2020-10-09 深圳大学 一种数据流任务在numa平台上的调度方法及系统
CN111756802B (zh) * 2020-05-26 2021-09-03 深圳大学 一种数据流任务在numa平台上的调度方法及系统

Also Published As

Publication number Publication date
CN102520915B (zh) 2014-04-02

Similar Documents

Publication Publication Date Title
CN102520915B (zh) 非统一内存访问系统中线程化串行程序的方法及装置
US7526637B2 (en) Adaptive execution method for multithreaded processor-based parallel system
Zhong et al. Uncovering hidden loop level parallelism in sequential applications
KR101738641B1 (ko) 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법
Kim et al. Automatic speculative doall for clusters
Tian et al. Speculative parallelization using state separation and multiple value prediction
CN102902512A (zh) 一种基于多线程编程及消息队列的多线程并行处理方法
WO2013184380A2 (en) Systems and methods for efficient scheduling of concurrent applications in multithreaded processors
Chu et al. Data access partitioning for fine-grain parallelism on multicore architectures
CN103294554A (zh) 片上系统soc的多处理器的调度方法及装置
CN1717663A (zh) 管理缓存旁路的方法和装置
DE10393260T5 (de) Nachdurchgangs-Binäranpassung für eine auf Software basierende spekulative Vorberechnung
Hayes et al. Unified on-chip memory allocation for SIMT architecture
KR102402584B1 (ko) 사용자 어플리케이션의 특성에 따른 연산 디바이스 동적 제어 기법
CN105242929B (zh) 一种针对多核平台的二进制程序自动并行化的设计方法
CN101989192A (zh) 一种程序自动并行化的方法
US9690552B2 (en) Technologies for low-level composable high performance computing libraries
US10083066B2 (en) Processing data by using simultaneous multithreading
CN108132834B (zh) 多级共享高速缓冲存储器架构下的任务分配方法和系统
Sioutas et al. Schedule synthesis for halide pipelines on gpus
Whaley et al. Heuristics for profile-driven method-level speculative parallelization
CN102855137A (zh) 用于自动化部件的编程的方法和程序设计系统
CN106844024B (zh) 一种自学习运行时间预测模型的gpu/cpu调度方法及系统
Luo et al. Compositional model of coherence and NUMA effects for optimizing thread and data placement
US20160371068A1 (en) Computer that performs compiling, compiler program, and link program

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