CN107003859A - 通过连续监控重复指令序列的运行时代码并行化 - Google Patents

通过连续监控重复指令序列的运行时代码并行化 Download PDF

Info

Publication number
CN107003859A
CN107003859A CN201580063897.5A CN201580063897A CN107003859A CN 107003859 A CN107003859 A CN 107003859A CN 201580063897 A CN201580063897 A CN 201580063897A CN 107003859 A CN107003859 A CN 107003859A
Authority
CN
China
Prior art keywords
register
instruction
processor
monitored
monitoring
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
Application number
CN201580063897.5A
Other languages
English (en)
Inventor
诺姆·米兹拉希
阿尔贝托·曼德勒
莎伊·科伦
乔纳森·弗里德曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Centi Peter Sami Ltd
Original Assignee
Centi Peter Sami Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/578,516 external-priority patent/US9348595B1/en
Application filed by Centi Peter Sami Ltd filed Critical Centi Peter Sami Ltd
Publication of CN107003859A publication Critical patent/CN107003859A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

一种方法包括,在执行程序代码的指令的处理器(20)中,监控遍历流控制轨迹的指令的重复序列中的指令,以构造所监控的指令进行的寄存器访问的规范。基于该规范,调用多个硬件线程以至少部分地并行地执行重复指令序列的相应段。在执行期间,在段的至少一个中继续进行对指令的监控。

Description

通过连续监控重复指令序列的运行时代码并行化
发明领域
本发明总体上涉及处理器设计,并具体地涉及用于运行时代码并行化的方法和***。
发明背景
已经提出了用于在运行时动态地并行化软件代码的各种技术。例如,Akkary和Driscoll在1998年12月的第31届微体系结构年度国际研讨会的论文集“A DynamicMultithreading Processor”中描述了实现单个程序的动态多线程执行的处理器架构,该文章通过引用并入本文。
Marcuellu等人在1998年的第12届国际超级计算会议的论文集“SpeculativeMultithreaded Processors”中描述了一种处理器微架构,该微架构通过不需要编译器或用户支持的控制推测技术来同时执行从单个程序获得的多个控制线程,该文章通过引用并入本文。
Marcuello和Gonzales在1999年的第13届国际超级计算会议的论文集“ClusteredSpeculative Multithreaded Processors”中提出了在运行时从单线程应用中产生推测性线程的微架构,该文章通过引用并入本文。
在2000年的第14届并行与分布式处理国际研讨会的论文集“A QuantitativeAssessment of Thread-Level Speculation Techniques”(其通过引用并入本文)中,Marcuello和Gonzales分析了不同线程推测技术的益处以及线程单元中的值预测、分支预测、线程初始化开销和连接的影响。
Ortiz-Arroyo和Lee在2003年的第16届并行与分布式计算***的国际会议(PDCS'03)的论文集“Dynamic Simultaneous Multithreaded Architecture”中描述了被称为动态同时多线程(DSMT)的多线程架构,该多线程架构在同时多线程处理器核上执行来自单个程序的多个线程的,该文章通过引用并入本文。
发明概述
本文所述的本发明的实施例提供一种方法,该方法包括在执行程序代码的指令的处理器中,监控遍历流控制轨迹的指令的重复序列中的指令,以构造所监控的指令进行的寄存器访问的规范。基于该规范,调用多个硬件线程以至少部分地并行地执行重复指令序列的相应段。在执行期间,在段中的至少一个中继续进行对指令的监控。
在一些实施例中,继续监控指令包括响应于在给定段中检测到对不同流控制轨迹的变化,通过监控沿着不同流控制轨迹的指令来创建并构造用于不同流控制轨迹的不同规范。该方法可以包括在监控不同的流控制轨迹之后,保存不同的规范或不同的流控制轨迹。
在一些实施例中,重复序列包括循环或函数。在实施例中,继续监控指令包括继续监控所有段。可替代地,继续监控指令可以包括继续监控跟随流控制轨迹的段的至少一个子集。此外,可替代地,继续监控指令可以包括选择段的部分子集,并且继续监控所选择的子集中的段。选择子集可以包括选择用于继续监控的被创建的每第N个段,根据预定义的周期模式选择用于继续监控的段,和/或随机选择用于继续监控的段。
在一些实施例中,该方法包括在中止重复序列之后的给定数量的周期、指令或微操作内终止对给定段中的指令的监控。在示例实施例中,基于为具有不同控制流轨迹的不同段设置的给定数量来设置给定段的给定数量。
根据本发明的实施例,另外提供了包括执行流水线和监控单元的处理器。执行流水线被配置为执行程序代码的指令。监控单元被配置为监控遍历流控制轨迹的指令的所识别的重复指令序列,以便构造所监控的指令进行的寄存器访问的规范,被配置为基于该规范,调用执行流水线中的多个硬件线程以至少部分并行地执行重复指令序列的相应段,并且在执行期间继续监控段中的至少一个中的指令。
根据本发明的实施例,还提供了一种方法,该方法包括在执行程序代码的指令的处理器中,监控指令的重复序列中的指令,以构造所监控的指令进行的寄存器访问的规范。基于所监控的指令,对终止标准进行评估。如果满足终止标准,则终止对指令的监控。如果对指令的监控在不满足终止标准的情况下结束,则基于规范,将重复指令序列的多个段的执行并行化。
在一些实施例中,终止标准取决于对寄存器的最后写入的位置,被写入的寄存器的数目,指令或微操作的计数、执行周期的计数和/或分支指令的数目超过阈值。另外或可替代地,终止标准可以取决于监控到达先前监控的程序代码中的位置、监控到达被识别为重复的程序代码中的位置、在监控期间或之前发生的分支误预测,和/或取决于处理器的一个或更多个标志作为全局或全局-局部的分类。
在实施例中,该规范与由所监控的指令遍历的流控制轨迹唯一地相关联。在另一个实施例中,该规范与由所监控的指令遍历的两个或更多个流控制轨迹相关联。
在实施例中,在处理器的执行流水线中对指令进行解码之后立即执行对指令的监控。在另一个实施例中,在处理器的执行流水线中执行指令之前执行对指令的监控,其包括监控随后将被清除的推测性指令。在一些实施例中,该方法包括在整个监控期间保留寄存器的相应名称。
根据本发明的实施例,还提供了一种方法,其包括在执行程序代码的指令的处理器中,监控指令的重复序列,并且根据其中每个寄存器被指令用作操作数或目的地的相应顺序来对由所监控的指令访问的寄存器进行分类。基于寄存器的分类,将重复序列的多个段的执行并行化。
在一些实施例中,对寄存器进行分类包括将寄存器中的至少一些分类为以下寄存器中的一个:局部寄存器,其在所监控的序列中的第一次出现是作为目的地;全局寄存器,其在所监控的序列中仅用作操作数;以及全局-局部寄存器,其在所监控的序列中的第一次出现是作为操作数,并且随后在所监控的序列中被用作目的地。
在实施例中,对寄存器进行分类包括,如果给定寄存器作为条件指令中的目的地首次出现在所监控的序列中,则将该给定寄存器分类为全局-局部寄存器。在实施例中,对寄存器进行分类包括,如果给定寄存器作为条件指令中的目的地第一次出现在所监控的序列中,则将该给定寄存器分类为全局-局部寄存器,否则如果满足条件指令的条件,则将给定寄存器分类为局部寄存器。
在另一个实施例中,对寄存器进行分类包括,如果给定寄存器作为相同指令中的操作数和目的地两者第一次出现在所监控的序列中,则将该给定寄存器分类为全局-局部寄存器。
在一些实施例中,对寄存器进行分类还包括针对寄存器的至少一个子集,识别对寄存器的最后写入操作在所监控的序列中的相应位置。在公开的实施例中,识别最后写入操作的位置包括将对寄存器的至少一个子集的写入进行计数。可替代地,识别最后写入操作的位置可以包括记录最后写入操作的地址。
在实施例中,除了寄存器之外,还对处理器的一个或更多个标志执行对最后写入操作的位置的识别。在另一个实施例中,寄存器的子集至少包括分类为局部寄存器的寄存器。在又一个实施例中,寄存器的子集至少包括分类为全局-局部寄存器的寄存器。
在示例实施例中,对最后写入操作的位置的识别包括对相应寄存器的条件写入操作。在实施例中,除了寄存器之外,还针对处理器的一个或更多个标志执行根据作为操作数或目的地的使用顺序的分类。
根据本发明的实施例,另外提供了包括执行流水线和监控单元的处理器。执行流水线被配置为执行程序代码的指令。监控单元被配置为监控指令的重复序列中的指令,以便构造所监控的指令进行的寄存器访问的规范,被配置为基于所监控的指令,对终止标准进行评估,如果满足终止标准,则终止对指令的监控,并且如果对指令的监控在不满足终止标准的情况下结束,则基于规范,将重复指令序列的多个段的执行并行化。
根据本发明的实施例,还提供了包括执行流水线和监控单元的处理器。执行流水线被配置为执行程序代码的指令。监控单元被配置为监控指令的重复序列,被配置为根据其中每个寄存器被指令用作操作数或目的地的相应顺序来对由所监控的指令访问的寄存器进行分类,并且基于寄存器的分类来并行化重复序列的多个段的执行。
从结合附图进行的本发明的实施例的以下详细描述,本发明将被更完全地理解,其中:
附图简述
图1是根据本发明的实施例示意性地图示了执行运行时代码并行化的处理器的框图;
图2是根据本发明的实施例示意性地图示了程序循环的运行时并行化的图;
图3是根据本发明的实施例的具有多个轨迹和相应记分板的程序循环的图;以及
图4是根据本发明的实施例示意性地图示了用于连续监控重复指令序列的方法的流程图。
具体实施方式
综述
本文中描述的本发明的实施例提供了用于在处理器中对代码的运行时并行化的改进的方法和设备。在所公开的实施例中,处理器识别重复的指令序列,且创建和执行被称为段的多个并行代码序列,其执行不同出现的序列。这些段被调度,以用于通过多个硬件线程进行并行执行。
例如,重复序列可以包括循环,在这种情况下,段包括多个循环迭代、迭代的部分或循环的延续。作为另一示例,重复序列可以包括函数,在这种情况下,段包括多个函数调用,函数的部分或函数延续。在运行时,对预编译代码执行并行化。术语“重复序列”通常指的是被重新访问并执行多次的任何指令序列。
在一些实施例中,在识别重复序列时,处理器监控序列中的指令并构建“记分板”-由所监控的指令对寄存器的访问的规范。记分板与由所监控的序列遍历的特定流控制轨迹相关联。处理器基于在记分板和轨迹中收集的信息来决定如何以及何时创建和执行多个段。
在一些实施例中,记分板包括由所监控的指令访问的寄存器的分类。寄存器的分类取决于其中寄存器被用作所监控的指令中的操作数或目的地的顺序。
在一些实施例中,尽管微操作与指令不同,但同样按照与监控指令类似的方式对微操作进行监控。换句话说,在一些实施例中,按照微操作粒度而不是指令粒度来产生记分板并执行监控。
该分类可以例如在其首次出现是作为目的地的局部(L)寄存器、仅用作操作数的全局(G)寄存器以及全局-局部(GL)寄存器之间进行区分,该GL寄存器的首次出现是作为操作数且随后用作目的地。另外或可替代地,记分板可以针对至少一些寄存器指示对寄存器的最后写入操作的所监控的序列中的位置。该指示可以包括例如对寄存器的写入操作次数的计数。
在一些实施例中,处理器在执行期间继续监控一个或更多个段中的指令。这种继续监控使得处理器能够快速且有效地对流控制轨迹中可能例如由于数据相关性条件分支指令而发生在所监控的段中的变化作出反应。本文描述了选择标准的几个示例,处理器可以使用该选择标准来选择用于继续监控的段。
在一些实施例中,处理器在某个段结束之前终止并中断对该段的监控。本文描述了可由处理器使用的各种终止标准。附加公开的技术保持用于多个相应的流控制轨迹的多个同步记分板,并且适当地在它们之间交替。
处理器架构
图1是根据本发明的实施例示意性地图示处理器20的框图。处理器20运行预编译的软件代码,同时使代码执行并行化。处理器在运行时通过在程序指令从存储器中被提取并被解码的时候对其进行分析来执行并行化决策。
在本示例中,处理器20包括执行流水线,该执行流水线包括一个或更多个提取单元24、一个或更多个解码单元28、乱序(OOO)缓冲器32和执行单元36。提取单元24从多级指令高速缓存中提取程序指令,该高速缓存存储器在本示例中包括1级(L1)指令高速缓存40和2级(L2)指令高速缓存44。
分支预测单元48预测在执行期间预期由程序遍历的流控制轨迹(在本文中为了简短起见而被称为“轨迹”)。预测通常基于由提取单元24提取的先前指令的地址或程序计数器(PC)值。基于预测,分支预测单元48指示提取单元24将提取哪些新的指令。单元48的流控制预测也影响代码执行的并行化,如以下将解释的。
由解码单元28解码的指令存储在OOO缓冲器32中,以用于通过执行单元36进行乱序执行,即,不按照指令被编译和存储在存储器中的顺序。可替代地,所缓冲的指令可以按顺序执行。随后发出所缓冲的指令,以供各种执行单元36执行。在本示例中,执行单元36包括一个或更多个乘法累加(MAC)单元、一个或更多个算术逻辑单元(ALU)和一个或更多个加载/存储单元。另外或可替代地,执行单元36可以包括其他合适类型的执行单元,例如浮点单元(FPU)。
由执行单元36产生的结果被存储在寄存器文件和/或多级数据高速缓存存储器中,其在本示例中包括1级(L1)数据高速缓存52和2级(L2)数据高速缓存56。在一些实施例中,L2数据高速缓存存储器56和L2指令高速缓存存储器44被实现为相同物理存储器中单独的存储器区域或者在没有固定预分配的情况下简单地共享相同的存储器。
在一些实施例中,处理器20还包括负责运行时代码并行化的线程监控和执行单元60。下面详细说明单元60的功能。
图1中所示的处理器20的配置是示例配置,其纯粹为了概念清楚起见而被选择。在替代实施例中,可使用任何其他合适的处理器配置。例如,在图1的配置中,使用多个提取单元24和多个解码单元28来实现多线程。每个硬件线程可以包括被分配以提取用于线程的指令的提取单元以及被分配以对所提取的指令进行解码的解码单元。另外或可替代地,多线程可以以许多其他方式实现,例如使用每线程的多个OOO缓冲器、单独的执行单元和/或每线程的单独的寄存器文件。在另一个实施例中,不同的线程可以包括不同的相应处理核心。
作为又一个示例,可以在没有高速缓存或有不同的高速缓存结构,在每线程没有分支预测或者有单独的分支预测的情况下实现处理器。处理器可以包括附加元件,例如,仅举几个例子,重排序缓冲器(ROB)、寄存器重命名。此外,可替代地,所公开的技术可以用具有任何其它合适的微架构的处理器执行。
处理器20可以使用任何合适的硬件例如使用一个或更多个专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他设备类型来实现。另外或可替代地,可使用软件或使用硬件和软件元件的组合来实现处理器20的某些元件。可以使用诸如随机存取存储器(RAM)的任何合适类型的存储器来实现指令高速缓存存储器和数据高速缓存存储器。
处理器20可以用软件编程以执行本文中所描述的功能。该软件可通过网络以电子形式下载到处理器,例如,或者可替代地或另外,它可以被提供和/或储存在非暂时性有形介质上,诸如,磁存储器、光存储器或电子存储器。
运行时代码并行化
在一些实施例中,处理器20中的单元60识别重复的指令序列并且使其执行并行化。重复指令序列可以包括例如,程序循环的相应迭代、函数或过程的相应出现或被多次重新访问和执行的任何其他合适的指令序列。在本上下文中,术语“重复指令序列”是指在过去至少一次执行其流控制轨迹(例如,PC值序列)的指令序列。数据值(例如,寄存器值)可能因执行而异。
在所公开的实施例中,处理器20通过使用多个硬件线程并行或半并行地调用和执行多个代码段来并行化重复指令序列。每个线程执行相应的代码段,例如循环的相应迭代、多个(不一定是连续的)循环迭代、循环迭代的一部分、循环的延续、其函数或一部分或延续或任何其它合适类型的段。
使用多个硬件线程来执行处理器20中段的并行化。在图1的示例中,尽管不是必然的,但每个线程包括已经由单元60分配以执行一个或更多个段的相应提取单元24和相应解码单元28。
实际上,数据依赖性存在于段之间。例如,在某个循环迭代中执行的计算可取决于在先前迭代中执行的计算的结果。使段并行化的能力在很大程度上取决于这种数据依赖性。
图2是根据本发明的示例实施例展示了程序循环的运行时并行化的图。该图的顶部示出了示例程序循环(从SPECint测试套件的bzip基准测试版重现的)和指令之间的依赖性。一些依赖性在相同循环迭代中的指令之间,而其他依赖性在给定循环迭代中的指令和先前迭代中的指令之间。
该图的底部示出了根据本发明的实施例的单元60如何使用四个线程TH1...TH4来并行化该循环。该表跨越总共十一个周期,并列出了在每个周期内执行哪些线程的哪些指令。每个指令由其迭代数和迭代中的指令数表示。例如,“14”表示第1循环迭代的第4个指令。在该示例中,指令5和指令7被忽略,并且假设完美的分支预测。
线程执行中的参差(staggering)是由于数据依赖性。例如,由于指令21(第二次迭代中的第一指令)依赖于指令13(第一次迭代的第三指令),因此线程TH2不能执行指令21和指令22(第二次循环迭代中的前两个指令)直到周期1。整个表中存在类似的依赖性。总的来说,这种并行化方案能够在六个周期内执行两次循环迭代,或者每三个周期执行一次迭代。
重要的是要注意,图2中所示的并行化仅考虑指令之间的数据依赖性,而不考虑其他约束,诸如执行单元的可用性。因此,图2中的周期不一定直接转换为相应的时钟周期。例如,图2中列出为在给定周期内执行的指令实际上可能在多于一个时钟周期内执行,因为它们竞争相同的执行单元36。
基于段监控的并行化
在一些实施例中,单元60通过监控处理器流水线中的指令来决定如何使代码并行化。响应于识别重复指令序列,单元60在序列被处理器提取、解码和执行时开始监控该序列。
在一些实施方式中,单元60的功能可以分布在多个硬件线程之间,使得给定的线程可以被视为在执行期间监控其指令。然而,为了清楚起见,下面的描述假设监控功能由单元60执行。
作为监控过程的一部分,单元60生成由所监控的指令遍历的流控制轨迹以及在本文中被称为记分板的监控表。记分板包括用于出现在所监控的序列中的每个寄存器的相应条目。在实施例中,单元60将每个寄存器分类为全局(G)、局部(L)或全局–局部(GL),并且指示记分板中相应条目中的分类。作为G、L或GL的寄存器的分类取决于其中在所监控的序列中寄存器被用作操作数(其值被读取)和/或用作(值被写入的)目的地的顺序。
在实施例中,局部(L)寄存器被定义为其在所监控的序列中的第一次出现是作为目的地(如果有的话,随后的出现可以作为操作数和/或目的地)的寄存器。全局(G)寄存器被定义为在所监控的序列中仅用作操作数的寄存器,即,寄存器被读取但从不被写入。全局-局部(GL)寄存器被定义为其在所监控的序列中的第一次出现是作为操作数且随后在所监控的序列被用作目的地的寄存器。只要“第一次”和“随后的”之间的顺序被保留,则第一次出现和随后的出现可能发生在不同的指令或相同的指令中。
在替代实施例中,上述分类的例外涉及将寄存器用作目的地的条件指令。如果这样的指令是寄存器在所监控的指令中的第一次出现,则该寄存器被分类为GL。否则,根据上述规则,寄存器被分类为局部(L)。例如,如果指令“mov_cond r2,#5”是对所监控的指令中的r2的第一次写入,则该指令中的寄存器r2将被分类为GL,否则寄存器r2被分类为L。在替代实施例中,如果这样的指令是寄存器在所监控的指令中的第一次出现,则该寄存器被分类为GL。否则,只有当满足指令的条件时,才将寄存器分类为局部。如果没有满足条件,则该寄存器不被分类。
在实施例中,单元60使用超集分类,即,将以上定义的两个或更多个分类合并在一起。在这样的实施例中,即使给定的寄存器在给定段中仅是局部的,单元60仍将其分类为GL,以简化控制。
将寄存器的分类定义为G、L或GL的替代方法是根据其中寄存器的依赖性相对于当前监控的段生成和使用的位置来对寄存器进行分类:在当前监控的段之外生成的操作数被分类为全局(G)或全局-局部(GL)。在当前监控的段内生成的操作数被分类为局部(L)。
在一些实施例中,单元60在记分板中针对至少一些寄存器找到并指示对所监控的序列中的寄存器的最后写入的位置。该指示在执行期间由单元60使用,以用于决定何时发出依赖于该最后写入的随后的段中的指令。该机制背后的基本原理是,只有在段Y的执行中对该寄存器的最后写入之后,才能发出依赖于先前段Y中的寄存器的值的段X中的指令。
在一个实施例中,通过对所监控的序列中寄存器被写入的次数进行计数来实现最后写入指示。单位60确定此计数(表示为#WRITES),并在记分板中的寄存器的条目中指示该#WRITES值。
在该实施例中,当执行段Y时,单元60将对所讨论的寄存器的写入次数进行计数。当计数达到记分板中指示的#WRITES值时,单元60断定遇到最后的写入,并因此允许发出依赖于所讨论的寄存器的段X中的执行指令。
用于减轻数据依赖性的一个已知解决方案是重命名寄存器,即,在不同的段中为给定的寄存器分配不同的名称。在一些实施例中,单元60避免对寄存器进行重命名,即,在重复序列的不同迭代中保留寄存器名称,以便促进对#WRITES的计数。换句话说,单元60维持在段和线程之间的寄存器重命名映射的对准。
上面描述的#WRITES机制仅被描绘为用于在所监控的序列中找到并指示对寄存器的最后写入的位置的机制的示例。在替代实施例中,单元60可以以任何其它合适的方式在记分板中找到并指示对寄存器的最后写入的位置,例如通过在记分板中记录对寄存器的最后写入操作的地址。
在各种实施例中,单元60不一定需要对每个寄存器的#WRITES进行计数。例如,单元60可以针对分类为GL的寄存器、针对分类为L的寄存器或两者,对#WRITES进行计数。
在一些实施例中,单元60在#WRITES的计数中包括条件写入指令,而不管该条件是否被满足。在其他实施例中,单元60仅在满足条件并且实际执行写入时才在#WRITES的计数中包括条件写入指令。
在一些实施例中,处理器20保持在条件指令中使用的一个或更多个标志。标志的示例包括零标志(如果最近的算术运算的结果为零,则为“真”,否则为“假”)、负标志(如果最近的算术运算的结果为负,则为“真”,否则为“假”)、进位标志(如果最近的加法运算产生进位,则为“真”,否则为“假”)、溢出标志(如果最近的加法运算引起溢出,则为“真”,否则为“假”)或任何其他合适的标志。通常,标志被实现为专用标志寄存器中的相应位。标志由各种指令或微操作更新。
在一些实施例中,单元60以与监控寄存器类似的方式监控标志并将它们包含在记分板中。例如,如以上所解释的,单元60可以将标志分类为G、L或GL。另外或可替代地,单元60可以对所监控的序列中的每个标志的最后写入的位置进行计数和记录(例如,通过对标志的#WRITES进行计数和记录)。
在一些实施例中,单元60并不一定总是从头到尾监控整个段。在示例实施例中,单元60可以从段中的某个中点开始监控(例如,对写入进行计数和/或对寄存器进行分类),并且更新现有记分板。
对多个轨迹的连续监控
在一些实施例中,单元60在其执行期间继续监控一个或更多个线程中的指令。换句话说,一旦重复指令序列被识别和监控,监控过程就不会结束。在执行期间,单元60针对至少一些线程继续进行监控和记分板构造过程。如上所述,单元60的功能可以分布在线程之间,使得每个线程(或线程的至少一个子集)监控其执行的指令。
在执行期间对段的连续监控是重要的,例如,用于有效地处理其中程序执行在运行时从一个流控制轨迹切换到另一个流控制轨迹的场景。在许多实际场景下,该程序在具有不同轨迹的两个或更多个重复指令序列之间交替。在一些实施例中,单元60通过并行地创建和保持多个不同的记分板、用于每个轨迹的相应记分板来处理这样的场景。
图3是根据本发明的实施例示意性地图示了具有多个轨迹和相应记分板的程序循环的图。该图的左侧图示了具有九个指令的一段代码。程序循环从指令2开始并在指令9处循环回去。
在该示例中,指令4是跳转到指令6并跳过指令5的条件分支指令。因此,根据条件分支指令的结果,一些段将跟随被表示为70A的轨迹(未采用分支),而其他线程将跟随被表示为70B的轨迹(采用分支)。
在一些实施例中,单元60在其执行期间监控至少一些段。当检测到被监控的段开始跟随先前未知的轨迹时,单元60为新轨迹创建单独的记分板,并且记录寄存器分类和#WRITES,如以上所解释的。在本示例中,单元60创建并保持用于轨迹70A的记分板74A和用于轨迹70B的记分板74B。
通过保持多个记分板,单元60能够快速地对轨迹变化做出反应。只要段跟随先前监控的轨迹,单元60就已经具有用于该轨迹的有效的记分板。因此,单元60能够使用可用的记分板来立即调用新的段。在没有这种机制的情况下,对新的段的调用将被延迟,直到用于新的轨迹的记分板被构造(意味着效率降低,并且处理器可能错误地假定其监控的轨迹是新的)。
图3的多轨迹场景是为了展示连续监控和多个记分板的机制而描绘的简单的示例场景。所公开的技术可以用于其中执行在多个流控制轨迹之间交替的任何其他合适类型的场景中。
图4是根据本发明的实施例示意性地图示用于连续监控重复指令序列的方法的流程图。该图说明了给定线程中的组合执行和监控。单元60通常针对被选择用于监控的任何序列执行该过程,而不一定是对于每个被执行的段。
在启动步骤80,该方法始于单元60向给定硬件线程提供给定的轨迹和对应的记分板。在执行&监控步骤84,所讨论的线程执行段并且并行地执行监控。作为监控过程的一部分,线程生成用于其跟随的轨迹的记分板。
在完成段的执行之后,在检查步骤88,单元60检查轨迹是否是新的。换句话说,单元60检查用于该轨迹的记分板是否已经存在。如果轨迹是新的,则单元60在记录步骤92记录为该轨迹构造的记分板。该记分板将被提供给跟随相同轨迹的随后的线程。否则,即如果记分板已经存在,则该方法在结束步骤96处结束。
在一些实施例中,记分板与单个流控制轨迹唯一地相关联。在其他实施例中,给定的记分板可以与两个或更多个轨迹相关联。
在一些实施例中,单元60在执行期间例如使用图4的方法来监控每个段。在替代实施例中,单元60可以选择仅监控段的子集。通过控制被选择用于监控的段的数量和标识,在计算开销和并行化性能之间设置不同的权衡是可能的。
单元60可以使用各种标准或逻辑来选择监控哪些段。例如,单元60可以周期性地选择用于监控的段,例如,(对于某个选定的常数N)被调用的每第N个段。在另一个实施例中,单元60可以根据预定义的确定性模式(例如,段2、3、5、12、13、15、22、23、25...)来选择监控段。作为另一示例,单元60可以随机选择用于监控的段,例如,跳过随机数量的段,选择用于监控的段,跳过另一个随机数量的段,选择用于监控的段等等。
作为又一个示例,单元60可以响应于在段的执行期间发生的一些预定义的事件来选择用于监控的段。由于不同的线程可能跟随不同的流控制轨迹,所以单元60可以选择监控跟随感兴趣的特定轨迹的段。此外,可替代地,单元60可以在执行期间使用任何其它合适的标准来选择用于监控的段。
在实施例中,通过单元60进行的监控在解码模块28的输出端处的指令上执行。在流水线中的这一点处,在一些被解码的指令将被清除且不被提交的意义上,指令仍然是推测性的。例如,由于分支误预测,清除可能发生。然而,优选的是在这个早期阶段监控指令,因为指令仍然按顺序被组织。此外,在流水线的早期监控指令使得单元60能够以更低的延迟利用记分板(即,利用记分板调用并行段)。
监控终止标准
在一些实施例中,单元60在给定段结束之前终止对该段的监控。为此,可以通过单元60评估和使用各种终止标准。终止标准的几个非限制性示例可包括:
■对寄存器的写入次数超过阈值。
■被写入的寄存器的数目超过阈值。
■指令或微操作的计数超过阈值。
■执行周期的计数超过阈值。
■分支指令的数目超过阈值。
■监控到达先前被监控的程序代码中的位置。
■监控到达被标识为重复的程序代码(例如,反向分支或分支链路-BL)中的位置。
■分支误预测发生在监控中的指令之一或监控之前的指令中。
■标志是GL或全局。
此外,可替代地,可使用任何其他合适的终止标准。
虽然本文中所描述的实施例主要论述了通用处理器,但本文中所描述的方法和***也可用在其他应用中,诸如用在图形处理单元(GPU)或其他专用处理器中。
因此,将认识到,以上描述的实施例是通过示例的方式引用的,并且本发明并不限于上文中已特别示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合和子组合以及本发明的变型和修改,所述变型和修改将在本领域的技术人员阅读前面描述之后想到的且在现有技术中未被公开。通过引用并入本专利申请的文件被视为本申请的组成部分,除了任何术语在这些所并入的文件中在某种程度上以与本说明书中明确地或隐含地作出的定义冲突的方式被定义之外,应仅考虑本说明书中的定义。

Claims (60)

1.一种方法,包括:
在执行程序代码的指令的处理器中,监控遍历流控制轨迹的指令的重复序列中的指令,以构造由所监控的指令进行的寄存器访问的规范;
基于所述规范,调用多个硬件线程以至少部分并行地执行所述重复指令序列的相应段;以及
在执行期间继续监控所述段中的至少一个中的指令。
2.根据权利要求1所述的方法,其中,继续监控所述指令包括响应于在给定段中检测到对不同流控制轨迹的变化,通过监控沿着所述不同流控制轨迹的指令来创建并构造用于所述不同流控制轨迹的不同规范。
3.根据权利要求2所述的方法,并且包括在监控所述不同流控制轨迹之后,保存所述不同规范或所述不同流控制轨迹。
4.根据权利要求1或2所述的方法,其中,所述重复序列包括循环或函数。
5.根据权利要求1或2所述的方法,其中,继续监控所述指令包括继续监控所有段。
6.根据权利要求1或2所述的方法,其中,继续监控所述指令包括继续监控跟随所述流控制轨迹的所述段中的至少一个子集。
7.根据权利要求1或2所述的方法,其中,继续监控所述指令包括选择所述段的部分子集,并且继续监控所选择的子集中的段。
8.根据权利要求7所述的方法,其中,选择所述子集包括以下操作中的至少一个:
选择用于继续监控的被创建的每第N个段;
根据预定义的周期模式,选择用于继续监控的段;以及
随机选择用于继续监控的段。
9.根据权利要求1或2所述的方法,并且包括在中止所述重复序列之后的给定数量的周期、指令或微操作内终止对给定段中的指令的监控。
10.根据权利要求9所述的方法,并且包括基于为具有不同控制流轨迹的不同段设置的所述给定数量,设置所述给定段的所述给定数量。
11.一种处理器,包括:
执行流水线,所述执行流水线被配置为执行程序代码的指令;以及
监控单元,所述监控单元被配置为监控识别的遍历流控制轨迹的重复指令序列的指令,以便构造所监控的指令进行的寄存器访问的规范,基于所述规范,调用所述执行流水线中的多个硬件线程以至少部分并行地执行所述重复指令序列的相应段,并且在执行期间继续监控所述段中的至少一个中的指令。
12.根据权利要求11所述的处理器,其中,响应于在给定段中检测到对不同流控制轨迹的变化,所述监控单元被配置为通过监控沿着所述不同流控制轨迹的指令来创建并构造用于所述不同流控制轨迹的不同规范。
13.根据权利要求12所述的处理器,其中,在监控所述不同流控制轨迹之后,所述监控单元被配置为保存所述不同规范或所述不同流控制轨迹。
14.根据权利要求11或12所述的处理器,其中,所述重复序列包括循环或函数。
15.根据权利要求11或12所述的处理器,其中,所述监控单元被配置为继续监控所有段。
16.根据权利要求11或12所述的处理器,其中,所述监控单元被配置为继续监控跟随所述流控制轨迹的所述段中的至少一个子集。
17.根据权利要求11或12所述的处理器,其中,所述监控单元被配置为选择所述段的部分子集,并且继续监控所选择的子集中的段。
18.根据权利要求17所述的处理器,其中,所述监控单元被配置为通过执行以下操作中的至少一个来选择所述子集:
选择用于继续监控的被创建的每第N个段;
根据预定义的周期模式,选择用于继续监控的段;以及
随机选择用于继续监控的段。
19.根据权利要求11或12所述的处理器,其中,所述监控单元被配置为在中止所述重复序列之后的给定数量的周期、指令或微操作内终止对给定段中的指令的监控。
20.根据权利要求19所述的处理器,其中,所述监控单元被配置为基于为具有不同控制流轨迹的不同段设置的所述给定数量来设置所述给定段的所述给定数量。
21.一种方法,包括:
在执行程序代码的指令的处理器中,监控指令的重复序列中的指令,以构造所监控的指令进行的寄存器访问的规范;
基于所监控的指令,对终止标准进行评估;
如果满足所述终止标准,则终止对所述指令的监控;以及
如果对所述指令的所述监控在不满足所述终止标准的情况下结束,则基于所述规范来将所述重复指令序列的多个段的执行并行化。
22.根据权利要求21所述的方法,其中,所述终止标准取决于以下项中的至少一个:
对寄存器的最后写入的位置、被写入的寄存器的数目、指令或微操作的计数、执行周期的计数或分支指令的数目超过阈值;
所述监控到达先前监控的所述程序代码中的位置;
所述监控到达被识别为重复的所述程序代码中的位置;
分支误预测发生在所述监控期间或之前;以及
所述处理器的一个或更多个标志作为全局或全局-局部的分类。
23.根据权利要求21所述的方法,其中,所述规范与由所监控的指令遍历的流控制轨迹唯一地相关联。
24.根据权利要求21所述的方法,其中,所述规范与由所监控的指令遍历的两个或更多个流控制轨迹相关联。
25.根据权利要求21-24中任一项所述的方法,其中,在所述处理器的执行流水线中对所述指令进行解码之后立即执行对所述指令的监控。
26.根据权利要求21-24中任一项所述的方法,其中,在所述处理器的执行流水线中执行所述指令之前执行对所述指令的监控,包括监控随后将被清除的推测性指令。
27.根据权利要求21-24中任一项所述的方法,并且包括在整个所述监控期间保留所述寄存器的相应名称。
28.一种方法,包括:
在执行程序代码的指令的处理器中,监控指令的重复序列,并且对由所监控的指令访问的寄存器根据其中每个寄存器被所述指令用作操作数或目的地的相应顺序来进行分类;以及
基于所述寄存器的分类,将所述重复序列的多个段的执行并行化。
29.根据权利要求28所述的方法,其中,对所述寄存器进行分类包括将所述寄存器中的至少一些分类为以下寄存器中的一个:
局部寄存器,所述局部寄存器在所监控的序列中的第一次出现是作为目的地;
全局寄存器,所述全局寄存器在所监控的序列中仅用作操作数;以及
全局-局部寄存器,所述全局-局部寄存器在所监控的序列中的第一次出现是作为操作数,并且随后在所监控的序列中被用作目的地。
30.根据权利要求28所述的方法,其中,对所述寄存器进行分类包括如果给定寄存器作为条件指令中的目的地第一次出现在所监控的序列中,则将所述给定寄存器分类为全局-局部。
31.根据权利要求28所述的方法,其中,对所述寄存器进行分类包括如果给定寄存器作为条件指令中的目的地第一次出现在所监控的序列中,则将所述给定寄存器分类为全局-局部,否则如果满足所述条件指令的条件,则将所述给定寄存器分类为局部。
32.根据权利要求28所述的方法,其中,对所述寄存器进行分类包括如果给定寄存器作为相同指令中的操作数和目的地两者第一次出现在所监控的序列中,则将所述给定寄存器分类为全局-局部。
33.根据权利要求28所述的方法,其中,对所述寄存器进行分类还包括针对所述寄存器中的至少一个子集,识别对所述寄存器的最后写入操作在所监控的序列中的相应位置。
34.根据权利要求33所述的方法,其中,识别所述最后写入操作的位置包括将对所述寄存器的至少一个子集的写入进行计数。
35.根据权利要求33所述的方法,其中,识别所述最后写入操作的位置包括记录所述最后写入操作的地址。
36.根据权利要求33所述的方法,其中,除了所述寄存器之外,还对所述处理器的一个或更多个标志执行对所述最后写入操作的位置的识别。
37.根据权利要求33所述的方法,其中,所述寄存器的所述子集至少包括被分类为局部的寄存器。
38.根据权利要求33所述的方法,其中,所述寄存器的所述子集至少包括被分类为全局-局部的寄存器。
39.根据权利要求33所述的方法,其中,对所述最后写入操作的位置的识别包括对相应寄存器的条件写入操作。
40.根据权利要求28所述的方法,其中,除了所述寄存器之外,还针对所述处理器的一个或更多个标志执行根据作为操作数或目的地的使用顺序的分类。
41.一种处理器,包括:
执行流水线,所述执行流水线被配置为执行程序代码的指令;以及
监控单元,所述监控单元被配置为监控指令的重复序列中的指令,以便构造所监控的指令进行的寄存器访问的规范,基于所监控的指令,对终止标准进行评估,如果满足所述终止标准,则终止对所述指令的监控,并且如果对所述指令的所述监控在不满足所述终止标准的情况下结束,则基于所述规范,将所述重复指令序列的多个段的执行并行化。
42.根据权利要求41所述的处理器,其中,所述终止条件取决于以下项中的至少一个:
对寄存器的最后写入的位置、被写入的寄存器的数目、指令或微操作的计数、执行周期的计数或分支指令的数目超过阈值;
所述监控到达先前监控的所述程序代码中的位置;
所述监控到达被识别为重复的所述程序代码中的位置;
分支误预测发生在所述监控期间或之前;以及
所述处理器的一个或更多个标志作为全局或全局-局部的分类。
43.根据权利要求41所述的处理器,其中,所述规范与由所监控的指令遍历的流控制轨迹唯一地相关联。
44.根据权利要求41所述的处理器,其中,所述规范与由所监控的指令遍历的两个或更多个流控制轨迹相关联。
45.根据权利要求41-44中任一项所述的处理器,其中,所述监控单元被配置为在所述处理器的执行流水线中对所述指令进行解码之后立即对所述指令进行监控。
46.根据权利要求41-44中任一项所述的处理器,其中,所述监控单元被配置为在所述处理器的执行流水线中执行所述指令之前监控所述指令,包括监控随后将被清除的推测性指令。
47.根据权利要求41-44中任一项所述的处理器,其中,所述监控单元被配置为在整个所述监控期间保留所述寄存器的相应名称。
48.一种处理器,包括:
执行流水线,所述执行流水线被配置为执行程序代码的指令;以及
监控单元,所述监控单元被配置为监控指令的重复序列,对由所监控的指令访问的寄存器根据其中每个寄存器被所述指令用作操作数或目的地的相应顺序进行分类,并且基于所述寄存器的分类,将所述重复序列的多个段的执行并行化。
49.根据权利要求48所述的处理器,其中,所述监控单元被配置为将所述寄存器中的至少一些分类为以下寄存器中的一个:
局部寄存器,所述局部寄存器在所监控的序列中的第一次出现是作为目的地;
全局寄存器,所述全局寄存器在所监控的序列中仅用作操作数;以及
全局-局部寄存器,所述全局-局部寄存器在所监控的序列中的第一次出现是作为操作数,并且随后在所监控的序列中被用作目的地。
50.根据权利要求48所述的处理器,其中,所述监控单元被配置为,如果给定寄存器作为条件指令中的目的地第一次出现在所监控的序列中,则将所述给定寄存器分类为全局-局部。
51.根据权利要求48所述的处理器,其中,所述监控单元被配置为,如果给定寄存器作为条件指令中的目的地第一次出现在所监控的序列中,则将所述给定寄存器分类为全局-局部,否则如果满足所述条件指令的条件,则将所述给定寄存器分类为局部。
52.根据权利要求48所述的处理器,其中,所述监控单元被配置为,如果给定寄存器作为相同指令中的操作数和目的地两者第一次出现在所监控的序列中,则将所述给定寄存器分类为全局-局部。
53.根据权利要求48所述的处理器,其中,在对所述寄存器进行分类时,所述监控单元被配置为针对所述寄存器的至少一个子集,识别对所述寄存器的最后写入操作在所监控的序列中的相应位置。
54.根据权利要求48所述的处理器,其中,所述监控单元被配置为通过对所述寄存器的至少一个子集的写入进行计数来识别所述最后写入操作的位置。
55.根据权利要求48所述的处理器,其中,所述监控单元被配置为通过记录所述最后写入操作的地址来识别所述最后写入操作的位置。
56.根据权利要求48所述的处理器,其中,所述监控单元被配置为除了所述寄存器之外,还针对所述处理器的一个或更多个标志识别所述最后写入操作的位置。
57.根据权利要求48所述的处理器,其中,所述寄存器的所述子集至少包括被分类为局部的寄存器。
58.根据权利要求48所述的处理器,其中,所述寄存器的所述子集至少包括被分类为全局-局部的寄存器。
59.根据权利要求48所述的处理器,其中,对所述最后写入操作的位置的识别包括对相应寄存器的条件写入操作。
60.根据权利要求48所述的处理器,其中,所述监控单元被配置为除了所述寄存器之外,还针对所述处理器的一个或更多个标志,执行根据作为操作数或目的地的使用顺序的分类。
CN201580063897.5A 2014-12-22 2015-12-09 通过连续监控重复指令序列的运行时代码并行化 Pending CN107003859A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201414578518A 2014-12-22 2014-12-22
US14/578,516 US9348595B1 (en) 2014-12-22 2014-12-22 Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US14/578,516 2014-12-22
US14/578,518 2014-12-22
PCT/IB2015/059470 WO2016103092A1 (en) 2014-12-22 2015-12-09 Run-time code parallelization with continuous monitoring of repetitive instruction sequences

Publications (1)

Publication Number Publication Date
CN107003859A true CN107003859A (zh) 2017-08-01

Family

ID=56149346

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580063897.5A Pending CN107003859A (zh) 2014-12-22 2015-12-09 通过连续监控重复指令序列的运行时代码并行化

Country Status (3)

Country Link
EP (1) EP3238040A4 (zh)
CN (1) CN107003859A (zh)
WO (1) WO2016103092A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109522049A (zh) * 2017-09-18 2019-03-26 展讯通信(上海)有限公司 一种同步多线程***中共享寄存器的验证方法及装置
CN111381883A (zh) * 2018-12-27 2020-07-07 图核有限公司 多线程处理器中的指令高速缓存

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144092A1 (en) * 2001-01-31 2002-10-03 Siroyan Limited. Handling of loops in processors
TW200939117A (en) * 2007-12-31 2009-09-16 Advanced Micro Devices Inc Processing pipeline having stage-specific thread selection and method thereof

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69130138T2 (de) * 1990-06-29 1999-05-06 Digital Equipment Corp., Maynard, Mass. Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
US7571302B1 (en) * 2004-02-04 2009-08-04 Lei Chen Dynamic data dependence tracking and its application to branch prediction
US8607209B2 (en) * 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
JP4287799B2 (ja) * 2004-07-29 2009-07-01 富士通株式会社 プロセッサシステムおよびスレッド切り替え制御方法
US8291197B2 (en) * 2007-02-12 2012-10-16 Oracle America, Inc. Aggressive loop parallelization using speculative execution mechanisms
US7711929B2 (en) * 2007-08-30 2010-05-04 International Business Machines Corporation Method and system for tracking instruction dependency in an out-of-order processor
US8683185B2 (en) * 2010-07-26 2014-03-25 International Business Machines Corporation Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144092A1 (en) * 2001-01-31 2002-10-03 Siroyan Limited. Handling of loops in processors
TW200939117A (en) * 2007-12-31 2009-09-16 Advanced Micro Devices Inc Processing pipeline having stage-specific thread selection and method thereof

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109522049A (zh) * 2017-09-18 2019-03-26 展讯通信(上海)有限公司 一种同步多线程***中共享寄存器的验证方法及装置
CN111381883A (zh) * 2018-12-27 2020-07-07 图核有限公司 多线程处理器中的指令高速缓存
CN111381883B (zh) * 2018-12-27 2023-09-29 图核有限公司 多线程处理器中的指令高速缓存

Also Published As

Publication number Publication date
EP3238040A1 (en) 2017-11-01
WO2016103092A1 (en) 2016-06-30
EP3238040A4 (en) 2018-09-26

Similar Documents

Publication Publication Date Title
US9348595B1 (en) Run-time code parallelization with continuous monitoring of repetitive instruction sequences
CN107003858A (zh) 通过监控重复指令序列的运行时代码并行化
CN108170471B (zh) 基于类型的优先化指令
CN107250977A (zh) 通过对指令序列的近似监控的运行时代码并行化
CN106104481A (zh) 确定性和机会性多线程
CN108027769A (zh) 使用寄存器访问指令发起指令块执行
CN107430509A (zh) 基于近似寄存器访问规范的代码执行的运行时间并行化
US10013255B2 (en) Hardware-based run-time mitigation of conditional branches
US9389868B2 (en) Confidence-driven selective predication of processor instructions
CN103250131A (zh) 包括用于早期远分支预测的影子缓存的单周期多分支预测
US10268519B2 (en) Scheduling method and processing device for thread groups execution in a computing system
CN101763249A (zh) 对非控制流指令减少分支检验
CN101482812A (zh) 处理器装置及条件分支处理方法
CN107450888A (zh) 嵌入式数字信号处理器中的零开销循环
US9652246B1 (en) Banked physical register data flow architecture in out-of-order processors
EP3264263A1 (en) Sequential monitoring and management of code segments for run-time parallelization
CN107918547A (zh) 在并行化处理器中的刷新
CN111538535B (zh) 一种cpu指令处理方法、控制器和中央处理单元
CN107003859A (zh) 通过连续监控重复指令序列的运行时代码并行化
CN109783143A (zh) 用于流水线指令流的控制方法和控制设备
CN110402434A (zh) 缓存未命中线程平衡
US10180841B2 (en) Early termination of segment monitoring in run-time code parallelization
CN107430511A (zh) 基于预监控的指令序列的并行执行
US9928068B2 (en) Hardware managed dynamic thread fetch rate control
US20160291979A1 (en) Parallelized execution of instruction sequences

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170801