CN1853166A - 用于多线程的线程管理的方法和装置 - Google Patents
用于多线程的线程管理的方法和装置 Download PDFInfo
- Publication number
- CN1853166A CN1853166A CNA2004800271775A CN200480027177A CN1853166A CN 1853166 A CN1853166 A CN 1853166A CN A2004800271775 A CNA2004800271775 A CN A2004800271775A CN 200480027177 A CN200480027177 A CN 200480027177A CN 1853166 A CN1853166 A CN 1853166A
- Authority
- CN
- China
- Prior art keywords
- thread
- resource
- threads
- current thread
- sub
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Remote Monitoring And Control Of Power-Distribution Networks (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Time-Division Multiplex Systems (AREA)
Abstract
这里描述了用于多线程的线程管理的方法和装置。在一个实施例中,示例性处理包括在编译具有数据处理系统中可执行的一个或多个线程的代码期间,选择具有最底顺序的当前线程;确定分配给从所述当前线程中产生的一个或多个子线程的资源;以及考虑到分配给所述当前线程的一个或多个子线程的资源来分配用于所述当前线程的资源,以避免所述当前线程及其一个或多个子线程之间的资源冲突。也描述了其它方法和装置。
Description
技术领域
本发明的实施例涉及信息处理系统,尤其涉及用于多线程的线程管理。
背景
存储器等待时间已变成在现代处理器上实现高性能的关键瓶颈。现今的许多大型应用是存储器密集的,因为它们的存储器访问模式很难预测且它们的工作组正变得相当大。尽管高速缓存设计的持续进步以及预取技术的新发展,存储器瓶颈问题仍然存在。当执行指针密集的应用程序时该问题更糟,这些应用程序趋向于违背常规的基于跨步的预取技术。
一种解决方案是使一个程序中的存储器停顿与来自另一个程序的有用指令的执行相重叠,从而在总体吞吐量上有效地改善系统性能。改善单个处理器的多任务工作负荷的吞吐量已经是新兴的同时多线程(SMT)技术背后的主要动因。SMT处理器能在同一周期内发出来自多个硬件上下文或逻辑处理器的指令(也称作硬件线程)到超标量处理器的功能单元。SMT通过在每个周期内经由独立线程之间的自然并行的利用来增加架构可用的总体指令级并行从而实现了更高的总吞吐量。
SMT还可以改善多线程的应用的性能。但是,在减少等待时间方面,SMT不直接改善单线程应用的性能。由于常规PC环境中桌面应用的大多数仍是单线程的,所以研究SMT资源是否和如何可被用于通过减少其等待时间来增强单线程的代码性能是很重要的。此外,现有的编译器通常不能自动地为其创建的线程分配资源。
附图说明
通过参考被用于说明本发明实施例的以下描述和附图最佳地理解本发明。图中:
图1示出了根据一个实施例的具有多线程能力的计算机系统。
图2示出了根据可选实施例的具有多线程能力的计算机系统。
图3示出了根据一个实施例的具有能产生辅助线程的编译器的计算机系统。
图4A示出了典型的对称多线程处理。
图4B示出了根据一个实施例的非对称多线程处理。
图5是示出根据一个实施例的用于执行一个或多个辅助线程的示例性处理的流程图。
图6是示出根据一个实施例的多线程系统的示例性软件架构的框图。
图7是示出根据一个实施例的用于产生辅助线程的示例性处理的流程图。
图8是示出根据一个实施例的用于并行化分析的示例性处理的流程图。
图9A-9C示出了根据一个实施例的用于应用程序、主线程和辅助线程的伪代码。
图10是示出根据一个实施例的示例性线程配置的框图。
图11是示出根据一个实施例的用于分配用于线程的资源的示例性伪代码的框图。
图12是示出根据一个实施例的包含用于线程的资源信息的示例性资源数据结构的框图。
图13是示出根据一个实施例的分配用于线程的资源的示例性处理的流程图。
图14A-14D示出了使用技术实施例的多种基准测试的结果。
具体实施方式
将描述用于多线程系统的编译器创建的辅助线程的方法和装置。根据一个实施例,也称作AutoHelper(自动辅助)的编译器在例如Intel公司的Intel PentiumTM4超线程系统的多线程系统上执行基于线程的预取辅助线程。在一个实施例中,编译器使用于超线程处理器的辅助线程的生成自动化。这些技术关注识别和生成最小尺寸的辅助线程,它们可以被执行以实现及时和有效的数据预取,同时引发最小的通信开销。还执行运行时间系统以有效地管理辅助线程以及线程之间的同步。结果,辅助线程能发出用于顺序指针密集应用的及时预取。
此外,可以在编译器内为辅助线程管理诸如寄存器上下文的硬件资源。特别是,可以静态地或动态地在主线程和辅助线程之间以及多个辅助线程之间分割寄存器组。结果,当编译器用尽资源时或者在出现特定主线程事件的稀少情况的运行时间时,可以避免经由线程存储器的内驻/外驻寄存器拷贝并且可以在编译时间销毁所述线程。
在以下描述中,阐述了大量细节。但是,可以理解,本发明的实施例可在没有这些细节的情况下实施。在其它实例中,未详细示出公知电路、结构和技术,以便不影响对描述的理解。
以下详细描述的一些部分按照算法和对计算机存储器内数据比特的操作的符号表示来提供。数据处理领域内的熟练技术人员将这些算法描述和表示用于最有效地将其工作的实质传达给本领域的其它熟练技术人员。这里,算法被认为是获得期望结果的自一致操作序列。这些操作需要物理量的物理操作。通常,尽管不必要,但这些量采取能够存储、传输、组合、比较和其它处理的电子或磁性信号的形式。已证明,特别是出于普通使用的原因,将这些信号称作比特、值、元素、符号、字符、项、数量等有时是方便的。
但要记住,所有这些和类似的术语与合适的物理量相关联且仅仅是应用于这些量的方便的标记。除非另外特别声明或从以下讨论中显见,可以理解,使用诸如“处理”或“计算”或“计算”或“确定”或“显示”等的术语贯穿于描述中表示计算机系统或类似数据处理装置的动作和过程,它们将表示为计算机系统的寄存器和存储器内的物理(例如,电子)量的数据处理和转换成类似地被表示为计算机系统存储器或寄存器或其它这种信息存储、传输或显示装置内的物理量的其它数据。
本发明的实施例还涉及用于执行这里所述的操作的装置。一个装置可专门为所需的用途而构建,或者它可以包括由计算机中存储的计算机程序选择性地激活或再配置的通用计算机。这种计算机程序可存入计算机可读存储媒体,诸如但不限于任何类型的盘,包括软盘、光盘、CD-ROM和磁光盘,只读存储器(ROM),随机存取存储器(RAM),诸如动态RAM(DRAM)、可擦可编程ROM(EPROM)、电可擦可编程ROM(EEPROM)、磁或光卡,或者适于存储电子指令的任何类型的媒体,其中以上存储组件的每一种都耦合于计算机系统总线。
这里提供的算法和显示非固有地关于任何特殊计算机或其它装置。各种通用装置可与根据这里的教导的程序一起使用,或者可证明构建专门的装置来执行这些方法是方便的。用于这些系统的结构可从以下描述中显现。此外,本发明的实施例不参考任何特殊的编程语言进行描述。可以理解,各种编程语言都可用于实现这里描述的本发明实施例的教导内容。
机器可读媒体包括用于以机器(例如计算机)可读的形式存储和发送信息的任何机制。例如,机器可读媒体包括只读存储器(ROM);随机存取存储器(RAM);磁盘存储媒体;光学存储媒体;闪存装置;电气、光学、声学或其它形式的传播信号(例如,载波、红外线信号、数字信号等);等等。
图1是可与实施例一起使用的示例性计算机的框图。例如,图1所示的示例性系统100可执行图5-8所示的处理。示例性系统100可以是多线程系统,诸如Intel PentiumTM 4超线程系统。示例性系统100可以是支持同时多线程(SMT)或芯片多处理(CMP)的系统。
注意:虽然图1示出了计算机系统的各种组件,但它不打算表示互连这些组件的任何特殊架构或方式,因为这些细节并非与本发明是密切联系的。还可以理解,网络计算机、手持计算机、蜂窝电话和具有更少或更多组件的其它数据处理系统也可与本发明一起使用。
如图1所示,作为一种数据处理系统形式的计算机系统100包括耦合到微处理器103和ROM 107、易失性RAM 105和非易失性存储器106的总线102。微处理器103(可以是Intel公司的Pentium处理器或者Motorola公司的PowerPC处理器)与高速缓存存储器104耦合,如图1的示例中所示的。总线102将这些组件互连在一起并且还将这些组件103、107、105和106耦合到显示控制器和显示器装置108,以及输入/输出(I/O)装置110,它们可以是鼠标、键盘、调制解调器、网络接口、打印机和本领域公知的其它装置。通常,输入/输出装置110通过输入/输出控制器109耦合到系统。易失性RAM 105通常作为持续地需要电能以刷新或维持存储器中的数据的动态RAM(DRAM)实现。非易失性存储器106通常是磁性硬盘驱动器、磁光驱动器、光学驱动器或DVD RAM或者及时在系统断电后也能维持数据的其它类型的存储器系统。通常,非易失性存储器还将是随机存取存储器,尽管这是不需要的。虽然图1示出非易失性存储器是与数据处理系统中的剩余组件直接耦合的本地装置,但可以理解,本发明可以使用远程于系统的非易失性存储器,诸如通过诸如调制解调器或以太网接口的网络接口与数据处理系统耦合的网络存储装置。总线102可以包括通过桥、控制器和/或适配器相互连接的一条或多条总线,如本领域公知的。在一个实施例中,I/O控制器109包括用于控制USB外围设备的USB(通用串行总线)适配器或者用于控制PCI装置的PCI控制器,它们可以包含在IO装置110中。在另一实施例中,I/O控制器109包括用于控制IEEE 1394装置(也称作火线装置)的IEEE 1394控制器。
根据一个实施例,处理器103可以包括一个或多个逻辑硬件上下文,也称作逻辑处理器,用于同时处理应用程序的多个线程,包括也称作非猜测线程的主线程以及也称作猜测线程的一个或多个辅助线程。处理器103可以是超线程处理器,诸如Intel公司的能执行多线程处理的Pentium 4或Xeon处理器。在应用程序的执行期间,并行地执行主线程和一个或多个辅助线程。辅助线程与主线程相关联地(但稍许独立)猜测执行,以执行主线程的一些预先计算,诸如地址或数据的猜测预取,从而减少由主线程引起的存储器等待时间。
根据一个实施例,辅助线程的代码(例如源代码和二进制可执行代码)由诸如Intel公司的AutoHelper编译器的编译器生成,由诸如处理器103的处理器执行的操作系统(OS)在诸如易失性RAM 105的存储器中加载并执行。示例性系统100内运行的操作系统可以是Microsoft公司的Windows操作系统或者是AppleComputer公司的Mac OS。或者,该操作系统可以是Linux或Unix操作系统。可以使用诸如嵌入式实时操作系统的其它操作系统。
当前的超线程处理器通常提供两个硬件上下文或逻辑处理器。为了改善单线程应用的性能,超线程技术可利用其第二上下文执行主线程的预取。具有分开的上下文允许辅助线程的执行与主线程的控制流断开,这与软件预取不同。通过远在主线程之前执行长程预取,辅助线程可较早地触发预取,并消除或减少主线程所经受的高速缓存不命中惩罚。
采用AutoHelper,编译器能自动生成用于超线程机器的预取辅助线程。辅助线程目标在于向顺序工作负荷提供超线程的等待时间隐匿的好处。与常规并行编译器所产生的线程不同,辅助线程仅为主线程做预取,而主线程不重用来自辅助线程的计算结果。根据一个实施例,程序正确性仍由主线程的执行来维护,而辅助线程不影响程序正确性且仅用于性能改善。该属性允许在生成辅助线程时使用更进取形式的优化。例如,当主线程不需要帮助时,可以执行某些优化,这是常规吞吐量线程范例所不可能的。
在一个实施例中,如果预测在某一时间周期内不需要辅助器,该辅助器可以终止并释放与该辅助器相关的所有资源给主线程。根据另一实施例,如果预测立刻需要一辅助器,则该辅助器可处于暂停模式,这仍消耗超线程硬件上的一些资源。如果辅助器停留在暂停模式太久(例如,超过了可编程超时周期),则将调用指数补偿(通过暂停)。根据另一实施例,如果编译器不能预测何时将需要辅助线程,则该辅助器可处于打盹模式并可以放弃所占用的处理器资源给主线程。
此外,根据一个实施例,在辅助线程范例下使得性能监控和即时调节成为可能,因为辅助线程不贡献主程序的语义。当主线程需要辅助器时,它将唤醒主线程。例如,相对于失控辅助或落后(run-behind)线程,可调用上述处理之一来调节该失控辅助线程。
图2是能执行所揭示的技术的计算系统200的一个实施例的框图。在一个实施例中,计算系统200包括处理器204和存储器202。存储器202可存储用于控制处理器204的操作的指令210和数据212。处理器204可包括向执行核心230提供指令信息的前端221。该前端221可按程序顺序向处理器核心204提供指令信息。
对于至少一个实施例,前端221包括读取/解码单元222,它包括用于多个线程上下文中的每一个的逻辑独立的序列器。逻辑独立的序列器220可包括标记逻辑280以便将用于猜测线程的指令信息标记为“猜测的”。本领域的熟练技术人员将认识到,对于在多处理器多线程环境中执行的实施例,读取/解码单元222内可以仅包括一个序列器220。
如这里所使用的,术语“指令信息”意在表示执行核心230能理解和执行的指令。指令信息可存入高速缓存225。该高速缓存225可作为执行指令高速缓存或执行跟踪高速缓存而实现。对于使用执行指令高速缓存的实施例,“指令信息”包括从高速缓存读取并被解码的指令。对于使用跟踪高速缓存的实施例,术语“指令信息”包括解码的微操作的跟踪。对于不使用执行指令高速缓存也不使用跟踪高速缓存的实施例,“指令信息”还包括用于可存入诸如I高速缓存244的指令高速缓存的指令的原始字节。
图3是示出根据一个实施例的包含用于生成一个或多个辅助线程的编译器的示例性系统的框图。参考图3,示例性处理系统300包括存储器系统302和处理器304。存储器系统302可存储用于控制处理器304的操作的指令310和数据312。例如,指令310可包括编译器程序308,它在被执行时使得处理器304编译存储器系统302内驻留的程序。存储器302保存要编译的程序、程序的中间形式以及所获得的编译程序。对于至少一个实施例,编译器程序308包括指令来生成用于相对于主线程的一个或多个辅助线程的代码。
存储器系统302意在作为存储器的一般化表示并可以包括各种形式的存储器,诸如硬盘驱动器、CD-ROM、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)和有关电路。存储器系统302可以存储指令310和/或由处理器304执行的数据信号所表示的数据。指令310和/或数据312可包括用于执行这里所讨论的任何或所有技术的代码。
特别是,编译器308可包括拖欠(delinquent)负荷标识符320,它在由处理器304执行时标识主线程的一个或多个拖欠负荷区域。编译器308也可包括并行化分析器324,它在由处理器304执行时对辅助线程进行一个或多个并行化分析。此外,编译器308可包括分片器(slicer),它标识要由辅助线程执行的一个或多个片以执行猜测预先计算。编译器308可进一步包括代码发生器328,它在由处理器304执行时生成用于辅助线程的代码(例如,源代码和可执行代码)。
根据一个实施例,如图4B所示,SMT机器中的执行辅助线程是非对称多线程的一种形式。常规的并行编程模型提供对称的多线程,如图4A所示。相反,诸如图4B中的辅助线程451-454的辅助线程作为具有轻量线程调用和切换的用户级线程(纤维(fiber))执行。此外,对称多线程需要对称线程(诸如图4A中的线程401-404)上良好地调节的数据分解。在辅助线程模型中,根据一个实施例,主线程运行对整个数据组操作的顺序代码,而不带来数据分解开销。在不分解数据的情况下,编译器代替地集中于提供多个辅助器用于及时地预取主线程的数据。
图5是示出根据一个实施例的用于执行辅助线程的示例性处理的流程图。示例性处理500可通过处理逻辑执行,该处理逻辑可包括硬件(电路、专用逻辑等)、软件(诸如在通用计算机系统或专用机器上运行的)或者它们的组合。在一个实施例中,示例性处理500包括执行多线程系统中的应用程序的主线程,并在主线程进入具有一个或多个拖欠负荷的区域时从主线程中产生一个或多个辅助线程以执行用于该主线程的一项或多项计算,其中在主线程的编译期间创建一个或多个辅助线程的代码。
参考图5,在框501处,处理逻辑创建内部线程池以维护一个或多个辅助线程所使用的逻辑线程上下文的列表。在框502处,可以在主线程进入由编译器标识的拖欠负荷区域(例如,预先计算区域)之前创建新线程队。在一个实施例中,新线程队初始仅包含呼叫线程。根据一个实施例,在主线程进入所述区域以激活一个或多个辅助线程之前,编译器可插入一语句,诸如start_helper语句。在框503处,当主线程进入所述区域时,主线程(经由诸如invoke_helper的函数调用)产生一个或多个辅助线程,它们利用来自线程池的资源被创建以执行主线程的一项或多项预先计算,诸如预取地址和数据。根据一个实施例,如果用于执行所产生的辅助线程的逻辑处理器不可用,则可用创建辅助线程并将其置入用于线程队的运行队列,用于后续执行。在一个实施例中,运行队列可与超时相关联。假定预取将不再是及时的,在超时周期到期后,简单地结束(终止)对调用辅助器的请求。这与用于其中需要执行每个任务的并行编程的常规任务队列模型不同。
在框504处,部分利用一个或多个辅助线程提供的数据(例如,预取的或预先计算的)执行主线程的区域内的至少一部分代码。根据一个实施例,辅助线程计算的结果不被集成入组线程。辅助线程的好处在于其预取的副作用,而不在于重用其计算结果。这允许编译器进取地优化辅助线程的代码生成。主线程处理正确性问题,同时辅助线程把程序性能作为目标。这还允许辅助线程调用语句(诸如invoke_helper)结束请求,只要认为合适。最后,如果在辅助线程中用信号表示了异常,诸如预取指令的非故障指令可用于避免对主线程的中断。
在框505处,当主线程将要退出拖欠负荷区域时终止与主线程相关联的一个或多个辅助线程(通过函数调用,诸如finish_helper),且与终止的辅助线程相关联的诸如逻辑线程上下文的资源被释放回给线程池。这使得将来的请求能立刻再循环来自线程池的逻辑线程上下文。可用包括本领域的普通技术人员显而易见的其它操作。
超线程技术良好地适于支持一个或多个辅助线程的执行。根据一个实施例,在每个处理器周期中,在共享的执行资源上可以调度并执行来自任一逻辑处理器的指令。这允许辅助线程及时地发出预取。此外,整个片载高速缓存层次结构在逻辑处理器之间共享,这有助于辅助线程有效地在高速缓存层次结构的所有等级处为主线程做预取。此外,尽管在逻辑处理器之间共享物理执行资源,在超线程处理器中复制该架构状态。辅助线程的执行将不改变执行主线程的逻辑处理器中的架构状态。
但是,在支持超线程技术的机器上,由于对存储器的写入,辅助线程仍会影响主线程的执行。因为辅助线程与主线程共享存储器,辅助线程的执行应保证不对主线程的数据结构进行写入。在一个实施例中,编译器(例如,AutoHelper)提供主线程和辅助线程之间的存储器保护。编译器去除对辅助线程中非本地变量的存储。
图6是示出根据一个实施例的编译器的示例性架构的框图。在一个实施例中,示例性架构600尤其包括前端模块601、剖析器(profiler)602、过程间分析和优化模块603、编译器604、全局标量优化模块605以及后端模块606。在一个实施例中,前端模块601提供用于诸如C/C++和Fortran的各种编程语言编写的源代码的普通中间表示,诸如来自Intel公司的IL0表示。结果,可应用诸如AutoHelper 604的编译器,而不管源语言和目标平台。剖析器602进行剖析运行以检查该表示的特征。过程间分析模块603可暴露程序呼叫边界上的优化机会。此后,调用编译器604(例如,AutoHelper)以生成用于一个或多个辅助线程的代码。全局标量优化模块605利用部分冗余消除进行应用以最小化对表达式求值的次数。最后,后端模块606生成用于各种平台的辅助线程的二进制代码,诸如Intel公司的IA-32或Itanium平台。可以包括本领域普通技术人员显而易见的其它组件。
与常规方法不同,AutoHelper(例如,编译器)消除了剖析实行遍(pass)以使该工具更易于使用。根据一个实施例,编译器可直接分析来自剖析结果的输出,诸如由Intel的VTuneTM Performance Analyzer所生成的那些,这能用于超线程技术。因为它是代替遍后工具的中间端遍,该编译器能使用几种产品质量分析,诸如数组依赖性分析和全局标量优化等。在编译器之后调用的这些分析对辅助线程的代码进行进取的优化。
根据一个实施例,编译器生成一个或多个辅助线程以预先计算和预取频繁不命中高速缓存的负荷(也称作拖欠负荷)所访问的地址。编译器还在主线程中生成产生一个或多个辅助线程的一个或多个触发器。编译器将该触发器作为调用函数实现,诸如invoke_helper函数呼叫。一旦达到该触发器,就期望负荷稍后出现于主线程的指令流中,因此猜测执行的辅助线程可减少主线程中高速缓存不命中的数量。
图7是示出根据一个实施例的由诸如AutoHelper的编译器执行的示例性处理的流程图。示例性处理700可由处理逻辑执行,该处理逻辑可包括硬件(电路、专用逻辑等)、软件(诸如通用计算机系统或专用机器上运行的)或者它们的组合。在一个实施例中,示例性处理700始于框701,用以例如用Intel公司的Vtune工具标识拖欠负荷,以执行用于辅助线程的并行化分析(框702),以生成用于辅助线程的代码(框703),并且向每个辅助线程和主线程分配诸如硬件寄存器或存储器的资源(框704),这将在以下详细描述。
根据一个实施例,编译器利用一个或多个运行时间剖析标识应用程序源代码中最拖欠负荷。常规编译器按两个步骤收集这些剖析:剖析实行和剖析生成。但是,因为高速缓存不命中不是向编译器公开的架构特征,剖析实行遍不允许对编译器的高速缓存不命中的实行以标识拖欠负荷。用于每个高速缓存层次结构的剖析经由诸如Intel公司的VTuneTM Analyzer的工具被收集。在一个实施例中,可以用在编译器之前分开的剖析运行中的调试信息来执行应用程序。在剖析运行期间,采样高速缓存不命中且为应用程序中的每个静态负荷累积硬件计数器。
编译器标识用于基于线程的预取的候选。在特殊实施例中,VTuneTM以每个负荷为基概括高速缓存行为。因为用调试信息(例如,调试符号)编译用于剖析运行的二进制代码,可能使剖析源行号和语句相关。贡献大于一预定阈值的某些负荷可标识为拖欠负荷。在一特殊实施例中,贡献90%高速缓存不命中的最大负荷被标注为拖欠负荷。
除了标识拖欠负荷指令之外,编译器生成精确计算拖欠负荷地址的辅助线程。在一个实施例中,生成用于辅助线程的分开代码。主线程和辅助线程的代码之间的分开阻止辅助线程的代码转换影响到主线程。在一个实施例中,编译器使用多入口线程,代替Intel产品的编译器中的常规出线,以生成用于辅助线程的分开代码。
此外,根据一个实施例,编译器以编译器选择的代码区域(被标注为预先计算区域)的粒度执行多入口线程。该区域包含一组拖欠负荷并定义用于猜测预先计算的范围。在一个实施例中,实现通常以循环区域为目标,因为循环通常是程序执行中的热点,且拖欠负荷通常是循环中多次执行的负荷。
图8是示出根据一个实施例的用于并行化分析的示例性处理的流程图。示例性处理800可由处理逻辑执行,该处理逻辑可包括硬件(电路、专用逻辑等)、软件(诸如通用计算机系统或专用机器上运行的)或者它们的组合。参考图8,在框801处,处理逻辑构建依赖性图表,它获取主线程的数据和控制依赖性。根据一个实施例,为了滤出不相关的代码从而减少辅助线程的代码的大小,编译器首先构建获取数据和控制依赖性的的图表。过滤的有效性和合法性依赖于编译器精确地消除存储器引用歧义的能力。结果,编译器中的存储器消除歧义模块被调用以便对动态分配对象的指针消除歧义。因为指针可以是全局变量或函数参数,所以如果编译器按全程序模式进行编译,编译器执行的指向分析是过程间的。在一个实施例中,如果所有数组访问是有限表达,为了更精确地构建依赖性图表,可执行一系列数组依赖性测试,以使在构建依赖性图表时对数组中的每个元素消除歧义。否则,使用近似。此外,可以对结构中的每个域消除歧义。
参考图8,在框802处,处理逻辑利用依赖性图表对主线程执行分片操作。在分片期间,根据一个实施例,编译器首先将拖欠负荷的负荷地址标识为片标准,它指明中间分片结果。在构建了依赖性图表后,编译器计算所标识的片标准的程序片。片标准的程序片被定义为一组指令,它们有助于用于一个或多个辅助线程执行的存储器预取的地址的计算。分片可将代码减少到仅与地址计算相关的指令,从而允许辅助线程更快地运行并在主线程前面。编译器只需要将片中的指令复制到辅助线程的代码。
根据一个实施例,通过向后过渡地遍历依赖性边缘,编译器中的分片提取指令的最小序列以产生拖欠负荷的地址。可以将结果片的依赖性图表上的叶节点转换成预取指令,因为没有进一步的指令依赖于这些叶节点。由诸如Intel公司的PentiumTM 4的处理器执行的那些预取指令都是非阻塞和无故障的。不同的预取指令用于将数据带到存储器层次结构中不同等级的高速缓存。
根据一个实施例,可相对于给定的代码区域执行分片操作。当达到该区域外的代码时,给定区域中的依赖性图表上的遍历必须终止。因此,必须在遍历期间而非遍历之后终止分片,因为图表遍历可跨到区域之外且随后回到区域之内。在遍历后根据区域简单地收集片会损失精度。
在另一实施例中,编译器将每个拖欠负荷指令逐个分片。为了最小化辅助线程中的代码重复并减少线程调用和同步的开销,如果多个片在同一预先计算区域中,则编译器将它们合并成一个辅助线程。
参考图8,在框803处,处理逻辑在线程上执行调度以重叠多个预取。在一个实施例中,由于超线程处理器支持具有大调度窗口的无序执行,当当前执行指令等待未决的高速缓存不命中时,处理器可搜索当前执行指令以外的独立指令。无序执行的这个方面可以提供优于有序处理器的实质性性能增益并减少链化猜测预先计算的需要。此外,编译器选择用于超线程处理器的基本猜测预先计算。即,一次仅调度一个辅助线程,以节省线程产生和通信开销。使用基本猜测预先计算的另一好处在于它不像链化猜测预先计算那样快速地充满超线程处理器上的存储器系统。当无序处理器搜索用于执行的独立指令时,这些指令会生成太多负荷请求并使存储器系统饱和。当辅助线程发出预取请求时,大量的未完成的不命中会快速地填满不命中缓冲器,结果使处理器停顿。因此,编译器在产生辅助线程方面需要有判断力。最后,为了确保及时进行预取,编译器将单个辅助线程和主线程固定在各自的逻辑处理器上。
参考图8,在框804处,处理逻辑为线程选择通信方案。在一个实施例中,编译器提供一个为任何给定的片或者任何程序子集计算活跃性(liveness)信息的模块。活跃性信息提供了对通信成本的估计。该信息用于选择提供通信和计算之间的良好权衡的预先计算区域。该活跃性信息可帮助找到触发器或向后分片结束的点。
因为典型的超线程处理器在每个处理器周期发出三个微操作码并使用相同的硬分区资源,该编译器必须是有判断力的以便不使辅助线程减慢主线程的执行,特别是如果主线程已为每个周期的执行发出三个微操作码。对于包含拖欠负荷的循环嵌套,在选择用于进行猜测预先计算的循环级时,编译器进行再计算和通信之间的权衡。对于每个循环级,根据一个实施例,从最里面的一个开始,编译器选择基于通信的方案和基于计算的方案之一。
根据一个实施例,基于通信的方案在每次迭代时将内驻(live-in)值从主线程传送给辅助线程,使得辅助线程不需要再计算该内驻值。如果存在包含最拖欠负荷的内循环且如果用于该内循环的分片明显地减少了辅助线程的大小,则编译器将选择该方案。但是,如果用于内循环级的通信成本很大,则禁用该方案。如果较早计算出该内驻值且内驻数量较小,则编译器将给出通信成本的较小估计。
基于通信的方案将在运行时间创建主线程及其辅助线程之间的多个通信点。基于通信的方案对于超线程处理器很重要,因为通过再计算辅助线程中的片而仅依赖一个通信点会形成线程之间太多的资源争用。该方案与构建穿越(do-across)循环的类似之处在于在完成了计算用于该迭代的内驻值后主线程启动下一个迭代。该方案用通信交换较少的计算。
根据一个实施例,基于计算的方案假定起初两个线程之间的仅一个通信点传递入该内驻值。然后,辅助线程需要计算它需要的所有东西以生成精确的预取地址。如果没有内循环,或者如果用于该循环级的分片不明显增加辅助线程的大小,该编译器将选择该方案。一旦达到了单个通信点,基于计算的方案向辅助线程提供执行中的更多独立性。
根据一个实施例,为了选择用于猜测预先计算的循环级,编译器选择受益于基于通信的方案的最外面的循环。因此,一旦发现具有基于通信的方案的循环,上述方案选择算法可以终止。如果编译器没有找到任何具有基于通信的方案的循环,则最外面的循环将是用于猜测预先计算的目标区域。在编译器选择了预先计算区域和它们的通信方案后,在主线程内定位良好的触发点将确保及时地进行预取,同时最小化主线程和辅助线程之间的通信。活跃性信息帮助定位触发器,其中触发器是向后分片结束的点。当内驻数量增加时,预先计算区域以外的分片结束。
参考图8,在框805处,处理逻辑确定用于线程的同步周期以便在执行期间相互同步。根据一个实施例,同步周期用于表达辅助线程和主线程之间的距离。通常,辅助线程在同步周期的单元中执行所有其预先计算。这使得通信最小化并且限制了产生失控辅助器的可能性。因为编译器计算同步周期值并相应地生成同步代码,不再需要诸如Outstanding Slice Counter的特殊硬件支持。
如果同步周期太大,辅助线程引起的预取不仅会临时移动主线程要使用的重要数据还会潜在地移动未由主线程使用的较早的预取数据。另一方面,如果同步周期太小,预取可能太晚以至于不太有用。为了确定同步周期值,根据一个实施例,编译器首先计算片长度和主线程中的程序调度的长度之间的差。如果该差较小,则一个迭代中辅助线程引起的超过距离较小。辅助线程会需要多个迭代来保持足够的超过距离。因此,如果该差较小,则编译器增加同步周期,反之亦然。
此后,在代码生成阶段期间,编译器生成用于主线程和辅助线程的代码。在该代码生成阶段期间,编译器构建线程图表,作为分析阶段和代码生成阶段之间的接口。每个图表节点都标注一指令序列,或者代码区域。节点之间的调用边缘标注线程产生关系,这对于指定链化辅助线程是很重要的。具有线程图表支持代码重用,因为根据一个实施例编译器还允许用户将编译指示插入源程序以指定用于辅助线程和内驻的代码。基于编译指示的方法和自动方法两者共享同一图表抽象。结果,可以共享辅助线程代码生成模块。
辅助线程代码生成充分利用编译器中的多入口线程技术以生成辅助线程代码。与常规的公知概要相反,编译器不创建用于辅助线程的分开的编译单元(或例程)。相反,编译器生成辅助线程代码的线程入口和线程返回。编译器保持所有新生成的辅助线程代码完整或者内嵌在同一用户定义的例程中而不将它们分成独立的子程序。该方法提供更晚的编译器优化,其中有更多的机会用于对新生成的辅助线程进行最优化。辅助线程中指令更少意味着超线程处理器上的资源争用更少。这显示用辅助线程隐匿等待时间与常规对称多线程模型相比引起更少的指令和更少的资源争用,这是特别重要的因为超线程处理器在每个处理器周期中发出三个微操作码并具有一些硬分区资源。
根据一个实施例,用于辅助线程的所生成的代码将通过编译器中的稍后阶段被重新排序和优化,诸如部分死存储消除(PDSE),部分冗余消除(PRE)和其它标量优化。在这种情况下,需要优化辅助线程代码以最小化由于辅助线程引起的资源争用。但,这些进一步的优化也会去除预取代码。因此,可以将叶拖欠负荷转换成编译器中的易变量赋值语句。片的依赖性图表中的叶节点暗示辅助线程中没有进一步的指令依赖于加载值。因此,易变量赋值语句的目的地变成寄存器临时,表示加速所获得的代码。使用易变量赋值可防止所有更晚的编译器全局优化去除用于拖欠负荷的所生成的预取。
根据一个实施例,编译器目的在于利用自计数机制确保辅助线程既不运行太超前也不落后主线程。根据一个实施例,为超前距离控制预设值X。该X可以由用户通过编译器开关或者基于片(或辅助器代码)的长度和主代码的长度的程序分析进行修改。在一个实施例中,编译器使用用于主线程的初始值X生成mc(M计数器)并用用于辅助线程的初始值0生成hc(H计数器),并且该编译器生成计数器M和H以便计数主和辅助器代码中的同步向上周期。概念在于所有四个计数器(mc、M、hc、H)都执行自计数。辅助线程没有对主线程的推断。如果辅助线程太超前于主线程运行,它将发出一等待,如果辅助线程落后于主线程运行,则它将执行一赶上。
在特殊实施例中,对于所有的X个循环迭代,主线程发出一记入(post),以确保该辅助器不等待并可以前进以执行non_faulting_load(无故障负荷)。此时,如果辅助线程在同步向上周期块中发出许多non_faulting_load后等待主线程,它将唤醒以执行non_faulting_load。在另一特殊实施例中,对于所有X个循环迭代,辅助线程检查其hc计数器是否大于主线程的mc计数器且hc计数器大于辅助线程的同步向上周期H*X,如果是,则辅助器将发出一等待并进入睡眠。这防止了辅助线程太超前于主线程运行。在另一实施例中,在另一同步向上周期块上进行迭代之前,辅助线程检查其hc计数器是否小于主线程的mc计数器。如果是,则辅助线程已落后,且必须通过更新其计数器hc和H以及来自主线程的所有捕获专用和内驻变量来“跟上并向前跳”。图9A-9C是示出根据一个实施例的应用程序、主线程和辅助线程的示例性伪代码的示图。参考图9A-图9C,编译器编译应用程序的源代码901并使用前述技术中的至少一种生成用于主线程902和辅助线程903的代码。可以理解,代码901-903不限于C/C++。可以使用其它编程语言,诸如Fortran或汇编。
在创建了用于辅助线程的代码后,编译器可进一步静态或动态地分配用于每个辅助线程和主线程的资源,以确保主线程和辅助线程之间以及辅助线程之间没有资源冲突。可以为编译器内的辅助线程管理诸如寄存器上下文的硬件资源。特别是,可以在主线程和辅助线程之间以及多个辅助线程之间静态或动态地划分寄存器组。结果,当编译器用尽资源时,或者当出现特定主线程事件的稀少情况的运行时间时,可以避免经由用于线程的存储器的内驻/外驻寄存器拷贝且可以在编译时间销毁线程。
根据一个实施例,编译器可以按自底向上的顺序“走过”辅助线程并传达数据结构中的资源使用,诸如图12所示的资源表。可以是主线程的父辅助线程使用该信息并确保其资源不与线程资源重叠。当线程资源惩罚主执行线程时,例如通过迫使主线程溢出/填充寄存器,编译器可杀死先前创建的线程。
图10是说明根据一个实施例的线程的示例性配置的框图。在该实施例中,示例性配置1000包括主线程1001(例如,父线程)和可从主线程1001产生的三个辅助线程(例如,子线程)1002-1004,并且线程1003可从线程1002产生(例如,辅助线程1002是辅助线程1003的父线程)。可以理解,辅助线程不限于三个辅助线程,可以包括更多或更少的辅助线程。辅助线程可以通过产生指令生成并且线程执行可以在产生(spawn)指令之后继续。
在线程创建阶段期间由编译器创建线程,诸如图5-8所示的那些操作。根据一个实施例,编译器在线程创建阶段中创建线程,并在后续的线程资源分配阶段中分配用于线程的资源。动态地且通常地,当其父线程停顿时产生辅助线程。示例性配置1000可在页面故障或3级(L3)高速缓存不命中期间出现。
关键的是线程仅可以与父线程共享输入寄存器(或者一般资源)。例如,参考图10当主线程1001需要一寄存器时,在它产生辅助线程1002前它将一值写入寄存器R10并在辅助线程1002终止后使用寄存器R10。辅助线程1002和任何其子线程(本例中,辅助线程1003是辅助线程1002的唯一子线程,且辅助线程1002和1004是主线程1001的子线程)都不可以对寄存器R10进行写入。否则,它们将破坏主线程1001中的值。这将导致不正确的程序执行。为了避免这种资源冲突,根据一个实施例,编译器可以静态或动态地划分资源。
根据一个实施例,编译器按自底向上的顺序分配用于辅助线程和主线程的资源。图11是示出根据一个实施例的用于分配线程资源的示例性伪代码的框图。即,在示例性算法1100中,编译器按自底向上的顺序分配用于辅助线程的所有资源(框1101),此后基于辅助线程所使用的资源来分配用于主线程的资源(框1102),以避免资源冲突。
出于说明目的,线程使用的资源被假定为硬件寄存器。但是,类似的概念可应用于本领域普通技术人员显而易见的其它资源,诸如存储器或中断。参考图10,通过从线程链的领先线程自底向上行进,编译器动态地划分寄存器。在该示例中,辅助线程1003是包括辅助线程1002的第一线程链中的叶线程。辅助线程1004是第二线程链中的叶线程。编译器将每个辅助线程中的寄存器分配记录于数据结构中,诸如类似于图12的示例性资源表1200的资源表。随后,父线程读取其子线程的资源分配并进行其分配,并在其资源表中进行报告。
图12是示出根据一个实施例的示例性资源数据结构的框图。示例性数据结构1200可以实现作为存储器中存储的并可由编译器访问的表。或者,示例性数据结构1200可以在数据库中实现。在一个实施例中,示例性数据结构1200包括但不限于由线程ID 1201所标识的各线程使用的写入资源1202和内驻资源。也存在其它配置。
参考图10和12,根据一个实施例,一开始,分配辅助线程1003(例如,在自底向上方案中具有最底顺序的线程)的寄存器。内驻值是V5和V6,并假定它们分别被分配给了寄存器R2和R3。此外,V7使得寄存器R4被分配,且V9使得寄存器R5被分配。用于辅助线程1003的资源表包括内驻=((V5,R2),(V6,R3))且写入的寄存器=(R4,R5),如图12所示。在辅助线程1002中,编译器在分配期间用R2替换V5并用R3替换V6并在产生的指令中将寄存器R4和R5(在辅助线程1003中被写入)标记为是活跃的。这防止了辅助线程1003的产生点上的R4或R5的寄存器使用,从而防止了辅助线程1002和辅助线程1003之间的资源冲突。对于辅助线程1002,内驻值是V3和V4并分别被分配给寄存器R6和R7。当V8和V20被分别分配给寄存器R8和R9时,用于辅助线程1002的资源表包括内驻=((V3,R6),(V4,R7))以及写入的寄存器=(R2,R3,R4,R5,R8.R9),如图12所示。写入的寄存器是用于辅助线程1003的内驻寄存器(例如,R2和R3)、辅助线程1003中的写入寄存器(例如R4和R5)以及辅助线程1002中的写入寄存器(例如R8和R9)。随后,编译器分配用于辅助线程1004的寄存器。当为所有的辅助线程分配了寄存器时,它分配用于主线程1001的寄存器。
此外,根据一个实施例,当编译器用尽寄存器时,它可以删除链内的一个或多个辅助线程。这例如可以出现于主线程用尽寄存器时,因为辅助线程链太深或者单个辅助线程需要太多寄存器且主线程必须溢出/填充寄存器。编译器可应用启发式方法以允许特定数量的溢出或者删除整个辅助线程链或该线程链中的一些线程。删除辅助线程的可选方案是明确地配置上下文保存/恢复的权重,以使在上下文切换时,通过辅助线程的执行被写入的父线程的活跃寄存器可以由硬件自动保存。尽管该上下文切换相对昂贵,但这种情况是稀少的。此外,这种微粒上下文切换与多数OS支持的线程切换中所使用的全上下文切换或者常规的基于硬件的全上下文线程切换相比仍开销较少。
此外,当存在对内驻寄存器的冲突时,例如如果辅助线程1003重写一内驻寄存器(例如,mov v5=…)且在产生辅助线程1003后该寄存器也在辅助线程1002中使用,将存在对分配v5的寄存器(本例中,寄存器R2)的资源冲突。为了处理该信息,编译器将使用可用性分析并插入补偿码,诸如在产生辅助线程1003前插入一mov v5’=v5指令,并在该产生后用v5’替换v5。
图13是示出根据一个实施例的用于分配线程资源的示例性处理的流程图。示例性处理1300可以由处理逻辑执行,该处理逻辑可包括硬件(电路、专用逻辑等)、软件(诸如通用计算机系统或专用机器上运行的)或者它们的组合。在一个实施例中,示例性处理1300包括在编译具有数据处理系统中可执行的一个或多个线程的代码期间选择具有最底顺序的当前线程,确定向从该当前线程产生的一个或多个子线程分配的资源,并且考虑到分配给当前线程的一个或多个子线程的资源来分配用于该当前线程的资源,以避免当前线程及其一个或多个子线程之间的资源冲突。
参框图13,在框1301处,处理逻辑标识一个或多个线程,包括主线程及其辅助线程,并选择具有最底顺序的线程作为当前线程。可以利用在编译的线程创建阶段期间创建的线程依赖性图表来标识这些线程。在框1302处,处理逻辑检索可从当前线程中产生的任何子线程的资源信息。这些资源信息从与子线程相对应的数据结构中获得,诸如图12的资源表1200。框1303处,如果没有更多的可用资源,处理逻辑可以从链中删除一个或多个线程并重新开始(框1309)。如果有更多的可用资源,框1304处,处理逻辑考虑到其子线程所使用的资源来分配用于当前线程的资源,不引起资源冲突。此后,在框1305处,处理逻辑在诸如资源表1200的相关资源表中更新分配给当前线程的资源。以上处理继续,直到不剩余更多的辅助线程(例如,主线程的子线程)(框1306和1308)。最后,在框1307处,处理逻辑基于所有辅助线程的资源信息分配用于主线程的资源(例如,所有辅助线程的父线程),而不引起资源冲突。可以包括其它操作。
已基于类似于以下配置的系统针对各种基准测试工具测试了上述技术:
具有超线程技术的处理器 | |
线程 | 2个逻辑处理器 |
跟踪高速缓存 | 12k微操作码,8路相联,每行6个微操作码 |
L1D高速缓存 | 8k字节,4路相联,64字节行大小2周期整数访问,4周期FP访问 |
L2统一高速缓存 | 256字节,8路相联,128字节行大小,7 |
周期访问等待时间 | |
负荷缓冲器 | 48 |
存储缓冲器 | 24 |
各种基准测试工具包括以下至少一种:
基准 | 描述 | 输入设定 |
nbody_walker | 从Nbody图表中的任一节点遍历最近的体 | 20k体 |
mst | 计算用于数据聚类的最小生成树 | 3k节点 |
em3d | 解决3D中的电磁传播 | 20k 5度节点 |
health | 建模健康系统的体系数据块 | 5级 |
mcf | 用于总线调度的整数编程算法 | Lite |
图14A是示出nbody_walker基准测试工具上辅助线程的性能改善的示图。图14B是示出在同步周期的给定值下nbody_walker的加速结果的示图。图14C是示出相对于各种基准测试的自动处理对手动处理的示图。图14D是示出在给定的同步周期下使用nbody_walker自动处理优于手动处理的改善的示图。
因此,已描述了用于多线程的线程管理的方法和装置。在以上说明书中,已参考其特定的示例性实施例描述了本发明。显然,可以对其进行各种修改而不背离本发明的较宽精神和范围,如以下权利要求书中所阐述的。因此,说明书和附图被认为是说明性而非限制性的。
Claims (20)
1.一种方法,包括:
在编译具有数据处理系统中可执行的一个或多个线程的代码期间,选择具有最底顺序的当前线程;
确定分配给从所述当前线程中产生的一个或多个子线程的资源;以及
考虑到分配给所述当前线程的一个或多个子线程的资源来分配用于所述当前线程的资源,以避免所述当前线程及其一个或多个子线程之间的资源冲突。
2.如权利要求1所述的方法,其特征在于,所述资源包括各线程使用的硬件寄存器和存储器中的至少一个。
3.如权利要求1所述的方法,其特征在于,分配给所述一个或多个子线程的资源记录于当前线程可访问的数据结构中。
4.如权利要求1所述的方法,其特征在于,还包括更新关于分配给当前线程的资源的数据结构中的资源信息,所述数据结构可由当前线程的父线程访问。
5.如权利要求1所述的方法,其特征在于,还包括按自底向上的顺序重复所述选择、确定和分配操作,直到已处理所述一个或多个线程中的每一个。
6.如权利要求5所述的方法,其特征在于,在已处理所述一个或多个线程的每一个后对作为所述一个或多个线程的父线程的主线程分配资源,根据分配给所述一个或多个线程的资源来分配所述主线程的资源。
7.如权利要求1所述的方法,其特征在于,还包括:
在为当前线程分配资源之前确定数据处理系统中是否有剩余资源;以及
删除所述当前线程的至少一个子线程;以及
利用与所述至少一个删除的子线程相关联的资源分配用于所述当前线程的资源。
8.一种具有可执行代码的机器可读媒体,该代码使得机器执行一方法,该方法包括:
在编译具有数据处理系统中可执行的一个或多个线程的代码期间,选择具有最底顺序的当前线程;
确定分配给从所述当前线程中产生的一个或多个子线程的资源;以及
考虑到分配给所述当前线程的一个或多个子线程的资源来分配用于所述当前线程的资源,以避免所述当前线程及其一个或多个子线程之间的资源冲突。
9.如权利要求8所述的机器可读媒体,其特征在于,所述资源包括各线程使用的硬件寄存器和存储器中的至少一个。
10.如权利要求8所述的机器可读媒体,其特征在于,分配给所述一个或多个子线程的资源记录于当前线程可访问的数据结构中。
11.如权利要求1所述的机器可读媒体,其特征在于,还包括更新关于分配给当前线程的资源的数据结构中的资源信息,所述数据结构可由当前线程的父线程访问。
12.如权利要求8所述的机器可读媒体,其特征在于,所述方法还包括按自底向上的顺序重复所述选择、确定和分配操作,直到已处理所述一个或多个线程中的每一个。
13.如权利要求12所述的机器可读媒体,其特征在于,所述方法还包括在已处理所述一个或多个线程的每一个后对作为所述一个或多个线程的父线程的主线程分配资源,根据分配给所述一个或多个线程的资源来分配所述主线程的资源。
14.如权利要求8所述的机器可读媒体,其特征在于,所述方法还包括:
在为当前线程分配资源之前确定数据处理系统中是否有剩余资源;以及
删除所述当前线程的至少一个子线程;以及
利用与所述至少一个删除的子线程相关联的资源分配用于所述当前线程的资源。
15.一种数据处理系统,包括:
处理器,它能执行多线程操作;
存储器,它与所述处理器耦合;以及
来自所述存储器的由所述处理器执行的处理,以使所述处理器:
在编译具有数据处理系统中可执行的一个或多个线程的代码期间,选择具有最底顺序的当前线程;
确定分配给从所述当前线程中产生的一个或多个子线程的资源;以及
考虑到分配给所述当前线程的一个或多个子线程的资源来分配用于所述当前线程的资源,以避免所述当前线程及其一个或多个子线程之间的资源冲突。
16.如权利要求15所述的数据处理系统,其特征在于,所述处理还使得处理器更新关于分配给当前线程的资源的数据结构中的资源信息,所述数据结构可由当前线程的父线程访问。
17.如权利要求16所述的数据处理系统,其特征在于,所述处理还使得处理器按自底向上的顺序重复所述选择、确定和分配操作,直到已处理所述一个或多个线程中的每一个。
18.如权利要求17所述的数据处理系统,其特征在于,所述处理还包括使得处理器在已处理所述一个或多个线程的每一个后对作为所述一个或多个线程的父线程的主线程分配资源,根据分配给所述一个或多个线程的资源来分配所述主线程的资源。
19.如权利要求15所述的数据处理系统,其特征在于,所述处理还包括使得处理器:
在为当前线程分配资源之前确定数据处理系统中是否有剩余资源;以及
删除所述当前线程的至少一个子线程;以及
利用与所述至少一个删除的子线程相关联的资源分配用于所述当前线程的资源。
20.如权利要求15所述的数据处理系统,其特征在于,所述资源包括各线程使用的硬件寄存器和存储器中的至少一个。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/676,581 US20050071841A1 (en) | 2003-09-30 | 2003-09-30 | Methods and apparatuses for thread management of mult-threading |
US10/676,581 | 2003-09-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1853166A true CN1853166A (zh) | 2006-10-25 |
CN100578453C CN100578453C (zh) | 2010-01-06 |
Family
ID=34377426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200480027177A Expired - Fee Related CN100578453C (zh) | 2003-09-30 | 2004-09-29 | 用于多线程的线程管理的方法和装置 |
Country Status (7)
Country | Link |
---|---|
US (2) | US20050071841A1 (zh) |
EP (1) | EP1668500B1 (zh) |
JP (1) | JP4528300B2 (zh) |
CN (1) | CN100578453C (zh) |
AT (1) | ATE465446T1 (zh) |
DE (1) | DE602004026750D1 (zh) |
WO (1) | WO2005033936A1 (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004630A (zh) * | 2009-08-31 | 2011-04-06 | 国际商业机器公司 | 多核/线程工作组计算调度器 |
CN102629192A (zh) * | 2012-04-20 | 2012-08-08 | 西安电子科技大学 | 用于片上多核并发多线程处理器的指令包及其操作方法 |
CN103218453A (zh) * | 2013-04-28 | 2013-07-24 | 南京龙渊微电子科技有限公司 | 一种文件拆分方法及装置 |
CN106462437A (zh) * | 2014-03-27 | 2017-02-22 | 国际商业机器公司 | 用于管理计算机中的多个线程的控制区 |
CN106445703A (zh) * | 2016-09-22 | 2017-02-22 | 济南浪潮高新科技投资发展有限公司 | 一种解决数据传输中防并发脏读方法 |
CN108139938A (zh) * | 2015-07-31 | 2018-06-08 | 华为技术有限公司 | 用于利用次级线程以辅助主线程执行应用程序任务的装置、方法及计算机程序 |
CN109313550A (zh) * | 2016-06-28 | 2019-02-05 | 英特尔Ip公司 | 在光线遍历期间减少存储器访问等待时间 |
CN109766131A (zh) * | 2017-11-06 | 2019-05-17 | 上海宝信软件股份有限公司 | 基于多线程技术实现软件智能化自动升级的系统及方法 |
CN110879748A (zh) * | 2018-09-06 | 2020-03-13 | 阿里巴巴集团控股有限公司 | 一种共享资源分配方法、装置和设备 |
Families Citing this family (84)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7337442B2 (en) * | 2002-12-03 | 2008-02-26 | Microsoft Corporation | Methods and systems for cooperative scheduling of hardware resource elements |
US20040243767A1 (en) * | 2003-06-02 | 2004-12-02 | Cierniak Michal J. | Method and apparatus for prefetching based upon type identifier tags |
US20050071841A1 (en) * | 2003-09-30 | 2005-03-31 | Hoflehner Gerolf F. | Methods and apparatuses for thread management of mult-threading |
US7206795B2 (en) * | 2003-12-22 | 2007-04-17 | Jean-Pierre Bono | Prefetching and multithreading for improved file read performance |
US7448037B2 (en) * | 2004-01-13 | 2008-11-04 | International Business Machines Corporation | Method and data processing system having dynamic profile-directed feedback at runtime |
US7707543B2 (en) * | 2004-11-24 | 2010-04-27 | Siemens Aktiengesellschaft | Architecture for a computer-based development environment with self-contained components and a threading model |
CN101091177B (zh) * | 2004-12-31 | 2010-05-26 | 英特尔公司 | 贝叶斯网络结构学习并行化的方法、设备及系统 |
US8230422B2 (en) * | 2005-01-13 | 2012-07-24 | International Business Machines Corporation | Assist thread for injecting cache memory in a microprocessor |
US20060212450A1 (en) * | 2005-03-18 | 2006-09-21 | Microsoft Corporation | Temporary master thread |
US7472256B1 (en) | 2005-04-12 | 2008-12-30 | Sun Microsystems, Inc. | Software value prediction using pendency records of predicted prefetch values |
US8010969B2 (en) * | 2005-06-13 | 2011-08-30 | Intel Corporation | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
US20070094213A1 (en) * | 2005-07-14 | 2007-04-26 | Chunrong Lai | Data partitioning and critical section reduction for Bayesian network structure learning |
US20070094214A1 (en) * | 2005-07-15 | 2007-04-26 | Li Eric Q | Parallelization of bayesian network structure learning |
US7774779B2 (en) * | 2005-11-18 | 2010-08-10 | At&T Intellectual Property I, L.P. | Generating a timeout in a computer software application |
US9003421B2 (en) * | 2005-11-28 | 2015-04-07 | Intel Corporation | Acceleration threads on idle OS-visible thread execution units |
US8087018B2 (en) * | 2006-03-31 | 2011-12-27 | Intel Corporation | Managing and supporting multithreaded resources for native code in a heterogeneous managed runtime environment |
US9754265B2 (en) * | 2006-05-01 | 2017-09-05 | At&T Intellectual Property I, L.P. | Systems and methods to automatically activate distribution channels provided by business partners |
US8726279B2 (en) * | 2006-05-06 | 2014-05-13 | Nvidia Corporation | System for multi threaded multi processor sharing of asynchronous hardware units |
US8239869B2 (en) | 2006-06-19 | 2012-08-07 | Condusiv Technologies Corporation | Method, system and apparatus for scheduling computer micro-jobs to execute at non-disruptive times and modifying a minimum wait time between the utilization windows for monitoring the resources |
US9588809B2 (en) * | 2006-10-10 | 2017-03-07 | Invistasking LLC | Resource-based scheduler |
US8056083B2 (en) | 2006-10-10 | 2011-11-08 | Diskeeper Corporation | Dividing a computer job into micro-jobs for execution |
US20080134189A1 (en) * | 2006-10-05 | 2008-06-05 | Holt John M | Job scheduling amongst multiple computers |
CN100430898C (zh) * | 2006-12-20 | 2008-11-05 | 金魁 | 一种多线程管理的应用系统 |
US7584346B1 (en) * | 2007-01-25 | 2009-09-01 | Sun Microsystems, Inc. | Method and apparatus for supporting different modes of multi-threaded speculative execution |
JP4821907B2 (ja) * | 2007-03-06 | 2011-11-24 | 日本電気株式会社 | メモリアクセス制御システム、メモリアクセス制御方法およびそのプログラム |
US10452820B2 (en) * | 2007-06-26 | 2019-10-22 | International Business Machines Corporation | Thread-based software license management |
US8645974B2 (en) * | 2007-08-02 | 2014-02-04 | International Business Machines Corporation | Multiple partition adjunct instances interfacing multiple logical partitions to a self-virtualizing input/output device |
US8219989B2 (en) * | 2007-08-02 | 2012-07-10 | International Business Machines Corporation | Partition adjunct with non-native device driver for facilitating access to a physical input/output device |
US9223580B2 (en) * | 2007-08-30 | 2015-12-29 | International Business Machines Corporation | Systems, methods and computer products for cross-thread scheduling |
US8544006B2 (en) * | 2007-12-19 | 2013-09-24 | International Business Machines Corporation | Resolving conflicts by restarting execution of failed discretely executable subcomponent using register and memory values generated by main component after the occurrence of a conflict |
US8413151B1 (en) | 2007-12-19 | 2013-04-02 | Nvidia Corporation | Selective thread spawning within a multi-threaded processing system |
US8312455B2 (en) * | 2007-12-19 | 2012-11-13 | International Business Machines Corporation | Optimizing execution of single-threaded programs on a multiprocessor managed by compilation |
US8321840B2 (en) * | 2007-12-27 | 2012-11-27 | Intel Corporation | Software flow tracking using multiple threads |
CN101482831B (zh) * | 2008-01-08 | 2013-05-15 | 国际商业机器公司 | 对工作线程与辅助线程进行相伴调度的方法和设备 |
US8359589B2 (en) * | 2008-02-01 | 2013-01-22 | International Business Machines Corporation | Helper thread for pre-fetching data |
US8707016B2 (en) * | 2008-02-01 | 2014-04-22 | International Business Machines Corporation | Thread partitioning in a multi-core environment |
US8601241B2 (en) * | 2008-02-01 | 2013-12-03 | International Business Machines Corporation | General purpose register cloning |
US8775778B2 (en) * | 2008-02-01 | 2014-07-08 | International Business Machines Corporation | Use of a helper thread to asynchronously compute incoming data |
GB0808575D0 (en) * | 2008-05-12 | 2008-06-18 | Xmos Ltd | Compilign and linking |
GB0808576D0 (en) * | 2008-05-12 | 2008-06-18 | Xmos Ltd | Compiling and linking |
US8615770B1 (en) | 2008-08-29 | 2013-12-24 | Nvidia Corporation | System and method for dynamically spawning thread blocks within multi-threaded processing systems |
US8959497B1 (en) * | 2008-08-29 | 2015-02-17 | Nvidia Corporation | System and method for dynamically spawning thread blocks within multi-threaded processing systems |
US20100153934A1 (en) * | 2008-12-12 | 2010-06-17 | Peter Lachner | Prefetch for systems with heterogeneous architectures |
US8583700B2 (en) * | 2009-01-02 | 2013-11-12 | International Business Machines Corporation | Creation of date window for record selection |
KR101572879B1 (ko) * | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US8214831B2 (en) * | 2009-05-05 | 2012-07-03 | International Business Machines Corporation | Runtime dependence-aware scheduling using assist thread |
JP5452125B2 (ja) * | 2009-08-11 | 2014-03-26 | クラリオン株式会社 | データ処理装置及びデータ処理方法 |
US8468539B2 (en) * | 2009-09-03 | 2013-06-18 | International Business Machines Corporation | Tracking and detecting thread dependencies using speculative versioning cache |
US8561046B2 (en) * | 2009-09-14 | 2013-10-15 | Oracle America, Inc. | Pipelined parallelization with localized self-helper threading |
JP5541491B2 (ja) * | 2010-01-07 | 2014-07-09 | 日本電気株式会社 | マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法 |
US8667260B2 (en) * | 2010-03-05 | 2014-03-04 | International Business Machines Corporation | Building approximate data dependences with a moving window |
US8612730B2 (en) | 2010-06-08 | 2013-12-17 | International Business Machines Corporation | Hardware assist thread for dynamic performance profiling |
US8667253B2 (en) | 2010-08-04 | 2014-03-04 | International Business Machines Corporation | Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register |
US8413158B2 (en) * | 2010-09-13 | 2013-04-02 | International Business Machines Corporation | Processor thread load balancing manager |
US8793474B2 (en) | 2010-09-20 | 2014-07-29 | International Business Machines Corporation | Obtaining and releasing hardware threads without hypervisor involvement |
US8713290B2 (en) * | 2010-09-20 | 2014-04-29 | International Business Machines Corporation | Scaleable status tracking of multiple assist hardware threads |
US8561070B2 (en) * | 2010-12-02 | 2013-10-15 | International Business Machines Corporation | Creating a thread of execution in a computer processor without operating system intervention |
US8832672B2 (en) * | 2011-01-28 | 2014-09-09 | International Business Machines Corporation | Ensuring register availability for dynamic binary optimization |
US9460290B2 (en) | 2011-07-19 | 2016-10-04 | Elwha Llc | Conditional security response using taint vector monitoring |
US9575903B2 (en) | 2011-08-04 | 2017-02-21 | Elwha Llc | Security perimeter |
US9443085B2 (en) | 2011-07-19 | 2016-09-13 | Elwha Llc | Intrusion detection using taint accumulation |
US9298918B2 (en) | 2011-11-30 | 2016-03-29 | Elwha Llc | Taint injection and tracking |
US9558034B2 (en) | 2011-07-19 | 2017-01-31 | Elwha Llc | Entitlement vector for managing resource allocation |
US9798873B2 (en) | 2011-08-04 | 2017-10-24 | Elwha Llc | Processor operable to ensure code integrity |
US9471373B2 (en) | 2011-09-24 | 2016-10-18 | Elwha Llc | Entitlement vector for library usage in managing resource allocation and scheduling based on usage and priority |
US9465657B2 (en) * | 2011-07-19 | 2016-10-11 | Elwha Llc | Entitlement vector for library usage in managing resource allocation and scheduling based on usage and priority |
US9021493B2 (en) * | 2012-09-14 | 2015-04-28 | International Business Machines Corporation | Management of resources within a computing environment |
WO2015027403A1 (en) * | 2013-08-28 | 2015-03-05 | Hewlett-Packard Development Company, L.P. | Testing multi-threaded applications |
US9417918B2 (en) * | 2013-11-20 | 2016-08-16 | International Business Machines Corporation | Computing session workload scheduling and management of parent-child tasks |
US9396044B2 (en) * | 2014-04-25 | 2016-07-19 | Sony Corporation | Memory efficient thread-level speculation |
US9423961B2 (en) * | 2014-09-08 | 2016-08-23 | Apple Inc. | Method to enhance programming performance in multilevel NVM devices |
US9348644B2 (en) | 2014-10-08 | 2016-05-24 | International Business Machines Corporation | Application-level dispatcher control of application-level pseudo threads and operating system threads |
US9529568B1 (en) * | 2014-12-19 | 2016-12-27 | Amazon Technologies, Inc. | Systems and methods for low interference logging and diagnostics |
CN106201853A (zh) * | 2015-04-30 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 测试方法及装置 |
CN106407197B (zh) * | 2015-07-28 | 2020-06-30 | 北京京东尚科信息技术有限公司 | 遍历数据的方法及装置 |
CN106547612B (zh) * | 2016-10-18 | 2020-10-20 | 深圳怡化电脑股份有限公司 | 一种多任务处理方法及装置 |
CN108345505B (zh) * | 2018-02-02 | 2022-08-30 | 珠海金山网络游戏科技有限公司 | 一种多线程资源管理方法和系统 |
US10754706B1 (en) * | 2018-04-16 | 2020-08-25 | Microstrategy Incorporated | Task scheduling for multiprocessor systems |
US10802882B2 (en) * | 2018-12-13 | 2020-10-13 | International Business Machines Corporation | Accelerating memory access in a network using thread progress based arbitration |
US11188593B1 (en) * | 2018-12-28 | 2021-11-30 | Pivotal Software, Inc. | Reactive programming database interface |
US11314718B2 (en) * | 2019-11-21 | 2022-04-26 | International Business Machines Corporation | Shared disk buffer pool update and modification |
CN111190961B (zh) * | 2019-12-18 | 2023-09-29 | 航天信息股份有限公司 | 一种动态优化的多线程数据同步方法及系统 |
JP7476638B2 (ja) | 2020-04-15 | 2024-05-01 | 株式会社デンソー | マルチプロセッサシステム |
CN114090270B (zh) * | 2022-01-21 | 2022-05-20 | 武汉中科通达高新技术股份有限公司 | 线程管理方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6363410B1 (en) * | 1994-12-13 | 2002-03-26 | Microsoft Corporation | Method and system for threaded resource allocation and reclamation |
JPH1097435A (ja) * | 1996-09-20 | 1998-04-14 | Nec Corp | 資源割当てシステム |
US6233599B1 (en) * | 1997-07-10 | 2001-05-15 | International Business Machines Corporation | Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers |
US6567839B1 (en) * | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
EP0964333A1 (en) * | 1998-06-10 | 1999-12-15 | Sun Microsystems, Inc. | Resource management |
AU2001249658A1 (en) * | 2000-03-31 | 2001-10-15 | Robert P. Gerometta | Method, system, and computer-usable medium for computer-assisted trading |
JP2003015892A (ja) * | 2001-06-29 | 2003-01-17 | Casio Comput Co Ltd | 情報端末装置及びアプリケーション管理プログラム |
US7124403B2 (en) * | 2001-08-15 | 2006-10-17 | Sun Microsystems, Inc. | Methods and apparatus for managing defunct processes |
US7328242B1 (en) * | 2001-11-09 | 2008-02-05 | Mccarthy Software, Inc. | Using multiple simultaneous threads of communication |
US7509643B2 (en) * | 2003-03-24 | 2009-03-24 | Sun Microsystems, Inc. | Method and apparatus for supporting asymmetric multi-threading in a computer system |
US7313795B2 (en) * | 2003-05-27 | 2007-12-25 | Sun Microsystems, Inc. | Method and system for managing resource allocation in non-uniform resource access computer systems |
US7415699B2 (en) * | 2003-06-27 | 2008-08-19 | Hewlett-Packard Development Company, L.P. | Method and apparatus for controlling execution of a child process generated by a modified parent process |
US20050071841A1 (en) * | 2003-09-30 | 2005-03-31 | Hoflehner Gerolf F. | Methods and apparatuses for thread management of mult-threading |
-
2003
- 2003-09-30 US US10/676,581 patent/US20050071841A1/en not_active Abandoned
-
2004
- 2004-02-13 US US10/779,193 patent/US7398521B2/en not_active Expired - Fee Related
- 2004-09-29 WO PCT/US2004/032075 patent/WO2005033936A1/en active Application Filing
- 2004-09-29 DE DE602004026750T patent/DE602004026750D1/de active Active
- 2004-09-29 CN CN200480027177A patent/CN100578453C/zh not_active Expired - Fee Related
- 2004-09-29 JP JP2006527169A patent/JP4528300B2/ja not_active Expired - Fee Related
- 2004-09-29 EP EP04785288A patent/EP1668500B1/en not_active Not-in-force
- 2004-09-29 AT AT04785288T patent/ATE465446T1/de not_active IP Right Cessation
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004630A (zh) * | 2009-08-31 | 2011-04-06 | 国际商业机器公司 | 多核/线程工作组计算调度器 |
CN102004630B (zh) * | 2009-08-31 | 2013-12-11 | 国际商业机器公司 | 多核/线程工作组计算调度器 |
CN102629192A (zh) * | 2012-04-20 | 2012-08-08 | 西安电子科技大学 | 用于片上多核并发多线程处理器的指令包及其操作方法 |
CN103218453A (zh) * | 2013-04-28 | 2013-07-24 | 南京龙渊微电子科技有限公司 | 一种文件拆分方法及装置 |
CN106462437B (zh) * | 2014-03-27 | 2019-11-15 | 国际商业机器公司 | 用于管理计算机中的多个线程的控制区 |
CN106462437A (zh) * | 2014-03-27 | 2017-02-22 | 国际商业机器公司 | 用于管理计算机中的多个线程的控制区 |
CN108139938A (zh) * | 2015-07-31 | 2018-06-08 | 华为技术有限公司 | 用于利用次级线程以辅助主线程执行应用程序任务的装置、方法及计算机程序 |
CN109313550A (zh) * | 2016-06-28 | 2019-02-05 | 英特尔Ip公司 | 在光线遍历期间减少存储器访问等待时间 |
CN106445703A (zh) * | 2016-09-22 | 2017-02-22 | 济南浪潮高新科技投资发展有限公司 | 一种解决数据传输中防并发脏读方法 |
CN109766131A (zh) * | 2017-11-06 | 2019-05-17 | 上海宝信软件股份有限公司 | 基于多线程技术实现软件智能化自动升级的系统及方法 |
CN109766131B (zh) * | 2017-11-06 | 2022-04-01 | 上海宝信软件股份有限公司 | 基于多线程技术实现软件智能化自动升级的系统及方法 |
CN110879748A (zh) * | 2018-09-06 | 2020-03-13 | 阿里巴巴集团控股有限公司 | 一种共享资源分配方法、装置和设备 |
CN110879748B (zh) * | 2018-09-06 | 2023-06-13 | 阿里巴巴集团控股有限公司 | 一种共享资源分配方法、装置和设备 |
Also Published As
Publication number | Publication date |
---|---|
US20050071841A1 (en) | 2005-03-31 |
DE602004026750D1 (de) | 2010-06-02 |
US20050081207A1 (en) | 2005-04-14 |
ATE465446T1 (de) | 2010-05-15 |
EP1668500A1 (en) | 2006-06-14 |
CN100578453C (zh) | 2010-01-06 |
US7398521B2 (en) | 2008-07-08 |
JP2007506199A (ja) | 2007-03-15 |
JP4528300B2 (ja) | 2010-08-18 |
EP1668500B1 (en) | 2010-04-21 |
WO2005033936A1 (en) | 2005-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100578453C (zh) | 用于多线程的线程管理的方法和装置 | |
CN1853165A (zh) | 用于多线程的编译器创建辅助线程的方法和装置 | |
CN1294486C (zh) | 多重处理环境中透明动态优化的方法和系统 | |
Li et al. | Locality-aware CTA clustering for modern GPUs | |
Li et al. | Hardware-software co-design of embedded reconfigurable architectures | |
JP2006092532A (ja) | 最近アクセスしたリソースのデータ局所性の増加 | |
WO2007055875A1 (en) | Method and apparatus for software scouting regions of a program | |
US8589901B2 (en) | Speculative region-level loop optimizations | |
Suganuma et al. | A region-based compilation technique for dynamic compilers | |
Matějka et al. | Combining PREM compilation and static scheduling for high-performance and predictable MPSoC execution | |
Madriles et al. | Boosting single-thread performance in multi-core systems through fine-grain multi-threading | |
US20030126591A1 (en) | Stride-profile guided prefetching for irregular code | |
Nematollahi et al. | Efficient nearest-neighbor data sharing in GPUs | |
Mattson Jr | An effective speculative evaluation technique for parallel supercombinator graph reduction | |
Dubrulle et al. | A low-overhead dedicated execution support for stream applications on shared-memory CMP | |
US7117318B1 (en) | Memory management | |
Qiu et al. | Branch prediction-directed dynamic instruction cache locking for embedded systems | |
Zhou et al. | Planning for code buffer management in distributed virtual execution environments | |
Laurenzano et al. | A static binary instrumentation threading model for fast memory trace collection | |
CN106325964B (zh) | 动态编译调度方法及装置 | |
O′ Boyle et al. | Expert programmer versus parallelizing compiler: a comparative study of two approaches for distributed shared memory | |
Eimouri et al. | Optimizing the JVM object model using object splitting | |
Mannarswamy et al. | Region based structure layout optimization by selective data copying | |
Saito et al. | The design of the PROMIS compiler—towards multi-level parallelization | |
Song et al. | Parallelization of Bayesian network based SNPs pattern analysis and performance characterization on SMP/HT |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100106 Termination date: 20130929 |