CN105164637A - 对管线化的软件的动态优化 - Google Patents
对管线化的软件的动态优化 Download PDFInfo
- Publication number
- CN105164637A CN105164637A CN201380076139.8A CN201380076139A CN105164637A CN 105164637 A CN105164637 A CN 105164637A CN 201380076139 A CN201380076139 A CN 201380076139A CN 105164637 A CN105164637 A CN 105164637A
- Authority
- CN
- China
- Prior art keywords
- iteration
- register
- circulation
- exception
- processor
- 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
- 238000005457 optimization Methods 0.000 title description 6
- 238000003860 storage Methods 0.000 claims abstract description 44
- 238000000034 method Methods 0.000 claims description 41
- 230000004044 response Effects 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 13
- 230000002159 abnormal effect Effects 0.000 claims description 11
- 230000003111 delayed effect Effects 0.000 claims description 8
- 238000002203 pretreatment Methods 0.000 claims description 5
- 238000003780 insertion Methods 0.000 abstract description 5
- 230000037431 insertion Effects 0.000 abstract description 5
- 230000015654 memory Effects 0.000 description 22
- 239000000872 buffer Substances 0.000 description 10
- 230000006399 behavior Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000011084 recovery Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 229910003460 diamond Inorganic materials 0.000 description 2
- 239000010432 diamond Substances 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012913 prioritisation Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4452—Software pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- 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/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4451—Avoiding pipeline stalls
-
- 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 or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order 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 or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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 or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
在实施例中,一种系统包括包含至少一个核心的处理器以执行包括S个阶段的循环的操作。系统也包括阶段插入单元,该单元用于向循环中加入延时阶段以增加与循环的第一变量关联的相对应的寄存器的寿命,并且延迟该寄存器的内容的存储。系统也包括动态随机存取存储器(DRAM)。描述并要求保护了其他的实施例。
Description
技术领域
实施例涉及管线化的软件。
背景技术
软件管线化是一种编译器技术,该技术可以通过循环的多个迭代的重叠执行来增加计算密集型循环的吞吐量。在重叠的多个迭代中,由于操作顺序的反转,一些迭代可以是推测的,例如,操作的执行顺序可能和循环中指示的执行顺序不同。在推测的迭代过程中发生的异常可以使迭代的结果无效。用于更正无效结果的一种技术是丢弃所有之前的循环迭代的结果,并再一次开始循环计算(“卷回”),其在计算资源和时间方面会很昂贵。
附图说明
图1是根据本发明的实施例的用于优化循环的执行的系统的方框图。
图2是根据本发明的实施例的针对管线调度的循环的优化方案。
图3是根据本发明的实施例的用于对管线调度的循环的执行进行优化的方法的流程图。
图4是根据本发明的实施例的处理器的方框图。
图5示出了根据本发明的实施例的包括多个核心的处理器的实施例。
图6是根据本发明的实施例的系统的方框图。
具体实施方式
在本文中呈现了装置和方法用于以具有原子执行支持的动态优化的方式来减少卷回开销的装置和方法。在本发明的实施例中,呈现了可以以对软件管线化的循环的动态二进制优化的方式来减少卷回的开销的代码生成技术。
原子区域可以指定执行激进推测(数据和控制两者)的代码的区域,并且在该区域的末端提交更新。由于原子区域限制优化范围,增加原子区域的大小可以是重要的。然而,更大的原子区域具有增加的卷回开销的缺点,例如,当检测到任何不期望的行为(例如,推测失败异常、侧退出(sideexits)、存储器故障)时,可能丢弃在区域内取得的任何进展,可能将执行卷回到区域的开端,并且可能利用较不激进的优化来重复该循环。
响应于不期望的行为(例如,异常、故障、推测失败、侧退出),本发明的实施例使最近的非推测迭代的结果能够恢复,并且提交自之前的提交以来的迭代。这可以通过以下方式来完成:保持之前的迭代的“在外(live-out)”值的额外的复本,并且延迟存储操作以保持存储器的内容完整并且不受推测的迭代干扰。
图1是根据本发明的实施例的用于优化循环的执行的系统100的方框图。系统100包括耦合至动态随机存取存储器(DRAM)180的处理器110。处理器110可以包括用于执行指令的一个或多个核心1120,1121…112n。处理器110还可以包括指令调度逻辑114、模变量扩展逻辑116、阶段插入逻辑118、补偿逻辑120以及包括高速缓存122的一个或多个高速缓存存储器。可以在软件、固件、硬件或其组合中实现指令调度逻辑114、模变量扩展逻辑116、阶段插入逻辑118和补偿逻辑120。
在操作中,包括多个操作的循环可以在多个核心中的一个上(例如在核心1120上)执行。指令调度逻辑114可以根据管线化的调度来调度循环的迭代。在一些实施例中,第一迭代的操作中的一个或多个可以被调度为在第二或之后的迭代中的操作中的一个或多个被调度以执行之后(例如,晚于)来执行。模变量扩展逻辑116可以将被赋值了循环的变量X的值的寄存器的寄存器名进行重命名(例如,采用替代寄存器Xi的使用来替代寄存器X),以便减少第一迭代中的一个或多个操作对之后的迭代中的一个或多个操作的依赖性。
循环执行多个迭代,并且每个迭代通常包括多个阶段。迭代的每个阶段包括在迭代的开始和紧接着的迭代的开始之间的多个周期(“迭代间隔”(II))。阶段插入逻辑118可以在运行时在执行之前向循环的每个迭代中插入阶段,以延长已经被重命名的寄存器的寿命(例如,在其期间依靠该寄存器来保存所赋值的值的时间段)并且延迟被重命名的寄存器的内容的存储。补偿逻辑120可以完成任意还没有执行的延迟的存储的执行,并在完成循环后向寄存器X返回最终值。
图2示出了根据本发明的实施例的对于管线调度的循环的优化方案。作为例性循环,伪代码循环210包括用于向寄存器X赋值的赋值操作(X←),之后是两个乘法(mult)操作,其后是将在迭代中确定的值(例如,寄存器X中的值或另一值)存储到存储器(例如,图1的DRAM180)的存储位置中的存储操作。
软件管线化的调度220是根据由诸如图1的指令调度逻辑114的软件调度逻辑确定的管线化的调度的、循环210的三个迭代的执行的表示。由两个周期的发起间隔(II)将迭代0、1、2关于每个迭代的发起而分开。每个迭代可以分成阶段,并且每个阶段可以包括II个周期。例如,在管线化的调度220中,每个迭代包括3个阶段,例如,迭代0包括阶段1-3(周期0-5)。调度可以达到进行重复的稳定状态。稳定状态可以由包括一个迭代中的的每个操作的内核224表示。如点划方框224所示,内核每II个周期重复一次。
迭代1和2可以被管线调度,以便利用可用的计算资源的优势,并因此迭代0、1和2可以并行执行。例如,如果迭代0在执行中,迭代1和迭代2可以被认为是“推测的”,这是因为它们将在执行迭代0的过程中被执行,并且由于对可以在迭代0执行的过程中改变的迭代变量的依赖性,因此迭代1和迭代2可能或可能不成为循环210的精确迭代。例如,如果在周期0存储在寄存器X中的值在迭代0的周期3中发生改变,则在周期2(迭代1)寄存器X中的值将和迭代0末尾的X的值不一致,并且因此,在迭代1之内的任何运算可能都不正确并可以被丢弃,例如,卷回至迭代0。针对X的公用寄存器的使用可能在循环210的推测迭代中创建不需要的依赖性。
由于多个迭代并行运行,在特定迭代中的寄存器X的寿命(例如,周期/阶段的范围,其中寄存器X保持可以被依赖的所赋的值)可以与在其他迭代中的寄存器X的一个或多个寿命重叠。为了避免在执行中重叠的迭代之间的依赖性,可以将寄存器X“重命名”,例如,如调度240中所示,分配给在每个迭代中具有不同的名的替代寄存器。每个寿命跨越三个迭代,并且因此使用X的寿命的三个区别的实例:X0、X1和X2。示出了每个迭代中的Xi的寿命,例如,X0的寿命242(迭代0)、X1的寿命244(迭代1)、X2的寿命246(迭代2)、X0的寿命248(迭代3)以及X1的寿命250(迭代4)。
在管线化的调度240中示出的示例中,每三个迭代而有条件地提交(例如,服从条件而提交)一个循环。如在调度240中指示的,在提交点(例如,在周期9的末尾的提交)之前的,迭代3、周期9中发生异常(例如,溢出异常)。本发明的实施例目的在于,通过当在管线化的循环中发生不期望的行为时避免完全地卷回,从而减少丢弃的工作。
总的来说,与管线调度关联的问题可以表示如下。
S:单个迭代中的阶段的总数
E:在原子区域中要求卷回的不期望的行为,例如,异常、存储器故障、推测失败、以及侧退出
N:在其中发生E的迭代计数(从0开始)
M:在其中发生E的迭代内的阶段数(从0开始)
当在(迭代=N,阶段=M)发生E时,迭代(N-S+M)已经完成。在迭代(N-S+M)完成时恢复状态并且进行提交是令人满意的。可以处理事件E并且可以从迭代(N-S+M+1)开始继续(resume)循环的执行。
当在软件管线化的循环的执行的过程中发生不期望的行为时,所生成的代码可以能够恢复最近完成的迭代,使得可以识别出提交点。为了实现该恢复,要恢复两个机器状态:寄存器状态(X0、X1、X2)和存储器状态(存储)。
恢复寄存器状态。所感兴趣的是跨“循环返回边缘”和“在外寄存器”而存在(live)的寄存器。如果有要被执行的、等待被赋给寄存器的值的指令,则该值被认为是存在的,并且因此将该值保持在寄存器中并且对将要执行的指令可用。“循环返回边缘”是指循环迭代的结束点,其也是循环的下一迭代的开始点。“跨循环返回边缘而存在”的寄存器值Q是指被赋值给寄存器的(例如,寄存器R)、跨连续的迭代而存在的值,例如在第一迭代完成之后,下一迭代消耗(consume)存储在寄存器R中的值Q。“在外寄存器”是指被赋值了由循环结束后的循环外的操作所消耗的值的寄存器。当提交完成之后循环继续执行时,可以重新初始化所有其他寄存器(例如,没有被赋值“在外”或“跨循环返回边缘而存在”的值的寄存器)。对于这些“在外寄存器”和/或“跨循环返回边缘而存在的寄存器”来说,当异常发生时(例如,周期8-9),来自之前完成的迭代(例如,调度240中的迭代1,其在当前正在执行的迭代2之前完成)的值要被保持为存在的。可以通过在每个迭代中将每个在外寄存器的存在范围扩展一个阶段(例如,两个周期),并且通过将X个寄存器中的每个重命名(例如,由具有相对应名的独立寄存器来替代X个寄存器中的每个),而将来自之前迭代(例如,迭代1)的值保持为存在的。
在调度260中示出了在外和重命名的寄存器的扩展的寿命。通过将寿命244扩展额外的阶段264到寿命274,在周期8-9中X1的值将仍然可用。应当注意的是,在调度260中,迭代3的X的寄存器已经被重命名为X3,这允许保持来自迭代1的X1的值直到周期9的末尾,使得在与迭代3(周期9)中的乘法操作关联的异常的情况下,可以通过使用被赋值给X1的值来恢复迭代1的寄存器状态。
恢复存储器状态。由于存储操作具有对存储器的最终影响(例如,除非整个原子区域卷回,否则不可恢复),所以在当前的内核期间所执行的所有存储操作都应该来自非推测的迭代(例如,在当前的内核执行时已经完成的最近的迭代),而不来自推测的迭代。管线调度器将所有存储保持在调度的最后阶段,例如,管线调度器不推测存储。因此,可以假设将所有的存储调度在迭代的最后阶段。在当前的内核(240中的周期8-9)执行时,存储操作来自迭代2,并且其是推测迭代,这是因为其还没有完成。最近完成的迭代是迭代1并且是非推测的。因此,如在调度260中所示,通过向每个迭代中增加一个阶段(例如,262、266、268、270、272)可以延迟存储。利用所增加的阶段,在当前阶段(例如,阶段5)中执行的所有存储都来自非推测迭代。在当前的内核(周期8-9)中,迭代1已正确完成除了存储操作之外的其它操作。如果发生不期望的行为(例如,异常),则可以重新执行存储操作以完成迭代1。概括而言,迭代N中的阶段M处的异常可能触发迭代(N-S+M)的结果的恢复和提交。(在迭代1中的存储操作引起存储器故障的情况下,可以没有迭代1的结果的恢复,并且卷回至最后的提交点迭代0并从迭代0继续执行)。
扩展的阶段插入。通过针对在外寄存器和存储操作的在每个调度的末尾处的扩展的阶段(例如,阶段262、266、268、270、272)的插入,1和2的组合可以工作。当要发生卷回时,完成非推测迭代的扩展的阶段的执行。
运行时支持。处理存储器故障和异常的运行时代码可以支持在本文中描述的代码生成技术。当异常发生时,可以执行异常处理程序(handler)以处理该异常。在异常处理程序的执行之后,可以执行恢复最近的非推测迭代的状态的补偿代码块。该补偿代码块可以包括调度260中的扩展的阶段(例如,264)的执行,并且也可以包括其在周期9中全部存在的原始在外寄存器值(例如,X0、X1、X2、X3)的恢复。在示例260中,由于重命名的寄存器X0-X3在管线化的循环的内部,所以补偿代码块的执行包括将寄存器X3的内容复制到寄存器X。补偿代码块可以对每个迭代不同,并且每个补偿代码块的执行可以将寄存器值X0、X1、X2、X3中的一个的内容复制到寄存器X。(例如,对于如图2中发生在周期9中的异常,可以执行迭代1的补偿块,该补偿块将X1复制到X。)在执行补偿块后,可以运行提交以保存之前完成的迭代的结果(例如,调度260中的迭代1)。
图3是根据本发明的一个或多个实施例的用于对循环的操作进行调度的方法的流程图。在方框302处,在编译时从管线调度器接收循环的管线化的调度。继续到方框304,在编译时执行模变量扩展,例如,将寄存器(例如,X)重命名为要被循环赋值的多个寄存器(例如,图2的260中的X0、X1、X2、X3)中的一个。前进到方框306,可以在编译时增加额外的阶段,例如,包括在循环的管线化的调度的每个迭代中的一个或多个“无操作”以形成循环的修改的管线化的调度,在其中,存储可以延迟并转移到额外的阶段,并且将补偿代码(“补偿块”)增加到循环代码中。移动到方框308,可以在运行时执行循环的修改的管线化的调度。继续到决策菱形框310,如果完成循环的执行(例如,没有异常),则该方法在320结束。如果没有完成循环的执行,则继续至决策菱形框312,如果没有检测到异常,则在方框308处继续执行修改的管线化的调度的执行。如果发生异常,则继续至方框314,响应于该异常,在运行时执行异常处理程序。前进到方框316,可以在运行时执行代码的补偿块以完成还没有被执行的任何延迟的存储的执行,并向寄存器X返回最终值。继续至方框318,提交了最近完成的迭代。该方法在320处结束。
现在参考图4,示出的是根据本发明的实施例的处理器的方框图。如图4所示,处理器400可以是在核心域410中的包括多个核心410a-410n的多核处理器。根据本发明的实施例,核心中的一个或多个可以包括用于向管线化的调度中的循环的每个迭代中增加阶段的阶段插入逻辑,例如,412a、412b…412n,从而例如在从异常恢复方面提高效率。在本发明的实施例中,阶段插入逻辑可以实现为软件、固件、硬件、或它们的组合。
核心可以经由互连415耦合至系统代理或包括多种组件的非核心420。如图所示,非核心420可以包括共享的高速缓存430,其中高速缓存430可以是末级高速缓存并包括高速缓存控制器432。此外,非核心可以包括集成的存储器控制器440和多种接口450。
通过进一步参考图4,处理器400可以(例如,经由存储器总线)和系统存储器460进行通信。此外,通过接口450,可以向多种片外组件(例如,外围设备、大容量存储设备等)建立连接。尽管利用图4的实施例中的特定实现进行示出,但本发明的范围不限于此。
参考图5,示出了包括多个核心的处理器的实施例。处理器500包括任何处理器或处理设备,例如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持处理器、应用处理器、协处理器、片上系统(SOC)、或用来执行代码的其他设备。在一个实施例中,处理器500包括至少两个核心——核心501和核心502,其中所述两个核心可以包括非对称核心和对称核心(示出的实施例)。然而,处理器500可以包括可以是对称的或非对称的任何数量的处理器元件。
在一个实施例中,处理元件指的是用于支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、进程单元、环境、环境单元、逻辑处理器、硬件线程、核心、和/或能够保持处理器状态(例如,执行状态或构架状态)的任何其他元件。换句话说,在一个实施例中,处理元件指的是能够独立地与代码(例如,软件线程、操作系统、应用、或其他代码)关联的任何硬件。物理处理器通常指的是集成电路,其中所述集成电路潜在地包括任何数量的其他处理元件,例如核心或硬件线程。
核心常常指的是位于能够保持独立构架状态的集成电路上的逻辑,其中,每个独立地保持的构架状态关联于至少一些专用执行资源。与核心不同,硬件线程通常指的是位于能够保持独立构架状态的集成电路上的任何逻辑,其中,独立地保持的构架状态共享对执行资源的访问。可以看出,当某些资源是共享的并且其他资源专用于构架状态时,硬件线程和核心的术语之间的线重叠。但是经常,操作系统将核心和硬件线程视为单独的逻辑处理器,其中操作系统能够在每个逻辑处理器上独立地调度操作。
如在图5中所示,物理处理器500包括两个核心,核心501和核心502。这里,认为核心501和502是对称核心,即,具有相同配置、功能单元、和/或逻辑的核心。在另一个实施例中,核心501包括乱序处理器核心,而核心502包括顺序处理器核心。然而,可以从任何类型的核心(例如,本地核心、软件管理的核心、适于执行本地指令集构架(ISA)的核心、适于执行翻译的ISA的核心、协同设计的核心、或其他已知的核心)中单独地挑选核心501和核心502。但是对于进一步讨论,下文中进一步详细描述了核心501中示出的功能单元,与在核心502中的单元以相似的方式运行。
如图所描绘的,核心501包括两个硬件线程501a和501b,其也可以被称为硬件线程槽501a和501b。因此,在一个实施例中,诸如操作系统的软件实体潜在地将处理器500视为四个分离的处理器(即能够同时处理四个软件线程的四个逻辑处理器或处理处理元件)。如上文所暗示的,第一线程关联于构架状态寄存器501a,第二线程关联于构架状态寄存器501b,第三线程可以关联于构架状态寄存器502a,并且第四线程可以关联于构架状态寄存器502b。这里,如前文所述,构架状态寄存器中的每个(501a、501b、502a和502b)都可以被称为处理元件、线程槽、或线程单元。如图所示,构架状态寄存器501a在构架状态寄存器501b中被复制,因此独立构架状态/环境能够针对逻辑处理器501a和逻辑处理器501b被存储。在核心501中,其他更小的资源(例如,分配器和重命名器块530中的指令指针和重命名逻辑)也可以针对线程501a和501b被复制。可以通过分割来共享一些资源,例如重排序/退出单元535中的重排序缓冲器、ILTB520、载入/存储缓冲器、以及队列。诸如通用内部寄存器、页表基址寄存器、低级数据高速缓存和数据TLB515、执行单元540、以及部分乱序单元535的其他资源潜在地被完全共享。
处理器500常常包括可被完全共享、可通过分割被共享、或专用于处理元件/由处理元件专用的其他资源。在图5中,示出了具有处理器的示例性逻辑单元/资源的纯示例性处理器的实施例。应当注意的是,处理器可以包括或省略任何这些功能单元,并且包括任何其他未描绘出的已知功能元件、逻辑、或固件。如图所示,核心501包括简化的、代表性的乱序(OOO)处理器核心。但是可以在不同的实施例中使用顺序处理器。OOO核心包括分支目标缓冲器520以推测将会执行或采用的分支,并包括指令转换缓冲器(I-TLB)520以存储指令的地址转换条目。
核心501还包括耦合至提取单元520以对所提取的元素进行解码的解码模块525。在一个实施例中,提取逻辑包括分别和线程槽501a、501b关联的独立定序器。通常,核心501关联于第一ISA,该第一ISA限定/指定可以在处理器500上执行的指令。是第一ISA一部分的机器代码指令常常包括指令的一部分(称为操作码),其引用/指定将要执行的指令或操作。如由第一ISA所定义的,解码逻辑525包括从其操作码中识别这些指令并在管线中传递解码的指令以进行处理的电路。例如,在一个实施例中,解码器525包括被设计为或适于识别特定指令(例如,事物指令)的逻辑。作为由解码器525的识别的结果,构架或核心501采用特定的、预先定义的操作来执行和合适的指令关联的任务。重要的是要注意到,可以响应于单个或多个指令(其中一些可以是新或旧指令),执行在本文中所描述的任何任务、块、操作和方法。
在一个示例中,分配器和重命名器块530包括用于保留资源(例如,寄存器文件)以存储指令处理结果的分配器。然而,线程501a和501b潜在地能够乱序执行,其中分配器和重命名器块530也保留其他资源(例如,重排序缓冲器)以用于追踪指令结果。单元530也可以包括寄存器重命名器以将程序/指令参考寄存器重命名为处理器500内部的其他寄存器。重排序/退出单元535包括诸如上文中提到的重排序缓冲器、载入缓冲器、和存储缓冲器的组件,以支持乱序执行和之后的被乱序执行的指令的顺序退出。
在一个实施例中,调度器和执行单元块540包括用于在执行单元上调度指令/操作的调度器单元。例如,调度器单元可以根据管线化的调度来调度循环的操作。也包括关联于执行单元的寄存器文件以存储信息指令处理结果。示例性执行单元包括浮点型执行单元、整型执行单元、跳转执行单元、载入执行单元、存储执行单元、以及其他已知的执行单元。
根据本发明的实施例,核心501和502中的一个和两个可以包括用于将额外的阶段插入管线调度的循环的每个迭代中的代码生成逻辑(分别为542、546)。根据本发明的实施例,代码生成逻辑(542、546)也可以将循环迭代的变量已被赋值到的一个或多个寄存器重命名。
较低等级数据高速缓存和数据转换缓冲器(D-TLB)551耦合至执行单元540。D-TLB551用于将最近的虚拟/线性存储至物理地址的转换。作为具体示例,处理器可以包括页表结构以将物理存储器分成多个虚拟页。
这里,核心501和502共享对更高级或更远离的高速缓存510(其用于高速缓存最近提取的元件)的访问。应当注意的是,更高级或更远离是指增加或更加远离执行单元的高速缓存等级。在一个实施例中,更高级高速缓存510是末级数据高速缓存(处理器500上的存储器层级中的最后的高速缓存)例如第二或第三级数据高速缓存。然而,更高级的高速缓存510并不限于此,这是因为其可以关联于或包括指令高速缓存。追踪高速缓存(一种指令高速缓存),代替地可以在解码器525之后耦合以存储最近解码的追踪。
在所描绘的配置中,处理器500也包括总线接口模块505。在历史上,控制器570已经被包含在处理器500外部的计算系统中。在这种情况下,总线接口505用于和处理器500外部的设备进行通信,例如系统存储器575、芯片组(常常包括用于连接至存储器575的存储器控制集线器、以及用于连接至外围设备的I/O控制器集线器)、存储器控制器集线器、北桥、或其他集成电路。并且在这种情况下,总线505可以包括任何已知的互连,例如多点分支总线、点对点互连、串行互连、并行总线、一致性(例如,高速缓存一致性)总线、分层协议构架、差动总线、以及GTL总线。
存储器575可以专用于处理器500或与系统中的其他设备共享。存储器575的类型的常见示例包括:DRAM、SRAM、非易失性存储器(NV存储器)、以及其他已知的存储设备。应当注意的是,设备580可以包括耦合至存储器控制器集线器的图形加速器、处理器或卡、耦合至I/O控制器集线器的数据存储设备、无线收发器、闪速存储器设备、音频控制器、网络控制器、或其他已知的设备。
然而在所描绘的实施例中应当注意到,控制器570被示出为处理器500的一部分。最近,随着更多的逻辑和设备被集成在单个管芯上,例如SOC,这些设备中的每个都可以被包含在处理器500上。例如,在一个实施例中,存储器控制器集线器570和处理器500在同一个封装和/或管芯上。这里,核心的一部分(在核心上的部分)包括一个或多个控制器570以用于和诸如存储器575或图形设备580的其他设备进行交互。包括用于和这样的设备进行交互的互连和控制器的配置常常称为核上(或非核配置)。例如,总线接口505包括具有用于和存储器575交互的存储器控制器的环形互连,以及用于和图形设备580交互的图形控制器。但是,在SOC环境中,诸如网络接口、协处理器、存储器575、图形设备580、以及其他任何已知的计算机设备/接口的更多的设备可以集成在单个管芯或集成电路上以提供具有高功能性和低功耗的小形状因子。
实施例可以在许多不同的系统类型中实现。现在参考图6,示出的是根据本发明的实施例的系统的方框图。如在图6中所示,多处理器系统600是点对点互连系统,并包括经由点对点互连650耦合的第一处理器670和第二处理器680。如在图6中所示,处理器670和680中的每个都可以是包括第一和第二处理器核心(即,处理器核心674a和674b以及处理器核心684a和684b)的多核心处理器,尽管在处理器中潜在地出现更多的核心。
仍然参考图6,第一处理器670还包括存储器控制器集线器(MCH)672和点对点(P-P)接口676和678。相似地,第二处理器680包括MCH682和P-P接口686和688。如在图6中所示,MCH672和682将处理器耦合至相应的存储器,也就是可以是本地附接至相应的处理器的系统存储器(例如,DRAM)的部分的存储器632和存储器634。处理器670和680中的每个可以包括阶段插入逻辑(未示出)以根据本发明的实施例,向管线调度的循环的每个迭代中插入额外的阶段,并且可以包括模变量扩展逻辑以根据本发明的实施例,对与管线调度的循环的每个迭代关联的寄存器进行重命名。额外的阶段可以使得相比于丢弃循环的全部结果,能够更高效地从异常中恢复。根据本发明的实施例,更高效的恢复可以至少部分地由于在外变量(具有在循环内生成、并在循环外使用的值的变量)的增加的寿命。根据本发明的实施例,处理器也可以包括用于恢复存储在经重命名的寄存器中的值,并且完成存储操作的补偿逻辑。第一处理器670和第二处理器680可以分别经由P-P互连662和654耦合至芯片组690。如图6中所示,芯片组690包括P-P接口694和698。
此外,芯片组690包括用于通过P-P互连639将芯片组690与高性能图形引擎638相耦合的接口692。进而,芯片组690可以经由接口696耦合至第一总线616。如图6所示,可以将各种输入/输出(I/O)设备614和将第一总线616耦合至第二总线620的总线桥618一起,耦合至第一总线616。可以将各种设备耦合至第二总线620,在一个实施例中,所述各种设备包括例如键盘/鼠标622、通信设备626以及数据存储单元628(例如,磁盘驱动器或可以包括代码630的其他大容量存储设备)。此外,可以将音频I/O624耦合至第二总线620。可以将实施例合并入包括移动设备,例如智能蜂窝电话、UltrabookTM、平板计算机、上网本等在内的其他类型的系统。
下面的示例关于进一步的实施例。
在第一个示例中,系统包括处理器,该处理器包括至少一个核心以用于执行循环的操作,以及阶段插入模块,所述阶段插入模块用于向循环中加入延迟阶段以增加与循环的第一变量关联的寄存器的寿命,并且用于延迟寄存器的内容的存储。该系统也包括动态随机存取存储器(DRAM)。处理器可选地包括用于将寄存器重命名为第二寄存器的模变量扩展逻辑。模变量扩展逻辑也可以在循环的多个迭代的每个中将寄存器从该寄存器重命名为相应的不同的寄存器。处理器可选地包括补偿逻辑,所述补偿逻辑用于响应于循环的第N次迭代的第M阶段中的异常而重新执行循环的第(N-S+M)次迭代的存储操作,其中循环的每个迭代都包括S个阶段。补偿逻辑可以响应于异常而恢复在循环的第(N-S+M)次迭代中的寄存器的在外值。处理器可选地包括处理程序逻辑,所述处理程序逻辑用于在存储操作的重新执行之前处理异常,并恢复寄存器的在外值。处理器响应于异常,可选地从第(N-S+M+1)次迭代开始继续执行循环。响应于正在被执行的当前的迭代中的异常,处理器可选地提交循环的最近完成的迭代的结果。
在第二个示例中,至少一个计算机可读介质包括当被执行时使系统能够接收循环的管线化的调度的指令,所述循环包括要根据管线化的调度并行执行的多个迭代。循环中的每个迭代可以包括用于将相应的变量的值赋给寄存器的相应的赋值操作,以及用于将在迭代中确定的值存储于存储器的相应的存储操作。当指令被执行时,可以使系统能够将延迟阶段插入管线化的调度的每个迭代中以延迟相应的存储操作的执行,并增加每个迭代中的寄存器的相应的寿命。至少一个计算机可读介质可以可选地包括模变量扩展指令,其用于利用具有第二寄存器名的第二寄存器来替代具有第一寄存器名的第一寄存器,其中,循环的第一迭代的变量的值被赋给所述第一寄存器。至少一个计算机可读介质可以可选地包括用于在多个迭代的每个迭代中将具有第一寄存器名的第一寄存器替代为具有对应的不同寄存器名的对应的不同寄存器的指令。至少一个计算机可读介质可以可选地包括用于响应于循环的第N次迭代的第M阶段中的异常而重新执行循环的第(N-S+M)次迭代的第一存储操作的指令,其中,循环的每个迭代中包括S个阶段。至少一个计算机可读介质可以可选地包括用于响应于循环的第N次迭代中的异常而护肤与第(N-S+M)次迭代关联的第一寄存器的在外值的指令。至少一个计算机可读介质可以可选地包括用于在第一寄存器的在外值的恢复之前处理异常的指令。至少一个计算机可读介质可以可选地包括用于响应于正在执行的当前的迭代中的异常而提交循环的最近完成的迭代的结果。
在第三个示例中,一种方法包括接收循环的管线化的调度,其中该循环包括根据管线化的调度的要被并行地执行的多个迭代。每个迭代包括用于将与该迭代相关的变量的值赋给寄存器的赋值操作,以及用于将寄存器的内容存储于存储器的相应的存储操作。该方法也包括将延迟阶段插入管线化的调度的每个迭代中以延迟相应的存储操作的执行,并且增加在相应的迭代中的寄存器的寿命。该方法可以可选地包括将与第一迭代中的变量关联的寄存器从第一寄存器名替代成第一替代寄存器,并且将替代寄存器重新分配给在循环的后续迭代中的变量。该方法可以可选地包括,响应于发生在特定迭代中的异常,提交循环的最近完成的迭代的结果。该方法也可以可选地包括,响应于发生在特定迭代中的异常,经由处理程序代码的执行来处理异常。该方法可以可选地包括提交循环的最近完成的迭代的结果,并且从最近完成的迭代开始继续循环的执行。
在第四个示例中,用于执行循环的处理器包括用于执行循环的操作的至少一个核心,以及阶段插入逻辑,该阶段插入逻辑用于向循环中加入延迟阶段以增加与循环的第一迭代的第一变量关联的寄存器的寿命,并且延迟寄存器的内容的存储。处理器可以可选地包括用于将寄存器重命名为第二寄存器,或用于在循环的多个迭代中的每个迭代将寄存器从寄存器重命名为相应的不同的寄存器的重命名逻辑。处理器可以可选地包括用于响应于循环的第N次迭代的第M阶段中的异常而重新执行循环的第(N-S+M)次迭代的存储操作的补偿逻辑,其中每个迭代包括S个阶段。处理器可以可选地包括用于在补偿逻辑重新执行存储操作之前处理异常的处理程序逻辑。补偿逻辑可以可选地响应于循环的第N次迭代中的异常而恢复与循环的第(N-S+M)次迭代关联的第一寄存器的在外值。处理器可以响应于异常而从最近完成的迭代开始来继续循环的执行。可选地,处理器可以响应于正在执行的当前迭代中的异常,而提交循环的最近完成的迭代的结果。
可以在许多不同类型的系统中使用实施例。例如,在一个实施例中,一种通信设备可以被布置为执行在本文中所描述的各种方法和技术。当然,本发明的范围不限于通信设备,并且相反,其他实施例可以指向用于处理指令的其他类型的装置,或一个或多个机器可读介质,所述机器可读介质包括响应于在计算设备上被执行而使得设备执行在本文中所描述的方法和技术中的一个或多个的指令。
实施例可以在代码中实现,并且可以存储在其上存储有指令的非瞬时性存储介质上,其中,所述指令可以对系统进行编程以执行所述指令。存储介质可以包括但不限于包括软盘、光盘、固态硬盘(SSD)、光盘只读存储器(CD-ROM)、可重写光盘(CD-RW)、以及磁光盘、诸如只读存储器(ROM)的半导体设备、诸如动态随机存取存储器(DRAM)的随机存取存储器(RAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、磁或光卡、或适合存储电子指令的其他任何类型的介质在内的任何类型的盘。
尽管已经关于有限数量的实施例而描述了本发明,但本领域的技术人员应该理解从中的许多修改与变型。所附权利要求旨在覆盖落在本发明真正的精神和范围之内的所有这些修改和变型。
Claims (25)
1.一种系统,包括:
处理器,包括:
至少一个核心,其用于执行循环的操作;
阶段插入单元,其用于向所述循环中加入延迟阶段,以增加与所述循环的第一变量关联的寄存器的寿命并且延迟所述寄存器的内容的存储;以及
动态随机存取存储器(DRAM)。
2.根据权利要求1所述的系统,其中,所述处理器还包括模变量扩展单元,所述模变量扩展单元用于将所述寄存器重命名为第二寄存器。
3.根据权利要求2所述的系统,其中,所述模变量扩展单元还用于在所述循环的多个迭代的每个迭代中将所述寄存器从所述寄存器重命名为相应的不同的寄存器。
4.根据权利要求1-3中的任意一项所述的系统,其中,所述处理器用于响应于正在被执行的当前迭代中的异常,提交所述循环的最近完成的迭代的结果。
5.根据权利要求1所述的系统,其中,所述处理器还包括补偿单元,所述补偿单元用于响应于所述循环的第N次迭代的第M阶段中的异常,重新执行所述循环的(N-S+M)迭代的存储操作,其中,每个迭代包括S个阶段。
6.根据权利要求5所述的系统,其中,所述补偿单元还用于响应于所述异常,恢复与所述循环的所述(N-S+M)迭代关联的所述寄存器的在外值。
7.根据权利要求6所述的系统,其中,所述处理器还包括处理程序单元,所述处理程序单元用于在所述补偿单元重新执行所述存储操作以及恢复所述寄存器的所述在外值之前处理所述异常。
8.根据权利要求7所述的系统,其中,所述处理器还用于响应于所述异常,从所述(N-S+M+1)迭代开始继续所述循环的执行。
9.包括指令的至少一种计算机可读介质,所述指令当被执行时,使系统能够:
接收循环的管线化的调度,所述循环包括要根据所述管线化的调度而并行执行的多个迭代,其中,所述循环的每个迭代包括用于将变量的相应的值赋给寄存器的相应的赋值操作,以及用于将在所述迭代中确定的值存储到存储器的相应的存储操作;以及
将延迟阶段插入所述管线化的调度的每个迭代中,以延迟所述相应的存储操作的执行并且增加每个迭代中的所述寄存器的相应的寿命。
10.根据权利要求9所述的至少一种计算机可读介质,还包括模变量扩展指令,所述模变量扩展指令用于利用具有第二寄存器名的第二寄存器来替代具有第一寄存器名的第一寄存器的使用,其中所述循环的第一迭代的变量的值被赋给所述第一寄存器。
11.根据权利要求10所述的至少一种计算机可读介质,还包括用于在多个迭代中的每个迭代中,将对应的寄存器从具有所述第一寄存器名的所述第一寄存器替代为具有相应的不同的寄存器名的相应的不同的寄存器的指令。
12.根据权利要求9-11中的任意一项所述的至少一种计算机可读介质,还包括用于响应于正在被执行的当前迭代中的异常,提交所述循环的最近完成的迭代的结果的指令。
13.根据权利要求9所述的至少一种计算机可读介质,还包括用于响应于所述循环的所述第N次迭代的第M阶段中的异常,重新执行所述循环的(N-S+M)迭代的第一存储操作的指令,其中所述循环的每个迭代包括S个阶段。
14.根据权利要求13所述的至少一种计算机可读介质,还包括用于响应于所述循环的所述第N次迭代中的所述异常,恢复与所述(N-S+M)迭代关联的第一寄存器的在外值的指令。
15.根据权利要求14所述的至少一种计算机可读介质,还包括用于在恢复所述第一寄存器的所述在外值之前处理所述异常的指令。
16.一种方法,包括:
接收循环的管线化的调度,所述循环包括要根据所述管线化的调度而并行执行的多个迭代,每个迭代包括用于将与所述迭代关联的变量的第一值赋给寄存器的赋值操作,以及用于将从所述迭代的执行中确定的第二值存储到存储器的存储操作;以及
将延迟阶段插入所述管线化的调度的每个迭代中,以延迟相应的存储操作的执行并且增加相应的迭代中的所述寄存器的寿命。
17.根据权利要求16所述的方法,还包括将与第一迭代中的变量关联的寄存器从第一寄存器替代为第一替代寄存器,并且将所述第一替代寄存器重新分配给所述循环的后续迭代中的变量。
18.根据权利要求16所述的方法,还包括响应于发生在特定迭代中的异常,经由处理程序代码的执行而处理所述异常。
19.根据权利要求18所述的方法,还包括提交所述循环的最近完成的迭代的结果。
20.根据权利要求19所述的方法,还包括从所述最近完成的迭代开始继续所述循环的执行。
21.一种装置,包括用于执行权利要求16-20中的任意一项所述的方法的单元。
22.一种处理器,包括:
至少一个核心,其用于执行循环的操作;以及
阶段插入逻辑,其用于向所述循环中加入延迟阶段,以增加与所述循环的第一迭代的第一变量关联的寄存器的寿命并且延迟在所述迭代中确定的第二变量的值的内容的存储。
23.根据权利要求22所述的处理器,还包括模变量扩展单元,所述模变量扩展单元用于在所述循环的多个迭代中的每个迭代中将所述寄存器从所述寄存器替代为相应的不同的寄存器。
24.根据权利要求22所述的处理器,还包括补偿单元,所述补偿单元用于响应于所述循环的第N次迭代的第M阶段中的异常,重新执行所述循环的第(N-S+M)次迭代的存储操作,其中每个迭代包括S个阶段。
25.根据权利要求24所述的处理器,其中,所述补偿单元还用于响应于所述循环的所述第N次迭代中的所述异常,恢复与所述循环的所述第(N-S+M)次迭代关联的第一寄存器的在外值。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2013/043296 WO2014193381A1 (en) | 2013-05-30 | 2013-05-30 | Dynamic optimization of pipelined software |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105164637A true CN105164637A (zh) | 2015-12-16 |
CN105164637B CN105164637B (zh) | 2017-12-19 |
Family
ID=51986695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380076139.8A Expired - Fee Related CN105164637B (zh) | 2013-05-30 | 2013-05-30 | 用于执行循环的方法、系统、装置和处理器以及机器可读介质 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9170792B2 (zh) |
EP (1) | EP2997462B1 (zh) |
JP (1) | JP6117432B2 (zh) |
KR (1) | KR101697038B1 (zh) |
CN (1) | CN105164637B (zh) |
WO (1) | WO2014193381A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10180841B2 (en) | 2014-12-22 | 2019-01-15 | Centipede Semi Ltd. | Early termination of segment monitoring in run-time code parallelization |
US9348595B1 (en) | 2014-12-22 | 2016-05-24 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US10296350B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US10296346B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
US9715390B2 (en) * | 2015-04-19 | 2017-07-25 | Centipede Semi Ltd. | Run-time parallelization of code execution based on an approximate register-access specification |
KR20180038875A (ko) * | 2016-10-07 | 2018-04-17 | 삼성전자주식회사 | 데이터 입출력 유닛, 전자 장치 및 그 제어 방법들 |
US10628142B2 (en) * | 2017-07-20 | 2020-04-21 | Texas Instruments Incorporated | Loop break |
US10992468B2 (en) * | 2018-03-19 | 2021-04-27 | Arm Limited | Key schedule determination |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0490524A2 (en) * | 1990-12-07 | 1992-06-17 | International Business Machines Corporation | Pipelined apparatus and method |
US6016399A (en) * | 1996-03-28 | 2000-01-18 | Intel Corporation | Software pipelining a hyperblock loop |
US6115811A (en) * | 1997-05-30 | 2000-09-05 | Sun Microsystems, Inc. | Digital data process system including efficient arrangement to support branching within trap shadows |
US6178499B1 (en) * | 1997-12-31 | 2001-01-23 | Texas Instruments Incorporated | Interruptable multiple execution unit processing during operations utilizing multiple assignment of registers |
CN1357825A (zh) * | 2000-11-02 | 2002-07-10 | 斯罗扬有限公司 | 寄存器文档电路 |
CN1372190A (zh) * | 2001-01-31 | 2002-10-02 | 斯罗扬有限公司 | 对处理器中循环的处理 |
US20020144098A1 (en) * | 2001-03-28 | 2002-10-03 | Intel Corporation | Register rotation prediction and precomputation |
US20030154469A1 (en) * | 2001-12-20 | 2003-08-14 | Timothy Anderson | Apparatus and method for improved execution of a software pipeline loop procedure in a digital signal processor |
US20040025153A1 (en) * | 2002-07-30 | 2004-02-05 | Johnson Teresa L. | System and method for software pipelining loops with multiple control flow paths |
CN1825276A (zh) * | 2005-02-24 | 2006-08-30 | 微软公司 | 多线程管道中的可编程延迟分派 |
CN101042641A (zh) * | 2007-04-24 | 2007-09-26 | 上海华龙信息技术开发中心 | 一种具有动态提交流水线功能的数字信号处理器 |
CN101601009A (zh) * | 2007-01-24 | 2009-12-09 | 高通股份有限公司 | 用于被错误预测分支的分段管线冲洗 |
US20100058034A1 (en) * | 2008-08-29 | 2010-03-04 | International Business Machines Corporation | Creating register dependencies to model hazardous memory dependencies |
CN101681272A (zh) * | 2007-06-04 | 2010-03-24 | 微软公司 | 使用事务来并行化顺序框架 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0002848D0 (en) * | 2000-02-08 | 2000-03-29 | Siroyan Limited | Communicating instruction results in processors and compiling methods for processors |
GB2363480B (en) * | 2000-06-13 | 2002-05-08 | Siroyan Ltd | Predicated execution of instructions in processors |
US8261025B2 (en) | 2007-11-12 | 2012-09-04 | International Business Machines Corporation | Software pipelining on a network on chip |
US8381204B2 (en) * | 2008-04-30 | 2013-02-19 | International Business Machines Corporation | Compiler driven mechanism for registration and deregistration of memory pages |
JP6008265B2 (ja) * | 2013-05-30 | 2016-10-19 | インテル・コーポレーション | パイプライン化されたスケジュールにおけるエイリアスレジスタ割り当て |
-
2013
- 2013-05-30 WO PCT/US2013/043296 patent/WO2014193381A1/en active Application Filing
- 2013-05-30 US US14/126,463 patent/US9170792B2/en not_active Expired - Fee Related
- 2013-05-30 JP JP2016512890A patent/JP6117432B2/ja not_active Expired - Fee Related
- 2013-05-30 CN CN201380076139.8A patent/CN105164637B/zh not_active Expired - Fee Related
- 2013-05-30 KR KR1020157029052A patent/KR101697038B1/ko active IP Right Grant
- 2013-05-30 EP EP13885815.4A patent/EP2997462B1/en active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0490524A2 (en) * | 1990-12-07 | 1992-06-17 | International Business Machines Corporation | Pipelined apparatus and method |
US6016399A (en) * | 1996-03-28 | 2000-01-18 | Intel Corporation | Software pipelining a hyperblock loop |
US6115811A (en) * | 1997-05-30 | 2000-09-05 | Sun Microsystems, Inc. | Digital data process system including efficient arrangement to support branching within trap shadows |
US6178499B1 (en) * | 1997-12-31 | 2001-01-23 | Texas Instruments Incorporated | Interruptable multiple execution unit processing during operations utilizing multiple assignment of registers |
CN1357825A (zh) * | 2000-11-02 | 2002-07-10 | 斯罗扬有限公司 | 寄存器文档电路 |
CN1372190A (zh) * | 2001-01-31 | 2002-10-02 | 斯罗扬有限公司 | 对处理器中循环的处理 |
US20020144098A1 (en) * | 2001-03-28 | 2002-10-03 | Intel Corporation | Register rotation prediction and precomputation |
US20030154469A1 (en) * | 2001-12-20 | 2003-08-14 | Timothy Anderson | Apparatus and method for improved execution of a software pipeline loop procedure in a digital signal processor |
US20040025153A1 (en) * | 2002-07-30 | 2004-02-05 | Johnson Teresa L. | System and method for software pipelining loops with multiple control flow paths |
CN1825276A (zh) * | 2005-02-24 | 2006-08-30 | 微软公司 | 多线程管道中的可编程延迟分派 |
CN101601009A (zh) * | 2007-01-24 | 2009-12-09 | 高通股份有限公司 | 用于被错误预测分支的分段管线冲洗 |
CN101042641A (zh) * | 2007-04-24 | 2007-09-26 | 上海华龙信息技术开发中心 | 一种具有动态提交流水线功能的数字信号处理器 |
CN101681272A (zh) * | 2007-06-04 | 2010-03-24 | 微软公司 | 使用事务来并行化顺序框架 |
US20100058034A1 (en) * | 2008-08-29 | 2010-03-04 | International Business Machines Corporation | Creating register dependencies to model hazardous memory dependencies |
Also Published As
Publication number | Publication date |
---|---|
KR101697038B1 (ko) | 2017-01-16 |
EP2997462B1 (en) | 2020-03-11 |
JP2016519375A (ja) | 2016-06-30 |
EP2997462A4 (en) | 2017-01-18 |
WO2014193381A1 (en) | 2014-12-04 |
CN105164637B (zh) | 2017-12-19 |
KR20150129327A (ko) | 2015-11-19 |
JP6117432B2 (ja) | 2017-04-19 |
EP2997462A1 (en) | 2016-03-23 |
US20140359591A1 (en) | 2014-12-04 |
US9170792B2 (en) | 2015-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105164637A (zh) | 对管线化的软件的动态优化 | |
US11379234B2 (en) | Store-to-load forwarding | |
US9606806B2 (en) | Dependence-based replay suppression | |
Haring et al. | The ibm blue gene/q compute chip | |
CN102934084B (zh) | 用于通过将第一核类型与第二核类型耦合来提高功率性能的装置、方法和系统 | |
US10782977B2 (en) | Fault detecting and fault tolerant multi-threaded processors | |
TWI483180B (zh) | 重疊原子區域執行的方法 | |
CN104813278B (zh) | 对二进制转换的自修改代码以及交叉修改代码的处理 | |
RU2628156C2 (ru) | Системы и способы отслеживания флага в операциях устранения перемещения | |
TW201802668A (zh) | 可中斷及可重啟矩陣乘法指令、處理器、方法和系統 | |
CN103513964A (zh) | 循环缓冲器打包 | |
KR101806279B1 (ko) | 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들 | |
TW201606645A (zh) | 在處理器管線中管理指令順序 | |
CN111752477A (zh) | 用于提供具有低开销的存储器原子性的技术 | |
US20140317385A1 (en) | Techniques for determining instruction dependencies | |
CN111352757A (zh) | 检测未初始化存储器读取的设备、系统和方法 | |
CN105320494A (zh) | 带有一致的和非一致的子系统的存储器排序 | |
US20230195517A1 (en) | Multi-Cycle Scheduler with Speculative Picking of Micro-Operations | |
US12099841B2 (en) | User timer directly programmed by application | |
US11513802B2 (en) | Compressing micro-operations in scheduler entries in a processor | |
US20140317386A1 (en) | Techniques for determining instruction dependencies | |
EP4453716A1 (en) | Multi-cycle scheduler with speculative picking of micro-operations | |
TW201342065A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171219 |