CN107810479A - 用于处理器控制传送的目标位置的确定 - Google Patents

用于处理器控制传送的目标位置的确定 Download PDF

Info

Publication number
CN107810479A
CN107810479A CN201680037748.6A CN201680037748A CN107810479A CN 107810479 A CN107810479 A CN 107810479A CN 201680037748 A CN201680037748 A CN 201680037748A CN 107810479 A CN107810479 A CN 107810479A
Authority
CN
China
Prior art keywords
instruction
block
instruction block
processor
controlling stream
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.)
Withdrawn
Application number
CN201680037748.6A
Other languages
English (en)
Inventor
D·C·伯格
A·L·史密斯
J·S·格雷
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN107810479A publication Critical patent/CN107810479A/zh
Withdrawn 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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
    • 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/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

公开了用于根据基于块的指令集体系架构(ISA)从原子指令块中消除显式控制流指令(例如,分支指令)的方法和装置。在所公开技术的一个示例中,显式数据图执行(EDGE)ISA处理器被配置为从存储器中获取指令块并且执行指令块中的至少一个指令块,指令块中的每个指令块被编码成具有一个或多个退出点,该一个或多个退出点确定下一指令块的目标位置。处理器控制电路评估用于在指令块中的第一指令块内编码的指令的一个或多个谓语,并且基于该评估向目标位置处的第二指令块传送处理器的控制,该目标位置不是由第一指令块中的控制流指令所指定的。

Description

用于处理器控制传送的目标位置的确定
背景技术
由于由摩尔定律预测的晶体管尺寸的持续变化,微处理器已经从晶体管计数、集成电路成本、制造资本、时钟频率和能量效率的持续增益中受益,其中在相关联的处理器指令集体系架构(ISA)中几乎没有改变。然而,过去40年来推动半导体产业发展的光刻缩放带来的益处正在放缓甚至被扭转。多年来,精简指令集计算(RISC)体系架构一直是处理器设计的主要范例。无序超标量实现方式在面积或性能方面没有表现出持续改进。因而,在处理器ISA方面,有充分的机会来扩展性能改善。
发明内容
公开了用于以基于块的处理器指令集体系架构(BBISA)来编码和执行指令块的方法、装置和计算机可读存储设备,包括:确定用于传送处理器控制的目标位置。在所公开的技术的某些示例中,基于块的处理器执行作为原子块的多个两个或更多指令。基于块的指令可以被用来以更显式方式来表达程序数据流和/或指令流的语义,从而允许改善编译器和处理器性能。在所公开的技术的某些示例中,基于块的处理器包括多个基于块的处理器核。
所描述的用于改善处理器性能的解决方案的技术和工具可以分开实现,或者以彼此的各种组合实现。如下文将更全面描述的,所描述的技术和工具可以在信号处理器、微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)中实现的微处理器、可编程逻辑或其他适当的逻辑电路中实现。对于本领域普通技术人员而言显而易见的是,所公开的技术可以在各种计算平台中实现,这些计算平台包括但不限于服务器、大型机、手机、智能电话、PDA、手持式设备、手持式计算机、PDA、触摸屏平板设备、平板电脑、可穿戴式电脑和膝上型电脑。
提供本发明内容是为了以简化形式介绍下文将在具体实施方式中进一步描述的概念的选择。本发明内容部分不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。从参照附图进行的以下具体实施方式中,所公开的主题的前述和其他目的、特征和优点将变得更加明显。
附图说明
图1图示了可以在所公开的技术的一些示例中使用的基于块的处理器。
图2图示了可以在所公开的技术的一些示例中使用的基于块的处理器核。
图3图示了根据所公开的技术的某些示例的若干个指令块。
图4图示了可以在所公开的技术的一些示例中使用的源代码及指令块的部分。
图5图示了可以在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6描绘了可以在所公开的技术的某些示例中使用的源代码的示例。
图7是可以在所公开的技术的某些示例中使用的谓语有向非循环图。
图8至图10图示了可以在所公开的技术的某些示例中使用的示例机器代码。
图11是图示了可以在所公开的技术的一些示例中实践的、执行隐式控制流指令的示例方法的流程图。
图12是图示了可以在所公开的技术的某些示例中使用的、执行隐式分支指令的示例的流程图。
图13是图示了可以在所公开的技术的某些示例中实践的、编译包括隐式控制流指令的代码的示例方法的流程图。
图14是图示了用于实现所公开的技术的一些实施例的适当的计算环境的框图。
具体实施方式
I.一般考虑
在不旨在以任何方式进行限制的代表性实施例的上下文中,对本公开进行阐述。
如在本申请中所使用的,除非上下文另外清楚地指出,否则单数形式“一”、“一个”和“该”包括复数形式。附加地,术语“包括”意指“包含”。进一步地,术语“耦合”涵盖将项目耦合或链接在一起的机械、电、磁、光以及其他实际方式,并且不排除在耦合项目之间存在中间元件。更进一步,如本文中所使用的,术语“和/或”意指短语中的任何一个项目或项目的组合。
本文中所描述的系统、方法和装置不应被解释为以任何方式进行限制。相反,本公开单独地以及彼此以各种组合及子组合方式,涉及各种公开的实施例的新颖且非显而易见的特征和方面。所公开的系统、方法和装置不限于任何特定方面或特征或其组合,所公开的内容和方法也不要求存在任一个或多个特定优点或解决的问题。更进一步,所公开的实施例的任何特征或方面可以以彼此各种组合和子组合的方式来使用。
尽管为了方便呈现,以特定顺序次序描述了所公开的方法中一些方法的操作,但是应当理解,除非下文所阐述的特定语言要求特定排序,否则这种描述方式涵盖重排。例如,顺序描述的操作在一些情况下可以被重排或被同时执行。此外,为了简单起见,附图可能不会示出所公开的事物和方法可以与其他事物和方法结合使用的各种方式。附加地,该描述有时使用诸如“产生”、“生成”、“显示”、“接收”、“发出”、“验证”、“执行”和“启动”之类的术语来描述所公开的方法。这些术语是对所执行的实际操作的高级描述。与这些术语相对应的实际操作将根据特定实现方式而变化,并且本领域的普通技术人员容易辨别这些实际操作。
为了更好理解的目的,已经提供了在本文中参照本公开的装置或方法而呈现的操作理论、科学原理或其他理论描述,并且不旨在限制范围。所附权利要求书中的装置和方法不限于以这些操作理论描述的方式而起作用的那些装置和方法。
所公开的方法中的任一方法可以被实现为计算机可执行指令,其被存储在一个或多个计算机可读介质(例如,计算机可读介质,诸如一个或多个光学介质盘、易失性存储器部件(诸如,DRAM或SRAM)或非易失性存储器部件(诸如硬盘驱动器))并且在计算机(例如,任何市售计算机,其包括智能电话或包括计算硬件在内的其他移动设备)上执行。用于实现所公开的技术的计算机可执行指令中的任一计算机可执行指令以及在实现所公开的实施例期间创建和使用的任何数据均被存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。例如计算机可执行指令可以是专用软件应用,或经由web浏览器访问或下载的软件应用,或其他软件应用(诸如远程计算应用)的一部分。这样的软件可以使用一个或多个网络计算机例如在单个本地计算机上(例如,作为在任何适当的市售计算机上执行的代理)或在网络环境中(例如,经由因特网、广域网、局域网络、客户端-服务器网络(诸如,云计算网络)或其他这样的网络)执行。
为了清楚起见,仅对基于软件的实现方式的某些选定方面进行描述。本领域公知的其他细节被省略。例如,应该理解,所公开的技术不限于任何特定计算机语言或程序。比如,所公开的技术可以通过用C、C++、Java或任何其他适当的编程语言编写的软件来实现。同样,所公开的技术不限于任何特定计算机或硬件类型。适当的计算机和硬件的某些细节是众所周知的,并且不需要在本公开中详细阐述。
更进一步地,可以通过适当的通信手段来上载、下载或远程访问基于软件的实施例中的任一实施例(包括例如用于使得计算机执行所公开的方法中的任一方法的计算机可执行指令)。这种适当的通信手段包括例如互联网、万维网、内联网、软件应用、电缆(包括光缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信或其他这样的通信手段。
II.所公开的技术简介
超标量无序微体系架构采用大量的电路资源来重命名寄存器、以数据流次序来调度指令、在错误预测之后进行清理以及为了精确排除而按次序收回结果。这包括昂贵电路,诸如深度多端口寄存器文件、用于数据流指令调度唤醒的多端口内容可访问存储器(CAM)、以及所有这些都是资源密集型的许多宽总线多路复用器和旁路网络。例如,在基于FPGA的实现方式中,多读多写入RAM可能要求复制、多周期操作、时钟倍频、存储体交错、实况值表和其他昂贵技术的混合。
所公开的技术可以通过应用包括高指令级并行(ILP)、无序(OoO)、超标量执行的技术来实现性能增强,同时避免处理器硬件和相关联的软件中的大量复杂度和开销。在所公开的技术的一些示例中,基于块的处理器使用EDGE ISA,该EDGE ISA被设计成用于面积高效且能量高效的高ILP执行。在一些示例中,使用EDGE体系架构和相关联的编译器巧妙处理了许多寄存器重新命名、CAM和复杂度。
在所公开技术的某些示例中,显式数据图执行指令集体系架构(EDGE ISA)包括关于程序控制流的信息,其可以用于有效编码指令块内的控制流指令,从而提高性能、节省存储器资源和/或节约能源。在所公开的技术的某些示例中,EDGE ISA可以在支持主流编程语言(诸如C和C++)的同时,消除对一个或多个复杂体系架构特征的需要,该需要包括寄存器重命名、数据流分析、错误推测恢复和按序收回。基于块的处理器核中的功能资源可以基于可以动态地或静态地确定的性能度量,来被分配给不同的指令块。
公开了用于在基于块的指令集架构处理器中编码控制流指令的装置和方法。包括两个或更多指令的原子指令块不依赖递增或递减程序计数器来确定下一指令。在所公开的技术的一些示例中,指令块被编码成指定一个或多个退出点,该一个或多个退出点确定在当前指令块被执行之后要执行的下一指令块的目标位置。退出点由当前正在执行的指令块的一个或多个谓语的计算值确定。控制逻辑电路将处理器的控制从当前执行的指令块传送到由退出点中的一个确定的目标位置处的下一指令块。控制流指令不限于分支指令,而包括跳转指令、调用指令、返回指令、以及用于改变基于块的处理器中的控制流的其他适当的指令。正在由基于块的处理器执行的基于块的指令的每个线程与指示当前正在执行的指令块的存储器位置的程序计数器(PC)相关联。
因而,所公开的技术的某些示例可以包括通过以隐式方式编码用于特定指令块的退出点中的至少一个以及在一些示例中使用在指令块头部内编码的信息,根据特定实现方式提高代码大小、减少启动下一指令块的执行时的等待时间以及避免分支预测和/或推测执行。
在所公开的技术的一些示例中,指令块内组织的指令被原子提取、执行和提交。块内部的指令按数据流次序被执行,其减少或消除了使用寄存器重命名并且提供节能的OoO执行。编译器可以被用于通过ISA显式编码数据依赖性,从而减少或消除处理器核控制逻辑电路在运行时重新发现依赖性的负担。使用预测执行,块内分支可以被转换成数据流指令,并且除了存储器依赖性之外的依赖性可以被限制为直接数据依赖性。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接传达它们的操作数,从而减少对耗电的多端口物理寄存器文件的访问。
在指令块之间,指令可以使用存储器和寄存器进行通信。因此,通过利用混合数据流执行模型,EDGE体系架构仍然可以支持命令式编程语言和顺序存储器语义,但是理想地EDGE体系架构还能获得具有近乎按次序的功率效率和复杂度的乱序执行的益处。
对于相关领域的普通技术人员而言应当容易理解,所公开技术的实现方式的范围对各种面积和性能折衷是可能的。
III.示例基于块的处理器
图1是可以在所公开的技术的一些示例中实现的基于块的处理器100的框图10。处理器100被配置为根据描述处理器操作的若干个方面的指令集体系架构(ISA)来执行原子指令块,该指令集体系架构包括寄存器模型、由基于块的指令执行的若干个定义的操作、存储器模型、中断和其他体系架构特征。基于块的处理器包括多个处理核110,其包括处理器核111。
如图1所示,处理器核经由核互连120而彼此连接。核互连120在核110中的各个核、存储器接口140和输入/输出(I/O)接口145之间运送数据和控制信号。核互连120可以使用电、光、磁或其他适当的通信技术传送和接收信号,并且可以依据特定的期望配置提供根据若干个不同拓扑排列的通信连接。例如,核互连120可以具有交叉开关、总线、点对点总线链路或其他适当的拓扑结构。在一些示例中,核110中的任一个核可以连接到其他核中的任一核,而在其他示例中,一些核仅连接到其他核的子集。例如,每个核只能连接到最近的4、8或20个相邻核。核互连120可以用于向核并且从核传送输入/输出数据,以及向核并且从核传送控制信号和其他信息信号。例如,每个核110可以接收和传送指示当前正在由各个核中的任一核执行的指令的执行状态的信号。在一些示例中,核互连120被实现为连接核110、一个或多个寄存器文件和存储器系统的导线,而在其他示例中,核互连可以包括用于在一个或多个互连导线、开关和/或路由部件上多路复用数据信号的电路,该路由部件包括有源信号驱动器和中继器、流水线寄存器或其他适当的电路。在所公开的技术的一些示例中,在处理器100内和向处理器100/从处理器100传送的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括用于传送数据的差分信号、脉冲信号或用于传送数据和控制信号的其他适当的信号。
在图1的示例中,处理器的存储器接口140包括接口逻辑,其用于连接到附加存储器,例如,位于除处理器100之外的另一集成电路上的存储器。如图1所示,外部存储器系统150包括L2高速缓存152和主存储器155。在一些示例中,L2高速缓存可以使用静态RAM(SRAM)来实现,并且主存储器155可以使用动态RAM(DRAM)来实现。在一些示例中,存储器系统150被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口140包括直接存储器访问(DMA)控制器,其允许在存储器中传送数据块,而无需使用一个或多个寄存器文件和/或处理器100。在一些示例中,存储器接口管理虚拟存储器的分配,从而扩展可用主存储器155。
I/O接口145包括电路,其用于接收输入和输出信号并且向其他部件发送该输入和输出信号,该其他部件诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,图形处理单元、浮点协处理器、神经网络协处理器、机器学习模型评估器协处理器、物理处理单元、数字信号处理器或其他协处理部件的信号)、时钟信号、信号量或其他适当I/O信号。I/O信号可以是同步的或异步的。在一些示例中,I/O接口的全部或一部分可以结合存储器接口140,使用存储器映射I/O技术来实现。
基于块的处理器100还可以包括控制单元160。控制单元160监管处理器100的操作。可以由控制单元160执行的操作可以包括:分配和解除分配用于执行指令处理的核;控制核中的任一核、一个或多个寄存器文件、存储器接口140和/或I/O接口145之间的输入数据和输出数据。控制单元160还可以处理硬件中断,并且控制读取和写入特殊系统寄存器,例如,存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的一些示例中,控制单元160至少部分地使用处理核110中的一个或多个处理核而被实现,而在其他示例中,控制单元160使用基于非基于块的处理核(例如,通用RISC处理核)而被实现。在一些示例中,控制单元160至少部分地使用以下一项或多项来实现:硬连线有限状态机、可编程微码、可编程门阵列或其他适当的控制电路。在备选示例中,控制单元功能可以由核110中的一个或多个核来执行。
控制单元160包括调度器165,其用于向处理器核110分配指令块。如本文中所使用的,调度器分配是指指令块的引导操作,其包括发起指令块映射、获取、解码、执行、提交、放弃、空闲和刷新指令块。处理器核110在指令块映射期间,被指派给指令块。叙述指令操作阶段是为了说明目的,并且在所公开的技术的一些示例中,某些操作可以被组合、省略、分成多个操作或者被添加附加操作。
调度器165可以用于管理多个软件线程之间的资源的协作和/或竞争,该多个软件线程包括来自不同过程的多个软件线程,这些线程被调度到相同处理器的不同核。在一些示例中,多个线程竞争核资源,并且调度器处理线程之间的资源分配。
控制单元160还包括控制逻辑电路167,其可以被配置为例如将处理器的控制从当前指令块传送到由当前指令块的退出点中的一个所确定的目标位置处的下一指令块点。在一些示例中,控制逻辑电路167被配置为:响应于包括评估用于第一指令块的编码指令的谓语的操作的执行,而将处理器的控制传送到所确定的目标位置,以及将处理器控制传送到所确定的目标位置处的第二指令块。
在一些示例中,控制单元160、调度器165和/或控制逻辑电路167被实现为被耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或基于块的处理器核)上执行的操作系统生成可以被至少部分用于执行控制单元160、调度器165和/或控制逻辑电路167的功能的优先级,预测和其他数据。对于相关领域的普通技术人员而言显而易见的是,在集成电路、可编程逻辑或其他适当的逻辑中实现的其他电路结构可以被用于实现用于控制单元160、调度器165和/或控制逻辑电路167的硬件。
在一些示例中,所有线程以相同的优先级在处理器100上执行。在其他示例中,取决于所指派的优先级,处理器可以(例如,通过在处理器上执行的操作系统或并行运行时间)被配置为指令执行线程的硬件消耗更多或更少的资源。在一些示例中,调度器权衡特定线程的块的性能度量,以便确定处理器资源分配给每个相应线程,该性能度量包括执行线程与其他线程的相对优先级。
基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分发到处理器内的各种部件(例如,核110、互连120、存储器接口140和I/O接口145)。在所公开的技术的一些示例中,所有部件共享公共时钟,而在其他示例中,不同部件使用不同时钟,例如,具有不同时钟频率的时钟信号。在一些示例中,时钟的一部分被门控以便当处理器部件中的一些处理器部件未被使用时,允许功率节省。在一些示例中,使用锁相环(PLL)生成时钟信号,以生成具有固定、恒定频率和占空比的信号。接收时钟信号的电路可以在单个边缘(例如,上升沿)上被触发,而在其他示例中,接收电路中的至少一些电路被上升时钟边缘和下降时钟边缘而被触发。在一些示例中,时钟信号可以被光学地或无线地传送。
IV.示例基于块的处理器核
图2是进一步详述用于基于块的处理器100的示例性微体系架构以及具体地,可以在所公开的技术的某些示例中使用的基于块的处理器核中的一个的实例的框图200。为了便于解释,示例性基于块的处理器核被图示为具有五个阶段:指令获取(IF)、解码(DC)、操作数获取、执行(EX)和存储器/数据访问(LS)。在一些示例中,对于某些指令(诸如浮点运算),各种延迟的各种流水线功能单元可能引起附加流水线阶段。然而,相关领域的普通技术人员应当容易理解的是,可以修改对所图示的微体系架构的修改(诸如添加/移除阶段、执行操作的添加/移除单元以及其他实现方式细节),以适应用于基于块的处理器的特定应用。
如图2所示,处理器核111包括控制单元205,其生成控制信号以调节核操作并且使用指令调度器206和控制逻辑电路207调度和传送指令流。处理器核指令调度器206可以被用于补充或替代处理器级指令调度器165。指令调度器206可以被用于根据与上文关于处理器级指令调度器165所描述的那些技术类似的技术,来控制处理器核111内的指令块的操作。
控制逻辑电路207可以被用于补充或代替控制逻辑电路167。控制逻辑电路207可以被用于根据与上文关于控制逻辑电路167所描述的那些技术类似的技术,来控制处理器核111内的指令块的操作。
在一些示例中,控制单元205、指令调度器206和/或控制逻辑电路207被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或基于块的处理器核)上执行的操作系统生成可以至少部分被用于执行控制单元205、指令调度器206和/或控制逻辑电路207的功能的优先级、预测和其他数据。对于相关领域的普通技术人员而言容易显而易见的是,在集成电路,可编程逻辑或其他适当的逻辑中实现的其他电路结构可以被用于实现控制单元205、指令调度器206和/或控制逻辑电路207的硬件。
示例性处理器核111包括两个指令窗口210和211,每个指令窗口可以被配置为执行指令块。在所公开的技术的一些示例中,指令块是基于块的处理器指令的原子集合,其包括指令块头部和多个一个或多个指令。如将在下文进一步所讨论的,指令块头部包括信息,其可以被用于进一步定义指令块内的多个指令中的一个或多个指令的语义。根据所使用的特定ISA和处理器硬件,还可以在指令的执行期间使用指令块头部,并且通过例如允许尽早和/或稍后获取指令和/或数据、改善分支预测、推测执行、提高能量效率以及改善代码紧凑性,来提高执行指令块的性能。在其他示例中,不同数目的指令窗口是可能的,诸如一个,四个,八个或其他数目的指令窗口。
指令窗口210和211中的每个指令窗口可以从连接到互连总线和指令高速缓存227的输入端口220、221和222中的一个或多个接收指令和数据,该互连总线和指令高速缓存227又连接到指令解码器228。附加控制信号还可以在附加输入端口225上被接收。指令解码器228和229中的每个解码指令块的指令块头部和/或指令,并且将解码后的指令存储在位于每个相应的指令窗口210和211中的存储器存储装置215和216内。
处理器核111还包括耦合到L1(一级)高速缓存器235的寄存器文件230。寄存器文件230存储在基于块的处理器体系架构内定义的寄存器的数据,并且可以具有一个或多个读取端口和一个或多个写入端口。例如,寄存器文件可以包括用于将数据存储在寄存器文件中的两个或更多写入端口,以及具有用于从寄存器文件内的各个寄存器读取数据的多个读取端口。在一些示例中,单个指令窗口(例如,指令窗口210)可以一次只访问寄存器文件的一个端口,而在其他示例中,指令窗口210可以访问一个读取端口和一个写入端口,或者可以同时访问两个或更多读取端口和/或写入端口。在一些示例中,寄存器文件230可以包括64个寄存器,每个寄存器保存32位数据的字。(除非另有说明,否则本申请将把32位数据称为字)。在一些示例中,寄存器文件230中的一些寄存器可以被分配给特定目的。例如,寄存器中的一些可以专用为系统寄存器,其示例包括寄存器,该寄存器存储指示正在被执行的程序线程的当前地址的恒定值(例如,全零字)、一个或多个程序计数器(PC)、物理核号码、逻辑核号码、核指派拓扑、核控制标志、处理器拓扑或其他适当的专用目的。在一些示例中,存在多个程序计数器寄存器、一个或每个程序计数器,以允许在一个或多个处理器核和/或处理器上并行执行多个执行线程。在一些示例中,程序计数器被实现为指定的存储器位置,而非寄存器文件中的寄存器。在一些示例中,系统寄存器的使用可能受操作系统或其他监控计算机指令的约束。在一些示例中,寄存器文件230被实现为触发器阵列,而在其他示例中,寄存器文件可以使用锁存器、SRAM或其他形式的存储器存储装置来实现。给定处理器(例如,处理器100)的ISA规范规定如何定义和使用寄存器文件230内的寄存器。
在一些示例中,处理器100包括由多个处理器核共享的全局寄存器文件。在一些示例中,取决于处理器ISA和配置,与处理器核相关联的各个寄存器文件可以被静态地或动态地组合,以形成更大的文件。
如图2所示,指令窗口210的存储器存储装置215包括若干个解码后的指令241、左操作数(LOP)缓冲器242、右操作数(ROP)缓冲器243以及指令记分板245。在所公开的技术的一些示例中,如图2所示,指令块的每条指令被分解成解码后的指令、左操作数和右操作数以及记分板数据的行。解码后的指令241可以包括作为位级控制信号而存储的指令的部分或完全解码版本。操作数缓冲器242和243存储操作数(例如,从寄存器文件230接收的寄存器值、从存储器接收的数据、在指令内编码的立即操作数、由较早发出的指令计算的操作数或其他操作数值),直到它们相应的解码后的指令已准备好执行。在所图示的示例中,从操作数缓冲器242和243而非寄存器文件读取指令操作数。在其他示例中,可以从寄存器文件230中读取指令操作数。
第二指令窗口211的存储器存储装置216存储与存储器存储装置215相似的指令信息(解码后的指令、操作数和记分板),但是为了简单起见,图2中对此未示出。指令块可以相对于第一指令窗口由第二指令窗口211同时或顺序执行,该第二指令窗口受ISA约束并且由控制单元205引导。
在所公开的技术的一些示例中,前端流水线级IF和DC可以从后端流水线级(IS、EX、LS)解耦。控制单元在每个时钟周期可以获取两个指令并且将其解码到指令窗口210和211中的每个指令窗口中。控制单元205提供指令窗口数据流调度逻辑,以使用计分板245监视每个解码后的指令的输入的就绪状态(例如,每个相应指令的一个或多个谓语和一个或多个谓语操作数)。当特定解码后的指令的所有输入准备就绪时,该指令准备好被发出。然后控制逻辑电路205在每个周期启动一个或多个下一指令(例如,编号最小的就绪指令)的执行,并且其解码后的指令和输入操作数被发送到一个或多个功能单元260以供执行。解码后的指令还可以编码若干个就绪事件,控制逻辑电路205中的调度器接受来自其他源的这些和/或事件,并且更新窗口中其他指令的就绪状态。因此,执行开始进行,以处理器核111的就绪零输入指令、零输入指令所针对的指令等开始。
解码后的指令241不需要以与它们被布置在指令窗口210的存储器存储装置215内的顺序相同次序来执行。相反,指令记分板245被用于跟踪解码后的指令的依赖性,并且当依赖性已被满足时,相关联的各个解码指令被调度执行。例如,当相应指令的相关性已经满足时,可以将对相应指令的引用推送到就绪队列上,并且可以从就绪队列中以先进先出(FIFO)次序来调度指令。存储在记分板245中的信息可以包括但不限于,相关联的指令的执行谓语(诸如,如果谓语位是真或者假,则指令是否正在等待要被计算的谓语位以及指令是否被执行)、操作数对指令的可用性、流水线化的功能单元问题资源的可用性、结果回写资源的可用性或在执行相关联的各个指令之前所需的其他先决条件。
在一个实施例中,记分板245可以包括由指令解码器231初始化的解码后的就绪状态和在指令执行期间由控制单元205初始化的活动就绪状态。例如,解码后的就绪状态可以对相应的指令是否已经被解码进行编码,可能经由广播信道等待谓语和/或某一个或多个操作数,或者立即准备好被发出。主动就绪状态可以对相应的指令是否等待谓语和/或某一个或多个操作数、准备好被发出、或者已经发出来进行编码。解码后的就绪状态可以在块复位或块刷新时清除。在分支到新指令块时,解码后的就绪状态和解码后的活动状态被清除(块或核复位)。然而,当指令块在核上被重新执行时,诸如当它分支回到自身时(块刷新),只有活动就绪状态被清除。块刷新可以立即(当指令块分支到自身时)或者在执行若干个其他介入指令块之后发生。因此可以保留指令块的解码后的就绪状态,以使得不需要重新获取和解码块的指令。因此,块刷新可以被用于节省循环和其他重复程序结构中的时间和能量。
存储在每个指令窗口中的指令数目通常与指令块内的指令数目相对应。在一些示例中,指令块内的指令数目可以是32、64、128、1024或另一数目的指令。在所公开的技术的一些示例中,可以跨处理器核内的多个指令窗口而分配指令块。
可以使用位于处理器核111内的控制单元205来分配和调度指令。控制单元205协调从存储器获取指令、解码指令、一旦指令被加载到相应的指令窗口中就执行、数据流入/流出处理器核111、以及由处理器核输入和输出的控制信号。例如,控制单元250可以包括如上文所描述的用于调度指令的就绪队列。存储在位于每个相应的指令窗口210和211中的存储器215和216中的指令可以以原子方式执行。因此,由执行的指令所影响的可见体系架构状态(诸如寄存器文件230和存储器)的更新可以在核200内本地被缓冲,直到指令被提交为止。控制单元205可以确定何时指令准备好提交、排序提交逻辑并且发出提交信号。例如,指令块的提交阶段可以在缓存所有寄存器写入时开始,到存储器的所有写入都被缓存,并且计算分支目标。指令块可以在对可见体系架构状态的更新完成时被提交。例如,当寄存器写入是作为寄存器文件被写入时,当储器被发送到负载/存储单元或存储器控制器时,并且当生成提交信号时,可以提交指令块。控制单元205还至少部分地控制功能单元260到相应指令窗口中的每个的分配。
如图2所示,具有若干个执行流水线寄存器255的第一路由器250被用于将数据从指令窗口210和211中的任一个发送到功能单元260中的一个或多个,该功能单元260可以包括但不限于,整数ALU(算术逻辑单元)(例如,整数ALU 264和265)、浮点单元(例如,浮点ALU267)、移位/旋转逻辑(例如,桶形移位器268)或其他适当的执行单元,该其他适当的执行单元可以包括图形功能、物理功能和其他数学运算。然后,来自功能单元260的数据可以根据正在被执行的特定指令的要求,通过第二路由器270路由到输出290、291和292、路由回到操作数缓冲器(例如,LOP缓冲器242和/或ROP缓冲器243)、路由到寄存器文件230并且/或反馈回到另一功能单元。第二路由器270包括负载/存储队列275,其可以被用于缓存存储器指令;数据高速缓存277,其存储正在输入到核的数据或正在从核输入到存储器的数据;以及负载/存储流水线寄存器278。因此,路由器270和负载/存储队列275可以通过确保任何存储器的原子的全有或全无的提交(到存储器的写入),通过确保可能已经从核无序发出的存储器最终如同按次序处理一样而被写入到存储器中,以及通过确保可能已经从核无序发出的负载返回对于每个负载的数据,而被用于避免风险,从而即使这种存储早前无序被执行,也反映在逻辑上位于负载之前的存储,而不反映在逻辑上位于负载之后的存储。
核还包括控制输出295,其被用于指示例如何时完成执行指令窗口215或216中的一个或多个指令窗口的所有指令。当完成指令块的执行时,指令块被指定为“已提交”,并且来自控制输出295的信号又可以由基于块的处理器100内的其他核和/或由控制单元160使用,以启动其他指令块的调度、获取和执行。第一路由器250和第二路由器270两者都可以将数据发送回到指令(例如,作为指令块内的其他指令的操作数)。
对于相关领域的普通技术人员应当容易理解的是,单个核200内的部件不限于图2所示的那些部件,但是可以根据特定应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令解码器可以被两个或更多指令窗口共享,并且所使用的功能单元的数目和类型可以根据基于块的处理器的特定目标应用而变化。在选择和分配资源时适用于指令核的其他考虑包括性能要求、能量使用要求、集成电路芯片、工艺技术和/或成本。
对于相关领域的普通技术人员而言容易显而易见的是,通过在处理器核110的指令窗口(例如,指令窗口210)和控制逻辑电路205内设计和分配资源,可以在处理器性能方面做出权衡。面积、时钟周期、能力和限制实质上确定了各个核110的实现性能和基于块的处理器110的吞吐量。
指令调度器206可以具有不同的功能。在某些更高性能的示例中,指令调度器是高度并发的。例如,在每个周期,一个或多个解码器将指令的解码后的就绪状态和解码后的指令写入到一个或多个指令窗口,选择下一指令或多个指令来发出,并且作为响应,后端发送就绪事件:针对特定指令的输入时隙的就绪事件(谓语、左操作数、右操作数等)或针对所有指令的广播就绪事件。每条指令就绪状态位与解码后的就绪状态一起可以被用于确定指令已准备好发出。
在一些情况下,调度器206接受尚未被解码的目标指令的事件,并且还必须禁止重发已发出的就绪指令。在一些示例中,指令可以是非预测的或预测的(基于真条件或假条件)。预测指令直到它被另一指令的谓语结果作为目标并且结果与谓语条件相匹配,它才会变得准备就绪。如果相关联的谓语不匹配,则指令永远不会被发出。在一些示例中,可以推测地发出并且执行预测的指令。在一些示例中,处理器可以随后检查推测发出的和执行的指令被正确地推测。在一些示例中,错误推测发出的指令和消耗其输出的块中的指令的特定传递闭包可以被重新执行,或者错误推测的副作用被取消。在一些示例中,发现错误推测的指令导致完整回滚和重新执行整个指令块。
在分支到尚未驻留在(解码到)块的指令窗口的新指令块时,一个或多个相应的指令窗口就绪状态被清除(块复位)。然而,当指令块分支回到自身(块刷新)时,只有活动就绪状态被清除。因此,可以保留指令块的解码后的就绪状态,以使不需要重新获取并且解码块的指令。因此,块刷新可以被用于节省循环中的时间和能量。
V.示例指令块流
现在转到图3的图300,图示了包括若干个可变长度指令块311-314的基于块的指令流的部分310。指令流可以被用于实现用户应用、系统服务或任何其他适当的用途。在图3所示的示例中,每个指令块以指令头部开始,指令头部之后是不同数目的指令。例如,指令块311包括头部320,十八个指令321以及两个性能度量数据字322。所图示的特定指令头部320包括若干个数据字段,这些数据字段部分地控制指令块内的指令的执行,并且还允许改进的性能增强技术,其包括例如分支预测、推测执行、惰性评估和/或其他技术。指令头部320还包括指示头部是指令头部而非指令的ID位。指令头部320还包括指令块大小的指示。指令块大小可以在比1大的指令组块(例如,包含在指令块内的4指令组块数目)中。换句话说,块的大小除以4(例如,右移两位),以便压缩分配给指定块大小的头部空间。因此,大小值0表示最小的指令块,该指令块是随后是4个指令的块头部。在一些示例中,指令块大小被表达为字节数、字数、作为n字组块数、地址、地址偏移,或者使用用于描述指令块大小的其他适当的表达式来表达。在一些示例中,指令块大小由指令块头部和/或脚部中的终止位模式而指示。
指令块头部320还可以包括执行标志,其指示特殊指令执行要求。例如,根据特定应用,对于某些指令块可以禁止分支预测或存储器依赖性预测。
在所公开的技术的一些示例中,指令头部320包括一个或多个标识位,其指示编码数据是指令头部。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位总是被设置为二进制值1,以指示有效指令块的开始。在其他示例中,不同的位编码可以用于标识位。
块指令头部320还可以包括若干个块退出类型,以供由例如分支预测、控制流确定和/或不良跳转检测使用。退出类型可以指示分支指令的类型例如是顺序分支指令,其指向存储器中的下一连续指令块;偏移指令,其在相对于偏移计算的存储器地址处分支到另一指令块;子例程调用或子例程返回。通过编码指令头部中的分支退出类型,分支预测器可以在相同指令块内的分支指令已被获取和/或解码之前,至少部分地开始操作。
指令块头部320还包括存储掩码,其标识被指派给存储操作的加载存储队列标识符。指令块头部还可以包括写入掩码,其标识相关联的指令块将写入哪个或哪些全局寄存器。在指令块可以完成之前,相关联的寄存器文件必须接收对每个条目的写入。在一些预测执行指令序列与没有写入特定寄存器或者执行特定存储器的流图路径相对应的情况下,NULL指令可以被用于指定不是该路径上需要的一个或多个寄存器写入和一个或多个存储器存储。在一些示例中,基于块的处理器体系架构不仅可以包括标量指令,而且还可以包括单指令多数据(SIMD)指令,其允许在单个指令内使用大量数据操作数来实现操作。
在一些示例中,性能度量数据321包括信息,其可以被用于计算置信度值,该置信度值又可以被用于将相关联的指令块分配给一个或多个处理器核的功能资源。例如,性能度量数据322可以包括基于相关联的指令块311的操作的动态分析和/或静态分析,更有可能执行的指令块中的分支指令的指示。例如,与针对迭代的长立即值而被执行的for循环相关联的分支指令可以被指定为具有被采用的高似然性。还可以在性能度量数据322中指定具有低概率的分支指令。在指令块中编码的性能度量数据还可以使用性能计数器来生成,以收集关于指令块的实际执行的统计。
指令块头部320还可以包括与上文所描述的性能度量数据321类似的信息,但是该信息适合于被包括在头部内。
VI.示例块指令目标编码
图4是描绘了C语言源代码的两个部分410和415及其相应的指令块420和425的示例的图400,其图示了基于块的指令如何可以显示地编码其目标。在该示例中,前两个READ指令430和431分别靶向ADD指令432的右操作数(T[2R])和左操作数(T[2L])。在所图示的ISA中,读取指令是从全局寄存器文件(例如,寄存器文件160)读取的唯一指令;然而任何指令都可以靶向全局寄存器文件。当ADD指令432接收到两个寄存器读取的结果时,它会变成准备就绪并且执行。
当TLEI(测试-小于-等于-立即)指令433从ADD接收到其单个输入操作数时,其会变成准备就绪并且执行。然后测试产生谓语操作数,该谓语操作数在信道1(B[1P])上向监听广播信道的所有指令而被广播,这些指令在该示例中为两个预测分支指令(BRO_T 434和BRO_F 435)。接收到匹配谓语的分支将触发。
还图示了指令块420的依赖性图440,以作为指令节点及其对应的操作数目标455和456的阵列450。这图示了块指令420、对应的指令窗口条目和由指令表示的底层数据流图之间的对应关系。这里解码的指令READ 430和READ 431已经准备好发布,因为它们没有输入依赖性。当它们发出并且执行时,从寄存器R6和R7中读取的值被写入到ADD 432的左操作数缓冲器和右操作数缓冲器中,从而将ADD 432的左操作数和右操作数标记为“就绪”。因此,ADD 432指令变成准备就绪、发给ALU、执行,并且总和被写入TLEI 433的左操作数。
VII.示例基于块的指令格式
图5是图示了指令头部510、通用指令520和分支指令530的指令格式的通用示例的图。指令头部或指令中的每个都根据位数目而被标记。例如,指令头部510包括四个32位字并且从其最低有效位(lsb)(位0)直到其最高有效位(msb)(位127)被标记。如所示出的,指令头部包括写入掩码字段、存储掩码字段、若干个退出类型字段515、若干个执行标志字段、指令块大小字段和指令头部ID位(指令头部的最低有效位)。退出类型字段515包括可以被用于指示在指令块内编码的控制流指令的类型的数据。例如,退出类型字段515可以指示指令块包括以下一项或多项:顺序分支指令、偏移分支指令、间接分支指令、调用指令和/或返回指令。在一些示例中,分支指令可以是用于在指令块之间传送包括相对地址和/或绝对地址并且使用有条件谓语或无条件谓语的控制流的任何控制流指令。除了确定隐式控制流指令之外,退出类型字段515还可以用于分支预测和推测执行。在一些示例中,可以在退出类型字段515中编码多达六种退出类型,并且可以通过例如检查指令块中的控制流指令来确定字段与对应的显式或隐式控制流指令之间的对应关系。
所图示的通用块指令520被存储为一个32位字并且包括操作码字段、谓语字段、广播ID字段(BID)、第一目标字段(T1)和第二目标字段(T2)。对于消费者多于目标字段的指令,编译器可以使用移动指令构建分列(fanout)树,还可以将高分列指令指派给广播。广播支持通过轻量级网络,将操作数发送到核中的任意数目的消费者指令。广播标识符可以在通用块指令520中被编码。
虽然由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域技术人员应当容易理解,即使对于ISA的特定示例,指令字段中的一个或多个指令字段可能偏离特定指令的通用格式。操作码字段指定由指令520执行的一个或多个操作,诸如存储器读取/写入、寄存器负载/存储、加、减、乘、除、移位、旋转、系统操作或其他适当指令。谓语字段指定了指令将执行的条件。例如,谓语字段可以指定值“真”,并且只有当对应的条件标志匹配指定的谓语值时,才执行该指令。因此,谓语字段至少部分地指定真条件或假条件,其与由执行计算谓语结果的第二指令得出的该谓语结果相比较并且定位该指令,以确定第一指令是否应该发出。在一些示例中,谓语字段可以指定该指令总是或永远不会被执行。因此,通过减少分支指令数目,使用谓语字段可以允许目标代码更密集、能量效率提高和处理器性能改善。
目标字段T1和T2指定指令,基于块的指令的结果被发送到该指令。例如,指令时隙5处的ADD指令可以指定其计算结果将被发送到时隙3和10的指令。在一些示例中,结果将被发送到时隙3和10的特定左操作数或右操作数。根据特定指令和ISA,所图示的目标字段中的一个或两个目标字段可以被其他信息替换,例如,第一目标字段T1可以被立即操作数、附加操作码来替换,并且其可以指定两个目标等。
分支指令530包括操作码字段、谓语字段、广播ID字段(BID)、性能度量字段535和偏移字段。操作码和谓语字段在格式和功能上与关于通用指令描述的类似。在一些示例中,偏移可以以四个指令的组为单位来表达,从而扩展了可以在其上执行分支的存储器地址范围。利用通用指令520和分支指令530所示的谓语可以被用于避免指令块内的附加分支。例如,可以根据先前指令的结果(例如,两个操作数的比较)预测特定指令的执行。如果谓语值与所要求的谓语不匹配,则指令不会发出。例如,如果BRO_F(预测假)指令发送了假谓语值,则它就会发出。
应当容易理解,如本文中所使用的,术语“控制流指令”不限于改变程序执行以分支到相对存储器位置,而且还包括跳转到绝对或符号存储器位置、子例程调用、以及返回、以及可以修改执行流的其他指令。在一些示例中,通过改变系统寄存器(例如,程序计数器PC或指令指示器)的值来修改执行流程,而在其他示例中,可以通过修改存储在存储器中的指定位置处的值来改变执行流程。在一些示例中,跳转寄存器分支指令被用于跳转到存储在寄存器中的存储器位置。在一些示例中,子例程调用和返回分别使用跳转和链接以及跳转寄存器指令来实现。
VIII.控制流指令处理的示例
图6是根据所公开的技术的类似于C编程语言的伪代码600的示例,该C编程语言定义了可以被编译成用于基于块的处理器(例如,EDGE体系架构处理器)的指令块的名为“递归”的函数。示例伪代码600将用于讨论图7至图10所图示的示例指令块并且在下文进行进一步详细描述。
如所示出的,伪代码600包括若干个源控制流程语句,其包括while语句、若干个if-then-else语句、若干个返回语句以及for循环语句。如下文进一步所讨论的,在被编译时,源控制流程语句将被用于生成若干个机器代码控制流指令,其包括隐式控制流指令。对于相关领域的普通技术人员而言显而易见的是,所公开的方法和装置的使用不限于图6中描绘的控制语句,但是可以被应用于控制流程语句的其他示例,其包括以任何适当的编程语言表达的源控制流语句。
在图7至图10的以下示例中,包括while循环的伪代码600的第一部分将被编码为第一指令块(IB_1),而包括for循环语句的伪代码的第二部分将被编码为第二指令块(IB_2)。代码分成两个指令块是为了说明的目的,并且根据编译器配置和处理器配置,相同的伪代码600可以被编码为一个、两个、三个或更多指令块。如上文进一步讨论的,指令块中的每个指令块以原子方式被执行和提交(或者在推测执行的情况下被中止)。进一步地,单独的指令不需要以指令被布置在存储器中的顺序次序而被执行,而是一旦它们相关联的依赖性准备就绪并且单独的指令已经被调度用于执行就可以执行。
图7至图10的示例包括指令头部,但是在其他示例中,指令块还可以以不包括指令头部的形式表达。
A.示例谓语DAG
图7是图示了从图6的伪代码600生成的两个指令块(IB_1和IB_2)的谓语有向无环图(DAG)的图700。如指令块1的谓语DAG 710所示,存在四个谓语节点720至723。谓语节点720至723中的每个谓语节点与伪代码600中的谓语(例如,n<=num;p==假,等)相关联,并且将评估为布尔真值或布尔假值,该布尔真值或布尔假值由在谓语DAG 710中示出的被标记为“T”/“F”的边缘指示。谓语DAG 710中还示出了表示指令块内的用于向下一指令块传送控制的控制流指令的若干个退出点730、731和732。因为对于谓语DAG 710只有一个谓语集合可以被满足,所以对于指令块的任何特定迭代,可以仅采取退出点730至732中的一个退出点。
如所示出的,存在针对在执行指令块期间计算的谓语值的任意组合所定义的退出点。与调用指令相对应的退出点(731)中的一个退出点可以通过两个不同的谓语边缘740和741到达。因此,当且仅当(1)n小于或等于num(谓语720)并且(2)p为真且r为假(谓语721和723)或p为假且q为真(谓语721和722)时,针对第一指令块(IB_1)的迭代,到达退出点731。因此,存在两个谓语值组合集合,其导致到达退出点731处的调用并且因此被执行。
退出点中的每个都可以与指令块内的控制流指令相关联,该控制流指令与谓语DAG 710相对应。如所示出的,第一退出点730与到下一指令块IB_2的分支相对应。第二退出点与调用控制流指令(在这种情况下,返回到指令块IB_1)相对应,并且第三退出点732与返回控制流指令相对应。对于相关领域的普通技术人员而言,应当容易理解,可以使用多种技术来实现调用和返回指令,例如,在寄存器中传入和传出参数并且将‘返回地址’(例如,包含调用返回之后的调用函数的继续的块)保存在链路寄存器中或者使用堆栈帧,以便传递变量并且在调用子例程和从子例程返回时,保留调用指令块位置。
第二指令块(IB_2)也具有谓语DAG 750。谓语DAG 750包括具有条件i<n的一个谓语节点760。谓语DAG 750具有两个退出点770和771。第一退出点770与返回控制流语句相对应,而第二退出点771是返回到同一指令块(IB_2)的分支语句。
因为根据本公开的基于块的ISA对指令块内的谓语DAG的方面进行编码,所以这些方面可以被用于根据所公开的技术的特定实现方式提高性能、减少由指令消耗的存储器并且改善分支预测。
B.指令块IB_1和IB_2的第一示例机器代码
图8是根据所公开的技术的一个示例的、表示由上文所讨论的伪代码600生成的指令块IB_1和IB_2的机器代码的图800。指令块IB_1 810包括指令数据的24个字(其包括指令头部820的四个32位字)、基于块的指令830的17个字、以及三个未使用的字840。指令头部820包括与指令块810内的分支相对应的三个退出类型的指示,该三个退出类型的指示包括指示与调用指令835、返回指令836和到偏移指令837的分支相对应的控制流指令的类型的调用、返回和偏移。因为指令块的大小在所图示的ISA中的四字组块之内,所以存在三个未使用的字840。控制流指令835、836、837中的每个控制流指令的执行根据对应的谓语的评估(例如,根据图7的DAG 710中的谓语节点)来预测。
指令块IB_2 850包括四字指令头部860以及指令870的十二个字。指令块IB_2的指令头部860指示两种退出类型(即,返回和偏移)。这些退出类型与分支指令875和返回指令876相对应。应当理解,任何特定指令块内的单独指令(例如,指令830和870)不一定根据其存储器位置排序而按顺序次序执行,而是一旦在其相关联的依赖性、操作数和谓语被计算并且可用时,就立即执行。因此,所图示的指令930和870的执行次序不依赖于具有指向指令块内的各个指令的程序计数器。换句话说,程序计数器被用于指示哪个指令块正在执行,而不是指示指令块内的任何单个指令是否正在执行。
C.用于指令块IB_1和IB_2的第二示例机器代码
图9图示了可以在所公开的技术的某些示例中使用的用于图6的伪代码600的指令块IB_1和IB_2的机器代码的备选示例。如所示出的,指令块IB_1 910的机器代码包括指令头部920以及包括调用指令935和返回指令936的若干个指令930。即使只有两个显式编码的控制流指令,也在指令块头部920中对三种退出类型(调用、返回和顺序)进行编码。因此,一旦执行指令块IB_1的处理器核指令窗口已经确定调用指令935和返回指令936都不会执行,则可以执行到存储器中下一指令块的隐式顺序分支。在所图示的示例中,顺序分支被定义为到等于当前程序计数器加上与指令块IB_1 910的大小相对应的四字偏移的程序计数器地址的分支。因此,如果调用指令935和返回指令936都不执行,则程序计数器将被更新到地址0x001000014(存储器中的顺序地下一指令块IB_2 950的机器代码的起点)。因此,通过在编码指令块910时消除对显式分支指令837的编码,在编码指令块IB_1时可以保存存储器的四个字。
类似于图8中所示的指令块的机器代码,指令块IB_2 950包括指令头部960和若干个指令970(其包括分支指令975和返回指令976)。
在所公开的技术的一些示例中,执行指令块IB_2109的指令窗口的控制逻辑电路可以评估用于显式控制流指令的谓语,并且基于被计算且被确定为不会在特定迭代中采取的那些的所有谓语,指令窗口可以确定隐式控制流指令要被执行。在一些示例中,隐式控制流指令的谓语可以以其他方式(例如,通过在指令头部920中编码对应的谓语,或者通过将谓语存储在寄存器或存储器中)编码。
D.指令块IB_1和IB_2的第三示例机器代码
图10是图示了可以在所公开的技术的某些示例中实践的指令块编码的备选示例的图1000。在图10中描绘的机器代码基于上文关于图6所讨论的伪代码600。如图10所示,存在第一指令块1010,其包括指令头部1020以及包括隐式控制流指令1035和1037的若干个指令1030。图10是第二指令块1050,其包括指令头部1060以及包括分支指令1075的若干个指令1070。还示出了未使用数据1076的一个字。
在图1000的示例中,已经配置了根据所公开的技术的基于块的处理器,以使得消除的显式分支指令被确定为返回指令(而非图9的示例中的顺序分支指令)。因此,到指令块IB_2的分支1037被显式编码,而返回指令则未被显式编码。在一些示例中,隐式控制流指令的编码至少部分地基于被存储在指令块头部中的信息(例如,图1000中描绘的退出类型信息)。在其他示例中,基于块的处理器可以在运行时间静态或动态被配置,以定义隐式控制流指令的行为。在头部中编码的隐式控制流指令信息还可以例如由分支预测和推测执行硬件而被使用,以便当执行被编码的指令块时进一步提高性能和/或节省能量。
附加分析可以由处理器执行,以确定控制流正被传送到的指令块的适当的退出点。例如,在块具有单个后继块的情况下,处理器可以基于指令头部中的信息将控制流传递到下一块。这允许将不可预测的分支指令移除到下一指令块。
在其他示例(例如,可以分支到同一指令块或者分支到下一指令块的循环块)中,可以由处理器应用预测的指令可达性分析,来确定下一指令块。具体地,当指令块提交并且其下一分支发生时,首先处理器确定写入掩码中的所有写入、存储掩码中的所有存储以及一个控制流指令的执行已经发生。因此,一般而言,处理器核继续按数据流次序发出指令,直到不再有指令发出为止。
在一些示例中,处理器的附加分析被用于确定将要采取指令块的哪个退出点。例如,指令块可以包括多个谓语,其中一些谓语可以直接或间接地预测执行调用或返回。在这样的示例中,谓语评估自身根据先例谓语来预测。在这种情况下,针对指令块的该实例,不会对一些谓语进行评估。在一些示例中,指令可以是用于预测该块中的任何数目的其他指令的目标。在一些示例中,条件分支指令不一定被直接预测。例如,尽管可以对其分支目标地址操作数进行评估,但是不能对有条件间接分支进行预测。
这些问题可以以若干适当方式来解决。例如,如果正在执行的块没有可发出的指令,并且正在等待所发出的指令没有响应(例如,由于负载响应或长等待时间浮点单元(FPU)响应,或者因为块的数据流执行结束,并且没有执行分支),那么处理器可以确定指令块是否与默认分支目标(例如,下一个顺序块)相关联,然后将控制传送到目标位置(例如,该下一个顺序块)。
在一些示例中,扩展谓语目标字段编码,以使得能够将退出字段定位在指令块分支头部中。在一些示例中,指令块头部定义指定默认的下一个目标位置(例如,“BRO.T/F 0”(例如,如循环中一样分支到自身))“BRO.T/F下一个顺序块”的谓语目标字段编码值。
在所公开的技术的一些示例中,可以按照如下方式确定将要采取的退出点的确定。当获取指令块时,控制流程图由控制逻辑电路构成,并且控制流指令中的至少一部分被分析并且被动态地指派给三个类别:被采取的分支(分支将被采取)、未被采取的分支(该分支不能用于该指令块的执行实例)、或者不知道分支(在确定数据流和预测是否会导致分支发出之前进一步执行该块)。当最初构造控制流程图时,控制流指令将通常被指派为不知道分支,然后随着在指令块的执行继续进行时计算谓语,可以将各个分支重新指派给被采取或未被采取的分支类别。
在对指令问题和谓语进行评估时,在块的该特定执行实例中发现由评估为错误值的谓语所针对的指令及其它们所针对的指令为“未被预测的”。“未被预测的”分支指令可以被添加到未被采取的分支集合。一旦块的执行导致发出足够的指令来将未被采取的集合大小增长到N-1项,则确定在块头部退出类型中声明的剩余分支发生。
IX.传送控制流程的示例方法
图11是概述在指令块之间传送控制流的示例方法的流程图1100,该方法可以使用根据所公开的技术的基于块的指令集体系架构处理器而被执行。基于块的ISA处理器可以耦合到存储器并且包括一个或多个处理器核,该一个或多个处理器核被配置为从存储器获取指令块并且执行指令块中的当前一个指令块。当前指令块被编码成指定一个或多个退出点,以确定在当前指令块被执行之后要执行的下一指令块的目标位置。例如,尽管所公开的技术不限于那些说明性示例,但是上文关于图7至图10所讨论的机器代码可以被用于编码退出点。
在过程框1110,获取并且解码指定确定下一指令块的目标位置的一个或多个退出点的当前指令块。例如,处理器级或核级调度器可以被用于将指令块映射、获取和解码到处理器核的指令窗口。一旦当前指令块已经被获取并且被解码,该方法就继续进行到过程框1120。
在过程框1120,使用例如在基于块的处理器核内的控制逻辑电路,将基于块的处理器的控制从当前执行的指令块传送到下一指令块。在一些示例中,控制逻辑电路利用指定指令块头部中的退出点的信息来确定存储器中的下一指令块及其对应的目标位置。在一些示例中,该方法包括:评估指令块的谓语,并且基于所评估的谓语和在指令头部中编码的退出点信息,控制逻辑电路确定要执行隐式控制流指令。在一些示例中,隐式控制流指令是顺序分支指令,即当前正在执行的线程的控制流将被传送到存储器中的下一指令块(存储器中当前执行的指令块的上方或下方)。
在所公开技术的一些示例中,当前指令块包括比当前指令块的退出点数目少的至少一个控制流指令。因此,指令块可以用更少的显式控制流指令来编码。在一些示例中,控制逻辑电路被配置为将处理器线程的控制传送到不是由目前正在执行的指令块内的任何控制流指令所指示的目标位置。在一些示例中,该装置还包括核调度器,其用于将指令块映射到相应的处理器核。核调度器可以被配置为至少部分地基于在指令头部中编码的退出类型信息,来推测地执行控制流指令。
虽然顺序分支指令(例如,到存储器中的连续指令块的分支)是可以被执行的隐式控制流指令的一个示例,但是该方法不限于此,并且该方法可以与任何适当的控制流指令一起使用,这些适当的控制流指令包括分支指令、跳转指令、过程调用和/或过程返回。对于相应的控制流指令中的一个或多个,控制流指令可以是有条件的、基于谓语的或是无条件的。控制流指令可以将其对应的目标位置指示为相对地址、绝对地址或被存储在寄存器或存储器中的地址参考。在一些示例中,控制逻辑电路使用搜索树,来评估显式控制流指令的依赖性,以确定隐式控制流指令何时将被执行。因为指令块依赖性的至少一部分可以在指令块内进行编码,所以处理器资源可以避免被用于确定传统CPU体系架构中的这种依赖性的时间和能量中的至少一些。
X.控制流指令的隐式编码的示例方法
图12是概述了如根据所公开的技术的将控制流从当前指令块传送到下一指令块的示例方法的流程图1200,该方法可以使用基于块的指令集体系架构处理器而被执行。例如,图1的基于块的处理器可以实现由流程图1200概述的示例方法。尽管所公开的技术并不限于机器代码指令块的那些说明性示例,但是上文关于图7至图10所讨论的机器代码可以被用作本示例方法的指令块。
在过程框1210,该方法获取当前指令块,该当前指令块包括指定当前指令块的一个或多个退出点的编码。例如,处理器级控制单元160或处理器核级控制单元205可以被用于映射、获取和解码当前指令块。当前指令块的存储器位置由程序计数器指定,其指示当前指令块所在的存储器中的地址。指令块被获取并且解码到处理器核的一个或多个指令窗口,并且该获取和解码可以继续,直到整个指令块已被获取和解码为止。一旦获取当前指令块,则该方法继续进行到过程框1220。
在过程框1220,分析在指令块中(包括在指令块头部和/或指令块的基于块的指令内)被编码的退出类型信息。该信息可以以若干种方式被编码,上文关于图7至图10对其示例进行了讨论。例如,退出类型信息可以在头部内被编码为指示在指令块的指令内编码的不同的控制流指令类型。进一步地,在指令块内编码的控制流指令还可以被用于通过例如分析控制流指令的操作码,来确定退出类型。在一些示例中,指令块具有比退出点数目少的控制流指令。考虑到控制流指令(例如,到存储器中的下一指令块的顺序分支),基于块的处理器可以使用退出类型信息来确定隐式控制流指令。存储器中的下一指令块可以是存储器中当前执行的指令块附近的指定位置(在存储器中更高或更低)。一旦已经分析退出类型信息,该方法继续进行到过程框1230。
在过程框1230,分析在指令头部和/或指令块的指令中编码的谓语信息。例如,可以分析谓语信息以确定必须评估哪些与谓语相关联的值以及确定哪些值,以便确定指令块的哪个退出点将被用于指令块的当前迭代。在过程框1230分析的谓语信息可以被缓存在耦合到处理器核的存储器中,或者暂时被存储,直到相关联的谓语的值是已知的。在分析谓语信息后,该方法继续进行到过程框1240。
在过程框1240,评估与来自过程框1230的经分析的谓语信息相关联的谓语值,以便标识与退出点相关联的控制流指令。因此,如果谓语值不与指令块的任何显式控制流指令相对应,则该方法可以确定要执行隐式控制流指令。隐式控制流指令自身可以以若干种方式来确定。例如,如果在指令头部中编码的退出类型中的一个不与显式编码的指令相对应,则隐式控制流指令与在头部中编码的剩余退出类型相对应。在其他示例中,隐式控制流指令可以由处理器的特定配置通过从表中读取值来确定、通过由执行应用的程序员或用户创建的数据来确定、或者在用于指令块的总体顺序的头部内被编码。一旦隐式控制流指令已被标识,该方法继续进行到过程框1250。
在过程框1250,更新基于块的处理器的程序计数器,以便将指令块序列的控制流传送到下一指令块。下一指令块由在过程框1240标识的隐式控制流指令而被标识。在一些示例中,基于块的处理器的寄存器文件包括指定的一个或多个程序计数器,其可以与若干个指令块执行线程中的每个相对应。在其他示例中,一个或多个程序计数器作为值被存储在基于块的处理器的存储器地址空间的一部分中。在其他示例中,对于相关领域的普通技术人员而言,应当容易理解,可以使用用于实现程序计数器的附加技术。在程序计数器已经被更新之后,被指定为下一块的指令块可以被映射、获取、解码和执行。在一些示例中,可以更新程序计数器,并且执行推测地开始,而在其他示例中,在更新程序计数器之前,处理器控制器等待,直到当前指令块已经提交为止。
在所公开的技术的一些示例中,至少部分地通过构建DAG来分析谓语信息,该DAG包括关于指令块的控制流的信息、对应的谓语以及被评估以确定谓语的值。在一些示例中,该DAG通过编译器被静态地分析和构造为发出指令块的机器代码的一部分。在其他示例中,当执行一系列指令块时,动态生成DAG的至少一部分。
因而,所图示的和类似的方法的执行允许通过以隐式方式编码特定指令块的退出点中的至少一个并且在一些示例中使用在指令块头部内编码的返回类型或其他信息,根据特定实现方式提高代码大小,减少启动下一指令块的执行的等待时间,并且避免分支预测和/或推测执行。
XI.发出编码指令块的示例方法
图13是图示了根据所公开的技术的发出指令块的示例方法的流程图1300。图13的方法可以使用例如通过用通用处理器或基于块的ISA处理器执行计算机可读指令来被执行。
在过程框1310,在适当处理器上运行的编译器程序接收要被变换为机器代码的代码。例如,代码可以是人类可读的源代码(诸如图6的伪代码600)、或由编译器或汇编器产生的中间语言代码。在接收到要被编译的代码之后,该方法继续进行到过程框1320。
在过程框1320,针对一个或多个指令块发出机器代码(目标代码)以供由基于块的处理器执行。所发出的指令块包括根据基于块的处理器ISA在指令块内编码的一个或多个退出点。在一些示例中,所发出的指令块中的至少一个指令块包括比相应指令块的退出点数目少的一个分支指令。例如,所发出的指令块可以包括具有退出类型代码的指令编辑器,以指示暗示的控制流指令的存在。在一些示例中,该方法包括:评估用于接收到的代码的谓语DAG,以便确定在谓语DAG内是否存在共享的退出点,并且因此确定用于消除显式控制流指令的候选。在一些示例中,该方法包括:标识某些类型的控制流指令,该控制流指令例如是到可以被编码为隐式控制流指令的下一指令块的顺序分支指令。
在过程框1320发出的指令块可以被存储在一个或多个计算机可读存储介质或设备中,以供随后由基于块的处理器执行。在一些示例中,控制流指令中的至少一个具有未被特定指令块内的分支指令中的任一所指定的目标位置。在一些示例中,用于指令块中的至少一个的指令头部内编码的分支退出类型被编码,以指示隐式控制流指令。例如,可以使用适当的代码(例如,三位代码“010”)在指令头部的位31至14内编码分支退出类型。在一些示例中,该方法包括:分析用于指令块中的至少一个指令块的谓语图,以确定重复的退出点并且消除所发出的代码中的重复退出点中的至少一个。因此,所发出的代码包含比指令块的退出点数目少的至少一个分支指令。图7至图10的指令块中的任一指令块可以使用流程图1300中概述的方法来发出。XII.示例计算环境
图14图示了适当计算环境1400的通用示例,其中可以实现包括在基于块的处理器中执行的所描述的实施例、技巧和技术。例如,计算环境1400可以通过处理器核实现具有所公开的退出类型的指令块的执行,或者根据本文中所公开的方案中的任一方案来发出具有所公开的退出类型的指令块。
计算环境1400不旨在对于技术的使用范围或功能提出任何限制,因为技术可以在不同的通用或专用计算环境中实现。例如,所公开的技术可以用包括手持式设备、多处理器系统、可编程消费电子装置、网络PC、小型计算机、大型计算机等在内的其他计算机系统配置来实现。所公开的技术还可以在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以位于本地存储器存储设备和远程存储器存储设备中。
参照图14,计算环境1400包括至少一个基于块的处理单元1410和存储器1420。在图14中,这个最基本的配置1430被包括在虚线内。基于块的处理单元1410执行计算机可执行指令并且可以是真实处理器或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,以这种方式,多个处理器可以同时运行。存储器1420可以是易失性存储器(例如,寄存器、高速缓冲、RAM),非易失性存储器(例如,ROM、EEPROM、闪存等)或这两者的一些组合。存储器1420存储例可以实现在本文中所描述的技术的软件1480,图像和视频。计算环境可能有其他特征。例如,计算环境1400包括存储器1440、一个或多个输入设备1450、一个或多个输出设备1460以及一个或多个通信连接1470。诸如总线、控制器或网络之类的互连机构(未示出)互连计算环境1400的部件。通常,操作系统软件(未示出)为计算环境1400中执行的其他软件提供操作环境,并且协调计算环境1400的部件的活动。
存储器1440可以是可移除的或不可移除的,并且包括可以被用于存储信息并且可以在计算环境1400内被访问的磁盘、磁带或盒式磁带、CD-ROM、CD-RW、DVD或任何其他介质。存储装置1440存储用于软件1480的指令、插件数据和消息,其可以被用于实现本文中所描述的技术。
一个或多个输入设备1450可以是触摸输入设备,诸如键盘、小键盘、鼠标,触摸屏显示器、笔或轨迹球、语音输入设备、扫描设备或向计算环境1400提供输入的另一设备。对于音频,一个或多个输入设备1450可以是接受模拟或数字形式的音频输入的声卡或类似设备,或者向计算环境1400提供音频样本的CD-ROM读取器。一个或多个输出设备1460可以是显示器打印机、扬声器CD刻录机或提供来自计算环境1400的输出的另一设备。
一个或多个通信连接1470允许通过通信介质(例如,连接网络)到另一计算实体的通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频或经调制的数据信号中的其他数据之类的信息。一个或多个通信连接1470不限于有线连接(例如,兆位或千兆位以太网、无线宽带、电连接或光纤连接上的光纤通道),其还包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)以及用于为所公开的代理,网桥和代理数据消费者提供网络连接的其他适当的通信连接。在虚拟主机环境中,一个或多个通信连接可以是由虚拟主机提供的虚拟化网络连接。
所公开的方法的一些实施例可以使用在计算云1490中实现所公开的技术的全部或一部分的计算机可执行指令来执行。例如,所公开的编译器和/或基于块的处理器服务器位于计算环境1430中或所公开的编译器可以在位于计算云1490中的服务器上执行。在一些示例中,所公开的编译器在传统中央处理单元(例如,RISC或CISC处理器)上执行。
计算机可读介质是可以在计算环境1400内被访问的任何可用介质。作为示例而非限制,利用计算环境1400,计算机可读介质包括存储器1420和/或存储装置1440。应当容易理解,术语计算机可读存储介质包括用于诸如存储器1420和存储装置1440之类的数据存储装置的介质,而不包括诸如经调制的数据信号的传输介质。
XIII.所公开的技术的附加示例
按照上文所讨论的示例,本文中所讨论所公开的主题的附加示例。
在所公开的技术的一个示例中,一种装置包括基于块的指令集体系架构(ISA)处理器。该装置还包括存储器;一个或多个处理器核,其被配置为从存储器获取多个指令块并且执行多个指令块中的当前指令块,该当前指令块具有若干个一个或多个退出点;以及控制逻辑电路,其被配置为将处理器的控制从当前指令块传送到由当前指令块的退出点中的一个退出点确定的目标位置处的下一指令块。
在该装置的一些示例中,当前指令块包括比当前指令块的退出点数目少的至少一个控制流指令。在一些示例中,控制逻辑电路被配置为将处理器的控制传送到目标位置处的下一指令块,其中目标位置不是由当前指令块中的控制流指令编码的。在一些示例中,控制逻辑电路被配置为确定目标位置在紧接着在当前指令块之后的地址。在一些示例中,控制逻辑电路被配置为至少部分地基于在用于当前指令块的指令头部中编码的退出类型信息来确定下一指令块的目标位置。在一些示例中,该装置还包括核调度器,其被配置为映射指令块以供在处理器核中的相应处理器核上执行,该核调度器被配置为至少部分地基于退出类型信息来推测地执行至少一个控制流指令。
在该装置的一些示例中,当前指令块包括相较于当前指令块的退出点数目而言较少的至少一个控制流指令,该较少的至少一个控制流指令包括以下至少一项或多项:分支、跳转、过程调用或过程返回。该较少的至少一个控制流指令中的每个控制流指令均有条件地或无条件地基于用于控制流指令中的至少一个控制流指令的谓语,并且该较少的至少一个控制流指令中的每个控制流指令指示目标位置作为相对地址或绝对地址。
在该装置的一些示例中,控制逻辑电路被配置为通过执行以下动作中的至少一个或多个动作来传送处理器的控制:将指示下一指令块的存储位置的值存储在程序计数器寄存器中,发信号通知处理器核中的至少一个处理器核以从被存储在程序计数器寄存器中的目标位置获取指令块,或者将目标位置地址写入存储器位置,并且发信号通知处理器核中的至少一个处理器核以从由存储器位置指定的目标位置获取指令块。在一些示例中,指令块中的指令要根据用于相应指令中的每个指令的依赖性的可用性按次序由处理器核中的相应处理器核执行。
在所公开的技术的另一示例中,一种装置包括基于块的处理器,并且处理器包括一个或多个处理器核,其被配置为从存储器获取指令块并且执行指令块中的至少一个指令块,指令块中的每个指令块被编码成具有一个或多个退出点以确定下一指令块的目标位置;控制逻辑电路,其被配置为响应于操作的执行,将处理器的控制传送到所确定的目标位置,这些操作包括基于评估操作来评估用于在指令块中的第一指令块内编码的指令的一个或多个谓语的操作;将处理器的控制传送到目标位置处的第二指令块的操作,其中目标位置不是由第一指令块中的控制流指令指定的。
在该装置的一些示例中,评估至少部分地基于在指令块中的第一指令块的指令头部中编码的退出类型代码。在一些示例中,第二指令块的目标位置位于存储器中紧接着在第一指令块之前或之后的存储器位置处。在一些示例中,第二指令块的目标位置被确定为第一指令块执行了调用指令,返回指令还是分支指令。在一些示例中,该装置包括核调度器,其用于映射指令块以在处理器核中的相应处理器核上执行,该核调度器被配置为至少部分地基于在指令块中的至少一个指令块的头部中编码的退出类型信息来避免分支预测。
在所公开的技术的另一示例中,一个或多个计算机可读存储介质存储计算机可读指令,该计算机可读指令当由计算机执行时,使得计算机执行方法,该计算机可读指令包括发出一个或多个指令块以供由基于块的处理器执行的指令,指令块中的至少一个指令块包括在指令块内编码的一个或多个退出点,指令块中的至少一个指令块包括比退出点数目少的一个分支指令。
在计算机可读存储介质的一些示例中,指令还包括用于将所发出的指令块存储在一个或多个计算机可读存储介质或设备中的指令。在一些示例中,指令还包括用于编码指令块中的至少一个指令块中的指令头部的指令,指令头部包括一个或多个分支退出类型,其指示未由在指令块中编码的控制流指令中的任一控制流指令指定的至少一个目标位置。
在一些示例中,指令还包括用于在指令块中的至少一个指令块中编码指令头部的指令,指令头部包括一个或多个分支退出类型,其指示与至少一个指令块邻接的下一指令块要作为用于控制流指令的目标位置,该目标位置不是由在指令块中编码的控制流指令中的任一控制流指令指定的。
在一些示例中,指令还包括用于编码指令块中的至少一个指令块中的指令头部的指令,该指令头部包括一个或多个分支退出类型,其指示与至少一个指令块邻接的下一指令块要作为用于控制流指令的目标位置,该分支退出类型在指令头部的位31到14内被编码,并且分支退出类型中的至少一个分支退出类型由三位模式010编码。
在一些示例中,指令还包括用于分析用于指令块中的至少一个指令块的谓语图以确定一个或多个重复退出点并且消除重复退出点中的至少一个重复退出点,从而发出指令块中的至少一个指令块的指令,该至少一个指令块包括比指令块中的至少一个指令块的退出点数目少的至少一个分支指令。
鉴于可以将所公开主题的原理应用到许多可能实施例,应当认识到,所图示的实施例仅是优选的示例,并且不应该被认为是将权利要求的范围限制为那些优选示例。相反,所要求保护的主题的范围由以下权利要求所限定。因此申请人要求落入这些权利要求范围内的所有权利。

Claims (15)

1.一种包括基于块的指令集体系架构(ISA)处理器的装置,所述装置包括:
存储器;
一个或多个处理器核,其被配置为从所述存储器获取多个指令块并且执行所述多个指令块中的当前指令块,所述当前指令块具有若干一个或多个退出点;以及
控制逻辑电路,其被配置为将所述处理器的控制从所述当前指令块传送到由所述当前指令块的退出点中的一个退出点所确定的目标位置处的下一指令块。
2.根据权利要求1所述的装置,其中所述当前指令块包括比用于所述当前指令块的退出点数目少的至少一个控制流指令。
3.根据权利要求1所述的装置,其中所述控制逻辑电路被配置为向所述目标位置处的所述下一指令块传送所述处理器的控制,其中所述目标位置未被所述当前指令块中的控制流指令编码。
4.根据权利要求3所述的装置,其中所述控制逻辑电路被配置为确定所述目标位置在紧接着所述当前指令块之后的地址处。
5.根据权利要求1所述的装置,其中所述控制逻辑电路被配置为至少部分地基于在用于所述当前指令块的指令头部中编码的退出类型信息,来确定所述下一指令块的所述目标位置。
6.根据权利要求5所述的装置,还包括:
核调度器,其被配置为映射所述指令块以供在所述处理器核中的相应处理器核上执行,所述核调度器被配置为至少部分地基于所述退出类型信息,来推测地执行至少一个控制流指令。
7.根据权利要求1所述的装置,其中:
所述当前指令块包括相较于用于所述当前指令块的退出点数目而言较少的至少一个控制流指令,所述较少的至少一个控制流指令包括以下至少一项或多项:分支、跳转、过程调用、或过程返回;
所述较少的至少一个控制流指令中的每个控制流指令有条件地或无条件地基于用于所述控制流指令中的至少一个控制流指令的谓语;以及
所述较少的至少一个控制流指令中的每个控制流指令指示作为相对地址或绝对地址的目标位置。
8.根据权利要求1所述的装置,其中所述控制逻辑电路被配置为通过执行以下动作中的至少一个或多个来传送所述处理器的控制:
将指示所述下一指令块的存储器位置的值存储在程序计数器寄存器中;
发信号通知所述处理器核中的至少一个处理器核,以便从存储在程序计数器寄存器中的目标位置获取指令块;或者
将目标位置地址写入存储器位置,并且发信号通知所述处理器核中的至少一个处理器核,以便从由所述存储器位置指定的目标位置获取指令块。
9.一种包括基于块的处理器的装置,所述处理器包括:
一个或多个处理器核,其被配置为从所述存储器中获取指令块并且执行所述指令块中的至少一个指令块,所述指令块中的每个指令块被编码成具有用以确定下一指令块的目标位置的一个或多个退出点;以及
控制逻辑电路,其被配置为响应于操作的执行,向确定的所述目标位置传送所述处理器的控制,所述操作包括:
用以评估用于在所述指令块中的第一指令块内编码的指令的一个或多个谓语的操作;以及
基于用以评估的所述操作,向所述目标位置处的第二指令块传送所述处理器的控制的操作,其中所述目标位置不是由所述第一指令块中的控制流指令指定的。
10.根据权利要求9所述的装置,其中所述评估至少部分地基于在所述指令块中的所述第一指令块的指令头部中编码的退出类型代码。
11.根据权利要求9所述的装置,其中用于所述第二指令块的所述目标位置位于在紧接着存储器中的所述第一指令块之前或之后的存储器位置处。
12.根据权利要求9所述的装置,还包括:
核调度器,其用于映射所述指令块以供在所述处理器核的相应处理器核上执行,所述核调度器被配置为至少部分地基于在所述指令块中的至少一个指令块的头部中编码的退出类型信息来避免分支预测。
13.一种或多种计算机可读存储介质,其存储计算机可读指令,所述计算机可读指令当由计算机执行时,使得所述计算机执行方法,所述计算机可读指令包括:
用于发出一个或多个指令块以供基于块的处理器执行的指令,所述指令块中的至少一个指令块包括在所述指令块内编码的一个或多个退出点,所述指令块中的所述至少一个指令块包括比退出点数目少的分支指令。
14.根据权利要求13所述的计算机可读存储介质,其中所述指令还包括用于编码所述指令块中的所述至少一个指令块中的指令头部的指令,所述指令头部包括指示至少一个目标位置的一个或多个分支退出类型,所述至少一个目标位置不是由在所述指令块中编码的所述控制流指令中的任一控制流指令指定的。
15.根据权利要求13所述的计算机可读存储介质,其中所述指令还包括用于分析用于所述指令块中的所述至少一个指令块的谓语图以确定一个或多个重复退出点,并且消除所述重复退出点中的至少一个重复退出点,从而发出所述指令块中的所述至少一个指令块的指令,所述指令块包括比用于所述指令块中的所述至少一个指令块的退出点的所述数目少的至少一个分支指令。
CN201680037748.6A 2015-06-26 2016-06-23 用于处理器控制传送的目标位置的确定 Withdrawn CN107810479A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/752,660 US20160378491A1 (en) 2015-06-26 2015-06-26 Determination of target location for transfer of processor control
US14/752,660 2015-06-26
PCT/US2016/038853 WO2016210030A1 (en) 2015-06-26 2016-06-23 Determination of target location for transfer of processor control

Publications (1)

Publication Number Publication Date
CN107810479A true CN107810479A (zh) 2018-03-16

Family

ID=56369216

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680037748.6A Withdrawn CN107810479A (zh) 2015-06-26 2016-06-23 用于处理器控制传送的目标位置的确定

Country Status (4)

Country Link
US (1) US20160378491A1 (zh)
EP (1) EP3314400A1 (zh)
CN (1) CN107810479A (zh)
WO (1) WO2016210030A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109067506A (zh) * 2018-08-15 2018-12-21 无锡江南计算技术研究所 一种基于多滑动窗口并发的轻量级异步消息实现方法
CN110659070A (zh) * 2018-06-29 2020-01-07 赛灵思公司 高并行度计算系统及其指令调度方法
WO2020034753A1 (zh) * 2018-08-14 2020-02-20 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
CN113597597A (zh) * 2019-03-18 2021-11-02 微软技术许可有限责任公司 基于范围的显式数据流处理器和有关的计算机可读介质和方法

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US10108530B2 (en) * 2016-02-24 2018-10-23 Stmicroelectronics (Rousset) Sas Method and tool for generating a program code configured to perform control flow checking on another program code containing instructions for indirect branching
US10795836B2 (en) 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
US10853076B2 (en) * 2018-02-21 2020-12-01 Arm Limited Performing at least two branch predictions for non-contiguous instruction blocks at the same time using a prediction mapping
US11204746B2 (en) * 2020-01-28 2021-12-21 Oracle International Corporation Encoding dependencies in call graphs
US11960596B2 (en) * 2021-03-11 2024-04-16 Xilinx, Inc. Network interface device

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2348305A (en) * 1999-03-24 2000-09-27 Int Computers Ltd Instruction execution mechanism
WO2004001584A2 (en) * 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
US7747992B2 (en) * 2004-08-23 2010-06-29 Intel Corporation Methods and apparatus for creating software basic block layouts
US8433885B2 (en) * 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
CN104011705A (zh) * 2011-12-01 2014-08-27 新加坡国立大学 多形异构性多核架构

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110659070A (zh) * 2018-06-29 2020-01-07 赛灵思公司 高并行度计算系统及其指令调度方法
CN110659070B (zh) * 2018-06-29 2022-04-08 赛灵思公司 高并行度计算系统及其指令调度方法
WO2020034753A1 (zh) * 2018-08-14 2020-02-20 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
US11579885B2 (en) 2018-08-14 2023-02-14 Advanced New Technologies Co., Ltd. Method for replenishing a thread queue with a target instruction of a jump instruction
CN109067506A (zh) * 2018-08-15 2018-12-21 无锡江南计算技术研究所 一种基于多滑动窗口并发的轻量级异步消息实现方法
CN113597597A (zh) * 2019-03-18 2021-11-02 微软技术许可有限责任公司 基于范围的显式数据流处理器和有关的计算机可读介质和方法

Also Published As

Publication number Publication date
EP3314400A1 (en) 2018-05-02
WO2016210030A1 (en) 2016-12-29
US20160378491A1 (en) 2016-12-29

Similar Documents

Publication Publication Date Title
CN107810479A (zh) 用于处理器控制传送的目标位置的确定
CN107810480B (zh) 根据性能度量的指令块分配
CN108027731B (zh) 针对基于块的处理器的调试支持
CN108027769A (zh) 使用寄存器访问指令发起指令块执行
US10452399B2 (en) Broadcast channel architectures for block-based processors
CN108027770A (zh) 用于数据流isa的密集读取编码
US11681531B2 (en) Generation and use of memory access instruction order encodings
CN108027767A (zh) 寄存器读取/写入排序
CN109074260A (zh) 乱序的基于块的处理器和指令调度器
US20170083320A1 (en) Predicated read instructions
CN108027766A (zh) 预取指令块
KR20180021812A (ko) 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐
CN108027768A (zh) 指令块地址寄存器
CN108027732A (zh) 与断言的加载指令相关联的预取
CN108027734B (zh) 空指令的动态生成
CN107810483A (zh) 验证基于块的处理器中的跳转目标
CN108027771A (zh) 基于块的处理器核复合寄存器
CN108027807A (zh) 基于块的处理器核拓扑寄存器
CN108027750A (zh) 乱序提交
CN108027729A (zh) 分段式指令块
CN108027772A (zh) 用于逻辑处理器的不同的系统寄存器
CN108027778A (zh) 与断言的存储指令相关联的预取
CN108027730A (zh) 写入无效
CN110249302A (zh) 在处理器核上同时执行多个程序
CN108027733B (zh) 在目标字段中存储无效

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
WW01 Invention patent application withdrawn after publication

Application publication date: 20180316

WW01 Invention patent application withdrawn after publication