CN110692039A - 在块提交之前的微处理器指令预分派 - Google Patents
在块提交之前的微处理器指令预分派 Download PDFInfo
- Publication number
- CN110692039A CN110692039A CN201880034482.9A CN201880034482A CN110692039A CN 110692039 A CN110692039 A CN 110692039A CN 201880034482 A CN201880034482 A CN 201880034482A CN 110692039 A CN110692039 A CN 110692039A
- Authority
- CN
- China
- Prior art keywords
- instruction
- block
- instructions
- state
- memory
- 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
Links
- 230000015654 memory Effects 0.000 claims abstract description 143
- 238000000034 method Methods 0.000 claims abstract description 69
- 238000005516 engineering process Methods 0.000 description 42
- 238000012545 processing Methods 0.000 description 30
- 238000004891 communication Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 19
- 239000000872 buffer Substances 0.000 description 18
- 230000008901 benefit Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 8
- 230000001976 improved effect Effects 0.000 description 8
- 230000000694 effects Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000007667 floating Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000008685 targeting Effects 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 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
- 230000000295 complement effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003863 physical function Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- 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/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开了基于块的或显式数据图形执行(EDGE)处理器的***和方法,其可以在当前指令块已被提交之前,预分派用于下一指令块的指令。可以将包括指令调度器指令状态和其他译码控制状态的指令状态存储在一个或多个存储器中。作为当前指令块发布的单独指令,用于下一指令块的指令可以被取回、译码,并且生成的指令状态被存储在存储器中当前未使用的指令槽位置。可以推测性地或非推测性地确定下一指令块。在提交第一指令块之前,指令状态被存储在一个或多个当前未使用的指令槽位置中。
Description
背景技术
由于摩尔定律预测的持续晶体管缩放,微处理器已经受益于晶体管计数、集成电路成本、制造资本、时钟频率和能量效率的持续增长,而相关联的处理器指令集架构(ISA)的变化很小。然而,过去40年间推动半导体行业发展的光刻缩放所带来的益处正在减缓甚至逆转。多年来,精简指令集计算(RISC)架构一直是处理器设计中的主要范例。乱序的超标量实现在面积或性能上没有表现出持续的改进。因此,在处理器ISA中有足够的改进机会来扩展性能改进。
发明内容
公开了用于显式数据图形执行(EDGE)处理器和其他基于块的处理器的设备和方法,其可以在当前指令块已被提交之前预取、预译码和/或预分派(predispatch)指令。作为预分派操作的一部分,包括指令调度器指令状态和其他控制状态的译码指令数据可以被存储在一个或多个存储器中。作为当前指令块发布的单独指令,用于下一指令块的指令可以被取回、译码、分派(dispatch),包括将所生成的指令状态存储在当前未使用的指令槽位置处的存储器中。下一指令块可以被推测性地或非推测性地确定。在提交第一指令块之前,指令状态被存储在耦合至指令调度器和/或译码指令存储库的一个或多个存储器中。
在所公开的技术的一些示例中,指令译码器对用于第一指令块的第一指令进行译码,并且将指令状态存储在耦合至指令调度器的存储器的第一部分处。第一指令可以在其相关性被满足后发布。在提交第一指令块之前,用于不同的第二指令块的第二指令的指令状态被译码并存储在存储器的第一部分中,从而覆盖第一指令状态(针对当前发布的第一指令而被生成)。稍后,第一指令块被提交。因此,在提交当前指令块之前,用于下一指令块的指令可以被译码。这可以例如通过减少确定下一指令块、取回下一指令、将下一指令译码以及发布并执行下一指令之间的等待时间来提供改进的性能。在一些示例中,下一指令块被推测性地确定、取回、译码和分派。在一些示例中,指针被维持以指向当前指令块的第一未发布指令,并且仅指针之前的指令块被预取、预译码和/或预分派。然后下一指令块的经分派、经预译码的指令可以清除其已发布的状态位来开始执行。
在所公开技术的一些示例中,基于块的处理器包括:被配置为对当前指令块中的指令进行译码的指令译码器;被配置为在当前指令块内发布单独指令的指令调度器;以及存储当前指令块的指令状态条目的存储器。处理器被配置为在提交当前指令块之前,当指令调度器发布对应的单独指令时,覆盖存储器中当前指令块的单独指令的指令状态条目。
在所公开技术的一些示例中,可以通过接收针对基于块的处理器的源代码、汇编代码或机器代码来发出针对所公开的基于块的处理器的目标代码,从而生成用于执行指令块中的多个指令的顺序,所生成的顺序考虑了基于块的处理器可以在提交指令块之前覆盖指令状态条目,并发出由基于块的处理器可执行的目标代码,目标代码具有根据所生成的顺序布置的至少两个指令。
提供本发明内容以简化形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容既不旨在标识所要求保护的主题内容的关键特征或必要特征,也不旨在用于限制所要求保护的主题内容的范围。本文使用的任何商标均为其相应所有者的财产。根据参考附图进行的下面的详细描述,所公开的主题内容的前述和其他目标、特征和优点将变得更加明显。
附图说明
图1图示了可以在所公开技术的一些示例中使用的、包括多个处理器核的基于块的处理器。
图2图示了可以在所公开技术的一些示例中使用的、基于块的处理器核。
图3图示了可以在所公开的技术的某些示例中使用的多个指令块。
图4图示了源代码的各部分和相应指令块。
图5图示了可以在所公开的技术的一些示例中使用的基于块的处理器报头和指令。
图6是图示基于块的处理器的处理器核的状态的进展的示例的流程图。
图7是概述可以在所公开的技术的一些示例中使用的示例译码器和调度器的框图,示例译码器和调度器用于在块提交之前对指令进行预取和预译码。
图8A-图8D图示了可以在所公开的技术的一些示例中执行的、在块提交之前分派指令的示例。
图9是概述在块提交之前分派编码指令的示例方法的流程图。
图10是概述针对支持在提交之前支持对指令进行预取、预译码和预分派的基于块的处理器生成目标代码的示例方法的流程图。
图11是图示用于实现所公开的技术的一些实施例的合适计算环境的框图。
具体实施方式
I.整体考虑
在不旨在以任何方式进行限制的代表性实施例的上下文中阐述了本公开。
除非上下文另外明确指出,否则在本申请中使用的单数形式“一(a)”、“一个(an)”和“该(the)”包括复数形式。此外,术语“包括(includes)”是指“包括(comprises)”。此外,术语“耦合”涵盖将项耦合或链接在一起的机械、电气、磁、光学以及其他实践方式,并且不排除在所耦合的项之间存在中间元素。此外,如本文所使用,术语“和/或”是指短语中的任何一项或项的组合。
本文所描述的***、方法和装置不应以任何方式解释为限制性的。相反,本公开单独地并且以彼此的各种组合和子组合涉及各种公开的实施例的所有新颖的和非明显的特征和方面。所公开的***、方法和装置不限于任何特定方面或特征或其组合,所公开的事物和方法也不要求存在任何一个或多个特定优点或解决问题。此外,可以彼此以各种组合和子组合来使用所公开的实施例的任何特征或方面。
尽管为了方便呈现以特定的顺序描述了一些所公开的方法中的操作,但是应当理解,除非以下阐述的特定语言要求特定的顺序,否则该描述方式涵盖重新排列。例如,顺序描述的操作在一些情况下可以重新排列或同时执行。此外,为了简单起见,附图可能未示出可以将所公开的事物和方法与其他事物和方法结合使用的各种方式。附加地,描述有时使用如“产生”、“生成”、“显示”、“接收”、“发出”、“验证”、“执行”和“发起”的术语来描述所公开的方法。这些术语是对被执行的实际操作的高级描述。对应于这些术语的实际操作将根据特定的实现而变化,并且可由本领域的普通技术人员容易地辨别。
为了更好的理解,已提供了本文参考本公开的装置或方法呈现的操作理论、科学原理或其他理论描述,并且这些操作理论、科学原理或其他理论描述不旨在限制范围。所附权利要求中的装置和方法不限于以这种操作理论所描述的方式运行的那些装置和方法。
所公开的方法中的一些可以使用存储在一个或多个计算机可读介质(例如,诸如一个或多个光学介质盘的计算机可读介质、易失性存储器组件(包括诸如动态RAM(DRAM)、静态RAM(SRAM)或嵌入式DRAM(eDRAM)的随机存取存储器或诸如某些配置的寄存器、缓冲器或队列的非随机存取存储器)或非易失性存储器组件(诸如,闪存驱动器和硬盘驱动器))上并在计算机(例如,包括智能电话或包含计算硬件的其他移动设备的任何市售计算机)上执行的计算机可执行指令来实现。可以将用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使用的任何数据存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或经由web浏览器访问或下载的软件应用或其他软件应用(诸如,远程计算应用)的一部分。这样的软件可以例如在单个本地计算机(例如,具有在任何合适的市售计算机上执行的通用和/或基于块的处理器)上执行,或者在使用一个或多个网络计算机的网络环境(例如,经由互联网、广域网、局域网、客户端-服务器网络(诸如,云计算网络)或其他这样的网络)中执行。
为清楚起见,仅描述了基于软件的实现的某些选定方面。省略了本领域公知的其他细节。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,可以利用C、C++、Java或任何其他合适的编程语言编写的软件来实现所公开的技术。同样,所公开的技术不限于任何特定的计算机或硬件类型。合适的计算机和硬件的某些细节是众所周知的,并且不需要在本公开中详细阐述。
此外,可以借助合适的通信手段上传、下载或远程访问任何基于软件的实施例(包括例如用于使得计算机执行所公开的方法中的任何方法的计算机可执行指令)。这样的合适的通信手段包括例如互联网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或其他这样的通信手段。
Ⅱ所公开的技术的简介
超标量乱序微架构采用大量电路资源来将寄存器重命名、按数据流顺序调度指令、在未命中推测后清理以及针对精确的异常情况按顺序退回结果。这包括昂贵的能耗电路,诸如,深层的多端口的寄存器文件、用于数据流指令调度唤醒的多端口内容可访问存储器(CAM)以及多个宽总线的多路复用器和旁路网络,所有这些都占用大量资源。例如,基于FPGA的多读取、多写入RAM的实现通常需要复制、多周期操作、时钟加倍、组(bank)交错、有效值表和其他昂贵技术的混合。
所公开的技术可以通过应用包括高指令级并行性(ILP)、乱序(OoO)、超标量执行的技术来实现能量效率和/或性能增强,同时避免处理器硬件和相关联软件中的实质复杂性和开销。在所公开技术的一些示例中,包括多个处理器核的基于块的处理器使用被设计用于在面积和能量方面高效的高ILP执行的显式数据图形执行(EDGE)ISA。在一些示例中,使用EDGE架构和相关联的编译器可以消除许多寄存器重命名、CAM和复杂性的问题。在一些示例中,基于块的处理器的相应核可以存储或缓存可以重复执行的经取回和译码的指令,并且可以重新使用经取回和译码的指令来潜在地实现降低的功率和/或提高的性能。
在所公开技术的某些示例中,EDGE ISA可以消除对一个或多个复杂架构特征(包括寄存器重命名、数据流分析、错误推测恢复和有序退回)的需求,同时支持主流的编程语言(诸如,C和C++)。在所公开技术的某些示例中,基于块的处理器执行多个两个或更多个指令作为原子块。基于块的指令可以用于以更显式的方式表达程序数据流和/或指令流的语义,从而允许改进编译器和处理器的性能。在所公开技术的某些示例中,EDGE ISA包括与程序控制流有关的信息,该信息可以用于改进对不适当的控制流指令的检测,从而提高性能、节省存储器资源和/或节省能量。
在所公开技术的一些示例中,组织在指令块内的指令被原子地取回、译码、执行和提交。由原子指令块内的指令产生的中间结果在本地被缓冲,直到提交指令块为止。当提交指令块时,使得对由于执行指令块的指令而导致的可见架构状态的更新对其他指令块可见。块内部的指令按数据流顺序执行,这减少或消除了使用寄存器重命名的过程,并提供了功率有效的OoO执行。先验编译器或即时(JIT)编译器可以用于借助ISA对数据相关性进行显式地编码,从而减少或消除处理器核控制逻辑在运行时重新发现相关性的负担。使用断言(predicated)执行,可以将块内分支转换为数据流指令,并且可以将除存储器相关性以外的相关性限制为直接数据相关性。所公开的目标格式编码技术允许块内的指令直接经由操作数缓冲器传递其操作数,从而减少对耗电、多端口的物理寄存器文件的访问。
如受益于本公开的相关领域的普通技术人员将容易理解的,具有各种面积、性能和功率折衷的所公开的技术的多种实现是可能的。
Ⅲ示例基于块的处理器
图1是可以在所公开技术的一些示例中实现的基于块的处理器100的框图10。处理器100被配置为根据指令集架构(ISA)执行指令的原子块,指令集架构描述了处理器操作的若干方面,包括寄存器模型、由基于块的指令执行的若干限定的操作、存储器模型、异常模型和其他架构特征。基于块的处理器包括多个一个或多个处理核110(包括处理器核111)。基于块的处理器可以被实现为定制或专用集成电路(例如,包括片上***(SoC)集成电路)、作为现场可编程门阵列(FPGA)或其他可重新配置的逻辑、或作为由物理通用处理器托管的软处理器虚拟机。
如图1所示,处理器核经由核互连120彼此连接。核互连120在各个核110、存储器接口140和输入/输出(I/O)接口150之间承载数据和控制信号。核互连120可以使用电、光、磁或其他合适的通信技术来发射和接收信号,并且可以根据特定的期望配置来提供根据若干不同拓扑布置的通信连接。例如,核互连120可以具有交叉开关、总线、点对点总线或其他合适的拓扑。在一些示例中,核110中的任一个可以被连接到任何其他核,而在其他示例中,一些核仅被连接到其他核的子集。例如,每个核仅可以被连接到最近的4、8或20个相邻核。核互连120可以用于向核传输输入数据,和从核传输输出数据,以及向核传输控制信号和其他信息信号,和从核传输控制信号和其他信息信号。例如,核110中的每一个可以接收和发射指示当前正由相应核中的每一个执行的指令的执行状态的信号量。在一些示例中,核互连120被实现为连接核110和存储器***的导线,而在其他示例中,核互连可以包括用于在(多个)互连导线、开关和/或路由组件上多路复用数据信号的电路装置(包括有源信号驱动器和中继器或其他合适的电路装置)。在所公开技术的一些示例中,在处理器100内传输以及从处理器100传输和/或向处理器100传输的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括差分信号、脉冲信号或用于传输数据的其他合适的信号以及控制信号。
在图1的示例中,处理器的存储器接口140包括用于连接到存储器145的接口逻辑,存储器145例如,位于处理器100之外的另一集成电路上的存储器(例如,存储器可以是静态RAM(SRAM)或动态RAM(DRAM))或与处理器嵌入在同一集成电路中的存储器(例如,嵌入式SRAM或DRAM(eDRAM))。存储器接口140和/或主存储器可以包括缓存(例如,n路或关联缓存)来改进存储器访问性能。在一些示例中,使用静态RAM(SRAM)来实现缓存,并且使用动态RAM(DRAM)来实现主存储器145。在一些示例中,将存储器接口140包括在与处理器100的其他组件相同的集成电路上。在一些示例中,存储器接口140包括允许在不使用(多个)寄存器文件和/或处理器100的情况下传递存储器中的数据块的直接存储器访问(DMA)控制器。在一些示例中,存储器接口140管理虚拟存储器的分配,扩展可用的主存储器145。在一些示例中,在执行存储器同步操作(例如,处理争用问题或在多个不同线程、进程或处理器之间的共享存储器)时,支持将缓存结构设置旁路或确保缓存一致性由存储器接口140和/或相应的缓存结构提供。
I/O接口150包括用于接收输入和输出信号(例如,硬件中断、***控制信号、***接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或其他协处理组件的信号)、时钟信号、信号量或其他合适的I/O信号)并将其发送到其他组件155的电路装置。I/O信号可以是同步的或异步的。在一些示例中,使用存储器映射的I/O技术与存储器接口140相结合来实现I/O接口的全部或一部分。在一些示例中,I/O信号实现不限于全摆幅电数字信号,而是I/O接口150可以被配置为提供差分信号、脉冲信号或用于传输数据的其他合适的信号以及控制信号。
基于块的处理器100还可以包括控制单元160。控制单元160监督处理器100的操作。可以由控制单元160执行的操作可以包括:用于执行指令处理的核的分配和取消分配;控制任何核、寄存器文件、存储器接口140和/或I/O接口150之间的输入数据和输出数据;修改执行流程以及控制取回、译码和分派。控制单元160可以根据表示针对指令块的出口点和控制流概率的控制流和元数据信息来生成和控制处理器。控制单元可以用于控制处理器核110的通用部分之间的数据流。
控制单元160还可以处理硬件中断并且控制特定***寄存器(例如,存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开技术的一些示例中,使用一个或多个处理核110来至少部分地实现控制单元160,而在其他示例中,使用非基于块的处理核(例如,耦合到存储器的通用RISC处理核、FPGA中提供的硬宏处理器块或通用软处理器)来实现控制单元160。在一些示例中,至少部分地使用以下中的一项或多项来实现控制单元160:硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路。在备选示例中,控制单元功能性可以由一个或多个核110执行。
控制单元160包括用于控制处理器核110的指令流水线(pipeline)的调度器165。在其他示例中,调度器可以被布置为使得它们被包含在每个单独的处理器核中。如本文中所使用的,调度器块分配指代指令块的引导操作,包括发起指令块映射、对指令块进行取回、译码、分派、发布、执行、提交、中止、空闲和刷新。
如本文所使用,“取指”是一个高层级术语,它指代在将指令从存储器加载到指令缓存中时所执行的操作。如本文所使用的,“译码”是一个高层级术语,它指代在将经编码的指令转变成用于处理器分派、发布、执行和提交的译码形式时所执行的操作。例如,指令中的各个字段(例如,操作码、左/右/断言目标操作数、广播操作数或输入操作数字段、存储器地址、立即数和/或断言字段)被译码为指令状态以用于处理器分派、发布、执行和提交。如本文中所使用的,“分派”是一个高层级术语,它指代在向指令调度器和/或耦合到指令调度器的组件发送指令状态、以便于在发布之前评估指令的相关性时所执行的操作。通过在先前的块提交之前执行相关联的操作,可以在适当的条件下预取、预译码或预分派针对指令的指令取回、指令译码或指令分派操作中的任何一个或多个操作。例如,当前块的下一指令块可以具有一个或多个指令被预取、预译码和预分派给指令调度器,这是通过将针对下一指令的指令的指令状态存储在已发布当前指令块的对应指令的指令槽中。
此外,指令调度是一个高层级术语,它指代通过硬件调度指令块内指令的发布和执行所执行的操作。例如,基于指令相关性和指示存储器访问指令的相对顺序的数据,控制单元160可以确定指令块中的哪些指令准备好发布并且发起指令的发布和执行。在指令块映射期间将处理器核110分配给指令块。所述指令操作的阶段是出于说明性目的,并且在所公开技术的一些示例中,某些操作可以被组合、省略、分离为多个操作或添加附加操作。调度器165对指令流进行调度,包括分配和取消分配用于执行指令处理的核、控制任何核、寄存器文件、存储器接口140和/或I/O接口150之间的输入数据和输出数据。调度器165可以被配置为在提交当前执行的指令块之前对下一指令块的指令进行预取、预译码和/或预分派,这例如是通过将下一指令的指令状态存储在当前指令块的已发布指令不再占用的指令槽中。
基于块的处理器100还包括时钟发生器170,时钟发生器170将一个或多个时钟信号分配给处理器内的各种组件(例如,核110、互连120、存储器接口140和I/O接口150)。在所公开技术的一些示例中,所有组件共享公共时钟,而在其他示例中,不同组件使用不同的时钟(例如,具有不同时钟频率的时钟信号)。在一些示例中,当不使用处理器组件中的一些时,时钟的一部分被门控,以允许功率节省。在一些示例中,使用锁相环(PLL)来生成时钟信号,以生成固定的、恒定的频率和占空比的信号。可以在单个边沿(例如,上升沿)上触发接收时钟信号的电路装置,而在其他示例中,由上升时钟沿和下降时钟沿来触发接收电路装置中的至少一些。在一些示例中,可以光学或无线地传输时钟信号。
IV示例基于块的处理器核
图2是进一步详细说明用于实现基于块的处理器100的示例微架构200(并且具体地,如可以在所公开的技术的某些示例中使用的,基于块的处理器核之一的实例)的框图。为了便于解释,示例性微架构具有五个流水线阶段,包括:指令取回(IF)、译码和分派(DC)、包括操作数取回的发布(IS)、执行(EX)和存储器/数据访问(LS)。然而,受益于本公开的本领域的普通技术人员将容易理解,可以修改对所示的微架构的修改(诸如,添加/移除阶段、添加/移除执行操作的单元)以及其他实现细节来适用于基于块的处理器的特定应用。
如图2所示,处理器核包括被耦合至指令译码器220的指令缓存210。指令缓存210被配置为从存储器接收基于块的处理器指令。在一些FPGA实现中,指令缓存可以通过双读取端口、双写入端口、18或36Kb(千位)、32位宽的块RAM来实现。在一些示例中,物理块RAM被配置为作为两个或更多个较小的块RAM进行操作。指令译码器220生成指令状态数据,包括调度器数据和指令控制数据。将调度器数据分派到指令调度器并由指令调度器使用来确定指令块中的哪些指令已准备好发布,并选择下一个就绪指令来发布,并且合适的调度器数据的示例可以包括:已译码指令就绪状态、活动指令就绪状态、指令的输入数据或断言操作数的就绪状态、指令发布状态或指令禁止状态。指令控制数据包括表示控制信号的位,控制信号可以用于控制数据路径中的数据处理。在一些示例中,指令控制数据用于控制有限状态机实现。在其他示例中,指令控制数据被用来访问用于生成控制信号的微码实现。
处理器核还包括指令窗口230,指令窗口230包括指令调度器235、译码指令存储库236和多个操作数缓冲器239。在FPGA实现中,这些指令窗口组件230中的每一个都可以实现为包括使用LUT RAM(例如,将SRAM配置为查找表)或BRAM(块RAM)。指令调度器235可以将针对指令的指令标识符(指令ID或IID)作为控制信号发送到译码指令存储库236和操作数缓冲器239。如下面进一步讨论的,指令块中的每个指令具有唯一地标识指令块内的指令的相关联的指令标识符。在一些示例中,用于发送执行指令的结果的指令目标被编码在指令中。以这种方式,可以使用指令标识符而不是监视寄存器相关性来跟踪指令之间的相关性。在一些示例中,处理器核可以包括两个或更多个指令窗口。在一些示例中,处理器核可以包括具有多个块上下文的一个指令窗口。指令标识符可以用于在指令调度器235或译码指令存储库236中索引存储数据的指令槽。例如,当位于当前指令块的特定标识符处的指令发布时,具有相同指令标识符的指令然后可以在当前指令块提交之前,进行预取、译码和分派(包括将指令状态存储在同一指令槽处)。
如将在下面进一步讨论的,微架构200包括寄存器文件290,寄存器文件290存储用于在基于块的处理器架构中限定的寄存器的数据,并且可以具有一个或多个读取端口和一个或多个写入端口。由于指令块基于事务执行,因此指令块实例对寄存器值所做的更改对同一实例不可见;完成指令块执行后,将提交寄存器写入。还应当注意,对于指令块的特定实例,任何指令只能被发布和执行一次。因此,一旦发布或执行了指令,与那些资源相关联的调度和译码器资源实质上未被使用,并且可以将其分配给下一指令块的指令。
示例微架构200还包括硬件剖析器295。硬件剖析器295可以收集关于在处理器上执行的程序的信息。例如,可以(例如,使用诸如寄存器、计数器和其他电路的硬件工具)收集关于事件、函数调用、存储器位置和其他信息的数据,并对其进行分析来确定可以对程序的哪些部分进行优化。
译码指令存储库236存储用于控制处理器流水线中的硬件组件的操作的译码信号。例如,可以将32位指令译码为128位的译码指令控制数据。在取回指令之后,由译码器220生成译码指令控制数据。操作数缓冲器239存储操作数(例如,从寄存器文件接收的寄存器值、从存储器接收的数据、在指令内编码的立即操作数、由较早发布的指令计算的操作数或其他操作数值),直到它们各自的译码指令准备好执行。分别从操作数缓冲器239而不是(至少直接地)从寄存器文件290中读取流水线的执行阶段的指令操作数和断言。指令窗口230可以包括用于指向指令的断言的缓冲器,包括用于通过多个指令将发送给指令的断言组合起来的硬连线或(wired-OR)逻辑。
在一些示例中,除了寄存器读取操作之外,所有指令操作数都从操作数缓冲器239而不是寄存器文件中读取。在一些示例中,保持值,直到指令发布并将操作数传达到执行流水线。在一些FPGA示例中,译码指令存储库236和操作数缓冲器239利用多个LUT RAM来实现。
指令调度器235维持每个译码指令的相关性(例如,指令的断言和数据操作数)的就绪状态的记录。当满足所有指令的相关性(如果存在)时,指令将唤醒并准备发布。在一些示例中,在每个流水线时钟周期选择最小编号的就绪指令ID,并读取其译码指令数据和输入操作数。除了数据多路复用和功能单元控制信号外,在所示的示例中,译码指令数据还可以将就绪事件编码。指令调度器235接收这些事件和/或来自其他源的事件(分别利用多路复用器237和238在输入T0和T1上选择调度器的输入),并更新窗口中其他指令的就绪状态。因此,数据流的执行从指令块的就绪零输入指令开始,然后进行到这些指令所针对的指令,依此类推。由于一些指令不具有相关性,因此它们准备好立即发布(例如,立即移动(movi)指令)。根据ISA、控制结构和其他因素,在一些示例中,译码指令存储库236大约为100位宽,并且包括关于指令相关性的信息,包括指示将哪些(多个)目标指令的活动就绪状态设置为发布指令的结果的数据。
如本文中所使用的,“就绪状态”指代针对给定指令,指示是否以及其哪些操作数(如果存在)已准备好以及指令本身现在是否已准备好发布的处理器状态。在一些示例中,就绪状态包括译码就绪状态和活动就绪状态。通过对(多个)指令进行译码来将译码就绪状态数据初始化。活动就绪状态表示到目前为止,在指令块的当前实例的执行期间,已评估的指令输入操作数集。通过执行例如以相应指令的左、右和/或断言操作数为目标的(多个)指令来设置相应指令的活动就绪状态。
指令窗口230和指令调度器235的属性(诸如,面积、时钟周期和容量)可能对EDGE核的已实现性能和EDGE多处理器的吞吐量产生重大影响。在一些示例中,微架构的前端(IF、DC)部分可以与微架构的后端部分(IS、EX、LS)解耦合地运行。在一些FPGA实现中,指令窗口230被配置为每时钟将两个指令取回并译码到指令窗口中。
指令调度器235具有各种功能性和要求。它可以是高度并发的。在每个时钟周期,指令译码器220将一个或多个指令的译码就绪状态和译码指令数据写入指令窗口230中。在每个时钟周期,指令调度器235选择要发布的下一(多个)指令,并作为响应,后端发送就绪事件,例如,针对特定指令的输入槽(例如,断言槽、右操作数(OP0)或左操作数(OP1))的目标就绪事件,或针对所有等待广播ID的指令的广播就绪事件。这些事件使得每个指令的活动就绪状态位被设置为:与译码就绪状态一起可以被用来发信号通知对应指令已准备好发布。指令调度器235有时接受尚未译码的目标指令事件,并且调度器还可以禁止重新发布已发布的就绪指令。
指令窗口230中的控制电路(例如,使用译码指令存储库236生成的信号)用于生成控制信号,来调节核操作(包括例如控制数据路径和多路复用器选择信号)并调度核内的指令流。这可以包括生成和使用存储器访问指令编码、分配和取消分配用于执行指令处理的核、控制任何核110、寄存器文件、存储器接口140和/或I/O接口150之间的输入数据和输出数据。
在一些示例中,指令调度器235被实现为耦合到另一指令窗口逻辑的有限状态机。在一些示例中,指令调度器被映射到FPGA中的一个或多个RAM组,并且可以利用块RAM、LUTRAM或其他可重新配置的RAM来实现。对于受益于本公开的相关领域的普通技术人员来说明显的是,可以使用以集成电路、可编程逻辑或其他合适的逻辑实现的其他电路结构来实现用于指令调度器235的硬件。在所公开技术的一些示例中,前端流水线阶段IF和DC可以与后端流水线阶段(IS、EX、LS)解耦地运行。
在图2的示例中,操作数缓冲器239将数据操作数(为方便起见,可以将其指定为左操作数(LOP)和右操作数(ROP))经由一个或多个开关(例如,多路复用器241和242)发送给执行状态流水线寄存器245集合。这些操作数也可以分别称为OP1和OP0。第一路由器240用于将数据从操作数缓冲器239发送到一个或多个功能单元250,功能单元250可以包括但不限于整数ALU(算术逻辑单元)(例如,整数ALU 255)、浮点单元(例如,浮点ALU 256)、移位/旋转逻辑(例如,桶形移位器257)或其他合适的执行单元(其可以包括图形功能、物理功能和其他数学运算)。在一些示例中,可编程执行单元258可以被重新配置为实现若干不同的任意功能(例如,先验的或在运行时)。
然后,可以将来自功能单元250的数据借助第二路由器(未示出)路由传送到加载/存储流水线寄存器260集合、路由传送到加载/存储队列270(例如,用于执行存储器加载和存储器存储操作)或反馈到执行流水线寄存器,从而为操作数缓冲器239设置旁路。加载/存储队列270被耦合到将用于存储器操作的数据缓存的数据缓存275。根据在流水线阶段执行的指令,可以将数据缓存275和加载/存储流水线寄存器260的输出发送到第三路由器280,第三路由器280又将数据发送到寄存器文件290、操作数缓冲器239和/或执行流水线寄存器245。
当指令块的执行完成时,指令块被指定为“已提交”,并且来自控制输出的信号又可以被基于块的处理器100内的其他核和/或控制单元160使用,以发起其他指令块的调度、取回和执行。
如受益于本公开的相关领域的普通技术人员将容易理解的,单独核内的组件不限于图2所示的组件,但可以根据特定应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令译码器可以被两个或更多个指令窗口共享,并且所使用的功能单元的数目和类型可以根据基于块的处理器的特定目标应用而变化。在选择和分配具有指令核的资源时适用的其他考虑因素包括性能要求、能源使用要求、集成电路管芯、工艺技术和/或成本。
受益于本公开的本领域的普通技术人员将容易明白,可以通过在处理器核110的指令窗口和控制单元内设计和分配资源来在处理器性能上进行折衷。面积、时钟周期、容量和限制基本上确定了单独核110的已实现的性能以及基于块的处理器100的吞吐量。
受执行指令影响的对处理器的可见架构状态的更新(诸如,对寄存器文件290和存储器的更新)可以在核内进行本地缓冲,直到提交指令为止。控制电路装置可以确定何时准备好提交指令、对提交逻辑进行排序以及发布提交信号。例如,指令块的提交阶段可以在将所有寄存器写入缓冲、将存储器的所有写入(包括无条件和条件存储库)缓冲并计算分支目标时开始。当完成对可见架构状态的更新时,可以提交指令块。例如,当将寄存器写入写入寄存器文件、将存储库发送到加载/存储单元或存储器控制器并生成提交信号时,可以提交指令块。控制电路还至少部分地控制功能单元到指令窗口的分配。
在一些示例中,基于块的指令可以是非断言的,或者是断言的真或假的。断言指令只有在另一指令的断言结果将其作为目标,并且该结果与断言条件匹配时,才能准备就绪。如果指令的断言不匹配,则指令将永远不会发布。
在不允许在提交之前进行指令预取或译码的基于块的处理器中,在分支到新的指令块时,所有指令窗口就绪状态(存储在指令调度器235中)被闪存清除(块复位)。当块分支回到自身(块刷新)时,仅清除活动就绪状态;保留译码就绪状态,使得无需对块的指令进行重新取回和译码。因此,刷新可以用于节省循环时间和能量,而不是执行块复位。
在允许指令预取和译码的所公开技术的示例中,在逐个指令的基础上清除或覆盖状态就绪的指令窗口。因此,由于在当前指令块提交之前对下一指令块的指令进行取回和译码,可以在逐个指令的基础上将用于保持指令调度器和译码指令控制状态的存储写入已发布的指令槽中。在一些示例中,基于块的处理器可以被配置为在预取/预译码/预分派模式与另一模式(其中在块提交之后将整个块复位)之间交替。例如,***寄存器、存储器映射的硬件位置、特定指令或指令报头可以存储有关处理器或特定指令块是否可以使用预取和预译码进行操作的指示。
由于一些软件关键路径包括相关指令的单个链(例如,指令A以指令B为目标、而指令B又以指令C为目标),因此通常期望数据流调度器不添加流水线泡(bubble)来用于连续指令唤醒。在这种情况下,假设这不会严重影响时钟频率,则IS阶段“就绪-发布-目标-就绪”流水线重复应在一个周期内完成。
诸如ADD的指令具有一个周期的等待时间。利用EX阶段的结果转发,即使在指令完成之前,调度器也可以在IS阶段唤醒其目标的指令。其他指令结果可以等待ALU比较、需要多个周期或未知的等待时间。这些指令等待,直到稍后唤醒其目标。
最后,调度器设计可以跨一系列EDGE ISA进行扩展。在一些示例中,每个流水线周期可以接受从一个到四个译码指令和从两个到四个目标就绪事件,并且每个周期发布一个到两个指令。
可以使用若干不同的技术来实现异常事件处理程序231和指令调度器235。例如,调度器235可以被实现为并行调度器,其中指令的就绪状态以D类型触发器(FF)显式表示,并在每个周期重新评估每个指令的就绪状态。
寄存器文件290可以包括用于在寄存器文件中存储数据的两个或更多个写入端口,并且具有用于从寄存器文件内的各个寄存器读取数据的多个读取端口。在一些示例中,单个指令窗口(例如,指令窗口230)可以一次仅访问寄存器文件的一个端口,而在其他示例中,指令窗口230可以访问一个读取端口和一个写入端口,或者可以同时访问两个或更多个读取端口和/或写入端口。在一些示例中,微架构被配置为使得并非寄存器文件290的所有读取端口都可以使用旁路机制。对于图2中所示的示例微架构200,寄存器文件可以将旁路路径上的寄存器数据发送到针对操作数OP0而不是操作数OP1的多路复用器242中的一个。因此,对于一个周期中的多个寄存器读取,仅一个操作数可以使用旁路,而将其他寄存器读取结果发送到操作数缓冲器239,这在指令流水线中***额外的时钟周期。
在一些示例中,寄存器文件290可以包括64个寄存器,每个寄存器保持32位数据的字。(为了便于解释,除非另有指示,否则本申请将32位数据称为字。根据所公开技术的合适处理器可以用8位、16位、64位、128位、256位或其他位数的字)。在一些示例中,寄存器文件290内的一些寄存器可以被分配用于特定目的。例如,一些寄存器可以专门用作***寄存器,其示例包括存储常数值(例如,全零字)的寄存器、指示正在执行的程序线程的当前地址、物理核数、逻辑核数、核分配拓扑、核控制标志、执行标志、处理器拓扑的(多个)程序计数器(PC)或其他合适的专用寄存器。在一些示例中,寄存器文件290被实现为触发器阵列,而在其他示例中,可以使用锁存器、SRAM、FPGA LUT RAM、FPGA块RAM或其他形式的存储器存储装置来实现寄存器文件。给定处理器的ISA规范规定了如何定义和使用寄存器文件290内的寄存器。
V.示例指令块流
现在转向图3的示意图300,图示了基于块的指令流的一部分310(包括若干可变长度指令块311-314)。指令流可以用于实现用户应用、***服务或任何其他合适的用途。指令流可以被存储在存储器中、从存储器中的另一进程接收、通过网络连接接收或者以任何其他合适的方式存储或接收。在图3所示的示例中,每个指令块以指令报头开始,然后是不同数目的指令。例如,指令块311包括报头320和二十个指令321。所图示的特定指令块报头320包括若干数据字段,其部分地控制指令块内的指令的执行,并且还允许改进的性能增强技术(包括例如,分支预测、推测执行、惰性评估和/或其他技术)。指令报头320还包括指令块大小的指示。更大的指令组块中的指令块大小可以大于1,例如,指令块内包含4个指令组块。换言之,为了压缩分配给指明指令块大小的报头空间,块的大小被移位了4位。因此,大小值为零(0)表示其后有四个指令的块报头的最小尺寸的指令块。在一些示例中,指令块的大小被表达为字节数、字数、n-字组块数、地址、地址偏移量或使用其他合适的表达来描述指令块的大小。在一些示例中,指令块大小由指令块报头和/或脚标中的终止位模式指示。
指令块报头320还可以包括指示用于执行指令块的一个或多个操作模式的一个或多个执行标志。例如,操作模式可以包括核融合操作、向量模式操作、存储器相关性预测和/或有序或确定性指令执行。此外,执行标志可以包括禁止指令块的推测执行的块同步标志。
在所公开技术的一些示例中,指令报头320包括指示编码数据是指令报头的一个或多个标识位。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位始终被设置为二进制值1,以指示有效指令块的开始。在其他示例中,可以将不同的位编码用于(多个)标识位。在一些示例中,指令报头320包括指示相关联的指令块被编码的ISA的特定版本的信息。
块指令报头还可以包括若干块出口类型,以用于例如异常处理、分支预测、控制流确定和/或分支处理。出口类型可以指示分支指令可以是什么类型例如:顺序分支指令(其指向存储器中的下一连续指令块);偏移量指令(其是在相对于偏移量计算的存储器地址处到另一指令块的分支);子例程调用或子例程返回。通过在指令报头中对分支出口类型进行编码,分支预测器可以在对相同指令块内的分支指令进行取回和/或译码之前至少部分地开始操作。
所图示的指令块报头320还包括存储掩码,该存储掩码指示在块指令中编码的哪些加载-存储队列标识符被分配给存储操作。指令块报头还可以包括写入掩码,该写入掩码标识相关联的指令块将向哪些(多个)全局寄存器写入。在一些示例中,存储掩码由例如指令译码器(例如,译码器220)存储在存储向量寄存器中。在其他示例中,指令块报头320不包括存储掩码,但是存储掩码由指令译码器通过在将指令块译码时分析指令相关性来动态地生成。例如,译码器可以生成用于指令块指令的加载存储标识符,以确定存储掩码并将存储掩码数据存储在存储向量寄存器中。类似地,在其他示例中,未将写入掩码编码在指令块报头中,而是由指令译码器动态地生成(例如,通过分析指令块中的指令所引用的寄存器),并存储在写入掩码寄存器中。写入掩码可以用于确定指令块的执行何时完成,并因此发起指令块的提交。相关联的寄存器文件必须在指令块可以完成之前接收对每个条目的写入。在一些示例中,基于块的处理器架构不仅可以包括标量指令,还可以包括单指令多数据(SIMD)指令,其允许在单个指令内用大量数据操作数进行的操作。
可以用于指令321的合适的基于块的指令的示例可以包括用于执行整数和浮点算术、逻辑运算、类型转换、寄存器读取和写入、存储器加载和存储、分支和跳转的执行的指令以及其他合适的处理器指令。在示例指令块311中,指令321包括指示到指令块C 313的分支的第一分支指令331和指示到指令块D 314的分支的第二分支指令332。分支指令331、332可以被断言,并且一旦确定了指令块311的断言,就可以基于由所采用的分支指令指示的目标位置开始对下一指令块的预取和预译码。还应当注意,指令块A 311可以包括一个或多个隐式分支目标。例如,连续存储器空间中的下一指令块是指令块B312。根据惯例或在指令块报头320中编码的信息,例如如果没有满足用于指令块A 311的断言相关性,则可以隐式分支到指令块B 312。应注意,图3中所描绘的指令块表示存储器中的块的布置。
VI示例块指令目标编码
图4是描绘C语言源代码的两个部分410和415以及它们各自的指令块420和425的示例的示意图400,示意图400图示了基于块的指令如何可以对其目标进行显式地编码。在该示例中,前两个READ指令430和431分别以ADD指令432的右(T[2R])和左(T[2L])操作数为目标(2R指示以指令数2的右操作数为目标;2L指示以指令数2的左操作数为目标)。在所图示的ISA中,读取指令是从全局寄存器文件(例如,寄存器文件290)中读取的唯一指令;然而,任何指令都可以以全局寄存器文件为目标。当ADD指令432接收两个寄存器读取的结果时,它将就绪并执行。注意,本公开有时将右操作数称为OP0,而将左操作数称为OP1。
当TLEI(测试小于等于立即)指令433从ADD接收其单个输入操作数时,它将准备好发布并执行。然后,测试产生断言操作数,在通道1(B[1P])上将断言操作数广播给在断言的广播通道上侦听的所有指令,在该示例中,所有这些指令是两个断言分支指令(BRO_T434和BRO_F 435)。接收匹配断言的分支指令将发布,但是利用互补断言编码的另一指令将不会发布。在其他示例中,由指令生成的断言是指令块中一个或多个分支指令的目标操作数。
指令块420的相关性图形440也被图示为指令节点及其对应的操作数目标455和456的阵列450。这图示了块指令420、对应的指令窗口条目和由指令表示的基础数据流图形之间的对应关系。此处,因为译码指令READ 430和READ 431不具有输入相关性,译码指令READ 430和READ 431准备好发布。在它们发布并执行时,将从寄存器R0和R7读取的值写入ADD 432的左、右操作数缓冲器,从而将ADD 432的左、右操作数标记为“就绪”。结果,ADD432指令准备就绪、向ALU发布、执行、然后将总和写入TLEI指令433的左操作数。
Ⅻ示例基于块的指令格式
图5是图示指令报头510、通用指令520、分支指令530和存储器访问指令540(例如,存储器加载或存储器存储指令)的指令格式的一般示例的示意图。指令格式可以用于根据在指定操作模式的指令报头中指定的若干执行标志而被执行的指令块。每个指令报头或指令均根据位数进行标记。例如,指令报头510包括四个32位字,并且从其最低有效位(lsb)(位0)到其最高有效位(msb)(位127)进行标记。如图所示,指令报头包括写入掩码字段、若干执行标志字段、指令块大小字段和指令报头ID位(指令报头的最低有效位)。在一些示例中,指令报头510包括可以用于控制指令块执行和性能的附加方面的附加元数据515和/或516-518。在一些示例中,附加元数据用于指示一个或多个指令被融合。在一些示例中,附加元数据由硬件或软件剖析器工具生成和/或使用。在其他示例中,可以基于另一字长(例如,16位、48位或64位字)对指令进行编码。
图5所描绘的执行标志字段占据指令块报头510的位6至13,并指示用于执行指令块的一个或多个操作模式。例如,操作模式可以包括推测性、有序性或确定性的指令块执行,或者是否允许在提交当前指令块之前对下一指令块进行预取、预译码和/或预分派。块同步标志占据指令块的位9,并且当其被设置为逻辑1时,禁止指令块的推测性执行。
出口类型字段包括可以用于指示在指令块内编码的控制流指令的类型的数据。例如,出口类型字段可以指示指令块包括以下中的一项或多项:顺序分支指令、偏移量分支指令、间接分支指令、调用指令和/或返回指令。在一些示例中,分支指令可以是用于在指令块之间传递控制流、包括相对和/或绝对地址、并且使用条件或无条件断言的任何控制流指令。除了确定隐式控制流指令之外,出口类型字段还可以用于分支预测和推测性执行。
所图示的通用块指令520被存储为一个32位字,并且包括操作码字段、断言字段、广播ID字段(BID)、向量操作字段(V)、单指令多数据(SIMD)字段、第一目标字段(T1)和第二目标字段(T2)。对于具有更多消费者而不是目标字段的指令,编译器可以使用移动指令构建扇出树,或者可以将高扇出结果分配给广播。广播支持通过轻量级网络向核中任何数目的消费者指令发送操作数。在其他示例中,指令可以具有如图所示的可变数目的目标字段521(目标字段T3、T4和T5)。指令具有XOP字段,XOP字段指定经扩展的目标操作数的数目,然后是目标字段的编码。在其他示例中,使用不同的操作码或其他编码来指定具有可变数目的目标的指令。
虽然由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或所有指令,但是本领域技术人员将容易理解,即使对于ISA的特定示例,一个或多个指令字段也可能会偏离特定指令的通用格式。操作码字段指定由指令520执行的(多个)操作,诸如,存储器读取/写入、寄存器加载/存储、加、减、乘、除、移位、旋转、***操作或其他合适的指令。断言字段指定指令将执行的条件。例如,断言字段可以指定值“真”,并且仅当对应的条件标志与指定的断言值匹配时,指令才会执行。在一些示例中,断言字段至少部分指定哪一个用于对断言进行比较,而在其他示例中,基于由先前指令(例如,指令块中的先前指令)设置的标志来断言执行。在一些示例中,断言字段可以指定指令将始终或永远不会执行。因此,通过减少分支指令的数目,断言字段的使用可以允许更密集的目标代码、改进的能量效率和改进的处理器性能。
目标字段T1和T2指定发送基于块的指令的结果的指令。例如,指令槽5处的ADD指令可以指定将其计算结果发送到槽3和10处的指令,包括指定操作数槽(例如,左操作、右操作数或断言操作数)。根据特定的指令和ISA,所示目标字段中的一个或两个可以由其他信息替换,例如,第一目标字段T1可以由立即操作数、附加操作码替换,指定两个目标等。
分支指令530包括操作码字段、断言字段、广播ID字段(BID)和偏移量字段。操作码和断言字段在格式和功能上与关于通用指令所描述的类似。可以以四个指令一组为单位来表示偏移量,因此扩展了可以执行分支的存储器地址范围。利用通用指令520和分支指令530示出的断言可以用于避免指令块内的附加分支。例如,可以基于先前指令的结果(例如,两个操作数的比较)来断言特定指令的执行。如果断言为假,则指令将不会提交由特定指令计算的值。如果断言值与所需断言不匹配,则指令不会发布。例如,如果向BRO_F(断言为假)指令发送了错误的断言值,则BRO_F(断言为假)指令将发布。
如受益于本公开的本领域普通技术人员将容易理解的,如本文所使用的,术语“分支指令”不限于将程序执行改变为相对存储器位置,而是还包括到绝对或符号存储器位置的跳转、子例程调用和返回以及可以修改执行流程的其他指令。在一些示例中,通过改变***寄存器(例如,程序计数器PC或指令指针)的值来修改执行流程,而在其他示例中,可以通过修改存储在存储器中指定位置的值来更改执行流程。在一些示例中,跳转寄存器分支指令用于跳转到存储在寄存器中的存储器位置。在一些示例中,子例程调用和返回分别使用跳转和链路以及跳转寄存器指令来实现。
存储器访问指令540的格式包括操作码字段、断言字段、广播ID字段(BID)、立即数字段(IMM)和目标字段(Tl)。操作码、广播、断言字段在格式和功能上与关于通用指令所描述的类似。例如,可以基于先前指令的结果(例如,两个操作数的比较)来断言特定指令的执行。如果断言为假,则指令将不会提交由特定指令计算的值。如果断言值与所需断言不匹配,则指令不会发布。立即数字段可以用作发送到加载或存储指令的操作数的偏移量。操作数加(移位的)立即偏移量用作加载/存储指令的存储器地址(例如,用于从存储器读取数据或将数据存储到存储器中的地址)。在一些示例中,存储器访问指令可以具有如图所示的可变数目的目标字段541(目标字段T3、T4和T5)。
VIII示例处理器核状态图
图6是图示了当指令块被映射、执行和退出时被分配给指令块的状态的数目的状态图600。例如,可以在指令的执行期间根据一个或多个执行标志来分配一个或多个状态。应当容易理解,图6所示的状态是所公开技术的一个示例,但是在其他示例中,指令块可以具有附加或更少的状态,并且具有与状态图600所描绘的状态不同的状态。在状态605处,未映射指令块。指令块可以驻留在被耦合到基于块的处理器的存储器中、被存储在诸如硬盘驱动器或闪存驱动器的计算机可读存储设备上,并且可以位于处理器本地或位于远程服务器上并且可使用计算机网络进行访问。未映射的指令还可以至少部分地驻留在耦合到基于块的处理器的缓存存储器中。
在指令块映射状态610处,用于基于块的处理器的控制逻辑(诸如,指令调度器)可以用于监视基于块的处理器的处理核资源,并将指令块映射到一个或多个处理核。
控制单元可以将一个或多个指令块映射到处理器核和/或特定处理器核的指令窗口。在一些示例中,控制单元监视先前已执行特定指令块的处理器核,并且可以针对仍驻留在“预热”处理器核上的指令块重新使用译码指令。一旦一个或多个指令块已被映射到处理器核,则指令块可以前进到取回状态620。
当指令块处于取回状态620(例如,指令取回)时,所映射的处理器核从基于块的处理器的存储器***中取回计算机可读块指令,并将其加载到与特定处理器核相关联的存储器中。例如,可以取回针对指令块的所取回的指令,并将其存储在处理器核内的指令缓存中。可以使用核互连将指令传达到处理器核。一旦取回了指令块的至少一个指令,指令块就可以进入指令译码状态630。
在指令译码状态630期间,将所取回的指令的各个位译码为信号,这些信号可以被处理器核用于控制特定指令的执行,包括生成指示存储器访问指令的相对顺序的标识符。例如,译码指令可以被存储在以上关于图2讨论的存储器存储库之一中,包括耦合到指令调度器235的存储器和译码指令存储库236中的存储器。译码包括生成译码指令的相关性、译码指令的操作数信息以及译码指令的目标。在分派操作期间,译码指令状态被存储在耦合到指令调度器的存储器中。在一些示例中,分派操作包括:生成用于生成指令流水线的控制信号的译码指令控制数据;以及生成由硬件指令调度程序使用来确定哪些指令准备好发布的调度器数据。一旦指令块的至少一个指令被译码和分派,则指令块可以继续进行至发布状态640。
在发布状态640期间,评估已分派指令的指令相关性,以确定指令是否准备好发布和后续执行。例如,指令调度器可以监视指令的源操作数,并且在指令准备好发布之前,断言操作数(针对断言的指令)必须可用。对于一些编码,某些指令还必须根据指定的顺序发布。例如,根据每个指令中编码的LSID值对存储器加载存储操作进行排序。在一些示例中,准备同时发布多于一个指令,并且指令调度器选择准备发布的指令之一来发布。可以使用指令的IID来标识指令,以方便评估指令的相关性。一旦指令块中的至少一个指令已经发布,就可以取回(或在旁路路径上维持)(多个)已发布指令的源操作数,并且指令块可以进行到执行状态650。
在执行状态650期间,使用例如以上关于图2所讨论的功能单元260来执行与指令相关联的操作。如上所述,所执行的功能可以包括算术功能、逻辑功能、分支指令、存储器操作和寄存器操作。与处理器核相关联的控制逻辑监视指令块的执行,并且一旦确定指令块可以被提交或者指令块将被中止,则将指令块状态设置为提交/中止状态660。在一些示例中,控制逻辑对指令块使用写入掩码和/或存储掩码,以确定执行是否已充分进行来提交指令块。
在提交/中止状态660,处理器核控制单元确定由指令块执行的操作可以完成。例如,将明确地根据指令块的控制流程来执行存储器加载存储操作、寄存器读取/写入、分支指令和其他指令。对于条件存储器指令,数据将被写入存储器,并且指示成功的状态指示符值在提交/中止状态660期间被生成。
备选地,如果例如由于不满足指令的一个或多个相关性而中止指令块,或者由于针对指令块的断言不满足而推测性地执行了指令,则指令块被中止,使得它不会影响存储器或寄存器文件中指令序列的状态。无论指令块是否已提交或中止,指令块都进入状态670,以确定是否应刷新指令块。如果刷新指令块,则处理器核通常使用新的数据值(尤其是通过刚提交的块执行而更新的寄存器和存储器)来重新执行指令块,并直接进形到执行状态650。因此,可以避免在对指令块进行映射、取回和译码时花费的时间和能量。备选地,如果不刷新指令块,则指令块进入空闲状态680。
在空闲状态680中,可以通过例如关闭处理器核内的硬件来使得执行指令块的处理器核空闲,同时保持指令块的至少一部分译码指令。在某个时刻,控制单元确定690是否要刷新处理器核上的空闲指令块。如果要刷新空闲指令块,则指令块可以在发布状态640处恢复指令执行。备选地,如果不刷新指令块,则指令块不被映射,并且可以对处理器核进行冲刷,随后指令块可以被映射到经冲刷的处理器核。
尽管为了便于解释,状态图600图示了在单个处理器核上执行的指令块的状态,但是受益于本公开的相关领域的普通技术人员应该容易理解,在某些示例中,可以使用多个处理器核来同时执行给定指令块的多个实例。
Ⅸ示例基于块的处理器核异常处理微架构
图7是图示了如可以在所公开技术的某些示例中使用的、示例基于块的处理器核的框图700,基于块的处理器核包括用于在提交当前指令块之前针对下一块的指令预取、预译码和/或预分派指令的特征。例如,图2中描绘的微架构可以用图7所描绘的结构进行进一步增强,以便在示例基于块的处理器中提供改进的预取、预译码和/或预分派。
指令译码器710对从指令缓存接收的指令进行译码,并将指令调度器数据730提供给指令调度器720,以便确定准备发布的指令并选择待执行的一个或多个就绪指令。指令调度器720为指令块中的指令跟踪若干不同类型的数据,包括译码就绪状态数据(例如,DBID、DRT、DRF、DR0、DR1)和活动就绪状态(例如,RT、RF R0、R1、ISS和RDY)。指令块中每个指令的指令调度器数据由指令标识符(INSTID)索引。当满足指令的所有相关性时,指令调度器720设置就绪位(RDY)来指示指令可以发布和执行。如上所述,每个指令可以具有可变数目的相关性,例如,左操作数、右操作数和/或断言操作数。在所图示的示例中,指令调度器将每个指令的数据并行存储在表中。将就绪位和其他调度信息提供给优先级编码器725,优先级编码器725选择一个或多个指令来发布。
在图7的实现中,每个指令具有分配用于存储特定指令的指令状态的逻辑和存储“切片”。可以用INSTID来标识指令。译码就绪状态由指令译码器生成,并且不会被指令调度器更改。将译码就绪状态与活动就绪状态进行比较,以确定指令何时准备发布。在图7的示例指令调度器720中,存在由指令译码器初始化的六位译码就绪状态:
·DBID:其指示指令在其上接收广播数据的2位二进制广播ID通道;或者如果指令未接收广播操作数,则可以将其编码为00;
·DRT和DRF:其指示指令是否与接收断言为真(true)(或断言为假(false))的值相关。在所示的配置中,DRT=1/DRF=1的值指示指令不等待任何断言,DRT=0/DRF=1指示指令被断言为真(等待由真断言作为目标),DRT=1/DRF=0指示指令被断言为假(等待由假断言作为目标),并且DRT=0/DRF=0指示对应的指令尚未被译码(条目为空)。相同的编码可以用于活动就绪状态RT/RF;以及
·DR0,DR1:其分别指示指令的右操作数(OP0)或左操作数(OP1)已就绪。
对于每个调度器切片,在指令状态730中还存在若干位处于活动就绪状态。在所示的示例中,存在六位处于活动就绪状态:
·RT,RF:其指示对应的指令断言为真(或断言为假)值已就绪;
·R0,R1:其分别指示对应的右操作数(OP0)或左操作数(OP1)已就绪;
·ISS:其指示指令已发布到指令流水线;以及
·RDY:其指示对应的指令已准备好发布。
当译码器对其对应的DRX进行设置时(例如,当指令与相关联的输入操作数不相关时),或者执行指令显式地或经由广播事件以该输入为目标时,可以对RT、RF、R0、R1中的任何进行设置。因此,当另一指令生成针对指令的目标操作数时,可以对其相关联的就绪位进行设置。
当RDY状态指示指令准备好发布时,可以生成就绪信号并将其发送到仲裁电路(例如,优先级编码器),以选择下一个或多个发布的指令。当指令发布时,或者当确定指令永远不会发布时(例如,如果指令基于为真的条件被断言,并且断言评估为假),则对指令发布位ISS进行设置。
指令译码器710还对从指令缓存接收的指令进行译码,并提供存储在译码指令存储库740中的译码指令控制数据。在一些示例中,指令控制数据用于控制有限状态机实现。在其他示例中,指令控制数据被用来访问用于生成控制信号的微码实现。可以使用与其指令相关联的INSTID来访问指令控制数据。指令调度器状态和指令控制数据可以被存储在任何合适的存储组件中,存储组件可以包括触发器、锁存器和存储器单元。在一些示例中,共享的存储器集存储了指令调度器状态和指令控制数据,而在其他示例中,使用分离的存储器组件。
如受益于本公开的本领域普通技术人员将容易理解,可以使用表示指令状态的不同形式,并且使得这样的处理器适用于对指令状态数据的这种变化进行预取和预译码。译码就绪状态和活动就绪状态可以被存储在任何合适的存储组件中,存储组件可以包括触发器、锁存器和存储器单元。在本文描述的示例编码中,如果指令与接收信号相关,则将就绪状态事件(下面讨论的译码就绪状态事件和活动就绪状态事件)编码为零位,或者如果对应的就绪状态不与指令相关或已接收,则编码为一位。这些位一起对指令是否已译码进行编码,等待一个或多个操作数(包括数据或断言操作数,并可能经由广播通道)或立即准备发布。
用于实现指令的操作可以由执行单元750执行。用于指令的消耗而生成的操作数被临时存储在若干操作数缓冲器735中。操作数缓冲器由指令调度器720监视,并且当满足指令的所有相关性时,该操作数缓冲器可由调度器发布。
X.异常处理期间控制转移和恢复的示例
图8A至图8D是描绘了根据所公开技术的某些示例和配置的随着执行的进行的若干指令块以及相关联的指令调度器和译码器状态的示意图。所示的指令状态可以例如使用上面关于图7讨论的硬件组件(包括指令调度器720和译码指令存储库740)被存储在耦合至指令调度器的存储器中。将图8A-图8D中图示的指令块A-D示出为其可以被布置在存储器中。因此,如果指令块包括到另一指令块的分支,则位于其间的中间指令块的指令将不会立即执行。
如图8A所示,第一指令块A 811具有与分支指令820和825相关联的两个显式出口点。第一指令块811还具有到下一指令块B 812的隐式出口点。因此,随着指令块A 811的执行的进行,如果确定指令块内的任何分支指令都不执行,则意味着下一指令块将是指令块812,因此隐式分支进入了块B。图8A还示出了针对当前指令块811的指令状态(包括指令调度器和指令控制数据状态)的简化表示830。如图所示,前两个指令I[0]和I[1]已发布,因为已发布的位(ISS)被设置为1。如RDY位被设置为1所指示的,3个指令I[2]、I[4]和I[5]准备发布。寄存器840指示先前所有指令均已发布的当前指令槽。换言之,指向指令I[2]之前的所有指令均已发布。因此,可以在提交第一指令块811之前将这些第一指令槽重新用于存储。
图8B是表示存在两个显式分支指令820和825的示例中的指令状态的简化图。在第一时间点,如所示的指令状态850所指示的,三个指令(I[0]、I[1]和I[5])已发布。寄存器840已被更新,以指向所有先前指令已发布的指令槽。然而,由于没有分支指令被执行,因此在指令块811提交之后,处理器控制将被转移至何处是未知的。因此,发布的指令槽都没有被预取或预译码。
在第二时间点,指令状态851被更新。如图8B中的821所指示的,与INSTID I[3]相关联的第一分支指令820已发布并执行。由于分支指令已执行,因此现在下一指令块的地址已知。现在,在当前执行的指令块A 811提交之前,前两个指令槽存储下一指令块D 814的前两个指令的指令状态数据。如指令状态851中的垂直哈希所指示的,指令块D的控制条目和就绪状态条目已被预分派,因此它们相应的指令状态被存储。通过当前指令块的指令标识符对预分派的指令状态进行索引。在备选示例中可以使用用于对指令状态进行索引的其他合适技术。
在第三时间点,在执行指令I[2]之后,再次更新指令状态852。如图8B所示,寄存器840现在指向指令I[4],因此可以预分派针对下一指令块814的附加指令I[2]和I[3]。
图8C图示了框图800的一个示例,其中推测地执行了不同的指令块(指令块C813)。换言之,分支预测器已确定指令块C 813是当前正在执行的指令块A 811的最可能的分支位置。在图8C中指示分支指令825。因此,即使尚未明确地解析(resolve)确定分支指令的目标位置的所有断言,处理器也已开始对推测性块C 813的指令状态进行取回、译码并将其存储在指令调度器和译码指令状态存储器中。如指令状态表示860所示,前两个指令槽I[0]和I[1]存储推测性块C 813的指令状态。因为寄存器840指向第一未发布指令I[2],所以没有其他指令槽被重新使用。在第二时间点,指令调度器确定附加的分支指令I[3]将永远不会发布,并且因此其已发布的位被标记为1,使得块的进程不会停止。在第三时间点,如寄存器840所指示的,直到I[4]的所有指令已发布。
图8D图示了针对若干指令块的框图800,其中指令调度器和译码指令控制数据可以以随机访问的方式被覆盖。表示在第一时间点的指令状态870,包括最终将发布的分支指令820的状态880。由于在该第一时间点下一指令块地址未知,并且处理器被配置为不执行推测性执行,因此不会发生预取和预译码。在第二时间点,在分支指令820(I[3])已发布之后,更新指令状态871。特别地,由于指令I[5]已发布,因此不仅前两个指令被提取回、译码并且将它们的指令状态存储在存储器中,而且还取回了超过第一未发布指令的其他指令槽881和882,并将其存储在存储器中。应注意,在维持单个发布的指令边界与监视单独指令的状态以允许随机访问之间存在设计折衷。
XI预分派指令的示例方法
图9是概述了如可以利用所公开技术的某些示例来执行的、利用预分派来操作基于块的处理器的示例方法的流程图900。例如,以上关于图1-图7讨论的处理器架构可以用于实现所示方法。
在处理框910处,针对当前第一指令块的多个指令中的第一指令被分派,包括将指令状态存储在耦合到指令调度器的存储器的第一部分处。在一些示例中,指令译码器用于对第一指令进行译码以生成指令状态。在一些示例中,还可以从指令译码器接收译码控制状态,并将其存储在译码指令存储库中。在一些示例中,通过预分派生成的指令状态包括调度器数据,调度器数据包括以下的一个或多个:译码指令就绪状态、活动指令就绪状态、输入数据的就绪状态或第一指令的断言操作数、输入数据的就绪状态或第二指令的断言操作数、指令发布状态或指令禁止状态。应当注意,“当前”指令块指代在下一指令块之前的未完成(in-flight)指令块。通常,将对指令块流中最早的未提交指令块执行所公开的预分派指令的方法。然而,在某些实现中,为了在相对于给定当前指令块的后续的下一指令块中预分派指令,其他未完成指令块可以是“当前”指令块。在一些示例中,当前指令块是由基于块的处理器核执行的最早的未完成指令块。
在处理框920处,发布第一指令。一旦指令已发布,就可以开始执行指令。例如,控制逻辑可以使用译码指令控制数据来生成用于控制数据路径以执行由指令限定的操作的信号。
在处理框930处,在提交第一指令块之前,对与第一指令块不同的第二指令块(下一指令块)的第二指令进行分派,包括将针对第二指令块译码的译码指令状态存储在存储器的第一部分中。该操作覆盖来自处理框910的已译码的第一指令的第一指令状态。在一些示例中,对于分支预测器选择的下一指令块,推测地发生译码和存储指令状态。在其他示例中,直到针对当前指令块明确知道下一指令块,才进行译码和存储。在一些示例中,更新指令状态包括将发布状态位设置为存储在存储器的第一部分处的指令状态。在一些示例中,第二指令的执行也可以被发起。在一些示例中,执行第一指令块的至少一个附加指令,并且在提交第一指令块之前,将第二指令块的至少一个附加指令的指令状态存储在先前存储附加指令的指令状态的存储器的一部分中。
在所示方法的一些示例中,在分派下一个第二指令块的指令之前,分派和发布多个两个或更多个指令。在一些示例中,在提交第一指令块之前,分派第二指令块的多个两个或更多个指令。
如以上关于图8A至图8D所讨论的,在某些实现中,可以递增地执行在处理框处执行的操作。例如,当第一指令块中的附加指令发布时,将下一指令块的指令状态数据存储在所发布的指令槽中。在一些示例中,寄存器存储用以指示未发布的指令的最低INSTID的指针。在其他示例中,可以以随机访问的方式写入指令槽。可以非推测性地确定(在明确已知下一指令块之后)或推测性地确定下一指令块。在发生错误预测的情况下,将利用新确定的下一指令块的数据对指令槽进行重新写入。
在处理框940处,提交第一指令块。如上面进一步详细讨论的,提交指令块包括写出***寄存器和条件代码、存储用于存储器加载和存储操作的数据以及将值写入寄存器文件。提交可以在执行第二指令块的指令时发生,第二指令块的指令在第一指令块是当前指令块的时候被译码和存储。
Ⅻ针对基于块的处理器生成目标代码的示例方法
图10是概述可以在所公开技术的某些示例中执行的针对基于块的处理器生成目标代码的示例方法的框图1000。例如,通用处理器或基于块的处理器可以用于生成由基于块的处理器执行的目标代码。
在处理框1010处,接收针对基于块的处理器的源代码、汇编代码和/或机器代码。源代码可以以任何合适的编程语言表示,也可以以汇编或机器代码表示。
在处理框1020处,生成用于执行指令块中的多个指令的排序。所生成的顺序考虑了基于块的处理器可以在处理器提交指令块之前覆盖指令状态条目。例如,在某些处理器架构中对指令进行排序以使得较高等待时间的指令或具有更多或更少相关性的指令被首先执行是有利的。作为进一步的示例,可以在块中对生成有助于确定块将分支到哪个出口位置的结果的指令进行较早排序。因此,当确定下一指令块时,可以在较早的时间点预分派更多的指令槽。在一些示例中,至少部分地基于关于当前指令块中的指令何时将执行的假设来生成排序。在一些示例中,排序至少部分地基于编程到编译器中的、关于何时开始将下一指令块的指令取回、译码和发布是有利的假设。
在处理框1030处,省略由基于块的处理器可执行的目标代码。目标代码包括根据在处理框1020处生成的顺序来布置的至少两个基于块的处理器指令。所发出的目标代码可以经由通信网络传输到另一计算机和/或存储在任何合适的计算机可读存储介质中。
XIII示例计算环境
图11图示了合适的计算环境1100的一般示例,其中可以实现所描述的实施例、工艺和技术,包括在用基于块的处理器执行指令块时生成和使用指令状态以对指令进行取回、译码和分派。
因为技术可以在各种通用或专用计算环境中实现,所以计算环境1100并非旨在建议关于技术的使用范围或功能性的任何限制。例如,所公开的技术可以用其他计算机***配置来实现,包括手持式设备、多处理器***、可编程消费电子产品、网络PC、小型计算机、大型计算机等。还可以在由借助通信网络链接的远程处理设备执行任务的分布式计算环境中实践所公开的技术。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以位于本地和远程存储器存储设备中。
参考图11,计算环境1100包括至少一个基于块的处理单元1110和存储器1120。在图11中,在虚线内包括该最基本的配置1130。基于块的处理单元1110执行计算机可执行指令,并且可以是真实或虚拟处理器。在多处理***中,多个处理单元执行计算机可执行指令以增加处理能力,如此,多个处理器可以同时运行。存储器1120可以是易失性存储器(例如,寄存器、缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或两者的某种组合。存储器1120存储可以例如实现本文描述的技术的软件1180、图像和视频。计算环境可以具有附加特征。例如,计算环境1100包括存储装置1140、一个或多个输入设备1150、一个或多个输出设备1160以及一个或多个通信连接1170。诸如总线、控制器或网络的互连机制(未示出)将计算环境1100的组件互连。通常,操作***软件(未示出)为在计算环境1100中执行的其他软件提供操作环境,并协调计算环境1100的组件的活动。
存储装置1140可以是可移除的或不可移除的,并且包括磁盘、磁带或盒带、CD-ROM、CD-RW、DVD或可以用于存储信息并且在计算环境1100中可以被访问的任何其他介质。存储装置1140存储可以用于实现本文所述的技术的软件1180的指令、插件数据和消息。
(多个)输入设备1150可以是触摸输入设备(诸如,键盘、小键盘、鼠标、触摸屏显示器、笔或轨迹球)、语音输入设备、扫描设备或向计算环境1100提供输入的另一设备。对于音频,(多个)输入设备1150可以是声卡或接受模拟或数字形式的音频输入的类似设备,或将音频样本提供给计算环境1100的CD-ROM阅读器。(多个)输出设备1160可以是显示器、打印机、扬声器、CD刻录机或提供来自计算环境1100的输出的另一设备。
(多个)通信连接1170使得能够通过通信介质(例如,连接网络)与另一计算实体进行通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频的信息或经调制的数据信号中的其他数据。(多个)通信连接1170不限于有线连接(例如,兆位或千兆位以太网、Infiniband、通过电或光纤连接的光纤通道),还包括无线技术(例如,经由蓝牙、WiFi(IEEE802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)以及用于为所公开的代理、桥接器和代理数据消费者提供网络连接的其他合适的通信连接。在虚拟主机环境中,(多个)通信连接可以是由虚拟主机提供的虚拟网络连接。
可以使用在计算云1190中实现全部或部分所公开技术的计算机可执行指令来执行所公开方法的一些实施例。例如,所公开的编译器和/或基于块的处理器服务器位于计算环境1130中,或者所公开的编译器可以在位于计算云1190中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或CISC处理器)上执行。
计算机可读介质是可以在计算环境1100内访问的任何可用介质。通过示例而非限制,在计算环境1100中,计算机可读介质包括存储器1120和/或存储装置1140。应当容易理解,术语计算机可读存储介质包括用于数据存储的介质(诸如,存储器1120和存储装置1140),而不包括传输介质(诸如,经调制的数据信号)。
一个或多个计算机可读存储介质可以存储计算机可读指令,计算机可读指令在执行时,使得计算机执行对供基于块的处理器执行的指令进行编译的方法。基于块的处理器可以被配置为执行由该方法生成的计算机可读指令。
XIV所公开技术的附加示例
在本文中根据以上讨论的示例来讨论所公开的主题内容的附加示例。
在所公开的技术的一些示例中,操作基于块的处理器的方法包括:针对第一(当前)指令块分派多个指令中的第一指令,分派包括在耦合到指令调度器的存储器的第一部分处存储指令状态。示例方法还包括发布第一指令,并且在提交第一指令块之前,在存储器的第一部分中分派第二不同指令块(下一指令块)的第二指令,从而通过存储第二指令块的第二指令的指令状态来覆盖第一指令状态并提交第一指令块。可以使用指令译码器来分派指令,指令译码器对存储在指令缓存中的编码指令进行译码,以生成指令调度器数据和译码指令状态数据。在一些示例中,第一指令块始终是当前未完成指令集中的最早指令块。在一些示例中,第一(当前)指令块可以是较新的指令块。
在方法的一些示例中,发布第一指令包括更新指令状态来指示第一指令已发布。例如,可以在指令调度器存储器中设置活动就绪状态(诸如,发布位或禁止位)。在一些示例中,更新指令状态包括在被存储在存储器的第一部分处的指令状态中设置发布状态位。不论是否使用定制的集成电路或FPGA来实现处理器,指令状态都可以被存储在任何合适的存储器(包括锁存器、触发器、寄存器、或随机存取存储器)中。在一些示例中,存储器形成指令调度器和/或译码指令存储库的一部分。
在一些示例中,指令状态包括用于生成针对基于块的处理器的指令流水线或数据路径的控制信号的译码指令控制数据,并且译码包括从第一指令的编码生成译码控制数据。
在一些示例中,指令状态包括调度器数据,调度器数据包括以下至少一个或多个:译码指令就绪状态、活动指令就绪状态、输入数据的就绪状态或第一指令的断言操作数、输入数据的就绪状态或第二指令的断言操作数、指令发布状态或指令禁止状态。
在一些示例中,方法包括:在提交第一指令块之后,清除存储在存储器的第一部分处的指令状态中的发布状态位或禁止状态位,从而允许在满足第二指令的相关性时,第二指令发布。
在一些示例中,推测性地执行第二指令的指令状态的存储。在一些示例中,在提交第一指令块之前,发起第二指令的执行。
在方法的一些示例中,第一指令块的分派可以在对第一指令块的一个或多个指令进行取回和/或译码之后。在一些示例中,在对第二指令块进行分派之前,可以对第二指令块的一个或多个指令进行取回和/或译码。
在一些示例中,方法还包括执行第一指令块的至少一个附加指令,并且在提交第一指令块之前,将第二指令块的至少一个附加指令的指令状态存储在先前存储了第一指令块的附加执行指令的指令状态的存储器的一部分中。在一些示例中,在提交第一指令块之前,可以在发布第一指令块的指令时,预分派第二下一指令块的任何数目的指令。
在所公开技术的一些示例中,装置包括指令译码器,指令译码器被配置为对当前指令块中的指令进行译码并且将指令状态分派给指令调度器。指令调度器被配置为在当前指令块内发布单独指令,并且被耦合到存储当前指令块的指令状态条目的存储器。装置被配置为在提交当前指令块之前,当指令调度器发布对应的单独指令时,覆盖存储器中当前指令块的单独指令的指令状态条目。在一些示例中,装置包括一个或多个基于块的处理器核。
在一些示例中,装置指令状态条目包括译码指令控制条目和指令就绪状态条目。在一些示例中,指令译码器被耦合到存储器,存储器包括译码指令存储库,译码指令存储库在当前指令块的其相应指令的索引处存储译码指令控制条目。指令调度器被耦合到存储器,存储器还包括指令就绪存储库,指令就绪存储库将就绪状态条目存储在当前指令块的其相应指令的索引处。
在一些示例中,诸如译码指令控制条目和就绪状态条目的指令状态由当前指令块的指令标识符进行索引。
在一些示例中,装置还包括被配置为执行当前指令块指令的数据路径,数据路径被配置为接收使用由指令译码器生成的指令状态条目生成的控制信号。
在一些示例中,装置还被配置为以随机访问方式覆盖指令状态条目。在其他示例中,指令调度器包括指示未发布的单独指令的索引的寄存器,并且装置还被配置为覆盖直到未发布的单独指令的索引的指令状态条目。
在一些示例中,装置还被配置为:利用不同于当前指令块的下一指令块的指令覆盖指令状态条目。在提交当前或最早的未完成指令块之前,覆盖条目。可以通过对指令状态条目进行取回、译码并将其分派到存储器来覆盖指令状态条目。
在一些示例中,装置还被配置为在确定下一指令块将成为当前指令块,或者确定下一指令块将成为最早指令块之前,推测性地覆盖指令状态条目中的至少一个。
一个或多个计算机可读存储介质存储计算机可读指令,计算机可读指令在由基于块的处理器执行时使得处理器执行所公开的方法中的任一个方法。在一些示例中,装置可以被耦合到计算机可读存储介质并执行指令。
在所公开技术的一些示例中,一个或多个计算机可读存储介质存储计算机可读指令,计算机可读指令在由处理器执行时使得处理器执行利用本机编译器、交叉编译器或即时编译器实现的方法。方法包括:接收针对基于块的处理器的源代码、汇编代码和/或机器代码;生成用于在指令块中布置多个指令的顺序。考虑到基于块的处理器可以在提交指令块之前覆盖指令状态条目,因此可以选择所生成的顺序。在一些示例中,选择所生成的顺序,使得寻求改进的处理器性能特性。例如,可以为当前指令块或其下一指令块选择顺序,以提高在基于块的处理器中发布指令的速率。在一些示例中,编译器发出由基于块的处理器可执行的目标代码,目标代码具有根据所生成的顺序布置的至少两个指令。在一些示例中,计算机可读存储介质存储通过执行所公开的编译器方法而发出的目标代码。
一个或多个计算机可读存储介质(诸如,存储设备和/或存储器)可以存储计算机可读指令,计算机可读指令在由计算机执行时使得计算机执行以下方法中的任一个:生成和使用指令状态以用于对指令进行取回和译码,同时利用本文所公开的基于块的处理器执行指令块。基于块的处理器可以被配置为执行由方法生成的计算机可读指令。
鉴于可以将所公开的主题内容的原理应用于其的许多可能的实施例,应当认识到,所示出的实施例仅是优选示例,并且不应被视为将权利要求的范围限制于那些优选示例。而是,所要求保护的主题内容的范围由所附权利要求限定。因此,要求保护落入这些权利要求及其等同物范围内的所有内容作为本发明。
Claims (15)
1.一种操作基于块的处理器的方法,所述方法包括:
利用指令译码器,针对第一指令块分派多个指令中的第一指令,所述分派包括在被耦合到指令调度器的存储器的第一部分处存储指令状态;
发布所述第一指令;
在提交所述第一指令块之前,在所述存储器的所述第一部分中分派不同的第二指令块的第二指令,从而通过存储针对所述第二指令块的所述第二指令的指令状态来覆盖所述第一指令状态;以及
提交所述第一指令块。
2.根据权利要求1所述的方法,其中发布所述第一指令包括更新所述指令状态以指示所述第一指令已发布。
3.根据权利要求2所述的方法,其中更新所述指令状态包括在被存储在所述存储器的所述第一部分处的所述指令状态中设置发布状态位。
4.根据权利要求1所述的方法,其中所述存储器形成指令调度器和/或译码指令存储库的一部分。
5.根据权利要求1所述的方法,其中所述指令状态包括译码指令控制数据,所述译码指令控制数据被用来生成针对所述基于块的处理器的数据路径的控制信号,并且其中所述译码包括从所述第一指令的编码生成译码的所述控制数据。
6.根据权利要求1所述的方法,还包括:在提交所述第一指令块之后,清除被存储在所述存储器的所述第一部分处的所述指令状态中的发布状态位或禁止状态位,从而允许在所述第二指令的相关性被满足时发布所述第二指令。
7.根据权利要求1所述的方法,其中存储针对所述第二指令的所述指令状态被推测性地执行。
8.根据权利要求1所述的方法,还包括:
执行所述第一指令块的至少一个附加指令;以及
在提交所述第一指令块之前,将针对所述第二指令块的所述至少一个附加指令的指令状态存储在先前存储了针对所述第一指令块的附加执行指令的指令状态的所述存储器的一部分中。
9.一种装置,包括:
指令译码器,被配置为对当前指令块中的指令进行译码;
指令调度器,被配置为发布所述当前指令块内的单独指令;
存储器,存储针对所述当前指令块的指令状态条目;并且
其中所述装置被配置为:在提交所述当前指令块之前,当对应的所述单独指令由所述指令调度器发布时,覆盖针对所述存储器中的所述当前指令块的单独指令的指令状态条目。
10.根据权利要求9所述的装置,其中:
所述指令状态条目包括多个译码指令控制条目和多个指令就绪状态条目;并且
所述指令译码器被耦合到所述存储器,所述存储器包括译码指令存储库,所述译码指令存储库将译码指令控制条目存储在针对所述当前指令块的所述译码指令控制条目的相应指令的索引处;以及
所述指令调度器被耦合到所述存储器,所述存储器还包括指令就绪存储库,所述指令就绪存储库将就绪状态条目存储在针对所述当前指令块的所述就绪状态条目的相应指令的索引处。
11.根据权利要求10所述的装置,其中所述译码指令控制条目和所述就绪状态条目由所述当前指令块的指令标识符进行索引。
12.根据权利要求9所述的装置,还包括被配置为执行所述当前指令块的指令的数据路径,所述数据路径被配置为接收使用由所述指令译码器生成的指令状态条目生成的控制信号。
13.根据权利要求9所述的装置,其中所述装置还被配置为以随机访问方式覆盖指令状态条目。
14.根据权利要求9所述的装置,其中所述指令调度器包括指示未发布的单独指令的索引的寄存器,并且其中所述装置还被配置为覆盖直到所述未发布的单独指令的所述索引的指令状态条目。
15.根据权利要求9所述的装置,其中所述装置还被配置为在确定下一指令块将成为当前指令块之前,推测性地覆盖所述指令状态条目中的至少一个指令状态条目。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/606,673 US20180341488A1 (en) | 2017-05-26 | 2017-05-26 | Microprocessor instruction predispatch before block commit |
US15/606,673 | 2017-05-26 | ||
PCT/US2018/029488 WO2018217390A1 (en) | 2017-05-26 | 2018-04-26 | Microprocessor instruction predispatch before block commit |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110692039A true CN110692039A (zh) | 2020-01-14 |
Family
ID=62218313
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880034482.9A Withdrawn CN110692039A (zh) | 2017-05-26 | 2018-04-26 | 在块提交之前的微处理器指令预分派 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20180341488A1 (zh) |
CN (1) | CN110692039A (zh) |
WO (1) | WO2018217390A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116533A (zh) * | 2021-11-29 | 2022-03-01 | 海光信息技术股份有限公司 | 利用共享存储器存储数据的方法 |
CN116302114A (zh) * | 2023-02-24 | 2023-06-23 | 进迭时空(珠海)科技有限公司 | 一种针对支持指令宏融合cpu的编译器指令调度优化方法 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4227801A4 (en) * | 2020-11-06 | 2023-11-15 | Huawei Technologies Co., Ltd. | INSTRUCTION PROCESSING METHOD AND GRAPHFLOW APPARATUS |
WO2022174542A1 (zh) * | 2021-02-19 | 2022-08-25 | 华为技术有限公司 | 一种数据处理的方法、装置、处理器和计算设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542986B1 (en) * | 1999-11-09 | 2003-04-01 | Advanced Micro Devices, Inc. | Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor |
US7111126B2 (en) * | 2003-09-24 | 2006-09-19 | Arm Limited | Apparatus and method for loading data values |
US7237095B1 (en) * | 2005-08-04 | 2007-06-26 | Advanced Micro Devices, Inc. | Optimum power efficient shifting algorithm for schedulers |
US9152427B2 (en) * | 2008-10-15 | 2015-10-06 | Hyperion Core, Inc. | Instruction issue to array of arithmetic cells coupled to load/store cells with associated registers as extended register file |
GB201001621D0 (en) * | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
US9547496B2 (en) * | 2013-11-07 | 2017-01-17 | Microsoft Technology Licensing, Llc | Energy efficient multi-modal instruction issue |
US9940136B2 (en) * | 2015-06-26 | 2018-04-10 | Microsoft Technology Licensing, Llc | Reuse of decoded instructions |
US10175988B2 (en) * | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US11755484B2 (en) * | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
-
2017
- 2017-05-26 US US15/606,673 patent/US20180341488A1/en not_active Abandoned
-
2018
- 2018-04-26 WO PCT/US2018/029488 patent/WO2018217390A1/en active Application Filing
- 2018-04-26 CN CN201880034482.9A patent/CN110692039A/zh not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116533A (zh) * | 2021-11-29 | 2022-03-01 | 海光信息技术股份有限公司 | 利用共享存储器存储数据的方法 |
CN114116533B (zh) * | 2021-11-29 | 2023-03-10 | 海光信息技术股份有限公司 | 利用共享存储器存储数据的方法 |
CN116302114A (zh) * | 2023-02-24 | 2023-06-23 | 进迭时空(珠海)科技有限公司 | 一种针对支持指令宏融合cpu的编译器指令调度优化方法 |
CN116302114B (zh) * | 2023-02-24 | 2024-01-23 | 进迭时空(珠海)科技有限公司 | 一种针对支持指令宏融合cpu的编译器指令调度优化方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2018217390A1 (en) | 2018-11-29 |
US20180341488A1 (en) | 2018-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3449359B1 (en) | Out-of-order block-based processors and instruction schedulers | |
CN108027772B (zh) | 用于逻辑处理器的不同的***寄存器 | |
CN108027769B (zh) | 使用寄存器访问指令发起指令块执行 | |
CN108027771B (zh) | 基于块的处理器核复合寄存器 | |
CN108027807B (zh) | 基于块的处理器核拓扑寄存器 | |
CN108027767B (zh) | 寄存器读取/写入排序 | |
CN108027770B (zh) | 用于数据流isa的密集读取编码 | |
US20230106990A1 (en) | Executing multiple programs simultaneously on a processor core | |
CN108027773B (zh) | 存储器访问指令顺序编码的生成和使用 | |
US10095519B2 (en) | Instruction block address register | |
US11977891B2 (en) | Implicit program order | |
US20160378491A1 (en) | Determination of target location for transfer of processor control | |
CN108027733B (zh) | 在目标字段中存储无效 | |
WO2017048644A1 (en) | Generation and use of block branch metadata | |
CN108027734B (zh) | 空指令的动态生成 | |
US11726912B2 (en) | Coupling wide memory interface to wide write back paths | |
CN110692039A (zh) | 在块提交之前的微处理器指令预分派 | |
EP3350690B1 (en) | Implicit program order |
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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200114 |