CN1519718A - 控制准独立点引导的推测式多线程运行 - Google Patents
控制准独立点引导的推测式多线程运行 Download PDFInfo
- Publication number
- CN1519718A CN1519718A CNA2003101215924A CN200310121592A CN1519718A CN 1519718 A CN1519718 A CN 1519718A CN A2003101215924 A CNA2003101215924 A CN A2003101215924A CN 200310121592 A CN200310121592 A CN 200310121592A CN 1519718 A CN1519718 A CN 1519718A
- Authority
- CN
- China
- Prior art keywords
- instruction
- speculating type
- derivation
- thread
- point
- 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
- 238000000034 method Methods 0.000 claims abstract description 117
- 238000009795 derivation Methods 0.000 claims description 84
- 230000008569 process Effects 0.000 claims description 28
- 230000006872 improvement Effects 0.000 claims description 20
- 239000011159 matrix material Substances 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 claims description 16
- 230000000694 effects Effects 0.000 claims description 7
- 238000005192 partition Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 6
- 230000001419 dependent effect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 4
- 239000002243 precursor Substances 0.000 description 4
- 230000000717 retained effect Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 240000004244 Cucurbita moschata Species 0.000 description 1
- 235000009854 Cucurbita moschata Nutrition 0.000 description 1
- 235000009852 Cucurbita pepo Nutrition 0.000 description 1
- 244000287680 Garcinia dulcis Species 0.000 description 1
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000012854 evaluation process Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 235000020354 squash Nutrition 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000005303 weighing Methods 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- 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/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- 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
- G06F9/3832—Value prediction for operands; operand history buffers
-
- 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
- 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
-
- 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Abstract
本发明提出了一种用于生成指令以帮助实现控制准独立点多线程运行的方法。该方法中,确定了派生点和控制准独立点。生成指令流以分割程序使得该程序的部分被推测式线程并行化。一种完成控制准独立点引导的推测式多线程运行的方法包括当遇到所述派生点时派生推测式线程。该方法的一个实施例还包括完成推测式预计算以确定所述推测式线程的内部值。
Description
技术领域
本发明一般地涉及信息处理系统,具体而言,涉及为推测式多线程运行(multithreading)派生推测式线程。
背景技术
为了提高例如包含了微处理器的信息处理系统的性能,硬件和软件技术都被采用了。一种已经被用于改善处理器性能的软件方法被称为“多线程运行”。在多线程运行中,指令流被分成能够并行执行的多个指令流。在纯软件多线程运行方法,例如,时间复用多线程运行或者事件转换(switch-on-event)多线程运行中,在同一共享的处理器上交替地执行该多个指令流。
多线程运行日益增长地通过硬件来支持。例如,在一种方法中,例如单芯片多处理器(CMP)系统的多处理器系统中的多个处理器,可同时工作,每个处理器工作于多个线程中的一个。在另一种被称为同步多线程运行(SMT)的方法中,使得单个物理处理器作为多个逻辑处理器出现以运行系统和用户程序。也就是说,每个逻辑处理器维持一整套的体系结构状态,但是共享该物理处理器的几乎所有其它资源,例如,高速缓存、执行单元、分支预测器控制逻辑以及总线。线程同步执行,使得比时间复用多线程运行或事件转换多线程运行更好地利用共享资源。
对于那些为多个线程提供硬件支持的系统,例如CMP和SMT多线程运行系统,在单线程(single-threaded)应用程序的执行过程中一个或者多个线程可能是空闲的。利用否则就会空闲的线程来推测地并行化该单线程应用程序可提高执行速度,但是常常难于确定该单线程应用程序的哪些部分应该由否则就会空闲的线程推测地执行。对一部分代码的推测式线程执行仅当该应用程序的控制流最后到达那部分代码时才有用。另外,由于与获取数据相关的等待时间的缘故,推测式线程执行会被延时并造成效率低下。这里所公开的方法和装置的实施例针对与推测式多线程运行有关的这些以及其它关注的问题。
发明内容
根据本发明的第一个方面,提出了一种编译软件程序的方法。该方法包括选择包括派生点和控制准独立点的派生对;支持对用于推测式线程的内部值的计算;以及生成包括指令的改善的二进制文件,所述指令包括触发指令以使得在控制准独立点处派生推测式线程。
根据本发明的第二个方面,提出了一种物品,该物品包括具有多个机器可访问的指令的机器可读存储介质。其中,当所述指令被处理器执行时,其支持选择包括派生点和控制准独立点的派生对;支持对用于推测式线程的内部值的计算;以及生成包括指令的改善的二进制文件,所述指令包括触发指令以使得在控制准独立点处派生所述推测式线程。
根据本发明第三个方面,提出了一种方法。该方法包括在非推测式线程中执行第一指令流中的一个或者多个指令;在所述第一指令流中的派生点处派生推测式线程,其中计算得到的在执行第一指令流的过程中,在对派生点的执行之后,到达控制准独立点的概率高于预定阈值;以及同时,在所述推测式线程中执行包括第一指令流中的指令的一个子集的推测式线程指令流,所述推测式线程指令流包括所述控制准独立点;并且执行第一指令流中跟随所述派生点之后的一个或者多个指令。
根据本发明第四个方面,提出了一种物品,包括:具有多个机器可访问的指令的机器可读存储介质;其中,当所述指令被处理器执行时,所述指令支持:在非推测式线程中执行第一指令流中的一个或者多个指令;在所述第一指令流中的派生点处派生推测式线程,其中计算得到的在执行所述第一指令流的过程中,在对所述派生点的执行之后,到达控制准独立点的概率高于预定阈值;以及同时:在所述推测式线程中执行包括所述第一指令流中的指令的一个子集的推测式线程指令流,所述推测式线程指令流包括所述控制准独立点;并且执行所述第一指令流中跟随在所述派生点之后的一个或者多个指令。
根据本发明的第五个方面,提出了一种编译器。该编译器包括派生对选择器模块,用于选择包括有控制准独立点和派生点的派生对,和代码生成器,用于生成在所述派生点包括触发指令的改善的二进制文件。
附图说明
本发明可参考以下示图来理解,图中相似的元件用相似的数字指示。这些图并不意图限制,而是被提供用来说明用于帮助实现控制准独立点(control-quasi-independent-points)引导的推测式多线程运行的方法和装置的优选实施例。
图1是流程图,图示了用于为控制准独立点引导的推测式多线程运行生成指令的方法的至少一个实施例;
图2是流程图,图示了用于为推测式多线程运行识别控制准独立点的方法的至少一个实施例;
图3是数据流图,示出了用于为控制准独立点引导的推测式多线程运行生成指令的方法的至少一个实施例;
图4是流程图,图示了软件编译处理的至少一个实施例;
图5是流程图,图示了用于生成指令以为控制准独立点引导的推测式多线程运行预计算推测式线程的内部(live-in)值;
图6和7是流程图,图示了用于利用控制准独立点引导的推测式多线程运行和对内部值的推测式预计算的结合来实现推测式多线程运行的方法的至少一个实施例;
图8是能够实现控制准独立点引导的推测式多线程运行的至少一个实施例的处理系统的方框图。
具体实施方式
图1是流程图,其图示了用于生成指令以帮助实现控制准独立点(CQIP)引导的推测式多线程运行的方法的至少一个实施例。对于方法100的至少一个实施例,生成指令以通过使用一个或者多个同步推测式线程减少单线程应用程序的执行时间。方法100因此通过使用所述同步推测式线程帮助实现了应用程序代码的一部分的并行化。被称为被派生线程(spawnee thread)的推测式线程执行由完成所述派生的线程执行的代码之前的指令。完成派生的线程被称为派生线程(spawner thread)。对于至少一个实施例来说,被派生线程是由与派生线程在同一物理处理器上的第二逻辑处理器执行的SMT线程。本领域技术人员将意识到,方法100可被用于任何多线程运行方法中,包括SMT、CMP多线程运行或者其它多处理器多线程或者任何其它可能遇到空闲线程上下文的已知多线程运行方法。
传统软件程序并行化技术通常适用于数值和常规应用程序。但是,传统的自动编译器并行化技术对于非常规或者非数值应用程序,例如那些需要基于链接的数据结构访问存储器的应用程序,表现并不好。然而,各种研究表明这些非常规和整数应用程序仍然具有大量的可通过合理的推测式多线程运行而被利用的线程级并行性。图1所示方法100提供了一种将单线程应用程序程分割成能够利用其它线程推测地执行的子任务的机制。
与基于已知依赖于控制的结构,例如调用或者循环,派生推测式线程的一些类型的传统推测式多线程运行技术不同,图1的方法100基于控制独立性确定派生点,但是支持对于并行线程之间的数据流的依赖性的处理。以下讨论阐明了方法100基于对控制独立性的分析选择线程派生点,以在对控制流的最小推测失误的情况下实现推测式并行化。另外,该方法通过提供内部值来解决数据流依赖性的问题。对于至少一个实施例来说,内部值是利用值预测方法预测得到的。在至少一个实施例中,内部值是利用基于后向依赖性分析的推测式预计算而预计算出来的。
图1图示了用于生成指令以帮助实现CQIP引导的多线程运行的方法100包括对派生对(spawning pair)的识别10,其中每一派生对都包括派生点和CQIP。在方框50处,方法100支持对用于要被派生的辅助者线程中数据依赖性的内部值的计算。在方框60处,生成指令以使得当该指令被处理器执行时,派生出推测式线程并且该推测式线程推测地执行应用程序代码的选定部分。
图2是流程图,其图示了推测式多线程运行的控制准独立点的识别10的至少一个实施例。图2图示了方法10进行210特征分析(profileanalysis)。在该分析210过程中,生成控制流图(见,例如图3的330)以表示与应用程序相关联的基本程序块之间的控制流。方法10然后计算220到达概率。即,方法10计算220如果执行了第一基本程序块,那么在源程序的执行过程中到达第二基本程序块的概率。基于在先计算的到达概率识别230候选基本程序块作为潜在派生对。在方框240处,根据选定的量度评估候选者以选择一个或者多个派生对。以下将结合图3更加详细地描述方框210(完成特征分析)、方框220(计算到达概率)、方框230(识别候选基本程序块)以及方框240(选择派生对)中的每一个。
图3是数据流图。数据流是通过包含了图1和2中所示动作的展开流程图来表示的。图3图示了,对于图1所示方法100的至少一个实施例,在方法100的执行过程中,参考了某些数据,同时也生成了某些其它的数据。图3图示了,特征325被访问以帮助实现特征分析210。同样,控制流图330(CFG)被访问以帮助实现对到达概率的计算220。
对图4的简单参考显示特征325一般是由方法执行之前的一次或者多次编译通过(pass)生成的。图4中,表示出了典型的编译处理400。该处理400涉及由编译器完成的两次通过405、410,并且还涉及一般由用户,例如软件程序员启动的测试运行407。在第一次通过405的过程中,编译器(例如,图8中的808)接收需要编译的源代码415作为输入。编译器然后生成对应于源代码415的机器二进制代码(instrumented binarycode)420。该机器二进制代码420除了包括源代码415指令的二进制码之外,还包括额外的二进制代码,所述额外的二进制代码在运行机器代码420的过程中使得统计数据被收集并记录在特征325和调用图424中。当用户启动对机器二进制代码420的试运行407时,生成特征325和调用图424。在正常的编译通过410过程中,特征325被用作给编译器的输入并生成二进制代码文件340。特征325可以,例如,在正常编译通过410过程中被编译器所使用以帮助提高性能,例如推测式分支预测。
编译通过405、410中的每一个和测试运行407对方法100来说都是可选的,在方法400中,任何生成由特征325表示的信息的方法都可以使用。因此,第一次通过405和正常通过410,以及试运行407在图4中用虚线画出以指示它们是可选的。本领域的技术人员可以认识到,任何生成特征325所表示的信息的方法都可以使用,并且图4中所画的动作405、407、410仅为说明目的而提供。本领域的技术人员还可以认识到,在其它实施例中这里所描述的方法100可被用于二进制文件。也就是说,可以为二进制文件而不是高级源代码文件生成特征325,并且可利用这样的基于二进制的特征作为输入而完成特征分析210(图2)。
回到图3,可以看到特征分析210利用了特征325作为输入并生成控制流图(CFG)330作为输出。方法100在特征分析210过程中构建CFG 330使得CFG 330的每一个节点表示源程序的一个基本程序块。CFG 330的节点之间的连线(edge)表示基本程序块之间的潜在控制流。对于至少一个实施例来说,CFG 330的连线被利用对应的控制流被遵循的频率(这反应在特征325中)加权。因此,连线被概率加权,所述概率是指一个基本程序块跟随另一个程序块而不重访该后一节点的概率。与其它的CFG表示法,例如只表示了过程内连线的“连线特征表示(edge profiling)”不同,在特征分析210过程中创建的CFG 330的至少一个实施例包括过程间连线。
对至少一个实施例,CFG 330被精减以简化CFG 330并控制其大小。执行频率最低的基本程序块被从CFG 330中精减掉。为了确定哪些节点应该保留在CFG 330中,哪些应该被精减,程序块的连线权重被用于确定该基本程序块的执行计数。基本程序块依照执行计数排序,并且根据它们的执行计数被选择保留在CFG 330中。对至少一个实施例,从最高向较低的执行计数来挑选基本程序块直至达到包括在CFG 330中的总的被执行过的指令的一个预定阈值百分比。因此,在加权和精减之后,CFG 330中表示了执行最频繁的基本程序块。
对至少一个实施例,在特征分析210过程中被挑选保留在CFG 330中的执行过的指令的预定阈值百分比为90%。对选定实施例,基于一些因素,例如应用程序要求和/或机器资源可用性,该阈值可被改变为高于或者低于90%的数。举例来说,如果机器资源支持相对较大数量的硬件线程上下文,则可选择较低的阈值以帮助实现更加积极的推测。
为了保存关于被精减的基本程序块的控制流信息,在特征分析210过程中还可以出现以下处理。当节点被从CFG 330精减掉时,从前趋者(predecessor)到该被精减的节点的连线被转换成从该前趋者到该节点的后继者(successor)的一个或者多个连线。同样地,从该被精减的节点到后继者的连线被转换成从该被精简的节点的前趋者到该后继者的一个或者多个连线。如果,在该转换过程中,一个连线转换成多个连线,原始连线的重权在新的连线之间成比例地被分配。
图3图示了,特征分析210过程中所产生的CFG 330被用来计算220到达概率。到达概率计算220的至少一个实施例使用了特征CFG 330作为输入,并生成到达概率矩阵335作为输出。如上所述,该“到达概率”用在这里是指在第一基本程序块执行之后到达第二基本程序块而不重访该第一基本程序块的概率。对至少一个实施例,方框220处计算的该到达概率被存储于二维正方形矩阵335中,所述矩阵335具有与CFG 330中的节点一样多的行和列。矩阵的每一个元素表示在执行由行表示的基本程序块之后执行由该列表示的基本程序块的概率。
对至少一个实施例,该概率被计算为所有存在的从源节点到目的地节点的基本程序块的各种序列的频率的总和。为了简化计算,加入约束以使得源节点和目的地节点只可分别作为第一个节点和最后一个节点在节点序列中出现一次,并且不可再作为中间节点出现。(为确定在一个基本程序块已经被执行之后到达该基本程序块的概率,该基本程序块出现两次——既作为源节点又作为目的地节点)。其它基本程序块被允许在序列中出现不止一次。
在方框230处,遍历到达概率矩阵335以评估基本程序块对并识别派生对的候选者。术语“派生对”用在这里指的是与源程序相关联的一对指令。指令中的一个是派生点,其为第一基本程序块中的一个指令。对至少一个实施例,该派生点是第一基本程序块的第一个指令。
另一个指令是目标点,具体而言,其为控制准独立点(CQIP)。CQIP是第二基本程序块中的一个指令。对至少一个实施例,CQIP是第二基本程序块的第一个指令。派生点是源程序中的一个指令,当该指令被到达时,会在CQIP处激活对推测式线程的创建,在所述CQIP处,该推测式线程将开始其执行。
对于到达概率矩阵335中的每一个元素,表示了两个基本程序块。第一程序块包括一个潜在派生点,第二程序块包括一个潜在CQIP。对于行的基本程序块的指令(例如第一个指令)是潜在派生点。对于列的基本程序块的指令(例如第一个指令)是潜在CQIP。评估到达概率矩阵335的每一个元素,并且那些满足了特定选择标准的元素被挑选作为派生对的候选者。对于至少一个实施例,评估元素以确定那些概率高于某个预定阈值的对,即,在执行派生点之后到达该控制准独立点的概率高于给定阈值的对。对所述标准进行设计以使不被执行的推测式线程的派生最小化。对于至少一个实施例,如果与到达概率矩阵335的一个元素相关联的一对基本程序块的到达概率高于0.95则其被视为是派生对的候选者。
选择候选派生对的第二标准是派生点和CQIP之间的指令的平均数量。理想地,在派生点和CQIOP之间应该存在有最小平均数量的指令以减少线程创建的相对开销。如果这个距离太小,那么线程创建的开销会超过向前执行的受益,因为该推测式线程向前运行得不够。对于至少一个实施例,与到达概率矩阵335的一个元素相关的一对基本程序块如果它们之间的指令的平均数量大于32个指令则被视为派生对的候选者。
基本程序块之间的距离可被另外存储在矩阵335中并在识别230派生对候选者中被考虑。对于至少一个实施例,该附加信息在特征分析210过程中被计算并包括在到达概率矩阵335的每一个元素中。该平均值被计算为各个基本程序块的序列所执行的指令的数量的总和乘以其频率。
在方框240处,基于对一个或者多个选定量度的分析,评估派生对候选者。这些量度可被区分出优先次序。基于相对于被区分出优先级的量度对候选派生对的评估,选择一个或者多个派生对。
方框240处所使用的量度可以包括(上述)潜在派生对的基本程序块之间的最小平均距离,以及对被错误预测的分支、加载未命中和/或指令缓存未命中的评估。矩阵还可包括附加的考虑。一种这样的附加考虑是潜在派生对的基本程序块之间的最大平均距离。应该认识到,派生点和CQIP之间的指令的平均数量太大了还会带来潜在的性能损失。因此,对派生对的选择还可利用最大平均距离。如果对之间的距离太大,则在推测式线程对于推测值只有有限存储的方案中,推测式线程可能造成阻塞。另外,如果推测式线程的大小十分地不一致,则在推测式线程不能提交其状态直至其变成非推测式线程(见下面关于图6和7的对“连接点”的讨论)的方案中,推测式线程可能造成阻塞。这样的阻塞很可能造成对关键资源的没有效用的占据,这些关键资源否则可被非推测式线程用来推进处理。
另一种附加考虑是推测式线程包括的与派生点和CQIP之间的应用程序代码相关的依赖性指令的数量。优选地,依赖于由在先线程生成的值(也称为“内部值”)的推测式线程指令的平均数量应该相对较低。依赖性指令的数量越小使得能够更加及时地为推测式线程计算该内部值。
另外,对于选定的实施例,优选地,较大数量的推测式线程的内部值是值可预测的。对于那些利用值预测来支持对内部值的计算50(以下将进一步讨论)的实施例,内部值的值可预测性帮助实现内部值的更快的交流,从而最小化派生的开销同时也保证了推测式线程计算的正确性和准确性。
方框230处识别的候选派生对有可能可以包括与给定派生点相关联的CQIP的几个较好的候选者。即,对于到达概率矩阵335的给定行,不止一个元素可被选择作为候选派生对。在这种情况下,在方框240处的量度评估过程中,该派生点的最优CQIP被选择,因为对于给定派生点,推测式线程只可在一个CQIP处被派生。为了选择给定派生点的最优CQIP,方框230处识别的潜在CQIP根据预期的受益被区分优先级。
在至少一个可替换的实施例中,如果有足够的硬件线程资源,对于对应的派生点可以挑选不止一个CQIP。在这种情况下,多个同时存在的,尽管是互斥的,推测式线程可被派生并同步执行以完成对推测式线程的“急切的”执行。该多个CQIP的派生条件可在推测式线程已经被执行之后检查和验证,以确定推测的有效性。如果该多个推测式线程中的一个证实了是较好的推测,并且另外的较差,则前者的结果可被主线程重新使用而后者的结果可能被丢弃。
除了根据量度评估而选择的那些派生对之外,方法100的至少一个实施例选择240调用返回点对(子例程调用和返回点组成的对),如果它们满足最小大小约束。否则在方框240处这些对可能不会被选择,因为这样的对的到达概率有时候太低以致不能满足上述关于候选者识别230所讨论的选择标准。具体而言,如果一个子例程从多个位置被调用,则在CFG330中它将具有多个前趋者和多个后继者。如果所有调用都被执行了相近的次数,则任何返回点对的到达概率都将是很低的,因为图330将具有有着相近权重的多条路径。
在方框50处,方法100支持对用于要在CQIP处执行的推测式线程的内部值的计算。通过“支持(provide for)”,其意味着生成了指令,其中对所生成指令的执行,可能连同一些特殊的硬件支持,将会引起对于要被用作被派生线程的输入的被预测内部值的计算。当然,方框50可能确定不需要内部值。在这种情况下,“支持”对内部值的计算只是需要确定不需要内部值。
对线程输入值的预测使得处理器能够执行推测式线程,就好像它们是独立的一样。方框50的至少一个实施例生成指令以完成或者触发值预测。任何已知方式的值预测都可以采用,包括硬件值预测。例如,可生成50指令以预测在派生的时刻被派生线程的寄存器值与派生线程的寄存器值是一样的。
在方框50,方法100的另一个实施例从应用程序代码中识别出可能被用于对一个或者多个内部值的推测式预计算的一个程序片(slice)的指令。尽管值预测是一种很有希望的方法,但是它经常需要很复杂的硬件支持。相反,对于推测式预计算并不需要附加的硬件支持。在否则就会空闲的线程上下文中,推测式预计算可在推测式线程执行的开始完成,实现在无需额外的值预测硬件支持的情况下最小化对内部值的推测失误的优点。下面将结合图5更详细地讨论推测式预计算。
图5图示了方法100的一个实施例,其中方框50被进一步规定为识别502要被用于对一个或者多个内部值的推测式预计算的预计算指令。对于至少一个实施例,一套指令,称为一个程序片,在方框502处被计算以只包括那些从原始的应用程序代码中识别出来的、计算内部值必需的指令。所以程序片是来自原始应用程序代码的指令的一个子集。程序片是通过沿着依赖性连线从包含该内部值的指令开始回溯,直至所有计算该内部值所必需的指令都被识别出来而计算的。生成被识别了的程序片指令的一个拷贝,用于插入60改善的二进制文件350中(图3)。
图3和5图示了用于为CQIP引导的多线程运行生成指令的方法100、500在方框60处生成改善的二进制文件350。该改善的二进制文件350包括原始单线程应用程序的二进制代码340,以及附加指令。可以引起派生出推测式线程的触发指令在方框240处所选择的派生点被插入到该改善的二进制文件350中。该触发指令可以是用特殊记号标记的、处理器现有指令集中的传统指令。或者,触发指令可以是特殊指令,例如分岔(fork)或派生指令。触发指令可由任何线程来执行。
另外,要由推测式线程完成的指令包括在改善的二进制文件350中。这些指令可包括在原始代码二进制文件340基础上增加的、用于内部值计算的指令,和推测式线程要执行的、从CQIP开始已经出现在原始代码二进制文件340中的一些指令。也就是说,关于改善的二进制文件350中的推测式线程指令,如果推测式线程要完成对内部值的推测式预计算,则对于每一个派生对都可以区分出两组指令。相反,对于要利用对其内部值的值预测的推测式线程,则在改善的二进制文件350中只出现下面紧接着要描述的后一组指令。
第一组指令在方框50(或者502,见图5)处生成,并被结合到该改善的二进制文件350中以支持对推测式线程内部值的计算。对于至少一个实施例,要由推测式线程完成以预计算内部值的指令被附在文件350的末尾,在那些与原始代码二进制文件340相关联的指令之后。
这样的指令不会出现在使用值预测的推测式线程中。相反,专用的值预测硬件可被用于值预测。值预测硬件由派生指令来起动。当处理器执行派生指令时,该硬件利用预测的内部值初始化推测式线程寄存器。
不论推测式线程是利用值预测(在改善的二进制文件350中没有附加的指令)还是推测式预计算(改善的二进制文件350中的程序片指令),推测式线程都与上面提到的第二组指令相关联。该第二组指令是已经存在于原始代码二进制文件340中的指令。与推测式线程相关联的这样的指令的子集是那些原始代码二进制文件340中从CQIP处开始的指令。对于利用对内部值的推测式预计算的推测式线程,(可被附于改善的二进制文件的末尾的)预计算程序片以到相应的CQIP的一个分支结束,这引起推测式线程从CQIP开始执行应用程序代码指令。对于利用对内部值的值预测的推测式线程,被派生线程从CQIP开始执行应用程序代码指令。
在另一个实施例中,对于推测式线程来说,改善的二进制文件350包括来自原始应用程序的相关指令子集的拷贝,而不是支持推测式线程向原始代码的CQIP指令分支。但是,发明人发现了在上一段讨论的非拷贝方法,该方法是利用了合适的分支指令实现的,有效地减小了代码大小。
因此,前面的讨论显示了,对于至少一个实施例,方法100由编译器808(图8)完成。在这样的实施例中,方法100表示自动化的处理,该处理中编译器为推测式线程识别派生点和相关联的控制准独立点(CQIP)目标,生成指令以预计算其内部值,并在二进制码中在派生点处嵌入触发器。推测式线程的预计算指令被结合(例如,通过附加)在改善的二进制文件350中。本领域的技术人员会认识到,在另一个实施例中,方法100可以手动地完成,使得1)识别CQIP派生对10、2)支持对内部值的计算50以及3)修改主线程二进制码60中的一个或者多个可以在人的干预下交互地完成。
总的来说,描述了一种用于识别派生对并改编二进制文件以使之适于实现控制准独立点引导的推测式多线程运行的方法。方法的一个实施例由编译器完成,所述编译器识别合适的派生点和CQIP,支持对推测式线程中的内部值的计算,并生成改善的二进制文件。
图6和7图示了方法600的至少一个实施例,所述方法600用于利用控制准独立点引导的推测式多线程运行和对内部值的推测式预计算的结合实现推测式多线程运行。对于至少一个实施例,方法600由执行改善的二进制代码文件(例如图3中的350)中的指令的处理器(例如图8中的804)完成。对于图6和7中所示的方法600,假设,改善二进制代码文件已经根据图5所示方法生成,所以完成内部值的推测式预计算的指令已经被识别502并插入改善的二进制文件中。
图6和7图示了,在执行改善的二进制代码文件的过程中,多个线程T0、T1......TX可同步执行。与该多个线程的每一个相关联的控制流用图6和7所示的方框之间连线上的符号T0、T1以及TX指示。本领域的技术人员可以认识到,可以从非推测式线程派生出该多个线程。同样,在至少一个实施例中,推测式线程可派生一个或者多个附加的非推测式后继者线程。
图6图示了,处理开始于线程T0开始执行的方框601处。在方框602处,进行检验以确定当线程T0仍旧是推测式的时候,它(T0)以前是否遇到过连接点。下面将更详细地讨论方框602。本领域的技术人员可以理解,如果线程T0之前从来不是推测式的,那么方框602当然会评估得出“假”。
如果方框602评估得出“假”,则在方框604执行线程T0的指令。如果在方框606遇到与派生点相关联的触发指令,则处理继续到方框608。否则线程T0继续执行方框607。在方框607,确定在线程T0中是否遇到了连接点。如果既没有遇到触发指令也没有遇到连接点,则线程T0继续执行指令604直至它到达603其指令的末尾。
如果在方框606处检测到触发指令,则在方框608处在自由的线程上下文中派生推测式线程T1。如果在方框610处推测式线程T1遇到程序片指令,则处理在方框612处继续。如果没有,则处理在方框702(图7)处继续。
在方框612处,迭代地执行用于推测式预计算的程序片指令直至对内部值的推测式预计算完成614。与此同时,在方框608处派生了推测式线程T1之后,派生线程T0继续执行604其指令。图6图示了,当推测式线程T1执行612该程序片指令,派生线程继续执行604其指令直至遇到606另一个派生点,遇到607连接点,或者指令流结束603。因此,派生线程T0和被派生线程T1在推测式预计算过程中并行执行。
当确定内部值计算完成了614,或者如果没有推测式线程T1610可用的用于推测式预计算的程序片指令,则处理在图7中的A处继续。
图7图示了,在方框702处,推测式线程T1执行来自原始代码的指令。在方框702的第一次迭代时,执行CQIP指令。被派生线程指令的执行702与派生线程代码的执行并行完成直至到达终止条件。
在方框708处,推测式线程T1检验终止条件。当被派生线程T1已经遇到一个活动的、深层的推测式(more speculative)线程的CQIP,或者已经到了程序的末尾,则该检验708评估得出“真”。只要两个条件都没有出现,则被派生线程T1前进到方框710。
如果推测式线程T1确定708已经到达连接点,则理论上是准备好要进行处理以与所述深层的推测式线程切换线程上下文(如以下关于方框720将讨论到的那样)。但是,方法600的至少一个实施例将这样的处理限制于非推测式线程。因此,当推测式线程T1确定708它已经到达一个深层的推测式的、活动的线程的连接点时,T1等待708直到它(T1)变成非推测式的以继续处理。
在方框710处,推测式线程T确定是否已经到达派生点。如果710条件评估得出“假”,则T1继续执行702其指令。
如果在方框710处遇到派生点,则线程T1创建712一个新的推测式线程TX。然后线程T1继续执行702其指令,而新的推测式线程TX前进以继续方框610处的推测式线程操作,如以上关于推测式线程T1所描述的那样)。本领域的技术人员应该认识到,当多个推测式线程是活动的时,每个线程都遵循以上关于T1所描述的逻辑(图6和7的方框610到方框614以及方框702到方框710)。
当派生线程T0到达活动的、深层的推测式线程的CQIP时,则我们说遇到了一个连接点。线程的连接点是在其处一个正在进行的推测式线程开始执行的控制准独立点。应该理解,多个推测式线程可以在同一时刻是活动的。从而有了术语“深层的推测式的”。“深层的推测式的”线程指的是由参考线程(在本例中,线程T0)派生的线程并且在该被派生者的派生链中包括有随后被派生的推测式线程。
因此,当线程T0到达在其处正在进行的任意推测式线程开始执行的CQIP,则连接点检验607(图6)评估得出真。本领域的技术人员应该认识到,如果多个推测式线程同时是活动的,则在方框607处可以到达该活动的推测式线程的多个CQIP中的任何一个。为了简化说明,图7假设当T0在方框607处碰到一个连接点时,该连接点是与T1相关联的,T1就是程序顺序中的下一个线程,也就是其CQIP已经被非推测式线程T0到达的那个推测式线程。
一旦在方框607处到达连接点(图6),线程T0前进到方框703。线程T0确定703它是不是推测式的活动的线程,并且如果不是,则等待直到它变成非推测式线程。
当T0变成非推测式的,它启动704对由被派生线程T1完成的推测的验证。对于至少一个实施例,验证704包括确定被派生线程T1所使用的推测的内部值是否反映由派生线程计算的实际值。
如果验证704失败,则T1以及任何其它比T1更深层的推测式线程被压制(squash)730。然后线程T0前进到C(图6)继续执行其指令。否则,如果验证704成功,则线程T0和线程T1前进到方框720。在方框720,其中线程T0已被执行的线程上下文变成为自由的并被放弃(relinquish)。并且,在CQIP处开始的推测式线程T1变成非推测式线程并在C处(图6)继续执行。
对图6的参考显示,新的非推测式线程T0在方框602处检验以确定当它仍旧是推测式的时,它是否在方框708(图6)处遇到CQIP。如果是这样,则线程T0前进到B以开始如上所述的连接点处理。
图5、6和7所示基于CQIP的派生点选择和对内部值的推测式计算的结合提供了一种帮助提高推测式多线程运行的功效和准确度的多线程运行方法。能够获得这样的提高是因为由于在推测式线程执行之前计算了内部值,所以推测式线程之间的数据依赖性被最小化了。
在以上描述中,已经描述了用于帮助实现控制准独立点引导的推测式多线程运行的方法和设备的各个方面。为了说明,陈述了具体数字、示例、系统以及配置以提供更加全面的理解。但是,显然对于本领域的技术人员所描述的方法可以不通过这些特定细节而实现。其它情况下,为了使该方法清晰省略或简化掉了众所周知的细节。
该方法的实施例可以通过硬件、软件、固件或者这些实现途径的组合实现。本发明的实施例可被实现为执行在可编程系统上的计算机程序,其中所述可编程系统包括至少一个处理器、数据存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。程序代码可适于输入数据以完成这里所描述的功能并生成输出信息。输出信息可以以已知方式被施加给一个或者多个输出设备。为了该种应用的目的,处理系统包括任何具有处理器的系统,所述处理器可以是,例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器。
该程序可以用高级面向过程或者面向对象编程语言实现,以与处理系统交流。如果需要,该程序也可以用汇编语言或者机器语言实现。实际上,这里所描述的方法不限于任何特定编程语言的范围。在任何情况下,语言可以是编译语言或者解释语言。
程序可以存储在通用或者特定用途的可编程处理系统可读的存储介质或者设备(例如,硬盘驱动、软盘驱动、只读存储器(ROM)、CD-ROM设备、闪存设备、多功能数码光盘(DVD)或者其它存储设备)上。处理系统中处理器可访问的指令,当处理系统读存储介质或设备以完成这里所描述的程序时,实现了配置和运行该处理系统。还可以考虑将本发明的实施例实现为配置成与处理系统一起使用的机器可读存储介质,其中该存储介质被配置成使得处理系统以特定的预定方式完成这里所述的功能。
图8示出了这样一类处理系统的示例。系统800可以,例如,被用于执行用于实现控制准独立点引导的推测式多线程运行的方法的处理,例如这里所描述的实施例。系统800还可以执行根据这里所描述的方法的至少一个实施例而生成的改善的二进制文件。系统800代表了基于可从Intel公司购买到的Pentium、PentiumPro、PentiumI、PentiumII、Pentium4、以及Itanium和ItaniumII微处理器的处理系统,但是也可以使用其它系统(包括具有其它微处理器的个人电脑(PC)、工程工作站、机顶盒等)。在一个实施例中,示例系统800可执行从Microsoft公司能够购买到的WindowsTM操作系统的一个版本,但是也可以使用,例如,其它系统和图形用户界面。
参照图8,处理系统800包括存储器系统802和处理器804。存储器系统802可存储用于控制处理器804的操作的指令810和数据812。例如,指令810可包括编译器程序808,所述编译器程序当执行时,令处理器804编译存在于存储器系统802中的程序415。存储器802保存该要被编译的程序、该程序的中间形式以及结果得到的被编译程序。对于至少一个实施例,编译器程序808包括用于选择派生对和生成指令以实现CQIP引导的多线程的指令。对于这样的实施例,指令810还可包括根据本发明的至少一个实施例而生成的改善的二进制文件350(图3)。
存储器系统802意图作为存储器的总的代表,并且可包括各种形式的存储器,例如,硬盘驱动、CD-ROM、随机访问存储器(RAM)、动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)以及相关电路。存储器系统802可存储用数据信号识别的、可以由处理器804执行的指令810和/或数据812。指令810和/或数据812可包括用于完成这里所描述的所有技术或者其中的任一种的代码。CQIP引导的推测式多线程运行的至少一个实施例利用了系统800中的编译器808以如上面所描述的那样选择派生点和生成指令。
具体而言,图8图示了编译器808可包括特征分析器模块820,所述特征分析器模块820当被处理器804执行时,分析特征以如上关于图3所描述的那样生成控制流图。编译器808还可包括矩阵构建器模块824,所述矩阵构建器模块824当被处理器804执行时,如上所述地计算220到达概率并生成到达概率矩阵335。编译器808还可包括派生对选择器模块826,所述派生对选择器模块826当被处理器804执行时,识别230候选基本程序块并选择240一个或者多个派生对。同样,编译器808可包括分片器(slicer)模块822,所述分片器模块822为要被推测式线程执行以完成对内部值的推测式预计算的程序片识别502(图5)指令。编译器808还可包括代码生成器模块828,所述代码生成器模块828当被处理器804执行时,生成60改善的二进制文件350(图3)。
尽管示出和描述了本发明的特定实施例,但是对于本领域的技术人员显然能够在不背离本发明的更广阔的范围的情况下作出改变和修改。所附权利要求将落入本发明的真实范围之内的所有这样的改变和修改包括在其范围之中。
Claims (48)
1.一种编译软件程序的方法,包括:
选择包括派生点和控制准独立点的派生对;
支持对用于推测式线程的内部值的计算;以及
生成包括指令的改善的二进制文件,所述指令包括触发指令以使得在控制准独立点处派生所述推测式线程。
2.如权利要求1所述的方法,还包括:
完成特征分析。
3.如权利要求1所述的方法,还包括:
计算多个到达概率。
4.如权利要求1所述的方法,还包括:
识别多个候选基本程序块。
5.如权利要求4所述的方法,其中
选择派生对还包括从所述多个候选基本程序块中选择所述派生对。
6.如权利要求1所述的方法,其中
生成所述改善的二进制文件还包括在与所述派生对相关联的派生点处嵌入触发器。
7.如权利要求1所述的方法,其中选择所述派生对还包括:
选择至少具有最小平均数量的所述派生对的派生点和控制准独立点之间的指令的派生对。
8.如权利要求3所述的方法,其中选择所述派生对还包括:
选择至少具有最小到达概率的派生对。
9.如权利要求1所述的方法,其中支持对所述内部值的计算还包括:
提供指令以起动对所述内部值的硬件预测。
10.如权利要求1所述的方法,其中支持对所述内部值的计算还包括:
生成一个或者多个指令以完成对所述内部值的推测式预计算。
11.如权利要求1所述的方法,其中
选择派生对还包括选择第一派生对和第二派生对;并且
生成包括有指令的改善的二进制文件还包括生成包括有用于各个派生对的触发指令的改善的二进制文件。
12.一种物品,包括:
具有多个机器可访问的指令的机器可读存储介质;
其中,当所述指令被处理器执行时,所述指令支持:
选择包括派生点和控制准独立点的派生对;
支持对用于推测式线程的内部值的计算;以及
生成包括指令的改善的二进制文件,所述指令包括触发指令以使
得在控制准独立点处派生推测式线程。
13.如权利要求12所述的物品,其中所述指令还包括:
支持完成特征分析的指令。
14.如权利要求12所述的物品,其中所述指令还包括:
支持计算多个到达概率的指令。
15.如权利要求12所述的物品,其中所述指令还包括:
支持识别多个候选基本程序块的指令。
16.如权利要求15所述的物品,其中
所述支持选择派生对的指令还包括
支持从所述多个候选基本程序块中选择所述派生对的指令。
17.如权利要求12所述的物品,其中
所述支持生成所述改善的二进制文件的指令还包括
支持在与所述派生对相关联的派生点嵌入触发器的指令。
18.如权利要求12所述的物品,其中所述支持选择所述派生对的指令还包括:
支持选择至少具有最小平均数量的所述派生对的派生点和控制准独立点之间的指令的派生对的指令。
19.如权利要求14所述的物品,其中所述支持选择所述派生对的指令还包括:
支持选择至少具有最小到达概率的派生对的指令。
20.如权利要求12所述的物品,其中所述支持对所述内部值的计算的指令还包括:
支持提供指令以起动对所述内部值的硬件预测的指令。
21.如权利要求12所述的物品,其中所述支持对所述内部值的计算的指令还包括:
支持生成一个或者多个指令以完成对所述内部值的推测式预计算的指令。
22.一种方法,包括:
在非推测式线程中执行第一指令流中的一个或者多个指令;
在所述第一指令流中的派生点处派生推测式线程,其中计算得到的在执行所述第一指令流的过程中,在对所述派生点的执行之后,到达控制准独立点的概率高于预定阈值;以及
同时:
在所述推测式线程中执行包括所述第一指令流中的指令的一个子
集的推测式线程指令流,所述推测式线程指令流包括所述控
制准独立点;并且
执行所述第一指令流中跟随在所述派生点之后的一个或者多个指令。
23.如权利要求22所述的方法,其中
执行所述第一指令流中跟随所述派生点之后的一个或者多个指令还包括执行指令直至到达所述控制准独立点。
24.如权利要求23所述的方法,还包括:
响应于到达所述控制准独立点,确定所述推测式线程中完成的推测式执行是否正确。
25.如权利要求24所述的方法,还包括:
响应于确定了所述推测式线程中完成的所述推测式执行是正确的,放弃所述非推测式线程。
26.如权利要求24所述的方法,还包括:
响应于确定了所述推测式线程中完成的推测式执行是不正确的,压制所述推测式线程。
27.如权利要求26所述的方法,还包括:
响应于确定了所述推测式线程中完成的推测式执行是不正确的,压制所述推测式线程的所有可能有的活动的后继线程。
28.如权利要求22所述的方法,其中
所述推测式线程指令流包括用于对内部值的推测式计算的预计算程序片。
29.如权利要求22所述的方法,其中
派生所述推测式线程触发对内部值的硬件预测。
30.如权利要求28所述的方法,其中
所述推测式线程指令流在所述预计算程序片之后包括到所述控制准独立点的分支指令。
31.如权利要求22所述的方法,还包括:
在所述推测式线程指令流的派生点处派生第二推测式线程。
32.一种物品,包括:
具有多个机器可访问的指令的机器可读存储介质;
其中,当所述指令被处理器执行时,所述指令支持
在非推测式线程中执行第一指令流中的一个或者多个指令;
在所述第一指令流中的派生点处派生推测式线程,其中计算得到
的在执行所述第一指令流的过程中,在对所述派生点的执行
之后,到达控制准独立点的概率高于预定阈值;以及
同时:
在所述推测式线程中执行包括所述第一指令流中的指令的一
个子集的推测式线程指令流,所述推测式线程指令流包
括所述控制准独立点;并且
执行所述第一指令流中跟随在所述派生点之后的一个或者多
个指令。
33.如权利要求32所述的物品,其中
所述支持执行所述第一指令流中跟随所述派生点的一个或者多个指令的指令还包括支持执行指令直到到达所述控制准独立点的指令。
34.如权利要求33所述的物品,其中所述指令还包括:
支持响应于到达所述控制准独立点,确定所述推测式线程中完成的推测式执行是否正确的指令。
35.如权利要求34所述的物品,其中所述指令还包括:
支持响应于确定了所述推测式线程中完成的所述推测式执行是正确的,放弃所述非推测式线程的指令。
36.如权利要求34所述的物品,还包括:
支持响应于确定了所述推测式线程中完成的推测式执行是不正确的,压制所述推测式线程的指令。
37.如权利要求36所述的物品,其中所述指令还包括:
支持响应于确定了所述推测式线程中完成的推测式执行是不正确的,压制所述推测式线程的所有可能有的活动的后继线程的指令。
38.如权利要求32所述的物品,其中
所述推测式线程指令流包括用于对内部值的推测式计算的预计算程序片。
39.如权利要求32所述的物品,其中
所述支持派生所述推测式线程的指令触发对内部值的硬件预测。
40.如权利要求38所述的物品,其中
所述推测式线程指令流在所述预计算程序片之后包括到所述控制准独立点的分支指令。
41.一种编译器,包括:
派生对选择器模块,用于选择包括有控制准独立点和派生点的派生对;和
代码生成器,用于生成在所述派生点包括触发指令的改善的二进制文件。
42.如权利要求41所述的编译器,其中
所述触发指令将派生在控制准独立点处开始执行的推测式线程。
43.如权利要求41所述的编译器,还包括:
分片器,用于生成用于对内部值的预计算的程序片;
其中所述代码生成器还包括所述改善的二进制文件中的所述预计算程序片。
44.如权利要求41所述的编译器,其中
所述派生对选择模块还选择派生对,使得计算得到的在对所述派生点的执行之后到达所述控制准独立点的概率高于预定阈值。
45.如权利要求44所述的编译器,还包括:
矩阵构建器,用于为所述派生对计算到达概率。
46.如权利要求41所述的编译器,还包括:
特征分析器,用于构建控制流图。
47.如权利要求41所述的编译器,其中
所述触发指令将触发对内部值的硬件值预测。
48.如权利要求41所述的编译器,还包括:
矩阵构建器,用于为所述派生对计算到达概率。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/356,435 US20040154010A1 (en) | 2003-01-31 | 2003-01-31 | Control-quasi-independent-points guided speculative multithreading |
US10/356,435 | 2003-01-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1519718A true CN1519718A (zh) | 2004-08-11 |
CN1302384C CN1302384C (zh) | 2007-02-28 |
Family
ID=32770808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101215924A Expired - Fee Related CN1302384C (zh) | 2003-01-31 | 2003-12-29 | 控制准独立点引导的推测式多线程运行 |
Country Status (2)
Country | Link |
---|---|
US (4) | US20040154010A1 (zh) |
CN (1) | CN1302384C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104081343A (zh) * | 2012-01-31 | 2014-10-01 | 国际商业机器公司 | 事务存储器的主分支指令 |
Families Citing this family (160)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7168076B2 (en) * | 2001-07-13 | 2007-01-23 | Sun Microsystems, Inc. | Facilitating efficient join operations between a head thread and a speculative thread |
US6970985B2 (en) | 2002-07-09 | 2005-11-29 | Bluerisc Inc. | Statically speculative memory accessing |
JP3862652B2 (ja) * | 2002-12-10 | 2006-12-27 | キヤノン株式会社 | 印刷制御方法及び情報処理装置 |
US7774759B2 (en) | 2003-04-28 | 2010-08-10 | Intel Corporation | Methods and apparatus to detect a macroscopic transaction boundary in a program |
US7647585B2 (en) * | 2003-04-28 | 2010-01-12 | Intel Corporation | Methods and apparatus to detect patterns in programs |
US8266379B2 (en) * | 2003-06-02 | 2012-09-11 | Infineon Technologies Ag | Multithreaded processor with multiple caches |
US20040243767A1 (en) * | 2003-06-02 | 2004-12-02 | Cierniak Michal J. | Method and apparatus for prefetching based upon type identifier tags |
US7844801B2 (en) * | 2003-07-31 | 2010-11-30 | Intel Corporation | Method and apparatus for affinity-guided speculative helper threads in chip multiprocessors |
JP4042972B2 (ja) * | 2003-09-30 | 2008-02-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化コンパイラ、コンパイラプログラム、及び記録媒体 |
US20050071438A1 (en) * | 2003-09-30 | 2005-03-31 | Shih-Wei Liao | Methods and apparatuses for compiler-creating helper threads for multi-threading |
US20050114850A1 (en) * | 2003-10-29 | 2005-05-26 | Saurabh Chheda | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control |
US7996671B2 (en) | 2003-11-17 | 2011-08-09 | Bluerisc Inc. | Security of program executables and microprocessors based on compiler-architecture interaction |
US7206795B2 (en) * | 2003-12-22 | 2007-04-17 | Jean-Pierre Bono | Prefetching and multithreading for improved file read performance |
US7941521B1 (en) | 2003-12-30 | 2011-05-10 | Sap Ag | Multi-service management architecture employed within a clustered node configuration |
US7725572B1 (en) | 2003-12-30 | 2010-05-25 | Sap Ag | Notification architecture and method employed within a clustered node configuration |
US7756968B1 (en) | 2003-12-30 | 2010-07-13 | Sap Ag | Method and system for employing a hierarchical monitor tree for monitoring system resources in a data processing environment |
US7822826B1 (en) | 2003-12-30 | 2010-10-26 | Sap Ag | Deployment of a web service |
US8607209B2 (en) | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
US7379858B2 (en) * | 2004-02-17 | 2008-05-27 | Intel Corporation | Computation of all-pairs reaching probabilities in software systems |
US7526550B2 (en) * | 2004-03-26 | 2009-04-28 | Sap Ag | Unified logging service with a log viewer |
US7721266B2 (en) * | 2004-03-26 | 2010-05-18 | Sap Ag | Unified logging service with a logging formatter |
US20050216585A1 (en) * | 2004-03-26 | 2005-09-29 | Tsvetelina Todorova | Monitor viewer for an enterprise network monitoring system |
US7168070B2 (en) * | 2004-05-25 | 2007-01-23 | International Business Machines Corporation | Aggregate bandwidth through management using insertion of reset instructions for cache-to-cache data transfer |
US7434004B1 (en) * | 2004-06-17 | 2008-10-07 | Sun Microsystems, Inc. | Prefetch prediction |
US7200734B2 (en) * | 2004-07-31 | 2007-04-03 | Hewlett-Packard Development Company, L.P. | Operating-system-transparent distributed memory |
US7669194B2 (en) * | 2004-08-26 | 2010-02-23 | International Business Machines Corporation | Fine-grained software-directed data prefetching using integrated high-level and low-level code analysis optimizations |
US20060047495A1 (en) * | 2004-09-01 | 2006-03-02 | Jesus Sanchez | Analyzer for spawning pairs in speculative multithreaded processor |
US8719819B2 (en) * | 2005-06-30 | 2014-05-06 | Intel Corporation | Mechanism for instruction set based thread execution on a plurality of instruction sequencers |
US7870081B2 (en) * | 2004-12-31 | 2011-01-11 | Intel Corporation | Parallelization of bayesian network structure learning |
CA2594630A1 (en) * | 2005-01-11 | 2006-07-20 | Avox Systems Inc. | Regulator with belleville springs |
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 |
US7634641B2 (en) * | 2005-03-18 | 2009-12-15 | Sun Microsystems, Inc. | Method and apparatus for using multiple threads to spectulatively execute instructions |
US7472256B1 (en) | 2005-04-12 | 2008-12-30 | Sun Microsystems, Inc. | Software value prediction using pendency records of predicted prefetch values |
US7810075B2 (en) * | 2005-04-29 | 2010-10-05 | Sap Ag | Common trace files |
US20080134196A1 (en) * | 2005-05-19 | 2008-06-05 | Intel Corporation | Apparatus, System, and Method of a Memory Arrangement for Speculative Multithreading |
US7627864B2 (en) * | 2005-06-27 | 2009-12-01 | Intel Corporation | Mechanism to optimize speculative parallel threading |
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 |
US7953961B1 (en) | 2005-09-28 | 2011-05-31 | Oracle America, Inc. | Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder |
US7949854B1 (en) | 2005-09-28 | 2011-05-24 | Oracle America, Inc. | Trace unit with a trace builder |
US7966479B1 (en) | 2005-09-28 | 2011-06-21 | Oracle America, Inc. | Concurrent vs. low power branch prediction |
US7937564B1 (en) | 2005-09-28 | 2011-05-03 | Oracle America, Inc. | Emit vector optimization of a trace |
US7987342B1 (en) | 2005-09-28 | 2011-07-26 | Oracle America, Inc. | Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer |
US8024522B1 (en) | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
US8051247B1 (en) | 2005-09-28 | 2011-11-01 | Oracle America, Inc. | Trace based deallocation of entries in a versioning cache circuit |
US7676634B1 (en) | 2005-09-28 | 2010-03-09 | Sun Microsystems, Inc. | Selective trace cache invalidation for self-modifying code via memory aging |
US8499293B1 (en) | 2005-09-28 | 2013-07-30 | Oracle America, Inc. | Symbolic renaming optimization of a trace |
US7877630B1 (en) * | 2005-09-28 | 2011-01-25 | Oracle America, Inc. | Trace based rollback of a speculatively updated cache |
US7870369B1 (en) | 2005-09-28 | 2011-01-11 | Oracle America, Inc. | Abort prioritization in a trace-based processor |
US8019944B1 (en) | 2005-09-28 | 2011-09-13 | Oracle America, Inc. | Checking for a memory ordering violation after a speculative cache write |
US8015359B1 (en) | 2005-09-28 | 2011-09-06 | Oracle America, Inc. | Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit |
US8032710B1 (en) | 2005-09-28 | 2011-10-04 | Oracle America, Inc. | System and method for ensuring coherency in trace execution |
US8037285B1 (en) | 2005-09-28 | 2011-10-11 | Oracle America, Inc. | Trace unit |
US8370576B1 (en) | 2005-09-28 | 2013-02-05 | Oracle America, Inc. | Cache rollback acceleration via a bank based versioning cache ciruit |
US20070113055A1 (en) * | 2005-11-15 | 2007-05-17 | Dale Jason N | Apparatus and method for improving single thread performance through speculative processing |
US20070113056A1 (en) * | 2005-11-15 | 2007-05-17 | Dale Jason N | Apparatus and method for using multiple thread contexts to improve single thread performance |
US7739662B2 (en) * | 2005-12-30 | 2010-06-15 | Intel Corporation | Methods and apparatus to analyze processor systems |
US7730263B2 (en) * | 2006-01-20 | 2010-06-01 | Cornell Research Foundation, Inc. | Future execution prefetching technique and architecture |
US20070234014A1 (en) * | 2006-03-28 | 2007-10-04 | Ryotaro Kobayashi | Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor |
WO2007138124A1 (es) * | 2006-05-30 | 2007-12-06 | Intel Corporation | Método aparato y sistema aplicado en un protocolo de coherencia de una memoria cache |
US20080016325A1 (en) * | 2006-07-12 | 2008-01-17 | Laudon James P | Using windowed register file to checkpoint register state |
US8370609B1 (en) | 2006-09-27 | 2013-02-05 | Oracle America, Inc. | Data cache rollbacks for failed speculative traces with memory operations |
US8010745B1 (en) | 2006-09-27 | 2011-08-30 | Oracle America, Inc. | Rolling back a speculative update of a non-modifiable cache line |
US20080126766A1 (en) | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
US20080141268A1 (en) * | 2006-12-12 | 2008-06-12 | Tirumalai Partha P | Utility function execution using scout threads |
US8813057B2 (en) * | 2007-03-31 | 2014-08-19 | Intel Corporation | Branch pruning in architectures with speculation support |
US7765242B2 (en) * | 2007-05-10 | 2010-07-27 | Hewlett-Packard Development Company, L.P. | Methods and apparatus for structure layout optimization for multi-threaded programs |
US8321840B2 (en) * | 2007-12-27 | 2012-11-27 | Intel Corporation | Software flow tracking using multiple threads |
US8706979B2 (en) * | 2007-12-30 | 2014-04-22 | Intel Corporation | Code reuse and locality hinting |
US8775778B2 (en) * | 2008-02-01 | 2014-07-08 | International Business Machines Corporation | Use of a helper thread to asynchronously compute incoming data |
US8640141B2 (en) * | 2008-02-01 | 2014-01-28 | International Business Machines Corporation | Wake-and-go mechanism with hardware private array |
US8145849B2 (en) | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Wake-and-go mechanism with system bus response |
US8225120B2 (en) * | 2008-02-01 | 2012-07-17 | International Business Machines Corporation | Wake-and-go mechanism with data exclusivity |
US8732683B2 (en) | 2008-02-01 | 2014-05-20 | International Business Machines Corporation | Compiler providing idiom to idiom accelerator |
US8707016B2 (en) * | 2008-02-01 | 2014-04-22 | International Business Machines Corporation | Thread partitioning in a multi-core environment |
US8880853B2 (en) * | 2008-02-01 | 2014-11-04 | International Business Machines Corporation | CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock |
US8250396B2 (en) | 2008-02-01 | 2012-08-21 | International Business Machines Corporation | Hardware wake-and-go mechanism for a data processing system |
US8312458B2 (en) * | 2008-02-01 | 2012-11-13 | International Business Machines Corporation | Central repository for wake-and-go mechanism |
US8725992B2 (en) | 2008-02-01 | 2014-05-13 | International Business Machines Corporation | Programming language exposing idiom calls to a programming idiom accelerator |
US8788795B2 (en) | 2008-02-01 | 2014-07-22 | International Business Machines Corporation | Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors |
US8316218B2 (en) * | 2008-02-01 | 2012-11-20 | International Business Machines Corporation | Look-ahead wake-and-go engine with speculative execution |
US8341635B2 (en) * | 2008-02-01 | 2012-12-25 | International Business Machines Corporation | Hardware wake-and-go mechanism with look-ahead polling |
US8359589B2 (en) * | 2008-02-01 | 2013-01-22 | International Business Machines Corporation | Helper thread for pre-fetching data |
US8601241B2 (en) * | 2008-02-01 | 2013-12-03 | International Business Machines Corporation | General purpose register cloning |
US8452947B2 (en) | 2008-02-01 | 2013-05-28 | International Business Machines Corporation | Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms |
US8386822B2 (en) | 2008-02-01 | 2013-02-26 | International Business Machines Corporation | Wake-and-go mechanism with data monitoring |
US8171476B2 (en) * | 2008-02-01 | 2012-05-01 | International Business Machines Corporation | Wake-and-go mechanism with prioritization of threads |
US8516484B2 (en) * | 2008-02-01 | 2013-08-20 | International Business Machines Corporation | Wake-and-go mechanism for a data processing system |
US8612977B2 (en) | 2008-02-01 | 2013-12-17 | International Business Machines Corporation | Wake-and-go mechanism with software save of thread state |
US8127080B2 (en) | 2008-02-01 | 2012-02-28 | International Business Machines Corporation | Wake-and-go mechanism with system address bus transaction master |
US8752007B2 (en) | 2008-03-26 | 2014-06-10 | Avaya Inc. | Automatic generation of run-time instrumenter |
US8739145B2 (en) * | 2008-03-26 | 2014-05-27 | Avaya Inc. | Super nested block method to minimize coverage testing overhead |
US8195896B2 (en) * | 2008-06-10 | 2012-06-05 | International Business Machines Corporation | Resource sharing techniques in a parallel processing computing system utilizing locks by replicating or shadowing execution contexts |
JP2010039536A (ja) * | 2008-07-31 | 2010-02-18 | Panasonic Corp | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
US8914781B2 (en) * | 2008-10-24 | 2014-12-16 | Microsoft Corporation | Scalability analysis for server systems |
KR101579589B1 (ko) * | 2009-02-12 | 2015-12-22 | 삼성전자 주식회사 | 파이프라인 프로세서를 위한 정적 분기 예측 방법과 이를 위한 컴파일 방법 |
US9940138B2 (en) | 2009-04-08 | 2018-04-10 | Intel Corporation | Utilization of register checkpointing mechanism with pointer swapping to resolve multithreading mis-speculations |
US8230201B2 (en) | 2009-04-16 | 2012-07-24 | International Business Machines Corporation | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system |
US8145723B2 (en) | 2009-04-16 | 2012-03-27 | International Business Machines Corporation | Complex remote update programming idiom accelerator |
US8886919B2 (en) * | 2009-04-16 | 2014-11-11 | International Business Machines Corporation | Remote update programming idiom accelerator with allocated processor resources |
US8397052B2 (en) * | 2009-08-19 | 2013-03-12 | International Business Machines Corporation | Version pressure feedback mechanisms for speculative versioning caches |
US8521961B2 (en) * | 2009-08-20 | 2013-08-27 | International Business Machines Corporation | Checkpointing in speculative versioning caches |
CA2680597C (en) * | 2009-10-16 | 2011-06-07 | Ibm Canada Limited - Ibm Canada Limitee | Managing speculative assist threads |
US9542647B1 (en) | 2009-12-16 | 2017-01-10 | Board Of Regents, The University Of Texas System | Method and system for an ontology, including a representation of unified medical language system (UMLS) using simple knowledge organization system (SKOS) |
US9043769B2 (en) * | 2009-12-28 | 2015-05-26 | Hyperion Core Inc. | Optimization of loops and data flow sections in multi-core processor environment |
CN101826014B (zh) * | 2010-04-20 | 2013-05-08 | 北京邮电大学 | 一种软件工程源代码的分割方法 |
US9086889B2 (en) * | 2010-04-27 | 2015-07-21 | Oracle International Corporation | Reducing pipeline restart penalty |
US8990802B1 (en) * | 2010-05-24 | 2015-03-24 | Thinking Software, Inc. | Pinball virtual machine (PVM) implementing computing process within a structural space using PVM atoms and PVM atomic threads |
US8904118B2 (en) | 2011-01-07 | 2014-12-02 | International Business Machines Corporation | Mechanisms for efficient intra-die/intra-chip collective messaging |
US20120179896A1 (en) | 2011-01-10 | 2012-07-12 | International Business Machines Corporation | Method and apparatus for a hierarchical synchronization barrier in a multi-node system |
US9195550B2 (en) * | 2011-02-03 | 2015-11-24 | International Business Machines Corporation | Method for guaranteeing program correctness using fine-grained hardware speculative execution |
US8856767B2 (en) * | 2011-04-29 | 2014-10-07 | Yahoo! Inc. | System and method for analyzing dynamic performance of complex applications |
US10061618B2 (en) * | 2011-06-16 | 2018-08-28 | Imagination Technologies Limited | Scheduling heterogenous computation on multithreaded processors |
US8739186B2 (en) * | 2011-10-26 | 2014-05-27 | Autodesk, Inc. | Application level speculative processing |
US9009734B2 (en) | 2012-03-06 | 2015-04-14 | Autodesk, Inc. | Application level speculative processing |
US10558437B1 (en) * | 2013-01-22 | 2020-02-11 | Altera Corporation | Method and apparatus for performing profile guided optimization for high-level synthesis |
US8954546B2 (en) | 2013-01-25 | 2015-02-10 | Concurix Corporation | Tracing with a workload distributor |
US9813307B2 (en) | 2013-01-28 | 2017-11-07 | Rackspace Us, Inc. | Methods and systems of monitoring failures in a distributed network system |
US9135145B2 (en) * | 2013-01-28 | 2015-09-15 | Rackspace Us, Inc. | Methods and systems of distributed tracing |
US9483334B2 (en) | 2013-01-28 | 2016-11-01 | Rackspace Us, Inc. | Methods and systems of predictive monitoring of objects in a distributed network system |
US9397902B2 (en) | 2013-01-28 | 2016-07-19 | Rackspace Us, Inc. | Methods and systems of tracking and verifying records of system change events in a distributed network system |
US8924941B2 (en) | 2013-02-12 | 2014-12-30 | Concurix Corporation | Optimization analysis using similar frequencies |
US20130283281A1 (en) | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deploying Trace Objectives using Cost Analyses |
US8997063B2 (en) | 2013-02-12 | 2015-03-31 | Concurix Corporation | Periodicity optimization in an automated tracing system |
US20130227529A1 (en) * | 2013-03-15 | 2013-08-29 | Concurix Corporation | Runtime Memory Settings Derived from Trace Data |
US9086873B2 (en) | 2013-03-15 | 2015-07-21 | Intel Corporation | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture |
US9575874B2 (en) | 2013-04-20 | 2017-02-21 | Microsoft Technology Licensing, Llc | Error list and bug report analysis for configuring an application tracer |
CA3125705C (en) * | 2013-04-23 | 2022-02-15 | Ab Initio Technology Llc | Controlling tasks performed by a computing system |
US9292415B2 (en) | 2013-09-04 | 2016-03-22 | Microsoft Technology Licensing, Llc | Module specific tracing in a shared module environment |
EP3069241B1 (en) | 2013-11-13 | 2018-08-15 | Microsoft Technology Licensing, LLC | Application execution path tracing with configurable origin definition |
EP3097482A1 (en) * | 2014-01-20 | 2016-11-30 | Sony Corporation | Parallelization method and system |
US10102004B2 (en) | 2014-03-27 | 2018-10-16 | International Business Machines Corporation | Hardware counters to track utilization in a multithreading computer system |
US9417876B2 (en) | 2014-03-27 | 2016-08-16 | International Business Machines Corporation | Thread context restoration in a multithreading computer system |
US9218185B2 (en) | 2014-03-27 | 2015-12-22 | International Business Machines Corporation | Multithreading capability information retrieval |
US9921848B2 (en) | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9804846B2 (en) | 2014-03-27 | 2017-10-31 | International Business Machines Corporation | Thread context preservation in a multithreading computer system |
US9594660B2 (en) | 2014-03-27 | 2017-03-14 | International Business Machines Corporation | Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores |
US9354883B2 (en) | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US9348595B1 (en) | 2014-12-22 | 2016-05-24 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US9135015B1 (en) | 2014-12-25 | 2015-09-15 | Centipede Semi Ltd. | Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction |
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 |
US10536357B2 (en) | 2015-06-05 | 2020-01-14 | Cisco Technology, Inc. | Late data detection in data center |
US10142353B2 (en) | 2015-06-05 | 2018-11-27 | Cisco Technology, Inc. | System for monitoring and managing datacenters |
US11755484B2 (en) * | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US10222995B2 (en) | 2016-04-13 | 2019-03-05 | Samsung Electronics Co., Ltd. | System and method for providing a zero contention parallel data stack |
US10761854B2 (en) * | 2016-04-19 | 2020-09-01 | International Business Machines Corporation | Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor |
US10664377B2 (en) * | 2016-07-15 | 2020-05-26 | Blackberry Limited | Automation of software verification |
US20180067729A1 (en) | 2016-09-06 | 2018-03-08 | Jacob Harris Apkon | Techniques for modifying execution of a computer program based on user input received through a graphical user interface |
US10896130B2 (en) | 2016-10-19 | 2021-01-19 | International Business Machines Corporation | Response times in asynchronous I/O-based software using thread pairing and co-execution |
US10459825B2 (en) * | 2017-08-18 | 2019-10-29 | Red Hat, Inc. | Intelligent expansion of system information collection |
US10379863B2 (en) * | 2017-09-21 | 2019-08-13 | Qualcomm Incorporated | Slice construction for pre-executing data dependent loads |
US10503626B2 (en) * | 2018-01-29 | 2019-12-10 | Oracle International Corporation | Hybrid instrumentation framework for multicore low power processors |
US10657057B2 (en) * | 2018-04-04 | 2020-05-19 | Nxp B.V. | Secure speculative instruction execution in a data processing system |
US10896044B2 (en) * | 2018-06-21 | 2021-01-19 | Advanced Micro Devices, Inc. | Low latency synchronization for operation cache and instruction cache fetching and decoding instructions |
US11157283B2 (en) * | 2019-01-09 | 2021-10-26 | Intel Corporation | Instruction prefetch based on thread dispatch commands |
US11556374B2 (en) | 2019-02-15 | 2023-01-17 | International Business Machines Corporation | Compiler-optimized context switching with compiler-inserted data table for in-use register identification at a preferred preemption point |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5860017A (en) * | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
JP2882475B2 (ja) * | 1996-07-12 | 1999-04-12 | 日本電気株式会社 | スレッド実行方法 |
US6212542B1 (en) * | 1996-12-16 | 2001-04-03 | International Business Machines Corporation | Method and system for executing a program within a multiscalar processor by processing linked thread descriptors |
US6463527B1 (en) * | 1997-03-21 | 2002-10-08 | Uzi Y. Vishkin | Spawn-join instruction set architecture for providing explicit multithreading |
US6263404B1 (en) * | 1997-11-21 | 2001-07-17 | International Business Machines Corporation | Accessing data from a multiple entry fully associative cache buffer in a multithread data processing system |
US6182210B1 (en) * | 1997-12-16 | 2001-01-30 | Intel Corporation | Processor having multiple program counters and trace buffers outside an execution pipeline |
US6301705B1 (en) * | 1998-10-01 | 2001-10-09 | Institute For The Development Of Emerging Architectures, L.L.C. | System and method for deferring exceptions generated during speculative execution |
EP0992916A1 (en) * | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Digital signal processor |
US6622155B1 (en) * | 1998-11-24 | 2003-09-16 | Sun Microsystems, Inc. | Distributed monitor concurrency control |
US6317816B1 (en) * | 1999-01-29 | 2001-11-13 | International Business Machines Corporation | Multiprocessor scaleable system and method for allocating memory from a heap |
KR100308211B1 (ko) * | 1999-03-27 | 2001-10-29 | 윤종용 | 압축 명령을 갖는 마이크로 컴퓨터 시스템 |
WO2000068784A1 (en) * | 1999-05-06 | 2000-11-16 | Koninklijke Philips Electronics N.V. | Data processing device, method for executing load or store instructions and method for compiling programs |
US6341347B1 (en) * | 1999-05-11 | 2002-01-22 | Sun Microsystems, Inc. | Thread switch logic in a multiple-thread processor |
US6542991B1 (en) * | 1999-05-11 | 2003-04-01 | Sun Microsystems, Inc. | Multiple-thread processor with single-thread interface shared among threads |
US6351808B1 (en) * | 1999-05-11 | 2002-02-26 | Sun Microsystems, Inc. | Vertically and horizontally threaded processor with multidimensional storage for storing thread data |
US6463526B1 (en) * | 1999-06-07 | 2002-10-08 | Sun Microsystems, Inc. | Supporting multi-dimensional space-time computing through object versioning |
US6532521B1 (en) * | 1999-06-30 | 2003-03-11 | International Business Machines Corporation | Mechanism for high performance transfer of speculative request data between levels of cache hierarchy |
US6574725B1 (en) * | 1999-11-01 | 2003-06-03 | Advanced Micro Devices, Inc. | Method and mechanism for speculatively executing threads of instructions |
US6484254B1 (en) * | 1999-12-30 | 2002-11-19 | Intel Corporation | Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses |
US6711671B1 (en) * | 2000-02-18 | 2004-03-23 | Hewlett-Packard Development Company, L.P. | Non-speculative instruction fetch in speculative processing |
US7343602B2 (en) * | 2000-04-19 | 2008-03-11 | Hewlett-Packard Development Company, L.P. | Software controlled pre-execution in a multithreaded processor |
US6684375B2 (en) * | 2000-11-22 | 2004-01-27 | Matsushita Electric Industrial Co., Ltd. | Delay distribution calculation method, circuit evaluation method and false path extraction method |
JP3969009B2 (ja) * | 2001-03-29 | 2007-08-29 | 株式会社日立製作所 | ハードウェアプリフェッチシステム |
US6928645B2 (en) * | 2001-03-30 | 2005-08-09 | Intel Corporation | Software-based speculative pre-computation and multithreading |
US20020199179A1 (en) * | 2001-06-21 | 2002-12-26 | Lavery Daniel M. | Method and apparatus for compiler-generated triggering of auxiliary codes |
JP3702814B2 (ja) * | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
JP3661614B2 (ja) * | 2001-07-12 | 2005-06-15 | 日本電気株式会社 | キャッシュメモリ制御方法及びマルチプロセッサシステム |
JP3632635B2 (ja) * | 2001-07-18 | 2005-03-23 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
SE0102564D0 (sv) * | 2001-07-19 | 2001-07-19 | Ericsson Telefon Ab L M | Arrangement and method in computor system |
US6959435B2 (en) * | 2001-09-28 | 2005-10-25 | Intel Corporation | Compiler-directed speculative approach to resolve performance-degrading long latency events in an application |
US7137111B2 (en) * | 2001-11-28 | 2006-11-14 | Sun Microsystems, Inc. | Aggressive prefetch of address chains |
US20030145314A1 (en) * | 2002-01-31 | 2003-07-31 | Khoa Nguyen | Method of efficient dynamic data cache prefetch insertion |
US6959372B1 (en) * | 2002-02-19 | 2005-10-25 | Cogent Chipware Inc. | Processor cluster architecture and associated parallel processing methods |
US6883086B2 (en) * | 2002-03-06 | 2005-04-19 | Intel Corporation | Repair of mis-predicted load values |
US8095920B2 (en) * | 2002-09-17 | 2012-01-10 | Intel Corporation | Post-pass binary adaptation for software-based speculative precomputation |
US7185338B2 (en) * | 2002-10-15 | 2007-02-27 | Sun Microsystems, Inc. | Processor with speculative multithreading and hardware to support multithreading software |
US7062606B2 (en) * | 2002-11-01 | 2006-06-13 | Infineon Technologies Ag | Multi-threaded embedded processor using deterministic instruction memory to guarantee execution of pre-selected threads during blocking events |
US20040123081A1 (en) * | 2002-12-20 | 2004-06-24 | Allan Knies | Mechanism to increase performance of control speculation |
AU2003303438A1 (en) * | 2002-12-24 | 2004-07-22 | Sun Microsystems, Inc. | Performing hardware scout threading in a system that supports simultaneous multithreading |
-
2003
- 2003-01-31 US US10/356,435 patent/US20040154010A1/en not_active Abandoned
- 2003-04-24 US US10/423,633 patent/US7814469B2/en not_active Expired - Fee Related
- 2003-04-24 US US10/422,528 patent/US7523465B2/en not_active Expired - Fee Related
- 2003-12-29 CN CNB2003101215924A patent/CN1302384C/zh not_active Expired - Fee Related
-
2010
- 2010-09-10 US US12/879,898 patent/US8719806B2/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104081343A (zh) * | 2012-01-31 | 2014-10-01 | 国际商业机器公司 | 事务存储器的主分支指令 |
CN104081343B (zh) * | 2012-01-31 | 2016-08-17 | 国际商业机器公司 | 事务存储器的主分支指令 |
Also Published As
Publication number | Publication date |
---|---|
US20100332811A1 (en) | 2010-12-30 |
US8719806B2 (en) | 2014-05-06 |
US20040154019A1 (en) | 2004-08-05 |
US20040154010A1 (en) | 2004-08-05 |
US7814469B2 (en) | 2010-10-12 |
US20040154011A1 (en) | 2004-08-05 |
US7523465B2 (en) | 2009-04-21 |
CN1302384C (zh) | 2007-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1302384C (zh) | 控制准独立点引导的推测式多线程运行 | |
US6301706B1 (en) | Compiler method and apparatus for elimination of redundant speculative computations from innermost loops | |
US8516465B2 (en) | Register prespill phase in a compiler | |
de Oliveira Sandes et al. | CUDAlign 4.0: Incremental speculative traceback for exact chromosome-wide alignment in GPU clusters | |
JP3844691B2 (ja) | コード生成モード変更方法 | |
KR101267911B1 (ko) | 인스트럭션 성능 최적화 방법 및 시스템 | |
CN1853166A (zh) | 用于多线程的线程管理的方法和装置 | |
JP2004302706A (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
CN1853165A (zh) | 用于多线程的编译器创建辅助线程的方法和装置 | |
US20110099550A1 (en) | Analysis and visualization of concurrent thread execution on processor cores. | |
CN1677353A (zh) | 用于检测多线程程序中潜在竞争的方法和系统 | |
US20050144602A1 (en) | Methods and apparatus to compile programs to use speculative parallel threads | |
US20080216062A1 (en) | Method for Configuring a Dependency Graph for Dynamic By-Pass Instruction Scheduling | |
CN101031877A (zh) | 线程活锁单元 | |
US20060064692A1 (en) | Selection of spawning pairs for a speculative multithreaded processor | |
CN101034470A (zh) | 指令解析器以及图形处理单元及其方法 | |
CN1945525A (zh) | 从队列处理指令刷新的生存期计数器设计的系统和方法 | |
CN1228173A (zh) | 同步方法 | |
CN1183152A (zh) | 在超标量处理器中检测和执行俘获的装置 | |
CN1310139C (zh) | 用于执行在多个线程中排序的指令的方法和系统 | |
CN1379872A (zh) | 用于在执行被转换指令时维持环境的方法和装置 | |
CN1825276A (zh) | 多线程管道中的可编程延迟分派 | |
Garcia et al. | The kremlin oracle for sequential code parallelization | |
CN1390329A (zh) | 控制使用动态反馈的指令转换 | |
CN1912848A (zh) | 一种对编译器中的错误进行自动定位的方法 |
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: 20070228 Termination date: 20131229 |