CN1853165A - 用于多线程的编译器创建辅助线程的方法和装置 - Google Patents
用于多线程的编译器创建辅助线程的方法和装置 Download PDFInfo
- Publication number
- CN1853165A CN1853165A CNA2004800271722A CN200480027172A CN1853165A CN 1853165 A CN1853165 A CN 1853165A CN A2004800271722 A CNA2004800271722 A CN A2004800271722A CN 200480027172 A CN200480027172 A CN 200480027172A CN 1853165 A CN1853165 A CN 1853165A
- Authority
- CN
- China
- Prior art keywords
- thread
- worker
- main thread
- zone
- compiler
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000008569 process Effects 0.000 claims abstract description 43
- 238000004458 analytical method Methods 0.000 claims description 33
- 238000004891 communication Methods 0.000 claims description 25
- 230000003068 static effect Effects 0.000 claims description 6
- 238000009826 distribution Methods 0.000 claims description 5
- 238000013467 fragmentation Methods 0.000 claims description 4
- 238000006062 fragmentation reaction Methods 0.000 claims description 4
- 238000005070 sampling Methods 0.000 claims description 3
- 230000001360 synchronised effect Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 19
- 238000005457 optimization Methods 0.000 description 12
- 238000003860 storage Methods 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 6
- 238000013316 zoning Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000000354 decomposition reaction Methods 0.000 description 3
- 238000005242 forging Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000036541 health Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- 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/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
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 Corporation的IntelPentiumTM 4超线程系统的多线程系统上执行基于线程的预取辅助线程。在一个实施例中,编译器使用于超线程处理器的辅助线程的生成自动化。这些技术关注识别和生成最小尺寸的辅助线程,它们可以被执行以实现及时和有效的数据预取,同时引发最小的通信开销。还执行运行系统以有效地管理辅助线程以及线程之间的同步。结果,辅助线程能发出用于顺序指针密集应用的及时预取。
此外,可以在编译器内为辅助线程管理诸如寄存器环境的硬件资源。特别是,可以静态地或动态地在主线程和辅助线程之间以及多个辅助线程之间分割寄存器组。结果,当编译器用尽资源时或者在出现特定主线程事件的不频繁的情况的运行时,可以避免经由线程存储器的内驻/外驻寄存器拷贝并且可以在编译时间处破坏所述线程。
在以下描述中,阐述了大量细节。但是,可以理解,本发明的实施例可在没有这些细节的情况下实施。在其它实例中,未详细示出公知电路、结构和技术,以便不影响对描述的理解。
以下详细描述的一些部分按照算法和对计算机存储器内数据比特的操作的符号表示来提供。数据处理领域内的熟练技术人员将这些算法描述和表示用于最有效地将其工作实质传达给本领域的其它熟练技术人员。这里,算法被认为是获得期望结果的自一致操作序列。这些操作需要物理量的物理操作。通过,尽管不是必需,但这些量采取能够存储、传递、组合、比较和其它处理的电子或磁性信号的形式。已证明,特别是出于共同使用的原因,将这些信号称作比特、值、元素、符号、字符、项、数量等有时是方便的。
但要记住,所有这些和类似的术语与合适的物理量相关联且仅仅是应用于这些量的方便的标记。除非从以下讨论中显见的另外的特别声明,可以理解,使用诸如“处理”或“计算”或“计算”或“确定”或“显示”等的术语在通篇描述中表示计算机系统或类似数据处理装置的动作和过程,它们将表示为计算机系统的寄存器和存储器内的物理(例如,电子)量的数据处理和转换成类似地被表示为计算机系统存储器或寄存器或其它这种信息存储、传输或显示装置内的物理量的其它数据。
本发明的实施例还涉及用于执行这里所述的操作的装置。一个装置可专门为所需的用途而构建,或者它可以包括由计算机中存储的计算机程序选择性地激活或再配置的通用计算机。这种计算机程序可存入计算机可读存储媒介,诸如但不限于任何类型的盘,包括软盘、光盘、CD-ROM和磁光盘,只读存储器(ROM),诸如动态RAM(DRAM)的随机存取存储器(RAM),可擦可编程ROM(EPROM)、电可擦可编程ROM(EEPROM)、磁或光卡,或者适于存储电子指令的任何类型的媒体,其中以上存储组件的每一种都耦合于计算机系统总线。
这里提供的算法和显示非固有地关于任何特殊计算机或其它装置。各种通用装置可与根据这里的教导的程序一起使用,或者可证明构建专门的装置来执行这些方法是方便的。用于这些系统的结构可从以下描述中显现。此外,本发明的实施例不参考任何特殊的编程语言进行描述。可以理解,各种编程语言都可用于实现这里描述的本发明实施例的教导内容。
机器可读媒介包括用于以机器(例如计算机)可读的形式存储和发送信息的任何机制。例如,机器可读媒介包括只读存储器(ROM);随机存取存储器(RAM);磁盘存储媒体;光学存储媒体;闪存装置;电气、光学、声学或其它形式的传播信号(例如,载波、红外线信号、数字信号等);等等。
图1是可与实施例一起使用的示例性计算机的框图。例如,图1所示的示例性系统100可执行图5-8所示的进程。示例性系统100可以是多线程系统,诸如Intel PentiumTM 4超线程系统。示例性系统100可以是同时多线程(SMT)或芯片多进程(CMP)使能系统。
注意:虽然图1示出了计算机系统的各种组件,但它不打算表示互连这些组件的任何特殊架构或方式,因为这些细节并非与本发明是密切联系的。还可以理解,网络计算机、手持计算机、蜂窝电话和具有更少或更多组件的其它数据处理系统也可与本发明一起使用。
如图1所示,作为一种数据处理系统形式的计算机系统100包括耦合到微处理器103和ROM107、易失性RAM105和非易失性存储器106的总线102。微处理器103(可以是Intel Corporation的Pentium处理器或者Motorola,Inc.的PowerPC处理器)与高速缓存存储器104耦合,如图1的示例中所示的。总线102将这些组件互连在一起并且还将这些组件103、107、105和106耦合到显示器控制器和显示器装置108,以及输入/输出(I/O)装置110,它们可以是鼠标、键盘、调制解调器、网络接口、打印机和本领域公知的其它装置。通常,输入/输出装置110通过输入/输出控制器109耦合到系统。易失性RAM105通常作为需要持续供电以刷新或维持存储器中的数据的动态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 Corporation的能执行多线程处理的Pentium 4或Xeon处理器。在应用程序的执行期间,并行地执行主线程和一个或多个辅助线程。辅助线程与主线程相关联地(但稍许独立)猜测执行,以执行主线程的一些预先计算,诸如地址或数据的猜测预取,从而减少由主线程引起的存储器等待时间。
根据一个实施例,辅助线程的代码(例如源代码和二进制可执行代码)由诸如Intel Corporation的AutoHelper编译器的编译器生成,由诸如处理器103的处理器执行的操作系统(OS)在诸如易失性RAM105的存储器中加载并执行。示例性系统100内运行的操作系统可以是Microsoft Corporation的Windows操作系统或者是Apple Computer的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可以存储由处理器304执行的数据信号所表示的指令310和/或数据。指令310和/或数据可包括用于执行这里所讨论的任何或所有技术的代码。
特别是,编译器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 Corporation的IL0表示。结果,可应用诸如AutoHelper604的编译器,而不管源语言和目标平台。剖析器602进行剖析运行以检查该表示的特征。过程间分析模块603可暴露穿越过程调用边界的优化机会。此后,调用编译器604(例如,AutoHelper)以生成用于一个或多个辅助线程的代码。全局标量优化模块605利用部分冗余消除进行应用以最小化表达式估值的次数。最后,后端模块606生成用于各种平台的辅助线程的二进制代码,诸如IntelCorporation的IA-32或Itanium平台。可以包括本领域普通技术人员显而易见的其它组件。
与常规方法不同,AutoHelper(例如,编译器)消除了剖析实行传递以使该工具更易于使用。根据一个实施例,编译器可直接分析来自剖析结果的输出,诸如由Intel的VTuneTM Performance Analyzer所生成的那些,这能用于超线程技术。因为它是代替后传递工具的中间端传递,该编译器能使用几种产品品质分析,诸如阵列依赖性分析和全局标量优化等。在编译器之后调用的这些分析对辅助线程的代码进行进取的优化。
根据一个实施例,编译器生成一个或多个辅助线程以预先计算和预取由频繁预取失败的高速缓存的负荷(也称作拖欠负荷)所访问的地址。编译器还生成产生一个或多个辅助线程的主线程中的一个或多个触发器。编译器将该触发器作为调用函数实现,诸如invoke_helper函数调用。一旦达到该触发器,就期望负荷稍后出现于主线程的指令流中,因此猜测执行的辅助线程可减少主线程中高速缓存预取失败的数量。
图7是示出根据一个实施例的由诸如AutoHelper的编译器执行的示例性进程的流程图。示例性进程700可由处理逻辑执行,该处理逻辑可包括硬件(电路、专用逻辑等)、软件(诸如通用计算机系统或专用机器上运行的)或者它们的组合。在一个实施例中,示例性进程700始于框701,用以使用例如Intel Corporation的VTune工具标识拖欠负荷,以执行用于辅助线程的并行分析(框702),以生成用于辅助线程的代码(框703),并且向每个辅助线程和主线程分配诸如硬件寄存器或存储器的资源(框704),这将在以下详细描述。
根据一个实施例,编译器利用一个或多个运行时间剖析标识应用程序源代码中大多数拖欠负荷。常规编译器按两个步骤收集这些剖析:剖析实行和剖析生成。但是,因为高速缓存预取失败不是向编译器揭示的架构特点,剖析实行传递不允许对编译器的高速缓存预取失败的实行以标识拖欠负荷。用于每个高速缓存分级体系的剖析经由诸如Intel Corporation的VTuneTM Analyzer的实用程序被收集。在一个实施例中,可以用在编译器之前在分开的剖析运行中的调试信息来执行应用程序。在剖析运行期间,采样高速缓存预取失败且为应用程序中的每个静负荷累计硬件计数器。
编译器标识用于基于线程的预取的候选。在特殊实施例中,VTuneTM以每个负荷为基概括高速缓存行为。因为用调试信息(例如,调试符号)编译用于剖析运行的二进制,可能使剖析与源程序行数及语句相关。形成大于一预定阈值的某些负荷可标识为拖欠负荷。在一特殊实施例中,形成90%高速缓存预取失败的最大负荷被标注为拖欠负荷。
除了标识拖欠负荷指令之外,编译器生成精确计算拖欠负荷地址的辅助线程。在一个实施例中,生成用于辅助线程的分开代码。主线程和辅助线程的代码之间的分开阻止辅助线程的代码转换影响到主线程。在一个实施例中,编译器使用多入口线程,代替Intel产品的编译器中的常规出线,以生成用于辅助线程的分开代码。
此外,根据一个实施例,编译器以编译器选择的代码区域(被标注为预先计算区域)的间隔尺寸执行多入口线程。该区域包含一组拖欠负荷并定义用于猜测预先计算的范围。在一个实施例中,实现通常以循环区域为目标,因为循环通常是程序执行中的热点,且拖欠负荷通常是循环中多次执行的负荷。
图8是示出根据一个实施例的用于并行分析的示例性进程的流程图。示例性进程800可由处理逻辑执行,该处理逻辑可包括硬件(电路、专用逻辑等)、软件(诸如通用计算机系统或专用机器上运行的)或者它们的组合。参考图8,在框801处,处理逻辑构建依赖性图表,它获取主线程的数据和控制依赖性。根据一个实施例,为了滤出不相关的代码从而减少辅助线程的代码的大小,编译器首先构建获取数据和控制依赖性的的图表。过滤的有效性和合法性依赖于编译器精确地消除存储器引用歧义的能力。结果,编译器中的存储器消除歧义模块被调用以便对动态分配对象的指针消除歧义。因为指针可以是全局变量或函数参数,所以如果编译器按全程序模式进行编译,编译器执行的指向分析是进程间的。在一个实施例中,如果所有阵列访问是有限表达,为了更精确地构建依赖性图表,可执行一系列阵列依赖性测试,以使在构建依赖性图表时对阵列中的每个元素消除歧义。否则,使用近似方法。此外,可以对结构中的每个域消除歧义。
再参考图8,在框802处,处理逻辑利用依赖性图表对主线程执行分片操作。在分片期间,根据一个实施例,编译器首先将拖欠负荷的负荷地址标识为分片标准,它规定中间分片结果。在构建了依赖性图表后,编译器计算所标识的分片标准的程序片。分片标准的程序片被定义为一组指令,它们有助于用于一个或多个辅助线程执行的存储器预取的地址的计算。分片可将代码减少到仅与地址计算相关的指令,从而允许辅助线程更快地运行并在主线程前面。编译器只需要将片中的指令复制到辅助线程的代码。
根据一个实施例,通过向后过渡地遍历依赖性边缘,编译器中的分片提取指令的最小序列以产生拖欠负荷的地址。可以将结果分片的依赖性图表上的叶节点转换成预取指令,因为没有进一步的指令依赖于这些叶节点。由诸如Intel Corporation的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_loads)。此时,如果辅助线程在同步周期块中发出许多无故障负荷后等待主线程,它将唤醒以执行无故障负荷。在另一特殊实施例中,对于所有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包括但不限于由线程ID1201所标识的各线程使用的写入资源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 (30)
1.一种方法,包括:
标识可能具有一个或多个拖欠负荷的主线程的一个区域,所述一个或多个拖欠负荷表示在主线程执行期间可能经受高速缓存预取失败的负荷;
分析相对于所述主线程的一个或多个辅助线程的区域;以及
生成用于所述一个或多个辅助线程的代码,所述一个或多个辅助线程与所述主线程猜测地并行执行以执行所述主线程的所述区域的一个或多个任务。
2.如权利要求1所述的方法,其特征在于,标识所述区域包括:
生成用于所述区域的高速缓存预取失败的一个或多个剖析;以及
分析所述一个或多个剖析以标识用于基于线程的预取操作的一个或多个候选。
3.如权利要求2所述的方法,其特征在于,生成一个或多个剖析包括:
用调试信息执行与所述主线程相关联的应用程序;以及
采样高速缓存预取失败并累计用于所述区域的每个静态负荷的硬件计数器以生成用于每个高速缓存分级体系的一个或多个剖析。
4.如权利要求2所述的方法,其特征在于,分析所述一个或多个剖析包括:
基于所述调试信息使所述一个或多个剖析与各源代码相关联;以及
标识造成高速缓存预取失败高于预定水平的最大负荷作为拖欠负荷。
5.如权利要求1所述的方法,其特征在于,分析所述区域包括:
构建依赖性图表,它捕获所述主线程的数据和控制依赖性;以及
基于所述依赖性图表对所述主线程进行分片操作以生成辅助线程。
6.如权利要求5所述的方法,其特征在于,分析所述区域还包括:
执行所述主线程和所述辅助线程之间的调度;以及
确定所述主线程和所述辅助线程之间的通信方案。
7.如权利要求6所述的方法,其特征在于,分析所述区域还包括:
确定用于所述辅助线程的同步周期以同步所述主线程和辅助线程,辅助线程中的每一个都在所述同步周期内执行其任务。
8.一种具有可执行代码的机器可读媒介,所述可执行代码使得机器执行一方法,该方法包括:
标识可能具有一个或多个拖欠负荷的主线程的一个区域,所述一个或多个拖欠负荷表示在主线程执行期间可能经受高速缓存预取失败的负荷;
分析相对于所述主线程的一个或多个辅助线程的区域;以及
生成用于所述一个或多个辅助线程的代码,所述一个或多个辅助线程与所述主线程猜测地并行执行以执行对所述主线程的所述区域的一个或多个任务。
9.如权利要求8所述的机器可读媒介,其特征在于,标识所述区域包括:
生成用于所述区域的高速缓存预取失败的一个或多个剖析;以及
分析所述一个或多个剖析以标识用于基于线程的预取操作的一个或多个候选。
10.如权利要求9所述的机器可读媒介,其特征在于,生成一个或多个剖析包括:
用调试信息执行与所述主线程相关联的应用程序;以及
采样高速缓存预取失败并累计用于所述区域的每个静态负荷的硬件计数器以生成用于每个高速缓存分级体系的一个或多个剖析。
11.如权利要求9所述的机器可读媒介,其特征在于,分析所述一个或多个剖析包括:
基于所述调试信息使所述一个或多个剖析与对应源代码相关;以及
标识造成高速缓存预取失败高于预定水平的最大负荷作为拖欠负荷。
12.如权利要求8所述的机器可读媒介,其特征在于,分析所述区域包括:
构建依赖性图表,它捕获所述主线程的数据和控制依赖性;以及
基于所述依赖性图表对所述主线程进行分片操作以生成辅助线程。
13.如权利要求12所述的机器可读媒介,其特征在于,分析所述区域还包括:
执行所述主线程和所述辅助线程之间的调度;以及
确定所述主线程和所述辅助线程之间的通信方案。
14.如权利要求13所述的机器可读媒介,其特征在于,分析所述区域还包括:
确定用于所述辅助线程的同步周期以同步所述主线程和辅助线程,辅助线程中的每一个都在所述同步周期内执行其各自的任务。
15.一种数据处理系统,包括:
处理器,它能执行多线程操作;
存储器,它与所述处理器耦合;以及
来自所述存储器的由所述处理器执行的进程,使得所述处理器:
标识可能具有一个或多个拖欠负荷的主线程的一个区域,所述一个或多个拖欠负荷表示在主线程执行期间可能经受高速缓存预取失败的负荷;
分析相对于所述主线程的一个或多个辅助线程的区域;以及
生成用于所述一个或多个辅助线程的代码,所述一个或多个辅助线程与所述主线程猜测地并行执行以执行对所述主线程的所述区域的一个或多个任务。
16.如权利要求15所述的数据处理系统,其特征在于,所述进程由编译器在应用程序的编译期间执行。
17.一种方法,包括:
执行多线程系统中的应用程序的主线程;以及
当主线程进入具有一个或多个拖欠负荷的区域时,从所述主线程中产生一个或多个辅助线程以执行用于所述主线程的一项或多项计算,在主线程的编译期间创建一个或多个辅助线程的代码。
18.如权利要求17所述的方法,其特征在于,还包括:
创建线程池以维护线程上下文的列表;以及
分配来自所述线程池的一个或多个线程上下文以生成所述一个或多个辅助线程。
19.如权利要求18所述的方法,其特征在于,还包括:
当所述主线程退出所述区域时终止所述一个或多个辅助线程;以及
将与所述一个或多个辅助线程相关联的线程上下文释放回所述线程池。
20.如权利要求17所述的方法,其特征在于,还包括确定用于每个辅助线程的时间周期,当各时间周期期满时终止每个辅助线程。
21.如权利要求20所述的方法,其特征在于,即使各辅助线程未由所述主线程访问,当所述时间周期期满时辅助线程中的每一个都终止。
22.如权利要求17所述的方法,其特征在于,还包括当主线程退出所述区域时放弃由所述一个或多个辅助线程生成的结果,所述结果不由所述主线程的另一区域再使用。
23.一种具有可执行代码的机器可读媒介,所述可执行代码使得机器执行一方法,该方法包括:
执行多线程系统中的应用程序的主线程;以及
当主线程进入具有一个或多个拖欠负荷的区域时,从所述主线程中产生一个或多个辅助线程以执行用于所述主线程的一项或多项计算,在主线程的编译期间创建一个或多个辅助线程的代码。
24.如权利要求23所述的机器可读媒介,其特征在于,还包括:
创建线程池以维护线程上下文的列表;以及
分配来自所述线程池的一个或多个线程上下文以生成所述一个或多个辅助线程。
25.如权利要求24所述的机器可读媒介,其特征在于,所述方法还包括:
当所述主线程退出所述区域时终止所述一个或多个辅助线程;以及
将与所述一个或多个辅助线程相关联的线程上下文释放回所述线程池。
26.如权利要求23所述的机器可读媒介,其特征在于,所述方法还包括确定用于每个辅助线程的时间周期,当各时间周期期满时终止每个辅助线程。
27.如权利要求26所述的机器可读媒介,其特征在于,即使各辅助线程未由所述主线程访问,当所述时间周期期满时辅助线程中的每一个都终止。
28.如权利要求23所述的机器可读媒介,其特征在于,所述方法还包括当主线程退出所述区域时放弃由所述一个或多个辅助线程所生成的结果,所述结果不由所述主线程的另一区域再使用。
29.一种数据处理系统,包括:
处理器,它能执行多线程操作;
存储器,它与所述处理器耦合;以及
来自所述存储器的由所述处理器执行的进程,以使所述处理器:
执行多线程系统中的应用程序的主线程;以及
当主线程进入具有一个或多个拖欠负荷的区域时,从所述主线程中产生一个或多个辅助线程以执行用于所述主线程的一项或多项计算,在主线程的编译期间创建一个或多个辅助线程的代码。
30.如权利要求29所述的数据处理系统,其特征在于,所述一个或多个辅助线程的代码在应用程序编译期间由编译器生成。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/676,889 US20050071438A1 (en) | 2003-09-30 | 2003-09-30 | Methods and apparatuses for compiler-creating helper threads for multi-threading |
US10/676,889 | 2003-09-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1853165A true CN1853165A (zh) | 2006-10-25 |
Family
ID=34377482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2004800271722A Pending CN1853165A (zh) | 2003-09-30 | 2004-09-30 | 用于多线程的编译器创建辅助线程的方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (2) | US20050071438A1 (zh) |
EP (1) | EP1668502A2 (zh) |
JP (1) | JP4701174B2 (zh) |
CN (1) | CN1853165A (zh) |
WO (1) | WO2005033931A2 (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101916203A (zh) * | 2010-08-18 | 2010-12-15 | 优视科技有限公司 | 服务于移动通讯的终端软件平台的编译方法及系统 |
CN102135916A (zh) * | 2010-10-15 | 2011-07-27 | 威盛电子股份有限公司 | 同步方法以及图形处理系统 |
US8490098B2 (en) | 2008-01-08 | 2013-07-16 | International Business Machines Corporation | Concomitance scheduling commensal threads in a multi-threading computer system |
CN105308565A (zh) * | 2013-05-31 | 2016-02-03 | 微软技术许可有限责任公司 | 深度并行的源代码编译 |
WO2017020762A1 (en) * | 2015-07-31 | 2017-02-09 | Huawei Technologies Co., Ltd. | Apparatus, method, and computer program for utilizing secondary threads to assist primary threads in performing application tasks |
CN106569869A (zh) * | 2016-11-14 | 2017-04-19 | 平安科技(深圳)有限公司 | 插件化打包方法及装置 |
CN107391266A (zh) * | 2017-06-01 | 2017-11-24 | 华南理工大学 | 一种图形化编程多线程同步方法 |
CN109445854A (zh) * | 2018-10-31 | 2019-03-08 | 中科驭数(北京)科技有限公司 | 数据传输方法及装置 |
CN109844802A (zh) * | 2016-09-02 | 2019-06-04 | 英特尔公司 | 用于在图形处理器中提高线程并行性的机制 |
CN110569067A (zh) * | 2019-08-12 | 2019-12-13 | 阿里巴巴集团控股有限公司 | 用于多线程处理的方法、装置及系统 |
US11216278B2 (en) | 2019-08-12 | 2022-01-04 | Advanced New Technologies Co., Ltd. | Multi-thread processing |
Families Citing this family (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040243767A1 (en) * | 2003-06-02 | 2004-12-02 | Cierniak Michal J. | Method and apparatus for prefetching based upon type identifier tags |
US7206795B2 (en) * | 2003-12-22 | 2007-04-17 | Jean-Pierre Bono | Prefetching and multithreading for improved file read performance |
US7665070B2 (en) * | 2004-04-23 | 2010-02-16 | International Business Machines Corporation | Method and apparatus for a computing system using meta program representation |
US8230422B2 (en) * | 2005-01-13 | 2012-07-24 | International Business Machines Corporation | Assist thread for injecting cache memory in a microprocessor |
US7849453B2 (en) * | 2005-03-16 | 2010-12-07 | Oracle America, Inc. | Method and apparatus for software scouting regions of a program |
US7950012B2 (en) * | 2005-03-16 | 2011-05-24 | Oracle America, Inc. | Facilitating communication and synchronization between main and scout threads |
US7818746B2 (en) * | 2005-03-30 | 2010-10-19 | Hewlett-Packard Development Company, L.P. | System and method for benchmarking using a multi-threaded load generator |
US9003421B2 (en) * | 2005-11-28 | 2015-04-07 | Intel Corporation | Acceleration threads on idle OS-visible thread execution units |
KR100679050B1 (ko) * | 2005-12-12 | 2007-02-06 | 삼성전자주식회사 | 태스크간 빠른 문맥 교환을 위해 레지스터 문맥을 저장,복구하는 방법 및 장치 |
US8301870B2 (en) * | 2006-07-27 | 2012-10-30 | International Business Machines Corporation | Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system |
US20100192199A1 (en) | 2006-09-07 | 2010-07-29 | Cwi International, Llc | Creating and using a specific user unique id for security login authentication |
US20100211955A1 (en) * | 2006-09-07 | 2010-08-19 | Cwi | Controlling 32/64-bit parallel thread execution within a microsoft operating system utility program |
JP5116275B2 (ja) * | 2006-09-29 | 2013-01-09 | 富士通株式会社 | 演算処理装置、情報処理装置及び演算処理装置の制御方法 |
US7852336B2 (en) * | 2006-11-28 | 2010-12-14 | International Business Machines Corporation | Dynamic determination of optimal spatial index mapping to processor thread resources |
US8447933B2 (en) | 2007-03-06 | 2013-05-21 | Nec Corporation | Memory access control system, memory access control method, and program thereof |
US9361078B2 (en) * | 2007-03-19 | 2016-06-07 | International Business Machines Corporation | Compiler method of exploiting data value locality for computation reuse |
US9223580B2 (en) * | 2007-08-30 | 2015-12-29 | International Business Machines Corporation | Systems, methods and computer products for cross-thread scheduling |
JP5105359B2 (ja) * | 2007-12-14 | 2012-12-26 | 富士通株式会社 | 中央処理装置、選択回路および選択方法 |
US8413151B1 (en) | 2007-12-19 | 2013-04-02 | Nvidia Corporation | Selective thread spawning within a multi-threaded processing system |
US8321840B2 (en) * | 2007-12-27 | 2012-11-27 | Intel Corporation | Software flow tracking using multiple threads |
US8359589B2 (en) * | 2008-02-01 | 2013-01-22 | International Business Machines Corporation | Helper thread for pre-fetching data |
US8225326B2 (en) * | 2008-03-17 | 2012-07-17 | Intel Corporation | Future scheduling by direct representation of possible dependencies |
JP2009237762A (ja) * | 2008-03-26 | 2009-10-15 | Toshiba Corp | プログラム解析装置、プログラム解析方法および解析プログラム |
US20090313600A1 (en) * | 2008-06-13 | 2009-12-17 | Microsoft Corporation | Concurrent code generation |
JP2010039536A (ja) * | 2008-07-31 | 2010-02-18 | Panasonic Corp | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
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 |
US9753698B2 (en) * | 2009-06-10 | 2017-09-05 | Microsoft Technology Licensing, Llc | Language-based model for isolating shared state |
CA2680597C (en) * | 2009-10-16 | 2011-06-07 | Ibm Canada Limited - Ibm Canada Limitee | Managing speculative assist threads |
EP2519876A1 (en) | 2009-12-28 | 2012-11-07 | Hyperion Core, Inc. | Optimisation of loops and data flow sections |
JP5541491B2 (ja) * | 2010-01-07 | 2014-07-09 | 日本電気株式会社 | マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法 |
US8826249B2 (en) * | 2010-02-18 | 2014-09-02 | Oracle International Corporation | Method and system for optimizing code for a multi-threaded application |
US8423750B2 (en) * | 2010-05-12 | 2013-04-16 | International Business Machines Corporation | Hardware assist thread for increasing code parallelism |
CN102255794B (zh) * | 2010-05-17 | 2014-07-30 | 塔塔咨询服务有限公司 | 远程消息收发吞吐量优化和等待时间缩短用系统和方法 |
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 |
US8713290B2 (en) | 2010-09-20 | 2014-04-29 | International Business Machines Corporation | Scaleable status tracking of multiple assist hardware threads |
US8793474B2 (en) | 2010-09-20 | 2014-07-29 | International Business Machines Corporation | Obtaining and releasing hardware threads without hypervisor involvement |
US8621448B2 (en) * | 2010-09-23 | 2013-12-31 | Apple Inc. | Systems and methods for compiler-based vectorization of non-leaf code |
US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
US9529574B2 (en) | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
US20120079245A1 (en) * | 2010-09-25 | 2012-03-29 | Cheng Wang | Dynamic optimization for conditional commit |
US8549504B2 (en) | 2010-09-25 | 2013-10-01 | Intel Corporation | Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region |
US8898646B2 (en) * | 2010-12-22 | 2014-11-25 | Intel Corporation | Method and apparatus for flexible, accurate, and/or efficient code profiling |
US8726251B2 (en) * | 2011-03-29 | 2014-05-13 | Oracle International Corporation | Pipelined loop parallelization with pre-computations |
US9218186B2 (en) | 2011-09-01 | 2015-12-22 | International Business Machines Corporation | Software compiler generated threaded environment |
US8966463B2 (en) * | 2011-11-29 | 2015-02-24 | Microsoft Technology Licensing, Llc | Eliminating redundant function calls |
CN106909444B (zh) | 2011-12-22 | 2021-01-12 | 英特尔公司 | 用于指定应用线程性能状态的指令的指令处理装置及相关方法 |
US8893094B2 (en) | 2011-12-30 | 2014-11-18 | Intel Corporation | Hardware compilation and/or translation with fault detection and roll back functionality |
EP2831721B1 (en) | 2012-03-30 | 2020-08-26 | Intel Corporation | Context switching mechanism for a processing core having a general purpose cpu core and a tightly coupled accelerator |
US8813042B2 (en) * | 2012-04-06 | 2014-08-19 | Hwlett-Packard Development Company, L. P. | Identifying globally consistent states in a multithreaded program |
US8997042B2 (en) * | 2012-10-15 | 2015-03-31 | Pivotal Software, Inc. | Flexible and run-time-modifiable inclusion of functionality in computer code |
US9052888B2 (en) * | 2013-02-21 | 2015-06-09 | International Business Machines Corporation | Vectorization in an optimizing compiler |
WO2014146279A1 (en) | 2013-03-21 | 2014-09-25 | Telefonaktiebolaget L M Ericsson (Publ) | Method and device for scheduling communication schedulable unit |
CN105637474B (zh) * | 2013-10-18 | 2019-03-22 | 马维尔国际贸易有限公司 | 用于寄存器分配的系统和方法 |
EP2876593B1 (en) * | 2013-11-21 | 2018-09-26 | Nxp B.V. | Method of generating a structure and corresponding structure |
US9830206B2 (en) * | 2013-12-18 | 2017-11-28 | Cray Inc. | Cross-thread exception handling |
US9348595B1 (en) | 2014-12-22 | 2016-05-24 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US9886317B2 (en) * | 2015-02-02 | 2018-02-06 | Oracle International Corporation | Fine-grained scheduling of work in runtime systems |
US9208066B1 (en) * | 2015-03-04 | 2015-12-08 | Centipede Semi Ltd. | Run-time code parallelization with approximate monitoring of instruction sequences |
US10296346B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
US10296350B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US9715390B2 (en) | 2015-04-19 | 2017-07-25 | Centipede Semi Ltd. | Run-time parallelization of code execution based on an approximate register-access specification |
GB2540543B (en) | 2015-07-20 | 2020-03-11 | Advanced Risc Mach Ltd | Graphics processing |
US10423330B2 (en) * | 2015-07-29 | 2019-09-24 | International Business Machines Corporation | Data collection in a multi-threaded processor |
US9778951B2 (en) * | 2015-10-16 | 2017-10-03 | Qualcomm Incorporated | Task signaling off a critical path of execution |
US20170372448A1 (en) * | 2016-06-28 | 2017-12-28 | Ingo Wald | Reducing Memory Access Latencies During Ray Traversal |
US10152341B2 (en) | 2016-08-30 | 2018-12-11 | Red Hat Israel, Ltd. | Hyper-threading based host-guest communication |
US10565676B2 (en) | 2017-04-17 | 2020-02-18 | Intel Corporation | Thread prefetch mechanism |
US10325341B2 (en) | 2017-04-21 | 2019-06-18 | Intel Corporation | Handling pipeline submissions across many compute units |
CN109960571B (zh) * | 2017-12-14 | 2022-03-25 | 北京图森智途科技有限公司 | 一种多模块调度方法、装置及系统 |
US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
US10713052B2 (en) * | 2018-06-28 | 2020-07-14 | Intel Corporation | Prefetcher for delinquent irregular loads |
US10802882B2 (en) * | 2018-12-13 | 2020-10-13 | International Business Machines Corporation | Accelerating memory access in a network using thread progress based arbitration |
US11314718B2 (en) * | 2019-11-21 | 2022-04-26 | International Business Machines Corporation | Shared disk buffer pool update and modification |
US10891708B1 (en) | 2019-11-25 | 2021-01-12 | Arm Limited | Shader program execution in graphics processing |
WO2023177320A1 (en) * | 2022-03-17 | 2023-09-21 | Huawei Technologies Co., Ltd | Smt core controller, compiler, and methods for executeting compiled run-time code on smt core controller |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5249295A (en) * | 1990-06-20 | 1993-09-28 | Rice University | Digital computer register allocation and code spilling using interference graph coloring |
JPH08314979A (ja) * | 1995-03-13 | 1996-11-29 | Matsushita Electric Ind Co Ltd | プログラム情報を表示装置に示す方法および装置 |
JPH08263325A (ja) * | 1995-03-20 | 1996-10-11 | Fujitsu Ltd | サーバ処理装置、サーバ内障害検出装置及びサーバ内障害検出方法 |
US6003041A (en) * | 1998-01-05 | 1999-12-14 | Gateway 2000, Inc. | Method and managing multiple channel maps from multiple input devices in a multimedia system |
US20020097725A1 (en) * | 1998-07-27 | 2002-07-25 | Nec Corporation | Resource and protocol management for virtual private networks within multiprocessor ATM switches |
JP2000267894A (ja) * | 1999-03-17 | 2000-09-29 | Nec Corp | タイムアウト処理システム、処理方法及び記録媒体 |
JP2001188681A (ja) * | 2000-01-04 | 2001-07-10 | Toshiba Corp | 言語処理システム、オブジェクトコード生成方法及びインライン展開方法 |
US6721944B2 (en) * | 2000-05-31 | 2004-04-13 | Sun Microsystems, Inc. | Marking memory elements based upon usage of accessed information during speculative execution |
US7140022B2 (en) * | 2000-06-02 | 2006-11-21 | Honeywell International Inc. | Method and apparatus for slack stealing with dynamic threads |
US6959435B2 (en) * | 2001-09-28 | 2005-10-25 | Intel Corporation | Compiler-directed speculative approach to resolve performance-degrading long latency events in an application |
US6964043B2 (en) * | 2001-10-30 | 2005-11-08 | Intel Corporation | Method, apparatus, and system to optimize frequently executed code and to use compiler transformation and hardware support to handle infrequently executed code |
US20030084433A1 (en) * | 2001-10-31 | 2003-05-01 | Chi-Keung Luk | Profile-guided stride prefetching |
US20030126591A1 (en) * | 2001-12-21 | 2003-07-03 | Youfeng Wu | Stride-profile guided prefetching for irregular code |
US7243267B2 (en) * | 2002-03-01 | 2007-07-10 | Avaya Technology Llc | Automatic failure detection and recovery of applications |
US8095920B2 (en) * | 2002-09-17 | 2012-01-10 | Intel Corporation | Post-pass binary adaptation for software-based speculative precomputation |
US20040128489A1 (en) * | 2002-12-31 | 2004-07-01 | Hong Wang | Transformation of single-threaded code to speculative precomputation enabled code |
US20040154010A1 (en) * | 2003-01-31 | 2004-08-05 | Pedro Marcuello | Control-quasi-independent-points guided speculative multithreading |
JP2006267894A (ja) | 2005-03-25 | 2006-10-05 | Kyocera Mita Corp | 定着装置 |
-
2003
- 2003-09-30 US US10/676,889 patent/US20050071438A1/en not_active Abandoned
-
2004
- 2004-09-30 JP JP2006528333A patent/JP4701174B2/ja active Active
- 2004-09-30 CN CNA2004800271722A patent/CN1853165A/zh active Pending
- 2004-09-30 WO PCT/US2004/032461 patent/WO2005033931A2/en active Application Filing
- 2004-09-30 EP EP04789475A patent/EP1668502A2/en not_active Withdrawn
-
2009
- 2009-12-31 US US12/650,630 patent/US8612949B2/en active Active
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8490098B2 (en) | 2008-01-08 | 2013-07-16 | International Business Machines Corporation | Concomitance scheduling commensal threads in a multi-threading computer system |
CN101916203A (zh) * | 2010-08-18 | 2010-12-15 | 优视科技有限公司 | 服务于移动通讯的终端软件平台的编译方法及系统 |
CN101916203B (zh) * | 2010-08-18 | 2012-12-26 | 优视科技有限公司 | 服务于移动通讯的终端软件平台的编译方法及系统 |
CN102135916A (zh) * | 2010-10-15 | 2011-07-27 | 威盛电子股份有限公司 | 同步方法以及图形处理系统 |
CN105308565A (zh) * | 2013-05-31 | 2016-02-03 | 微软技术许可有限责任公司 | 深度并行的源代码编译 |
CN105308565B (zh) * | 2013-05-31 | 2019-04-02 | 微软技术许可有限责任公司 | 深度并行的源代码编译 |
WO2017020762A1 (en) * | 2015-07-31 | 2017-02-09 | Huawei Technologies Co., Ltd. | Apparatus, method, and computer program for utilizing secondary threads to assist primary threads in performing application tasks |
CN108139938A (zh) * | 2015-07-31 | 2018-06-08 | 华为技术有限公司 | 用于利用次级线程以辅助主线程执行应用程序任务的装置、方法及计算机程序 |
CN109844802B (zh) * | 2016-09-02 | 2024-03-26 | 英特尔公司 | 用于在图形处理器中提高线程并行性的机制 |
CN109844802A (zh) * | 2016-09-02 | 2019-06-04 | 英特尔公司 | 用于在图形处理器中提高线程并行性的机制 |
WO2018086268A1 (zh) * | 2016-11-14 | 2018-05-17 | 平安科技(深圳)有限公司 | 插件化打包方法、装置、终端及存储介质 |
CN106569869B (zh) * | 2016-11-14 | 2019-04-19 | 平安科技(深圳)有限公司 | 插件化打包方法及装置 |
US10387169B2 (en) | 2016-11-14 | 2019-08-20 | Ping An Technology (Shenzhen) Co., Ltd. | Plug-in packaging method, device, terminal and storage media |
CN106569869A (zh) * | 2016-11-14 | 2017-04-19 | 平安科技(深圳)有限公司 | 插件化打包方法及装置 |
CN107391266B (zh) * | 2017-06-01 | 2021-03-30 | 华南理工大学 | 一种图形化编程多线程同步方法 |
CN107391266A (zh) * | 2017-06-01 | 2017-11-24 | 华南理工大学 | 一种图形化编程多线程同步方法 |
CN109445854A (zh) * | 2018-10-31 | 2019-03-08 | 中科驭数(北京)科技有限公司 | 数据传输方法及装置 |
WO2021027253A1 (zh) * | 2019-08-12 | 2021-02-18 | 创新先进技术有限公司 | 用于多线程处理的方法、装置及系统 |
US11216278B2 (en) | 2019-08-12 | 2022-01-04 | Advanced New Technologies Co., Ltd. | Multi-thread processing |
CN110569067A (zh) * | 2019-08-12 | 2019-12-13 | 阿里巴巴集团控股有限公司 | 用于多线程处理的方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
US20050071438A1 (en) | 2005-03-31 |
WO2005033931A3 (en) | 2005-12-22 |
EP1668502A2 (en) | 2006-06-14 |
JP4701174B2 (ja) | 2011-06-15 |
US20100281471A1 (en) | 2010-11-04 |
JP2007507048A (ja) | 2007-03-22 |
WO2005033931A2 (en) | 2005-04-14 |
US8612949B2 (en) | 2013-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100578453C (zh) | 用于多线程的线程管理的方法和装置 | |
CN1853165A (zh) | 用于多线程的编译器创建辅助线程的方法和装置 | |
CN1294486C (zh) | 多重处理环境中透明动态优化的方法和系统 | |
Chen et al. | The Jrpm system for dynamically parallelizing Java programs | |
US20070079298A1 (en) | Thread-data affinity optimization using compiler | |
US10592430B2 (en) | Memory structure comprising scratchpad memory | |
US20070022422A1 (en) | Facilitating communication and synchronization between main and scout threads | |
JP2006092532A (ja) | 最近アクセスしたリソースのデータ局所性の増加 | |
Chen et al. | TEST: a tracer for extracting speculative threads | |
WO2007055875A1 (en) | Method and apparatus for software scouting regions of a program | |
KR20200014378A (ko) | 직무 관리 | |
Gong et al. | HAWS: Accelerating GPU wavefront execution through selective out-of-order execution | |
US8359435B2 (en) | Optimization of software instruction cache by line re-ordering | |
Nematollahi et al. | Efficient nearest-neighbor data sharing in GPUs | |
Dubrulle et al. | A low-overhead dedicated execution support for stream applications on shared-memory CMP | |
Mattson Jr | An effective speculative evaluation technique for parallel supercombinator graph reduction | |
CN102360306A (zh) | 高级语言代码中循环数据流图提取优化信息处理方法 | |
Laurenzano et al. | PEBIL: binary instrumentation for practical data-intensive program analysis | |
Marwedel et al. | Memory-Aware Optimization of Embedded Software for Multiple Objectives. | |
Kočička | Výkonnostní analýza programu LSU3shell | |
Choi | HW-SW co-design techniques for modern programming languages | |
Phuc et al. | Enhancing the performance of android applications on multi-core processors by selecting parallel configurations for source codes | |
Song et al. | Parallelization of Bayesian network based SNPs pattern analysis and performance characterization on SMP/HT | |
Ranjan et al. | P-slice based efficient speculative multithreading | |
Ozturk | Reducing memory space consumption through dataflow analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20061025 |