CN109074261A - 用于乱序块isa处理器的增量调度器 - Google Patents

用于乱序块isa处理器的增量调度器 Download PDF

Info

Publication number
CN109074261A
CN109074261A CN201780026354.5A CN201780026354A CN109074261A CN 109074261 A CN109074261 A CN 109074261A CN 201780026354 A CN201780026354 A CN 201780026354A CN 109074261 A CN109074261 A CN 109074261A
Authority
CN
China
Prior art keywords
instruction
block
scheduler
data
ram
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201780026354.5A
Other languages
English (en)
Other versions
CN109074261B (zh
Inventor
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 CN109074261A publication Critical patent/CN109074261A/zh
Application granted granted Critical
Publication of CN109074261B publication Critical patent/CN109074261B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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, 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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, look ahead
    • G06F9/3818Decoding for concurrent 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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, 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

公开了用于实现用于包括现场可编程门阵列实现的乱序的基于块的处理器的增量调度器的装置和方法。在所公开的技术的一个示例中,处理器包括指令调度器,该指令调度器通过将一个或多个查找表RAM配置为存储针对指令块中的多个指令的就绪状态数据而形成。指令调度器还包括存储针对处理器的就绪状态数据的多个队列,并且在先进先出的基础上将依赖性信息发送到就绪确定逻辑。指令调度器选择就绪指令中的一个或多个以被发出并且由基于块的处理器执行。

Description

用于乱序块ISA处理器的增量调度器
背景技术
由于摩尔定律所预测的持续的晶体管缩放(transistor scaling),微处理器已经从晶体管数的持续增加、集成电路成本、制造资本、时钟频率、以及能量效率中受益,而相关联的处理器指令集架构(ISA)却变化很小。然而,从在过去40年里驱动半导体工业的光刻缩放实现的益处正在放缓或者甚至反转。精简指令集计算(RISC)架构已经成为处理器设计中的主导典范很多年。乱序的超标量实现尚未在面积或性能方面展现出持续改进。因此,存在对于为扩展性能改进而在处理器ISA中改进的足够机会。
发明内容
公开了用于配置、操作并且编译用于基于块的处理器架构(BB-ISA)(包括显式数据图形执行(EDGE)架构)的代码的方法、装置以及计算机可读存储设备。用于例如改进处理器性能和/或降低能耗的解决方案的所描述的技术和工具可以分离地被实现,或者在彼此的各种组合中被实现。如下面将更充分地描述的,所描述的技术和工具可以被实现在以下各项中:数字信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,使用可重新配置逻辑被实现在现场可编程门阵列(FPGA)中的微处理器核)、可编程逻辑、或者其他适合的逻辑电路。如对于本领域的普通技术人员而言将显而易见的,所公开的技术可以被实现在各种计算平台中,包括但不限于服务器、大型机、手机、智能电话、手持式设备、手持式计算机、个人数字助理(PDA)、触摸屏平板设备、平板计算机、可穿戴计算机、以及膝上型计算机。
基于块的处理器架构的软处理器实现可以改进设计生产力。例如,以适合的描述语言(例如,C、SystemC、SystemVerilog或Verilog)编写的基于块的软件处理器的描述可以经历逻辑合成以生成被映射到FPGA的门极网表。针对FPGA生成用于对FPGA编程的比特流。软件到硬件中的昂贵的初始端口代替地变成针对软处理器的简单交叉编译,并且大多数设计轮是快速重新编译。应用瓶颈然后可以被卸载到被暴露为新指令、功能单元、自主加速器、存储器或互连件的定制硬件。
所公开的技术的某些示例允许在不降低复杂性和开销的情况下配置高指令级并行(ILP)、乱序(OoO)超标量的软处理器。在一些示例中,为了面积和能量高效的高ILP执行而提供显式数据图形执行(EDGE)指令集架构。EDGE架构及其编译器共同解决了大部分的寄存器重命名、CAM和复杂性,从而实现用于比按序标量RISC仅仅多几百个的FPGA查找表(“LUT”)的乱序处理器。
该所公开的技术介绍了EDGE ISA,并且探索了与按序RISC相比EDGE微架构如何。公开了用于构建FPGA中的小型快速数据流指令调度器的方法和装置。
附图说明
图1图示了如可以根据所公开的技术的一些示例采用的包括多个处理器核的示例基于块的处理器。
图2图示了如可以在所公开的技术的某些示例中使用的用于实现基于块的处理器的示例微架构。
图3是概述如可以在所公开的技术的一些示例中使用的示例FPGA微架构的块图。
图4图示了如可以在所公开的技术的某些示例中使用的可重新配置逻辑块中的示例可重新配置逻辑。
图5图示了如可以在所公开的技术的一些示例中使用的示例基于块的处理器头和指令。
图6图示了如可以在所公开的技术的某些示例中使用的示例源代码部分和对应的指令块。
图7图示了根据所公开的技术的可以用于基于块的处理器的某些示例的指令格式的示例。
图8是图示了如可以在所公开的技术的某些示例中使用的、基于块的处理器中的处理器核的执行状态的进展的示例的流程图。
图9是概述如可以在所公开的技术的某些示例中使用的示例指令调度器组的块图。
图10是实现图9的示例调度器组的示例FPGA布局。
图11是概述如可以在所公开的技术的某些示例中使用的、包括多个调度器状态核的示例指令调度器核的块图。
图12是如可以在所公开的技术的某些示例中使用的、包括图11中描绘的核调度器的示例FPGA布局。
图13是图示了如可以在所公开的技术的某些示例中使用的、包括基于块的处理器和存储器的示例配置的块图。
图14是概述如可以在所公开的技术的某些示例中执行的、存储调度器状态数据的示例方法的流程图。
图15是概述如可以在所公开的技术的某些示例中执行的、重新评估存储调度器状态数据的示例方法的流程图。
图16是概述如可以在所公开的技术的某些示例中使用的、生成并且评估包括序列号的调度器状态数据的示例方法的流程图。
图17是概述如可以在所公开的技术的某些示例中执行的、产生用于实现基于块的处理器的配置比特流的示例方法的流程图。
图18是图示了用于实现所公开的技术的某些实施例的适合的计算环境的块图。
具体实施方式
I.总体考虑
在未旨在以任何方式进行限制的代表性实施例的上下文中阐述了本公开内容。
如在本申请中所使用的,除非上下文清楚地指明相反,否则单数形式“一”、“一种”和“该”包括复数形式。此外,术语“包括”意味着“包含”。而且,术语“耦合的”涵盖机械的、电的、磁的、光学的、以及将多个项耦合或链接在一起的其他实用方式,并且不排除耦合项之间的中间元件的存在。另外,如在此所使用的,术语“和/或”意味着短语中的任何一项或多项的组合。
在此所描述的系统、方法和装置不应当以任何方式被解释为限制性的。相反,本公开涉及单独以及以彼此的各种组合和子组合形式的各种所公开的实施例的所有新颖和非显而易见的特征和方面。所公开的系统、方法和装置既不限于任何特定方面或者特征或者其组合,所公开的内容和方法也不要求任何一个或多个特定优点存在或者问题被解决。此外,所公开的实施例的任何特征或者方面可以以彼此的各种组合和子组合被使用。
虽然为了方便呈现而以特定顺序的排序描述所公开的方法中的一些方法的操作,但是应当理解,除非特定排序由下面阐述的特定语言所要求,否则说明书的这种方式涵盖重新布置。例如,顺序地描述的操作可以在一些情况下被重新布置或者并发地执行。此外,出于简单的缘故,附图可能未示出所公开的内容和方法能够结合其他内容和方法使用的各种方式。此外,说明书有时使用类似“产生”、“生成”、“显示”、“接收”、“发射”、“验证”、“执行”和“发起”的术语来描述所公开的方法。这些术语是所执行的实际操作的高层描述。对应于这些术语的实际操作将取决于特定实现而变化,并且是由本领域的普通技术人员可容易地辨别的。
参考本公开的装置或者方法在此所呈现的操作理论、科学原理或者其他理论描述已经出于更好的理解的目的而被提供,并且不旨在限制范围。所附的权利要求中的装置和方法不限于以由这样的操作理论所描述的方式实现的那些装置和方法。
所公开的方法中的任一方法可以被实现为被存储在一个或多个计算机可读介质(例如,计算机可读介质(诸如一个或多个光学介质光盘、易失性存储器部件(诸如DRAM或SRAM))或非易失性存储器部件(诸如硬盘驱动器))上并且在计算机(例如,任何市售的计算机,包括智能电话或者包括计算硬件的其他移动设备)上被执行的计算机可执行指令。用于实现所公开的技术的计算机可执行指令中的任一指令以及在所公开的实施例的实现期间创建和使用的任何数据,可以被存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用、或者经由网络浏览器或其他软件应用(诸如远程计算应用)而访问或下载的软件应用的一部分。这样的软件可以例如在单个本地计算机(例如,具有在任何适合的市售的计算机上执行的通用和/或基于块的处理器)上被执行,或者在使用一个或多个网络计算机的网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)、或者其他这样的网络)中被执行。
为了清晰起见,仅描述了基于软件的实现的某些选择的方面。省略了在本领域中众所周知的其他细节。例如,应当理解,所公开的技术不限于任何特定计算机语言或者程序。例如,所公开的技术可以通过以C、C++、JAVA或者任何其他适合的编程语言编写的软件来实现。同样地,所公开的技术不限于任何特定计算机或者硬件类型。适合的计算机和硬件的某些细节是众所周知的并且不需要在本公开中被详细阐述。
此外,基于软件的实施例(包括例如用于使计算机执行所公开的方法中的任一方法的计算机可执行指令)中的任一实施例可以通过适合的通信手段被上传、被下载或者被远程访问。这样的适合的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或者其他这样的通信手段。
II.对所公开的技术的介绍
超标量乱序微架构采用大量的电路资源来重命名寄存器、以数据流顺序调度指令、在误推测之后清理、并且针对精确异常而按序引退结果。这包括昂贵的电路,诸如深度多端口的寄存器文件、用于数据流指令调度唤醒的多端口的内容可访问存储器(CAM)、以及多宽度(many-wide)总线复用器和旁路网络,所有的这些都是资源密集的。例如,多读取、多写入RAM的基于FPGA的实现通常要求复制、多循环操作、时钟加倍、组交错、实况值表和其他昂贵技术的混合。
所公开的技术可以通过应用包括高指令集并行性(ILP)、乱序(out-of-order,OoO)、超标量执行的技术来实现性能增强,同时避免处理器硬件和相关联的软件二者中的大量的复杂性和开销。在所公开的技术的一些示例中,基于块的处理器使用针对区域和能量高效的高ILP执行所设计的EDGE ISA。在一些示例中,EDGE架构和相关联的编译器的使用解决了大部分的寄存器重命名、CAM和复杂性。
在所公开的技术的某些示例中,EDGE ISA可以消除对于一个或多个复杂架构特征(包括寄存器重命名、数据流分析、误推测恢复以及按序引退)的需要,同时支持主流编程语言(诸如C和C++)。在所公开的技术的某些示例中,基于块的处理器执行多个(两个或更多个)指令作为原子块。基于块的指令可以被用于以更显式的方式表达程序数据流和/或指令流的语义,这允许改进的编译器和处理器性能。在所公开的技术的某些示例中,显式数据图形执行指令集架构(EDGEISA)包括关于可以用于改进对不正确的控制流指令的检测的程序控制流的信息,从而增加性能、节省存储器资源和/或以及节省能量。
在所公开的技术的一些示例中,在指令块内组织的指令被原子地取指、执行和提交。块内部的指令以数据流顺序执行,其减少或消除使用寄存器的重命名并且提供功率高效的OoO执行。编译器可以被用于通过ISA显式地编码数据依赖性,从而减少或者消除负担的处理器核控制逻辑在运行时重新发现依赖性。使用所断言的执行,块内分支可以被转换为数据流指令,并且除了存储器依赖性之外的依赖性可以限于直接数据依赖性。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接地传递其操作数,从而减少对耗电的(power-hungry)多端口物理寄存器文件的访问。
在指令块之间,指令可以使用存储器和寄存器来通信。因此,通过利用混合数据流执行模型,EDGE架构可以仍然支持命令式编程语言和顺序的存储器语义,但是期望地还享有具有近按序的功率效率和复杂性的乱序执行的益处。
基于块的处理器实现中的并行调度器可以包括存储针对指令块中的每个指令的指令依赖性的硬件。因此,数百个LUT和FF仅仅用于维持32x12b个就绪状态——几个LUT就有必要用LUT RAM——并且该面积随着指令窗口大小加倍而加倍。此外,在每个周期,并行调度器接下来的就绪LUT重新计算每一个指令的就绪度,即使(尽管在广播情况的情况下)每个发出的指令影响至多两个其他的就绪状态。
在本文中公开的某些示例中,增量调度器将译码的就绪状态和活动就绪状态存储在LUT RAM中,将就绪指令的前沿(就绪指令ID)维持在队列中,并且在每个周期评估2–4个目标指令的就绪状态。相较于触发器的阵列,LUT RAM快速且密集,但是可能呈现出一些缺点:许多LUT RAM不包括快速清除它(同时清除所有存储器单元)的方式,并且在每个周期可以支持有限数量的写入(例如,一个写入)。
在本文中公开的某些示例中,增量调度器是LUT RAM和对应的触发器的阵列的混合。当被映射到示例Xilinx Series-7FPGA时,译码的就绪状态和活动就绪状态被存储在16x4个真双端口LUT RAM的若干组中,其通过包括分立触发器的阵列的16x1个闪存可清除RAM来确认。该结构包括16个FF(具有共同重置)、16个写端口地址译码器(八个5,5-LUT)以及16:1读端口多路复用器(四个6-LUT、两个MUXF7、一个MUXF8),由此总共消耗仅仅三个切片。来自该混合的每个读取读取4位LUT RAM条目并且其有效位被存储在触发器中。每个写更新LUT RAM并且设置(在触发器中的)其有效位。取决于有效位的值,输出存储在存储器中的值或者重置值。
III.示例基于块的处理器
图1是如可以被实现在所公开的技术的一些示例中的基于块的处理器100的块图10。处理器100被配置为根据指令集架构(ISA)来执行原子指令块,ISA描述了处理器操作的若干方面,包括寄存器模型、由基于块的指令执行的若干定义操作、存储器模型、中断、以及其他架构特征。基于块的处理器包括多个一个或多个处理器核110,其包括处理器核111。基于块的处理器可以被实现为定制或专用集成电路(例如,包括片上系统(SoC)集成电路)、被实现为现场可编程门阵列(FPGA)或其他可重新配置逻辑、或者被实现为由物理通用处理器托管的虚拟机。
如在图1中所示,处理器核经由核互连120而彼此连接。核互连120携带数据并且控制核110中的单独的核、存储器接口140以及输入/输出(I/O)接口150之间的信号。核互连120可以使用电的、光学的、磁的或者其他适合的通信技术来发射和接收信号,并且可以取决于特定期望的配置而提供根据若干不同的拓扑来布置的通信连接。例如,核互连120可以具有交叉开关、总线、点对点总线、或者其他适合的拓扑。在一些示例中,核110中的任一核可以被连接到其他核中的任一核,而在其他示例中,一些核仅被连接到其他核的子集。例如,每个核可以仅被连接到最近的4、8或20个邻近核。核互连120可以用于将输入/输出数据发射至核以及从核发射输入/输出数据,以及将控制信号和其他信息信号发射至核以及从核发射控制信号和其他信息信号。例如,核110中的每个核110可以接收并且发射指示当前正由相应核中的每个核所执行的指令的执行状态的信号量(semaphore)。在一些示例中,核互连120被实现为将核110和存储器系统连接的接线,而在其他示例中,核互连可以包括用于多路复用(一条或多条)互连线上的数据信号的电路、开关和/或路由部件(包括活跃的信号驱动器和中继器)、或者其他适合的电路。在所公开的技术的一些示例中,在处理器100内发射的信号和/或向/从处理器100发射的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括差分信号、脉冲信号、或者用于发射数据和控制信号的其他适合的信号。
在图1的示例中,处理器的存储器接口140包括被用于连接到存储器145(例如,被定位在除了处理器100之外的另一集成电路上的存储器(例如,存储器可以是静态RAM(SRAM)或动态RAM(DRAM)、或者嵌入在与处理器相同的集成电路上的存储器(例如,嵌入式SRAM或DRAM(eDRAM))))的接口逻辑。存储器接口140和/或主存储器可以包括高速缓存(例如,n路或关联高速缓存)以改进存储器存取性能。在一些示例中,高速缓存使用静态RAM(SRAM)被实现,并且主存储器145使用动态RAM(DRAM)被实现。在一些示例中,存储器接口140被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口140包括允许在不使用(一个或多个)寄存器文件和/或处理器100的情况下传送存储器中的数据块的直接存储器访问(DMA)控制器。在一些示例中,存储器接口140管理虚拟存储器的分配,从而扩展可用的主存储器145。在一些示例中,用于旁路高速缓存结构、或者用于当执行存储器同步操作(例如,处理争用问题或者在多个不同线程、进程或处理器之间共享的存储器)时确保高速缓存相干性的支持,由存储器接口140和/或相应的高速缓存结构提供。
I/O接口150包括用于将输入信号和输出信号接收并且发送到其他部件155的电路,其他部件155诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或者其他协处理部件的信号)、时钟信号、信号量、或者其他适合的I/O信号。I/O信号可以是同步的或者异步的。在一些示例中,I/O接口的全部或部分结合存储器接口140使用存储器映射的I/O技术被实现。在一些示例中,I/O信号实现不限于全摆幅电数字信号,但是I/O接口150可以被配置为提供差分信号、脉冲信号、或者用于发射数据和控制信号的其他适合的信号。
基于块的处理器100还可以包括控制单元160。控制单元160监督处理器100的操作。能够由控制单元160执行的操作可以包括对核的分配和去分配以用于执行指令处理;对在核、寄存器文件、存储器接口140和/或I/O接口150中的任何项之间的输入数据和输出数据的控制;对执行流的修改;以及验证控制流中的分支指令、指令头和其他改变的(一个或多个)目标位置。控制单元160可以根据表示针对指令块的退出点和控制流概率的控制流和元数据信息来产生并且控制处理器。
控制单元160还可以处理硬件中断,并且控制特殊系统寄存器(例如,被存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的一些示例中,控制单元160至少部分地使用处理器核110中的一个或多个核被实现,而在其他示例中,控制单元160使用非基于块的处理器核(例如,耦合到存储器的通用RISC处理核、在FPGA中提供的硬宏处理器块、或者通用软处理器)被实现。在一些示例中,控制单元160至少部分地使用以下各项中的一项或多项被实现:硬连线有限状态机、可编程微代码、可编程门阵列、或者其他适合的控制电路。在备选示例中,可以由核110中的一个或多个核来执行控制单元功能。
控制单元160包括用于控制处理器核110的指令流水线的多个调度器165-168。在其他示例中,调度器可以被布置为使得它们关于每个单独处理器核被包含。如在此所使用的,调度器块分配涉及用于引导指令块的操作,包括发起指令块映射、取指、译码、执行、提交、中止、空闲以及刷新指令块。另外,指令调度涉及调度指令块内的指令的发出和执行。例如,基于指示针对存储器存取指令的相对次序的指令依赖性和数据,控制单元160可以确定指令块中的哪个(哪些)指令准备好发出并且启动对指令的发出和执行。处理器核110在指令块映射期间被指派到指令块。指令操作的叙述阶段出于说明性目的,并且在所公开的技术的一些示例中,某些操作可以被组合、被省略、被分离为多个操作,或者被添加附加操作。调度器165-168中的每个调度指令的流,包括对用于执行指令处理的核的分配和解除分配,对核、寄存器文件、存储器接口140和/或I/O接口150中的任何之间的输入数据和输出数据的控制。调度器165-168中的每个可以包括增量调度能力,包括使用队列以用于存储调度器状态数据,诸如译码的就绪状态数据和活动就绪状态数据。
基于块的处理器100还包括时钟发生器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。
处理器核还包括指令窗口230,其包括指令调度器235、译码的指令存储236和多个操作数缓冲器239。在FPGA实现中,这些指令窗口部件230中的每个可以被实现,包括使用LUT RAM(例如,具有被配置为查找表的SRAM)或BRAM(块RAM)。指令调度器235可以将针对指令的指令标识符(指令ID或IID)作为控制信号发送到译码的指令存储236和操作数缓冲器239。如下面进一步讨论的,指令块中的每个指令具有唯一地识别指令块内的指令的相关联的指令标识符。在一些示例中,用于发送执行指令的结果的指令目标被编码在指令中。以这种方式,代替监视寄存器依赖性,指令之间的依赖性可以使用指令标识符来跟踪。在一些示例中,处理器核可以包括两个或更多个指令窗口。在一些示例中,处理器核可以包括具有多个块上下文的一个指令窗口。
如下面将进一步讨论的,微架构200包括存储针对基于块的处理器架构中定义的寄存器的数据的寄存器文件290,并且可以具有一个或多个读端口和一个或多个写端口。因为指令块在事务基础上执行,所以由指令块的实例做出的对寄存器值的改变对相同实例不可见;寄存器写将在完成了对指令块的执行后被提交。
译码的指令存储236存储用于控制处理器流水线中的硬件部件的操作的译码的信号。例如,32位指令可以被译码成128位的译码的指令数据。译码的指令数据由译码器220在指令被取指之后被生成。操作数缓冲器239存储操作数(例如,从寄存器文件接收到的寄存器值,从存储器接收到的数据,编码于指令内的立即操作数,由早前发出的指令计算的操作数,或者其他操作数的值)直到它们相应的译码的指令准备好执行。用于流水线的执行阶段的指令操作数和断言相应地从操作数缓冲器239、而不是(至少直接地)从寄存器文件290读取。指令窗口230可以包括用于指向指令的断言的缓冲器,包括用于组合通过多个指令发送到指令的断言的线或逻辑(wired-OR logic)。
在一些示例中,除了寄存器读操作的所有指令操作数从操作数缓冲器239而不是从寄存器文件被读取。在一些示例中,这些值被维持直到指令发出并且操作数被传递到执行流水线。在一些FPGA示例中,译码的指令存储236和操作数缓冲器239利用多个LUT RAM被实现。
指令调度器235维持每个译码的指令的依赖性(例如,指令的断言和数据操作数)的就绪状态的记录。当全部指令的依赖性(如果有的话)都被满足时,指令唤醒并且准备好发出。在一些示例中,针对指令依赖性的数据被存储在一个或多个队列中,并且指令被选择为准备好在至少部分的先进先出的基础上发出。在图示的示例中,除了数据复用和功能单元控制信号,译码的指令数据可以编码至多两个就绪事件。指令调度器235接收这些事件和/或从其他源(被选择用于输入到分别具有多路复用器237和238的输入T0和T1上的调度器)接收事件,并且更新调度器状态数据,包括窗口中的其他指令的就绪状态数据。因此,数据流执行继续,以指令块的就绪零输入指令开始,接着是这些指令瞄准的指令,等等。一些指令准备好在它们不具有依赖性时立即发出(例如,移动立即指令)。取决于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、LUT RAM或其他可重新配置RAM来实现。如相关领域的普通技术人员将显而易见的,以集成电路、可编程逻辑或其他适合的逻辑实现的其他电路结构可以用于实现针对指令调度器235的硬件。在所公开的技术的一些示例中,前端流水线阶段IF和DC可以与后端流水线阶段(IS、EX、LS)解耦运行。
在图2的示例中,操作数缓冲器239经由一个或多个开关(例如,多路复用器241和242)将数据操作数(为了方便,其可以被指定为左操作数(LOP)和右操作数(ROP))发送到执行状态流水线寄存器245的集合。这些操作数还可以分别被称为OP1和OP0。第一路由器240用于将数据从操作数缓冲器239发送到功能单元250中的一个或多个,功能单元250可以包括但不限于整数ALU(算术逻辑单元)(例如,整数ALU 255)、浮点单元(例如,浮点ALU 256)、移位/旋转逻辑(例如,桶式移位器257)、或者其他适合的执行单元,其可以包括图形功能、物理功能以及其他数学运算。在一些示例中,可编程执行单元258可以被重新配置为实现多个不同的任意功能(例如,先验或在运行时)。
来自功能单元250的数据可以随后通过第二路由器(未示出)被路由到加载/存储流水线寄存器260的集合、加载/存储队列270(例如,用于执行存储器加载和存储器存储操作),或者被反馈回到执行流水线寄存器、由此旁路操作数缓冲器239。加载/存储队列270被耦合到对用于存储器操作的数据进行高速缓存的数据高速缓存275。数据高速缓存275和加载/存储流水线寄存器260的输出可以被发送到第三路由器280,其转而根据正在流水线阶段中执行的指令而将数据发送到寄存器文件290、操作数缓冲器239和/或执行流水线寄存器245。
当指令块的执行完成时,指令块被指定为“已提交”,并且来自控制输出的信号可以转而由基于块的处理器100内的其他核和/或由控制单元160使用,以启动对其他指令块的调度、取指和执行。
如相关领域的普通技术人员将容易理解的,单独的核内的部件不限于图2中示出的那些,而是可以根据具体应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令译码器可以由两个或更多个指令窗口共享,并且使用的功能单元的数量和类型可以取决于针对基于块的处理器的具体目标应用而变化。在选择和分配具有指令核的资源中应用的其他考虑包括性能要求、能量使用要求、集成电路管芯、处理工艺、和/或成本。
对相关领域的普通技术人员将显而易见的是,可以通过设计和分配处理器核110的指令窗口和控制单元内的资源,而在处理器性能上做出权衡。面积、时钟周期、功能和限制基本上确定单独的核110的实现的性能和基于块的处理器100的吞吐量。
对受执行的指令影响的处理器(诸如寄存器文件290和存储器)的可见架构状态的更新可以被本地缓冲在核内,直到指令被提交。控制电路可以确定何时指令准备好被提交,对提交逻辑排序,并且发出提交信号。例如,针对指令块的提交阶段可以在所有寄存器写入被缓冲、所有对存储器的写入(包括无条件和有条件的存储)被缓冲以及分支目标被计算时开始。指令块可以在对可见架构状态的更新完成时被提交。例如,指令块可以在寄存器写被写入作为寄存器文件、存储被发送到加载/存储单元或存储器控制器以及提交信号被生成时而被提交。控制电路还至少部分地控制功能单元到指令窗口的分配。
因为指令块作为原子事务单元被提交(或中止),所以应当指出的是,某些操作的结果对指令块内的指令不可用。这与提供在单独的、逐个指令的基础上可见的结果的RISC和CISC架构形成对比。因此,公开了用于在基于块的处理器环境中支持存储器同步和其他存储器操作的附加技术。
在一些示例中,基于块的执行可以是非断言的、或者被断言为真或假。断言的指令直到其被另一指令的断言结果瞄准、并且该结果与断言条件匹配时才变成就绪。如果指令的断言不匹配,则指令决不发出。
在一些示例中,在分支到新指令块后,(存储于指令调度器235中的)所有指令窗口就绪状态被闪速清除(块重置)。然而,当块分支回到其本身(块刷新)时,仅仅活动就绪状态被清除;译码的就绪状态被保留,以使得不必重新取指和译码块的指令。因此,代替执行块重置,刷新可以用于节省循环中的时间和能量。在一些示例中,序列号可以被分配给指令块并且用于验证译码的就绪状态对于当前执行的指令块是否有效。
最终,调度器设计可以在一定范围的EDGE ISA上可扩展。在一些示例中,每个流水线周期可以接受从一个至四个的译码的指令和从两个至四个的目标就绪事件,并且在每个周期发出一个至两个指令。
多种不同的技术可以用于实现指令调度器235。例如,调度器235可以被实现为将就绪状态保持在LUT RAM中的增量调度器,并且其在每个周期更新大约两个至四个目标指令的就绪状态。增量调度器将就绪状态作为被临时存储在队列中的数据包进行更新,直到相应指令发出。
寄存器文件290可以包括用于将数据存储在寄存器文件中的两个或更多个写端口,以及具有用于从寄存器文件内的单独的寄存器读取数据的多个读端口。在一些示例中,单个指令窗口(例如,指令窗口230)可以一次访问寄存器文件的仅一个端口,而在其他示例中,指令窗口230可以访问一个读端口和一个写端口、或者可以同时访问两个或更多个读端口和/或写端口。在一些示例中,微架构被配置为使得并非寄存器290的所有读端口都可以使用旁路机构。对于图2中所示的示例微架构200,寄存器文件可以将旁路路径上的寄存器数据发送到针对操作数OP0、而不是操作数OP1的多路复用器242中的一个。因此,对于一个周期内的多次寄存器读取,仅仅一个操作数可以使用旁路,而另一寄存器读取结果被发送到操作数缓冲器239,其将额外时钟周期插入指令流水线中。
在一些示例中,寄存器文件290可以包括64个寄存器,寄存器中的每个寄存器保持32位的数据的字。(为便于解释,除非另外指定,否则本申请将把32位的数据称为字。根据所公开的技术的适合的处理器可以利用8位、16位、64位、128位或其他数量的位的字进行操作)在一些示例中,寄存器文件290内的寄存器中的一些寄存器可以被分配至特殊目的。例如,寄存器中的一些寄存器可以被专用作系统寄存器,其示例包括以下的寄存器:存储恒定值(例如,所有零字)、(一个或多个)程序计数器(PC)(其指示正被执行的程序线程的当前地址)、物理核数目、逻辑核数目、核分配拓扑、核控制标志、执行标志、处理器拓扑或者其他适合的专用目的。在一些示例中,寄存器文件290被实现为触发器阵列,而在其他示例中,寄存器文件可以使用锁存器、SRAM或者其他形式的存储器存储装置而被实现。针对给定处理器的ISA规格指定寄存器文件290内的寄存器如何被定义并且被使用。
V.示例现场可编码门阵列架构
图3是描绘被配置为实现所公开的技术的某些示例的示例现场可编程门阵列(FPGA)架构的块图300。例如,以上关于图1讨论的基于块的处理器100(包括使用图2中描绘的微架构200的那些示例)可以被映射到图3的FPGA架构。
FPGA包括以阵列布置的可重新配置逻辑块的阵列。例如,FPGA包括:第一行逻辑块,其包括逻辑块310、311和319;以及第二行逻辑块,其包括逻辑块320、321和329。逻辑块中的每个包括可以被重新配置为实现任意逻辑功能的逻辑,以及还可以包括诸如锁存器、触发器和存储器的顺序逻辑元件的逻辑。逻辑块使用包括多个互连开关(其也可以是可编程的)的路由结构而被彼此互连。例如,存在被定位在第一行可重新配置逻辑块与第二行可重新配置逻辑块之间的第一行开关块330、331、332等等。开关可以被配置以便改变在可重新配置逻辑块之间运送信号的有线连接。例如,指令调度器、功能单元、流水线缓冲器以及操作数缓冲器可以使用图3的开关块而被映射到逻辑块。
FPGA还包括多个更复杂的部件。例如,逻辑块包括多个块RAM,例如块RAM 340和块RAM 349。块RAM通常包含更大数量的存储器位,例如,通过将地址应用到存储器并且从一个或多个读端口读取来访问的几千个存储器位。在一些示例中,块RAM可以包括两个或更多个写端口和两个或更多个读端口。在其他示例中,块RAM可以仅仅具有单个读端口和/或单个写端口。在块RAM通常通过应用地址并且读取对应数据来访问的同时,在一些示例中,块RAM可以被配置有附加电路,其允许实现包括移位寄存器和先进先出(FIFO)缓冲器的更复杂的功能。
图示的FPGA还包括多个硬宏块,其包括硬宏块350和硬宏块359。这些宏块可以包括更复杂的功能,诸如处理器功能、数字信号处理功能、加速器或认为是期望的其他功能。FPGA还由可以被耦合到逻辑块、块ram和/或硬宏块的I/O环360环绕,以便向远离FPGA的部件接收和发送信号。在一些示例中,I/O信号是全轨电压信号,而其他示例使用差分信号。在一些示例中,I/O端口可以被多路复用(例如,时分多路复用)以便支持比在FPGA上可用的管脚的数量更多的信号的输入和输出。
尽管FPGA的许多示例通常是通过使用电可擦存储器而可重新配置任意次数的,但是在其他示例中,可以使用一次性可编程逻辑元件。例如,逻辑块和开关可以利用熔丝、反熔丝的使用而被编程,或者利用ROM掩码而被编程,以不容易可逆的方式一次性编程逻辑功能。
在可重新配置情况中,FPGA通常具有根据被称为比特流或配置比特流的文件来接收数据的配置端口。比特流被读取到设备中并且用于编程和配置逻辑块、开关、块ram和/或硬宏。当期望新设计时,配置可以被擦除并且新的设计被配置到设备中。在一些示例中,FPGA可以被部分地重新配置以便节省编程时间。例如,逻辑块、开关或块ram的子集可以在现场被动态地重新配置而无需对整个设备重新编程。
针对被映射到可重新配置逻辑上的基于块的处理器的实现的一个挑战是确定可以使用定制或现成设备的可用块高效实现的微架构结构。然而,使用所公开的技术,可以实现更高的性能和/或更高效的结构。另外,应当容易理解,尽管FPGA的一些示例是独立集成电路,但是在其他示例中,FPGA可以被不同地封装,例如在多芯片模块(MCM)中、或者在与定制或基础片上系统(SoC)相同的电路管芯上被封装。
图4是图示可以被配置为形成示例FPGA集成电路的逻辑结构的部分的四个可重新配置逻辑块410、411、412和413的块图400。示出的可重新配置逻辑块内部的部件是相同的或均质的,但是应当容易理解,在其他示例中,多于一种类型的可重新配置逻辑块可以存在于单个FPGA上。
第一可重新配置逻辑块410包括被耦合到进位逻辑430、多个多路复用器440和445以及存储元件(这里为D触发器)450的六输入查找表(LUT)420。LUT 420可以使用小的存储器(例如,如所示的具有六个地址位和两个输出位的存储器)来实现。因此,任何六输入布尔函数可以通过使用单个LUT来实现。在一些示例中,LUT的输出可以被组合,或者可重新配置逻辑块可以具有能够被连接在一起以便执行更复杂的逻辑功能的多个LUT。在一些示例中,除了LUT,可以提供常见逻辑功能。例如,进位逻辑430可以被配置为半加法器或全加法器,由此在紧凑足迹中提供附加逻辑。多路复用器用于选择来自其他部件的各种输出。例如,多路复用器440可以用于执行针对加法器的进位传播逻辑,而多路复用器445可以用于选择LUT 420或进位逻辑430的另一输出。在一些示例中,多路复用器用于选择状态元件(例如触发器450)的顺序输出或者查找表的组合输出。对本领域的普通技术人员而言应当容易理解,不同的逻辑功能、LUT大小和顺序要素可以被采用于可重新配置逻辑元件中。因此,用于将基于块的处理器映射到这样的可重新配置逻辑的技术可以取决于特定目标FPGA架构而变化。可重新配置逻辑块内部的逻辑的配置可以使用FPGA的配置端口来编程。在一些示例中,LUT不被一次编程,而是可以被配置为用作存储在基于块的处理器中使用的特定数据的小的存储器。
在所公开的技术的一些示例中,逻辑合成工具(逻辑编译器)用于将针对块处理器的规格转换成可以被应用到FPGA的配置端口,以将逻辑配置为实现基于块的处理器的配置比特流。在一些示例中,设计者可以使用RPM(关系放置宏)技术来改进面积和互连延迟,并且实现用于在模块组成和大规模复制下的轻松路由和定时关闭的可重复布局。例如,通过包括实例化模块并且将它们拼接到调度器中的结构RTL,针对指令调度器的逻辑可以被锁定到单个LUT的集合,从而允许对FPGA内的逻辑的紧凑聚类和放置。
VI.示例指令块流
现在转到图5的图500,图示了基于块的指令流的一部分510,包括若干可变长度指令块511-514。指令流可以用于实现用户应用、系统服务或者任何其他适合的用途。指令流可以被存储在存储器中,从存储器中的另一过程接收,通过网络连接接收,或者以任何其他适合的方式被存储或接收。在图5中所示的示例中,每个指令块从指令头开始,其跟随有不同的数目的指令。例如,指令块511包括头520和二十条指令521。所图示的特定指令头520包括部分地控制指令块内的指令的执行的若干数据字段,并且还允许改进的性能增强技术,包括例如分支预测、推测执行、惰性评估和/或其他技术。指令头520还包括指令块大小的指示。指令块大小可以处于比例如被包含在指令块内的4指令数据块(chunk)的数目更大的指令的数据块中。换句话说,块的大小被移位4位以便压缩被分配到指定指令块大小的头空间。因此,0的大小值指示最小大小的指令块,其是跟随有四条指令的块头。在一些示例中,指令块大小被表达为字节数、字数、n字数据块数、地址、地址偏移或者使用用于描述指令块的大小的其他适合的表达。在一些示例中,指令块大小由指令块头和/或脚中的终止位模式来指示。
指令块头520还可以包括一个或多个执行标志,其指示用于执行指令块的一种或多种操作模式。例如,操作模式可以包括核融合操作、向量模式操作、存储器依赖性预测和/或按序或确定性指令执行。另外,执行标志可以包括抑制指令块的推测执行的块同步标志。
在所公开的技术的一些示例中,指令头520包括指示编码数据是指令头的一个或多个标识位。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位总是被设定为二进制值1,以指示有效指令块的开始。在其他示例中,不同的位编码可以用于(一个或多个)标识位。在一些示例中,指令头520包括指示相关联的指令块被编码所针对的ISA的特定版本的信息。
指令块头还可以包括用于在例如分支预测、控制流确定和/或分支处理中使用的若干块退出类型。退出类型可以指示分支指令的类型是什么,例如:顺序分支指令,其指向存储器中的下一相连的指令块;偏移指令,其是相对于偏移而计算的存储器地址处的另一指令块的分支;子例程调用、或者子例程返回。通过编码指令头中的分支退出类型,分支预测器可以至少部分地在相同指令块内的分支指令已经被取指和/或被译码之前开始操作。
图示的指令块头520还包括存储掩码,其指示编码于块指令中的加载存储队列标识符中的哪些被指派到存储操作。指令块头还可以包括写入掩码,其标识相关联的指令块将写入的(一个或多个)全局寄存器。在一些示例中,存储掩码由例如指令译码器(例如,译码器220)存储在存储向量寄存器中。在其他示例中,指令块头520不包括存储掩码,而是在指令块被译码时由指令译码器通过分析指令依赖性来动态地生成存储掩码。例如,译码器可以生成针对指令块的加载存储标识符以确定存储掩码并且将存储掩码数据存储在存储向量寄存器中。类似地,在其他示例中,写入掩码未被编码于指令块头中,而是被动态地生成(例如,由指令译码器通过分析指令块中的指令所涉及的寄存器)并且被存储在写入掩码寄存器中。写入掩码可以用于确定指令的执行何时已经完成并且因此启动指令块的提交。相关联的寄存器文件必须在指令块可以完成之前接收对每个条目的写入。在一些示例中,基于块的处理器架构可以不仅包括标量指令,而且还包括单指令多数据(SIMD)指令,其允许具有单个指令内的更大数目的数据操作数的操作。
可以用于指令521的合适的基于块的指令的示例可以包括用于执行整数和浮点运算、逻辑操作、类型转换、寄存器读和写、存储器加载和存储、分支和跳的执行的指令,以及其他适合的处理器指令。在一些示例中,指令包括用于将处理器配置为根据通过例如推测的一个或多个操作来进行操作的指令。因为指令的依赖性被编码于指令块中(例如,指令块头、瞄准指令的其他指令中、和/或指令本身中),所以指令可以在指令的依赖性被满足时发出并且不按程序顺序执行。
VII.示例块指令目标编码
图6是描绘C语言源代码的两个部分610和615及其相应的指令块620和625的示例的图600,其图示了基于块的指令可以如何显式地编码其目标。在该示例中,前两个READ(读取)指令630和631分别瞄准ADD(加法)指令632的右(T[2R])和左(T[2L])操作数(2R指示瞄准指令号2的右操作数;2L指示指令号2的左操作数)。在所图示的ISA中,读指令是从全局寄存器文件(例如,寄存器文件290)读取的唯一指令;然而,任何指令可以瞄准全局寄存器文件。当ADD指令632接收到这两个寄存器读取的结果时,其将变为就绪并且执行。要指出,本公开内容有时将右操作数称为OP0并且将左操作数称为OP1。
当TLEI(测试小于等于立即(test-less-than-equal-immediate))指令633从ADD接收其单个输入操作数时,其将变为准备好发出并且执行。测试然后产生在信道一(B[1P])上广播到在用于断言的广播信道上监听的所有指令的断言操作数,其在该示例中是两个断言的分支指令(BRO_T 634和BRO_F 635)。接收匹配断言的分支指令将发出,但是利用互补断言编码的其他指令将不发出。
指令块620的依赖性图640还被图示为指令节点阵列650和其对应的操作数目标655和656。这图示了块指令620、对应的指令窗口条目以及由指令所表示的底层数据流程图之间的对应性。此处,译码的指令READ 630和READ 631准备好发出,因为其不具有输入依赖性。当其发出并且执行时,从寄存器R6和R7读取的值被写入到ADD 632的右操作数缓冲器和左操作数缓冲器中,这使得ADD 632的左操作数和右操作数“就绪”。因此,ADD 632指令变为就绪、发出到ALU、执行、并且和被写入到TLEI指令633的左操作数。
VIII.示例基于块的指令格式
图7是图示用于指令头710、通用指令720、分支指令730和存储器访问指令740(例如,存储器加载或存储指令)的指令格式的一般化示例的图。指令格式可以用于根据在指定操作模式的指令头中指定的多个执行标志而执行的指令块。指令头或者指令中的每一个根据位数而被标记。例如,指令头710包括四个32位的字并且从其最低有效位(lsb)(位0)被标记直到其最高有效位(msb)(位127)。如所示出的,指令头包括写入掩码字段、多个执行标志字段、指令块大小字段和指令头ID位(指令头的最低有效位)。在一些示例中,指令头710包括附加元数据715和/或716,其可以用于控制指令块执行和性能的附加方面。
图7中描绘的执行标志字段占据指令块头710的第6至第13位并且指示用于执行指令块的一种或多种操作模式。例如,操作模式可以包括核融合操作、向量模式操作、分支预测器抑制、存储器依赖性预测器抑制、块同步、块之后的中断、块之前的中断、块下降、和/或按序或确定性的指令执行。块同步标志占据指令块的第9位并且当被设置为1时抑制指令块的推测执行。抑制推测执行例如当诸如存储条件指令的共享存储器操作或其他共享存储器操作由指令块执行、以防止违反ISA规格的存储器危害时是高度期望的。
退出类型字段包括可以用于指示被编码在指令块内的控制流指令的类型的数据。例如,退出类型字段可以指示指令块包括以下各项中的一项或多项:顺序分支指令、偏移分支指令、间接分支指令、调用指令、和/或返回指令。在一些示例中,分支指令可以是用于在指令块之间传递控制流的任何控制流指令,其包括相对地址和/或绝对地址,并且使用有条件的断言或者无条件的断言。除了确定隐式控制流指令之外,退出类型字段可以用于分支预测和推测执行。
所图示的通用块指令720被存储为一个32位的字,并且包括操作码字段、断言字段、广播ID字段(BID)、向量操作字段(V)、单指令多数据(SIMD)字段、第一目标字段(T1)、以及第二目标字段(T2)。对于具有比目标字段更多的消费者的指令而言,编译器可以使用移动指令来构建扇出树,或者其可以将高扇出指令指派到广播。广播支持通过轻量网络而将操作数发送到核中的任何数目的消费者指令。
虽然由通用指令720概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域的技术人员将容易理解到,即使对于ISA的特定示例而言,指令字段中的一个或多个指令字段也可以偏离用于特定指令的通用格式。操作码字段指定由指令720执行的(一个或多个)操作,诸如存储器读/写、寄存器加载/存储、加法、减法、乘法、除法、移位、旋转、系统操作或者其他适合的指令。断言字段指定指令将执行的条件。例如,断言字段可以指定值“真”,并且指令将仅在对应的条件标志匹配指定的断言值的情况下执行。在一些示例中,断言字段至少部分地指定哪一个被用于比较断言,而在其他示例中,执行在由先前指令(例如,指令块中的先前指令)设定的标志上被断定。在一些示例中,断言字段可以指定指令将总是被执行或者绝不被执行。因此,断言字段的使用可以通过减少分支指令的数目来允许更密集的目标代码、改进的能量效率以及改进的处理器性能。
目标字段T1和T2指定基于块的指令的结果使用指令标识符(IID)被发送到的指令。例如,在指令槽7处的ADD指令可以指定其计算结果将被发送到槽3和10处的指令(在五位编码中,00011b和01010b),包括操作数槽(例如,左操作数、右操作数、或断言操作数)的指定。取决于特定指令和ISA,所图示的目标字段之一或二者可以由其他信息替换,例如,第一目标字段T1可以由中间操作数、附加操作码、指定两个目标等来替换。
分支指令730包括操作码字段、断言字段、广播ID字段(BID)以及偏移字段。操作码和断言字段在如关于通用指令所描述的格式和功能方面是类似的。偏移可以以四个指令的组为单位被表达,因此扩展在其上可以执行分支的存储器地址范围。利用通用指令720和分支指令730示出的断言可以用于避免指令块内的附加分支。例如,特定指令的执行可以根据先前指令的结果(例如,两个操作数的比较)被断定。如果断言是假的,则指令将不提交由特定指令计算出的值。如果断言值未匹配所要求的断言,则指令不发出。例如,BRO_F(断言假)指令在其被发送假断言值的情况下将发出。
应当容易理解到,如在此所使用的,术语“分支指令”不限于将程序执行改变到相对存储器位置,而且还包括跳转到绝对或者符号存储器位置、子例程调用和返回,以及可以修改执行流的其他指令。在一些示例中,通过改变系统寄存器(例如,程序计数器PC或者指令指针)的值来修改执行流,而在其他示例中,可以通过修改被存储在存储器中的指定位置处的值来改变执行流。在一些示例中,跳转寄存器分支指令用于跳转到被存储在寄存器中的存储器位置。在一些示例中,分别使用跳转和链接和跳转寄存器指令来实现子例程调用和返回。
存储器访问指令740格式包括操作码字段、断言字段、广播ID字段(BID)、立即字段(IMM)和目标字段(T1)。操作码字段、广播字段、断言字段在格式上类似并且如关于通用指令所描述的起作用。例如,对特定指令的执行可以在先前指令的结果(例如,两个操作数的比较)上断言。如果断言为假,则指令将不提交由该特定指令计算的值。如果断言值与所要求的断言不匹配,则指令不发出。立即字段可以被用作针对被发送到加载或存储指令的操作数的偏移。操作数加上(移位的)立即偏移被用作针对加载/存储指令的存储器地址(例如,用于从存储器中读取数据或者将数据存储到存储器中的地址)。对于一些指令,诸如存储条件指令,目标字段T1 745用于指定通过执行生成的状态指示符将被存储在哪里。例如,目标字段T1 745可以指定寄存器来(例如,基于加载链接地址和链接值)存储指示存储条件指令是否成功执行的状态指示符。后续指令块可以检查状态指示符值并且采取合适的动作(例如,通过冲洗指令块,使指令块重新执行,引发异常,等等)。
IX.示例处理器状态图
图8是图示在指令块被映射、执行和引退时被分配给指令块的多个状态的状态图800。例如,状态中的一个或多个可以在执行指令期间根据一个或多个执行标志来分配。应当容易理解,图8中示出的状态是所公开的技术的一个示例,但是在其他示例中,指令块可以具有附加的或更少的状态、以及具有与状态图8中描绘的状态不同的状态。在状态805处,指令块未被映射。指令块可以驻留在耦合到基于块的处理器的存储器中、被存储在诸如硬盘驱动器或闪存驱动器的计算机可读存储设备上,并且可以在处理器本地或者被定位在远程服务器处并且可使用计算机网络访问。未映射的指令还可以至少部分地驻留在耦合到基于块的处理器的高速缓存存储器中。
在指令块映射状态810处,针对基于块的处理器(例如指令调度器)的控制逻辑可以用于监视基于块的处理器的处理核资源,并且将指令块映射到处理核中的一个或多个。
控制单元可以将指令块中的一个或多个映射到处理器核和/或特定处理器核的指令窗口。在一些示例中,控制单元监视先前已经执行了特定指令块的处理器核并且可以重新使用针对仍然驻留在“预热”的处理器核上的指令块的译码的指令。一旦一个或多个指令块已经被映射到处理器核,指令块就可以前进到取指状态820。
当指令块处于取指状态820(例如,指令取指)时,映射的处理器核从基于块的处理器的存储器系统中取指计算机可读块指令,并且将它们加载到与特定处理器核相关联的存储器中。例如,针对指令块的取指的指令可以被取指并且被存储在处理器核内的指令高速缓存中。指令可以使用核互连而被传送到处理器核。一旦已经取指了指令块的至少一个指令,该指令块就可以进入指令译码状态830。
在指令译码状态830期间,取指的指令的各个位被译码成能够由处理器核用于控制特定指令的执行的信号,包括对指示存储器访问指令的相对顺序的标识符的生成。例如,译码的指令可以被存储在以上在图2中示出的存储器存储中的一个中。译码包括生成针对译码的指令的依赖性、针对译码的指令的操作数信息和针对译码的指令的目标。一旦指令块的至少一个指令已经被译码,指令块就可以前进到发出状态840。
在发出状态840期间,指令依赖性被评估以确定指令是否准备好执行。例如,指令调度器可以监视指令的源操作数并且(针对断言的指令)断言操作数必须在指令准备好发出之前可用。对于一些编码,某些指令还必须根据指定顺序发出。例如,存储器加载存储操作根据编码于每个指令中的LSID值来排序。在一些示例中,多于一个指令准备好同时发出,并且指令调度器选择准备好发出的指令之一来发出。指令可以使用它们的IID来识别以方便评估指令依赖性。一旦已经发出了指令块的至少一个指令,针对(一个或多个)发出的指令的源操作数可以被取指(或者在旁路路径上维持),并且指令块可以前进到执行状态850。
在执行状态850期间,与指令相关联的操作使用例如如以上关于图2所讨论的功能单元260来执行。如以上所讨论的,执行的功能可以包括算术功能、逻辑功能、分支指令、存储器操作和寄存器操作。与处理器核相关联的控制逻辑监视指令块的执行,并且一旦确定了指令块可以被提交或者指令块要被中止,指令块状态就被设置为提交/中止860。在一些示例中,控制逻辑使用针对指令块的写掩码和/或存储掩码来确定执行是否已经足够地前进到提交指令块。
在提交/中止状态860处,处理器核控制单元确定由指令块执行的操作可以被完成。例如存储器加载存储操作、寄存器读/写、分支指令和其他指令将必定根据指令块的控制流来执行。对于条件存储器指令,数据将被写入到存储器,以及在提交/中止状态860期间生成的指示成功的状态指示符值。备选地,如果指令块要被中止,例如,因为指令的依赖性中的一个或多个未被满足、或者指令在未被满足的针对指令块的断言上被推测地执行,则指令块被中止使得其将不会影响存储器或寄存器文件中的指令的顺序的状态。不管指令块是已经提交了还是中止了,指令块都进行到状态870以确定指令块是否应当被刷新。如果指令块被刷新,则处理器核通常使用新数据值(特别是通过刚刚提交的块的执行而更新的寄存器和存储器)重新执行指令块,并且直接前进到执行状态850。因此,可以避免在映射、取指和译码指令块中花费的时间和能量。备选地,如果指令块未被刷新,则指令块进入空闲状态880。
在空闲状态880中,执行指令块的处理器核可以通过例如对处理器核内的硬件掉电、同时维持针对指令块的译码的指令的至少一部分而被空闲。在某个时刻,控制单元确定890处理器核上的空闲指令块是否要被刷新。如果空闲指令块要被刷新,则指令块可以在发出状态840处重新开始指令执行。备选地,如果空闲指令块不要被刷新,则指令块不被映射并且处理器核可以被冲洗并且随后指令块可以被映射到冲洗的处理器核。
尽管为便于解释,状态图800将指令块的状态图示为在单个处理器核上执行,但是对相关领域的普通技术人员而言应当容易理解,在某些示例中,多个处理器核可以用于同时执行给定指令块的多个实例。
X.示例指令调度器组
图9是图示了可以在所公开的技术的某些示例中使用的示例16条目指令调度器组的块图900。例如,以上关于图2讨论的指令调度器235可以包括图示的调度器组910中的一个或多个。在一些示例中,调度器组910使用可重新配置逻辑器件的可重新配置资源来实现。例如,诸如LUT RAM、触发器、多路复用器、算术和进位单元的FPGA部件以及其他这样的逻辑部件可以用于有利地将调度器组与设备的高效和/或能量高效组成映射。
如所示出的,调度器组910包括存储针对每个指令的译码的就绪状态(DRDYSS)920的LUT RAM 920和存储针对每个指令的活动就绪状态集合(ARDYSS)的LUT RAM 930。DRDYSSLUT RAM 920和ARDYSS LUT RAM 930分别被耦合到触发器925和935的阵列,其中每个触发器存储针对相应LUT RAM的对应条目的有效条目信息。DRDYSS LUT RAM 920在其写地址输入上接收译码的指令ID作为输入。当指令块的指令被译码时,DC_IID用于选择DRDYSS LUTRAM内的存储器地址位置,以存储由针对从指令块译码的每个指令的指令标识符的就绪状态数据。当调度器组用于读取存储在DRDYSS LUT RAM 920中的译码的就绪状态数据时,事件标识符(EVT_IID)被施加到LUT RAM 920的读地址端口。写地址和读地址用于索引并且选择触发器925的集合中的一个触发器,其存储指示存储在LUT RAM 920中的对应指令的条目中的就绪状态数据是有效还是无效。如果值被指定为有效,则有效位DV由选择的DRDYSS触发器925输出。相反,如果选择的IID条目尚不是有效的(例如,自其上次被清除之后尚未被写入),则选择的DRDYSS触发器925将输出0,并且下游逻辑940将因此将从LUT RAM 920接收的任何值解释为全部为零,因为其实际上已经使其内部值重置。如所示出的,输入DC_IID用于在译码的就绪状态由译码器220写入时指定触发器925的阵列内的写地址(“WA”)。类似地,ARDYSS LUT RAM 930通过应用与来自多路复用器1130或1135的目标就绪事件的字段相对应的指令ID地址标记的EVT_IID来写入和读取。ARDYSS LUT RAM 930被耦合到有效触发器935的阵列,其将在选择的地址(EVT_IID)被标记为无效时将无效值输出到AV,或者相反,将从LUT RAM读取的值输出到就绪逻辑单元940的AV输入。触发器阵列中的每个可以在单个周期中使用单个信号而被清除。触发器925的DRDYSS阵列利用对RESET SIGNAL的应用而被重置,而触发器935的ARDYSS阵列利用对通过利用或门950将RESET信号与REFRESH信号进行或操作而生成的信号的应用而被重置。调度器组910的该组成因此允许活动就绪状态被刷新(例如,在执行了相同指令块的新实例后被清除),而重置信号用于清除译码的就绪状态数据和活动就绪状态数据两者。
就绪逻辑单元940包括用于生成针对应用的指令标识符输入EVT_IID的就绪信号的逻辑。基于编码的就绪状态和活动就绪状态的值,1或0被输出为就绪值以指示选择的指令是否准备好发出。就绪逻辑940还计算ARDYSS_NEXT向量,其是包括针对由EVT_IID识别的特定目标指令的更新的活动就绪状态值的位向量。因此,当事件由调度器组910接收时,活动就绪状态被更新。在一些示例中,LUT RAM 920和930中的每个输出4位宽的值。在其他示例中,基于针对每个指令的就绪状态数据的量以及在具体的可重新配置逻辑器件中可用的LUT RAM的宽度,来选择不同位宽的值。对有效触发器925和935的集合的使用允许对可重置存储器的操作,包括在具有内置重置操作的RAM的实现可能消耗大量资源和/或消耗附加能量的情况下。例如,许多FPGA供应商设计不在它们的LUT RAM中包括阵列重置功能。因此,触发器集合925和935提供了用于提供重置的经济结构,而不会在调度器组中引入附加的FPGA资源消耗或延迟。
就绪逻辑940包括用于将与指令块相对应的就绪状态数据、活动就绪状态数据和事件数据的部分进行逻辑或(OR)操作的逻辑,以产生经或操作的版本并且之后对经或操作的部分进行逐位与(AND)操作来确定指令是否准备好发出。下面在表1中提供了用于实现这样的就绪逻辑940的部分的Verilog硬件描述语言代码的示例。在其他示例中,生成NEXTRDYS信号的逻辑可以以其他形式来表达,包括使用示意性捕获、网表或用于表达逻辑的其他适合的格式。
表1
如表1中所示出的,指令的就绪度通过将由DV验证的译码的就绪DRDYS、由AV验证的活动就绪ARDYS和目标就绪事件位向量EVT_RDYS进行组合来获得。如果这三位向量的或的与减少为逻辑一(1),则对象指令的每一个输入依赖性被满足并且其变得准备好发出。
图10是描绘以上讨论的调度器组910在其已经被映射到FPGA可重新配置逻辑器件中的可编程部件之后的示例的图1000。例如,与以上在图3和图4中描述的那个类似的FPGA可以被使用。
如所示出的,可配置逻辑块1010的4x3阵列已经被配置为实现调度器组910。放大的插图1020示出了在单个示例逻辑块1030内可用的逻辑部件中的一些逻辑部件。如所示出的,示例逻辑块1030包括四个LUT RAM的列1041、可以选择LUT RAM的输出或者到逻辑块的输入的多路复用器的列1042、算术和进位逻辑的集合1043、以及可以使用例如锁存器或触发器实现的顺序存储元件的集合1044。逻辑块1010中的每个可以具有相同的或相似的组成,这取决于具体FPGA设计。阴影图1050具有针对图9中图示的逻辑块1010内的相关联的部件的不同阴影。相应逻辑部件被打阴影以匹配阴影图1050中的阴影。因此,公开的调度器组可以使用可重新配置逻辑器件的相对少量逻辑资源来实现。
XI.示例增量指令调度器核
图11是图示了如可以在所公开的技术的某些示例中使用的指令调度器的示例核的块图1100。例如,调度器核可以被用作以上关于图2讨论的指令调度器235的部分。在一些示例中,指令调度器被实现为定制或ASIC电路,在其他示例中,部件可以被映射到它们的可重新配置逻辑器件,诸如FPGA。
图示的调度器核包括存储具有两个目标事件字段的译码的指令的寄存器(即触发器的阵列)1110(INSN)。指令译码器取指指令块头,并且取指并译码指令,并且将数据存储在译码的指令存储1170中。针对根据示例边缘ISA的指令的每个可能目标指令T0和T1存储数据。调度器核还包括存储从执行其他指令接收的事件的目标就绪事件队列1120和1125的集合。一对多路复用器1130和1135用于从其相应事件队列选择就绪状态数据、或者从译码的指令存储1170选择就绪状态数据,这取决于哪个指令调度器选择优先。多路复用器1130和1135中的每个的输出转而被发送到如所示出的指令调度器组910和915中的一个。
应当指出,译码的指令存储1170存储译码的指令的阵列,然而寄存器1110是(针对一个周期)保持当前发出的译码的指令的寄存器。要发出的译码的指令从译码的指令存储1170读取并且被锁存在寄存器1110中,使得在下一周期中,其目标字段T0和T1用于更新并且检查其瞄准的(一个或多个)指令的就绪度状态。存在复发,因此当给定指令#1发出时,调度器更新并且检查其瞄准的(一个或多个)指令的就绪度状态。这可以使块910和/或915的READY/EVT_IID字段被认定,例如从而发现在该周期中变得准备好的零个、一个或两个目标指令。
还应当指出,输入到图9中的指令调度器组910和915的EVT信号包括被称为EVT_IID和EVT_RDYS的两个短的位向量。这可以如表2所示以C++语言来表达:
表2
调度器组910和915中的每个可以与以上关于图9讨论的调度器组具有相似的组成。附加数量的指令发出队列被包括,包括加载/存储IID队列1140、译码器就绪IID队列1142和发出就绪IID队列1144。队列1140、1142和1144中的每个队列存储针对已经被发现为准备好发出但是尚未发出的指令的指令标识符。就绪指令选择器1150用于选择图示的IID队列1140、1142或1144中的一个。附加的选择器1160用于从调度器组910中的一个或多个和/或从就绪指令选择器1150选择数据。选择器1160将指令ID和指示指令是否就绪的相关联的位输出到译码的指令存储1170。当指令被指示为就绪时,则一个指令或多个指令的执行可以例如通过从操作数缓冲器选择操作数和/或将执行流水线内的执行单元配置为执行由相关联的指令指定的操作而开始。在一些示例中,选择器1150和1160严格来说实际上不是多路复用器,但是可以用于并发选择多个数据集。例如,如果基于块的处理器支持并发发出两个指令,则选择器1160可以为译码的指令存储1170一次选择针对两个指令的指令ID数据。译码的指令存储是存储译码的指令数据的RAM,其转而用于生成用于控制调度器和基于块的处理器的执行和流水线的控制信号。
应当指出,队列EVT0 1120和EVT1 1125是保持先前到达的待定的目标就绪事件(例如,8或9位宽)并且等待对对应的调度器组的递送和更新的事件队列。在存在组冲突的情况下(在两个目标就绪事件想要在给定周期中被递送到相同调度器组的情况下)或者在多个事件源自于核的不同部分(例如,发出事件、多周期延时功能单元目标就绪事件、断言目标就绪事件以及加载响应目标就绪事件)的情况下使用队列。甚至在一个发出核中,也可以存在递送到给定调度器组的四个或更多个事件的涌现,并且事件队列对事件的该涌现进行缓冲以使得没有事件丢失。
队列1140、1142和1144是发出队列。这些队列例如通过保持已经被确定为准备好发出但是尚未发出的指令的指令ID(IID)来保持待定的指令发出。这些发出队列在存在被发现为准备好发出但是处理器的后端每周期仅可以接受很少数量的指令(例如,一个或两个指令)时被使用。
例如,当调度器组910和915两者都发现它们的目标准备好发出时,指令ID中的一个被选择以发出(1160的输出),并且另一个被保持在队列1144中以用于稍后在不存在(如由选择器1160选择的)准备好发出的更高优先级的指令时发出。
还应当指出,选择器1150和1160是被称为3对1选择器的仲裁器多路复用器,其在每周期选择有效输入中的至多一个输入的情况下接受两个值(例如,IID)和对应的“有效输入”。
在一些示例中,“偶”指令由第一调度器组915存储并处理,并且“奇”指令使用第二调度器组915来存储并处理。例如,指令标识符的最高有效位或最低有效位确定指令调度器数据是由第一调度器组处理还是由第二调度器组处理。通过将调度器指令就绪度数据跨多个组分割,多个目标就绪事件可以在单个时钟周期中被处理。
在一些示例中,用于实现指令调度器的RAM中的一个或多个RAM是静态RAM,并且RAM通过基于相关联的指令标识符将地址施加到RAM的输入来访问。在一些示例中,指令标识符被编码在相应指令内。指令通过具有该指令标识符的编码来瞄准一个或多个指令,并且由指令瞄准的源指令基于指令在指令块中的相对位置来确定。在一些示例中,调度器状态数据包括指示指令的依赖性的数据和指示针对指令块的当前执行实例指令的依赖性是否已经被满足的数据。在一些示例中,指令调度器通过重置针对指令块的先前执行的实例的存储调度器状态中的一些但不是全部,来刷新针对指令块的实例的调度器状态。
在一些示例中,就绪状态RAM 920和930的每个条目包括指示指令块的哪个实例与该条目相关联的序列号字段。因此,在处理器核中重新执行指令块后,在读取了就绪状态RAM 920或930条目后,将其序列号字段与针对指令块的序列号作比较,并且如果匹配,则条目的就绪状态已经在该指令块实例期间被写入、并且有效、并且可以用于确定指令就绪度,然而如果不同(即,条目的就绪状态对应于在某个其他指令块的执行期间写入的状态),则认为其无效并且被解释为被重置(被当作全部为0)。因此,为了如块重置上要求那样(逻辑上)闪速清除LUT RAM中的调度器就绪状态,增量块序列号足以使得(利用旧的块序列号标记的)任何优先就绪状态被认为是无效的。当就绪状态RAM条目序列号与指令块的序列号相匹配时,
时间和能量可以通过避免在译码中对调度器状态数据的至少部分的重新生成而被节省。当块第一次被译码时,译码器将所有可平凡发出的指令(具有0输入依赖性的指令)的指令ID写入到IS就绪队列1144中。在块刷新后,块不被译码,因此IS就绪队列1144被倒退并回放以发出可平凡发出的指令ID的系列。因此,就绪状态数据可以跨块重置/刷新被保留,而不重新计算针对每个指令的就绪状态数据,如可能在并行指令调度器的某些示例中完成的。
在一些示例中,队列1120、1125、1140、1142和/或1144中的全部或一些使用已经被配置为用作移位寄存器、可变长度移位寄存器或先进/先出缓冲器的FPGA的LUT RAM来实现。一些FPGA供应商提供可以用于使用LUT RAM来高效地实现这样的移位寄存器和FIFO的逻辑器件、编译器指示和/或实例化对象。在一些示例中,队列中的每个队列通过将LUT RAM配置为在先进/先出的基础上存储针对指令块中的多个指令的就绪状态数据来形成。
在所公开的技术的一些示例中,一种基于块的处理器支持包括广播标识符的指令。广播标识符指定有限数量的信道中的一个信道。任何数量的指令可以在广播信道上接收数据。因此,指令结果可以被发送到比能够由指令中的一个或两个指令目标字段指定的指令更多的指令。在生成了广播事件后,指令的活动就绪状态LUT-RAM中的每一个条目将被更新以反映广播事件。在一些示例中,广播调度器更新可以通过在该块中译码的每一个指令ID上进行迭代(例如,迭代至多块的最大大小)来暴力地执行。在一些示例中,广播调度器更新可以通过跟踪(使用例如位掩码)哪些指令消耗广播输入、并且之后将广播的就绪状态选择性地递送到该集合中的每个条目来更快地执行。在一些示例中,广播调度器通过(在若干集合中)跟踪哪些指令消耗哪些具体广播输入来更快地更新,以使得例如在广播信道1上,调度器将事件仅仅递送到在广播信道1上接收操作数的那些指令,等等。在一些示例中,广播事件可以在指令块中的所有指令已经被译码之前被生成。在这样的情况下,一旦块中的所有指令已经被译码,所有广播事件就可以被重新广播。备选地,随着稍后译码的指令被译码,广播事件可以被选择性地递送到被发现为在给定广播信道上获取输入的那些指令。
图12是如可以在所公开的技术的某些示例中使用的、示出到FPGA中的逻辑块的示例映射的以上关于图11讨论的示例核调度器设计的布局图1200。如所示出的,调度器组中的每个调度器如所示出地被指示出(SCH0和SCH1)。调度器核的其他部件已经根据指示的阴影而被映射。因此,调度器核可以使用FPGA中的相对少量的逻辑块来实现。
XII.示例基于块的处理器和存储器配置
图13是图示包括基于块的处理器1310的装置的图1300,基于块的处理器1310包括被配置为执行包括用于包括存储器同步和存储器锁定的存储器操作的指令的指令块的控制单元1320。在一些示例中,基于块的处理器被实现在定制集成电路或ASIC中,在其他示例中,基于块的处理器使用诸如FPGA中的可配置逻辑来实现。控制单元包括核调度器1325,其控制:对用于执行指令处理的核的分配和解除分配、对在核、寄存器文件、存储器接口和/或I/O接口中的任何项之间的输入数据和输出数据的控制。控制单元1320还可以包括用于执行某些存储器操作的专用寄存器。
基于块的处理器1310还包括被配置为取指并且执行指令块的一个或多个处理器核1330–1337。核中的每个核包括控制时钟周期和指令块中的指令被取指、译码、发出和执行的顺序的指令调度器(例如,指令调度器1341)。图示的基于块的处理器1310具有至多八个核,但是在其他示例中可以存在1个、2个、4个、64个、512个、1024个或其他数量的基于块的处理器的核。基于块的处理器1310被耦合到存储器1350并且被耦合到计算机可读存储介质盘1360,存储器1350包括指令块A和B,其包括实现所公开的存储器操作的指令(分别为1355和1356),计算机可读存储介质盘1360存储用于执行所公开的存储器操作的指令1365。
XIII.操作基于块的处理器的示例方法
图14是概述如可以在所公开的技术的某些示例中执行的、使用指令调度器的示例方法的流程图1400。例如,以上关于图1和图2讨论的基于块的处理器、包括具有与以上关于图9-图13描述的那些类似的调度器的实现,可以用于实现图14中图示的方法以及在以下图15-图17的流程图中的方法。
在处理块1410处,指令块从存储器取指并且使用指令译码器来译码。这生成多个控制位,其可以被存储在RAM中以用于在指令被发出并且执行时控制处理器的操作。例如,译码的指令数据可以被存储在实现基于块的处理器的一个或多个RAM中。在指令块的至少一部分已经被译码之后,方法前进到处理块1420。
在处理块1420处,将针对指令块的译码的部分的调度器状态数据存储在RAM中。在一些示例中,RAM是FPGA LUT RAM或分布式RAM。在一些示例中,RAM是ASIC或其他类型的集成电路中的SRAM。将调度器状态存储在RAM中可以改进由调度器消耗的面积,因为RAM通常可以使用比触发器阵列更少的芯片面积来制造。在一些示例中,通过添加附加逻辑以比较存储在例如针对RAM的每个地址的一个触发器中的有效位、并且在有效位未被设置的情况下输出重置值或者在有效位被设置的情况下输出存储在RAM中的值,重置逻辑被添加到不提供用于设置/重置的内置支持的RAM结构。
存储调度器状态数据可以用于操作指令调度器以便选择准备好发出的指令使得它们可以被执行。
XIV.评估存储的调度器状态数据的示例方法
图15是概述如可以在所公开的技术的某些示例中执行的评估存储的调度器状态数据的示例方法的流程图1500。
在处理块1510处,评估存储的调度器状态数据并且确定评估的指令未准备好发出。例如,如果指令依赖性之一(诸如其输入操作数、其断言、或来自寄存器读取或存储器加载队列的值中的一个)不可用,则对应的就绪状态数据将指示对应的指令未准备好发出。
在处理块1520处,处理器的执行例如通过执行与在处理块1510处被评估的指令不同的指令来推进。调度器状态数据的至少部分通过推进处理器的执行来更新。例如,执行指令可以生成一个或多个目标操作数、断言值,或者使寄存器读取或存储器加载发生。调度器状态数据可以使用例如如以上讨论的调度器组910内的就绪逻辑940来更新。一旦处理器的执行已经推进,方法就前进到处理块1530。
在处理块1530处,重新评估更新的存储的调度器状态数据。如果相应指令的依赖性未被满足,则方法基于处理器例如通过执行与评估的指令不同的指令的执行而推进的执行,来前进到处理块1520。另一方面,如果针对指令的依赖性被满足,则相应指令被指示为准备好发出,并且在某个时刻指令将在处理块1540处被发出。取决于调度器的配置,指令可以立即发出,或者被排队在被预先确定为准备好发出的其他指令之后。在一些示例中,优先级编码器加多路复用器可以用于选择要发出的下一指令。
XV.包括序列号的调度器状态数据的示例方法
图16是概述如可以在所公开的技术的某些示例中执行的、生成包括使用序列号的调度器状态数据的示例方法的流程图1600。
在处理块1610处,处理器执行使处理器的状态分支到指令块。这可以通过更新存储了当前执行指令块的位置的指令地址寄存器来执行。分支可以被显式地或隐式地编码,并且由其他指令块调用。分支还使块序列号被更新为新的值。例如,块序列号可以从先前存储的值增加或减少。
在处理块1620处,将在处理块1610处生成的块序列号与利用调度器数据存储的序列号作比较。例如,在将存储的调度器数据写入到RAM后,当前块序列号被存储在与数据相同的地址处(例如,消耗RAM的字的6个最高有效位)。存储的调度器数据从RAM读取,其与当前块序列号作比较。如果序列号不匹配,则条目被认为是无效的、方法前进到处理块1630、并且包括当前块序列号的新调度器状态数据被生成并且被存储。调度器状态数据可以被存储并且指令调度器使用诸如以上描述的那些的技术。另一方面,如果序列号与存储的调度器数据相匹配,则方法直接前进到处理块1640,因为调度器状态数据基于匹配的序列号被确定为有效。
在处理块1640处,评估调度器数据以确定是否要发出指令。例如,一旦所有指令依赖性已经被满足,指令就准备好发出并且可以之后被选择以由指令调度器发出。针对指令块的多个指令,该方法继续前进到处理块1620,以针对其他指令来比较存储在RAM中的序列号。一旦被分支到新的指令块,方法就前进到处理块1610。
XVI.配置具有增量调度器的逻辑器件的示例方法
图17是概述如可以在所公开的技术的某些示例中执行的、配置可重新配置逻辑器件的示例方法的流程图1700。例如,以上关于图3所讨论的FPGA可以被配置为使用以上讨论的包括以上公开的调度器的示例微架构来实现图1的基于块的处理器。
在处理块1710处,将基于块的处理器部件的描述映射到FPGA的可重新配置逻辑器件部件。例如,处理器设计者可以指定以硬件描述语言对基于块的处理器的描述,硬件描述语言诸如为SystemVerilog、SystemC、Verilog或硬件描述语言的任何其他适合的组合。在一些示例中,以诸如C或C++的传统编程语言编写的描述用于描述基于块的处理器的至少部分。基于块的处理器的描述可以包括以上讨论的部件中的任何部件。在一些示例中,设计者可以指定要由处理器微架构的元件瞄准的特定FPGA单元。例如,设计者可以指定指令高速缓存和/或数据高速缓存使用FPGA的块RAM资源来实现。在一些示例中,程序员可以使用由FPGA供应商提供的可用宏来实现本文中公开的基于LUT RAM的调度器和事件队列。
在处理块1720处,产生配置比特流以用于实现针对基于块的处理器的增量调度器电路。例如,以硬件描述语言表示的基于块的处理器的描述可以被编译以生成网表,并且该网表转而用于生成比特流文件。在比特流文件中指示的信号可以被应用到FPGA的配置接口,以便根据所公开的技术将FPGA配置为执行用于实现基于块的处理器的功能。
在处理块1730处,可重新配置逻辑器件使用在处理块1720处生成的比特流来配置。例如,一些FPGA具有用于将数据连续地流传输到FPGA的配置存储器中的回读端口,由此配置FPGA。在一些示例中,FPGA的配置存储器通过并行或其他可寻址端口而被寻址。在一些示例中,具有与FPGA类似的结构的可重新配置逻辑器件可以被配置一次,而不可被重新配置。在其他示例中,FPGA可以被电擦除并且被重新写入以便提供新配置。在一些示例中,FPGA在无论何时集成电路被重新上电时都被重新配置,而在其他示例中,FGPA配置跨重复的电力周期维持状态。
XVII.示例计算环境
图18图示了在其中可以实现所描述的实施例、技术和工艺(包括配置基于块的处理器)的适合的计算环境1800的一般示例。例如,计算环境1800可以实现所公开的技术,以用于配置处理器以实现所公开的基于块的处理器架构和微架构、和/或将代码编译成计算机可执行指令和/或用于执行这样的操作的配置比特流,如在此所描述的。
计算环境1800不旨在提出关于技术的使用或者功能的范围的任何限制,因为技术可以被实现在不同的通用或者专用计算环境中。例如,所公开的技术可以利用其他计算机系统配置被实现,包括手持式设备、多处理器系统、可编程消费者电子产品、网络PC、微型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备二者中。
参考图18,计算环境1800包括至少一个基于块的处理单元1810、以及存储器1820。在图18中,该最基本配置1830被包括在虚线内。基于块的处理单元1810执行计算机可执行指令,并且可以是真实处理器或者虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,并且由此多个处理器可以同时运行。存储器1820可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存存储器等)、或者以上两者的组合。存储器1820存储可以例如实现在此所描述的技术的软件1880、图像和视频。计算环境可以具有附加的特征。例如,计算环境1800包括存储装置1840、一个或多个输入设备1850、一个或多个输出设备1860以及一个或多个通信连接1870。诸如总线、控制器或者网络的互连机制(未示出)将计算环境1800的部件互连。通常,操作系统软件(未示出)提供用于在计算环境1800中执行的其他软件的操作环境,并且协调计算环境1800的部件的活动。
存储装置1840可以是可移除或者不可移除的,并且包括磁盘、磁带或者磁带盒、CD-ROM、CD-RW、DVD或者可以用于存储信息并且可以在计算环境1800内访问的任何其他介质。存储装置1840存储用于软件1880的指令、插件数据和消息,其可以用于实现在此所描述的技术。
(一个或多个)输入设备1850可以是触摸输入设备,诸如键盘、小键盘、鼠标、触屏显示器、笔、或轨迹球、语音输入设备、扫描设备、或者向计算环境1800提供输入的另一设备。对于音频而言,(一个或多个)输入设备1850可以是接受以模拟或者数字形式的音频输入的声卡或者类似设备,或者可以是向计算环境1800提供音频样本的CD-ROM读取器。(一个或多个)输出设备1860可以是显示器、打印机、扬声器、CD刻录机、或者提供来自计算环境1800的输出的另一设备。
(一个或多个)通信连接1870实现通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频、或者调制数据信号中的其他数据的信息。(一个或多个)通信连接1870不限于有线连接(例如,兆比特或吉比特以太网、Infiniband、通过电连接或通过光纤连接的光纤信道),而且还包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)以及用于提供用于所公开的方法的网络连接的其他适合的通信连接。在虚拟主机环境中,(一个或多个)通信连接可以是由虚拟主机所提供的虚拟化网络连接。
可以使用实现计算云1890中的所公开的技术的全部或部分的计算机可执行指令来执行所公开的方法的一些实施例。例如,所公开的编译器和/或基于块的处理器的服务器被定位在计算环境中,或者所公开的编译器可以在被定位在计算云1890中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或者CISC处理器)上执行。
计算机可读介质是可以在计算环境1800内访问的任何可用介质。以示例而非限制的方式,利用计算环境1800,计算机可读介质包括存储器1820和/或存储装置1840。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质(诸如存储器1820和存储装置1840)而非传输介质(诸如调制数据信号)。
XVIII.所公开的技术的附加示例
在这里根据以上讨论的示例来讨论所公开的主题的附加示例。例如,以上关于图1、图2和图9讨论的基于块的处理器的方面可以用于实现这些附加示例,包括FPGA、诸如以上关于图3和图4讨论的那些FPGA。
在所公开的技术的某些示例中,基于块的处理器中的全部或一部分通过将FPGA配置为包括用于执行在基于块的处理器ISA中表达的程序的结构来实现。在一些示例中,处理器被实现在嵌入式设备中,诸如用于部署在物联网(IoT)网络中。在一些示例中,诸如高速缓存的结构,以及在指令调度器、加载存储队列和/或寄存器文件中使用的存储被实现在具有单个写端口或单个读端口的存储器中。在其他示例中,这些结构中的一个或多个被实现在具有多个读端口和/或写端口的存储器中。在一些示例中,指令块的指令块头以及一个或多个指令可以从存储器和/或指令高速缓存并发地取指。在一些示例中,旁路机构允许从微架构流水线的执行部分生成的操作来旁路操作数,由此允许具有共享的或链式的依赖性的指令的背靠背发出。在一些示例中,旁路机构允许当在执行时钟周期期间与指令窗口操作数缓冲器上的写入端口相比存在更多生成的操作数时,避免流水线暂停。
在一些示例中,调度器可以使用译码的或先前译码的指令依赖性,来在它们已经被取指之前唤醒并且发出指令。在一些示例中,针对指令调度器的存储可以被分成两个或更多个部分,以便将存储映射到FPGA的两个或更多个物理存储单元。在一些示例中,指令调度器包括并行调度器。在其他示例中,指令调度器包括一个或多个事件队列和一个或多个指令队列。在一些示例中,调度器被配置为在重新执行指令块后刷新指令中的一些但不是全部。在其他示例中,多个块的就绪状态可以被维持在单个增量调度器中。在其他示例中,第一块的就绪状态可以被维持在增量调度器中并且第二块的指令(以及因此其每个指令的就绪状态)可以被并行取指、译码并且用于初始化相同增量调度器中的第二块的就绪状态。在其他示例中,译码的就绪状态队列可以通过倒退队列以回放队列中的译码的指令的序列来实现块刷新。
在所公开的技术的一些示例中,一种基于块的处理器包括指令调度器,该指令调度器被配置为将针对指令块的调度器状态存储在随机存取存储器(RAM)中,该RAM基于编码在该指令的相应一个指令中的指令标识符来索引。在一些示例中,RAM是通过基于指令标识符将地址施加到RAM的输入而被访问的静态RAM。在一些示例中,该调度器状态包括指示该指令的依赖性的数据、和指示针对指令块的当前执行实例的该指令的依赖性是否已经被满足的数据。在一些示例中,该指令调度器通过重置针对指令块的先前执行实例的存储的调度器状态中的一些但不是全部,来刷新针对该指令块的实例的调度器状态。在一些示例中,该调度器状包括指示该指令块的哪个实例与存储在该RAM中的该调度器状态相关联的序列号。序列号可以用于指示存储在RAM中的调度器状态数据条目是有效的(因为它们由当前执行指令块生成)还是无效的(因为它们是来自将数据写入到调度器RAM的先前指令块的剩余数据)。
在一些示例中,该基于块的处理器包括多个执行单元,该执行单元中的每个执行单元被配置为在该基于块的处理器的一个时钟周期中执行针对单个指令的操作,并且该指令调度器还包括存储指示准备好发出的指令的数量的数据的一个或多个队列,并且准备好发出的指令的数量超过至少一个指令的执行槽的数量。在一些示例中,该队列中的至少一个队列使用被配置为用作可变长度移位寄存器或先进先出缓冲器的现场可编程门阵列(FPGA)的查找表存储器(LUT)来实现。
在所公开的技术的一些示例中,一次性可配置或可重新配置的逻辑器件被配置为包括通过将该可重新配置逻辑器件中的一个或多个查找表(LUT)RAM配置为存储针对指令块中的多个指令的就绪状态数据而形成的指令调度器。在一些示例中,逻辑器件通过将配置数据施加到集成电路的配置端口对器件中的配置RAM进行电编程而被编程。在一些示例中,逻辑器件通过破坏性技术(例如,激光或电子束枪)或使用编程的光刻掩码对集成电路中的连接进行编程而被编程。在一些示例中,处理器包括多个事件队列,该事件队列中的每个事件队列被配置为临时存储并且在先进先出的基础上发送针对指令的依赖性信息。在一些示例中,该指令块中的该指令中的每个指令与相应指令标识符相关联;并且该指令调度器还包括两个调度器组,该调度器组中的第一个调度器组存储针对相应指令的指令标识符的特定位具有零值的指令的指令就绪状态数据,并且该调度器组中的第二个调度器组存储针对相应指令的指令标识符的特定位具有一值的指令的指令就绪状态数据。在一些示例中,一种对可(重新)配置逻辑器件进行编程的方法包括产生配置比特流,该配置比特流包括实现针对该可重新配置逻辑器件的电路的配置信息,该配置信息将在被施加到该可重新配置逻辑器件的配置端口时实现该电路。
在所公开的技术的一些示例中,一种操作基于块的处理器的方法包括:利用该处理器译码指令块的至少部分,并且将针对译码的指令块部分的调度器状态数据存储在处理器的随机存取存储器(RAM)中。
在一些示例中,方法还包括:评估存储的调度器状态数据以确定该指令块中的指令未准备好发出;推进该基于块的处理器的执行并且更新存储的调度器状态数据的至少部分;在推进执行之后,重新评估更新的存储的调度器状态数据;并且基于该重新评估,发出该指令以用于由该基于块的处理器执行。在一些示例中,方法还包括通过重置针对该指令中的相应每一个的有效位,来重置针对该指令块的一个或多个指令的该调度器状态数据,其中针对该指令中的该相应每一个的相应调度器状态数据在该RAM本身中不被清除。
在一些示例中,方法还包括:接收通过译码的和/或利用该基于块的处理器执行该指令块中的一个或多个指令而生成的指令事件数据;将针对该指令中的至少一个指令的该指令事件数据存储在队列中;以及在后续时钟周期中,发出具有存储在该队列中的指令事件数据的该至少一个指令。在一些示例中,当存在比能够由该基于块的处理器在给定时钟周期中发出的指令更多的准备好发出的指令,该存储发生。
在一些示例中,调度器状态数据包括译码的就绪状态数据、活动就绪状态数据以及事件数据。在一些示例中,方法还包括:对与指令块的指令相对应的就绪状态数据、活动就绪状态数据以及事件数据的部分进行逻辑或操作,以产生经或操作的部分;以及对经或操作的部分进行逐位与操作,以确定指令是否准备好发出。
在一些示例中,存储的调度器状态数据包括识别该指令块的第一序列号,并且方法还包括:将存储有RAM中的调度器状态数据的第二序列号与该第一序列号作比较;以及如果该比较指示该第二序列号与该第一序列号不同,则生成针对该指令的调度器状态数据并且将针对该指令的该调度器状态数据存储在该RAM中;以及如果该比较指示该第二序列号与该第一序列号相同,则使用存储在该RAM中的该调度器状态数据来调度该指令。
在一些示例中,存储的调度器状态数据包括识别该指令块的第一序列号,并且方法还包括:将存储有RAM中的调度器状态数据的第二序列号与该第一序列号作比较,其中该比较指示该存储的调度器状态数据是有效的还是无效的。
在一些示例中,广播调度器更新可以通过以下项来执行:暴力、(使用例如位掩码)跟踪哪些指令消耗广播输入并且之后将广播的就绪状态选择性地递送到该集合中的每个条目、或者(在若干集合中)跟踪哪些指令消耗哪些具体广播输入。在一些示例中,广播事件可以在指令块中的所有指令已经被译码之前被生成,并且一旦块中的所有指令都已经被译码,则所有广播事件就可以被重新广播。备选地,广播事件可以被选择性地递送到被发现为在给定广播信道上获取接受输入的那些指令。
鉴于所公开的主题的原理可以应用的许多可能实施例,应当认识到所图示的实施例仅是优选的示例,并且不应该当作将权利要求的范围限于那些优选的示例。相反,要求保护的主题的范围由所附的权利要求进行限定。我们因此对我们的发明要求保护落在这些权利要求的范围内的全部内容。

Claims (15)

1.一种包括基于块的处理器的装置,所述基于块的处理器包括:
指令调度器,其被配置为将针对指令块的调度器状态存储在随机存取存储器(RAM)中,所述RAM基于编码在所述指令的相应一个指令中的指令标识符来索引。
2.根据权利要求1所述的装置,其中所述调度器状态包括指示所述指令的依赖性的数据、和指示针对指令块的当前执行实例的所述指令的依赖性是否已经被满足的数据。
3.根据权利要求1或权利要求2所述的装置,其中所述指令调度器通过重置针对指令块的先前执行实例的存储的调度器状态中的一些但不是全部,来刷新针对所述指令块的实例的调度器状态。
4.根据权利要求1-3中的任一项所述的装置,其中所述调度器状包括序列号,所述序列号指示所述指令块的哪个实例与存储在所述RAM中的所述调度器状态相关联。
5.根据权利要求1-4中的任一项所述的装置,其中:
所述基于块的处理器包括多个执行单元,所述执行单元中的每个执行单元被配置为在所述基于块的处理器的一个时钟周期中执行针对单个指令的操作;并且
所述指令调度器还包括一个或多个队列,所述一个或多个队列存储指示准备好发出的指令的数量的数据,并且所述准备好发出的指令的数量超过至少一个指令的执行单元的数量。
6.根据权利要求5所述的装置,其中所述队列中的至少一个队列使用被配置为用作可变长度移位寄存器或先进先出缓冲器的现场可编程门阵列(FPGA)的查找表存储器(LUT)来实现。
7.一种包括可重新配置逻辑器件的装置,所述可重新配置逻辑器件包括:
指令调度器,其通过将所述可重新配置逻辑器件中的一个或多个查找表(LUT)RAM配置为存储针对指令块中的多个指令的就绪状态数据而被形成。
8.根据权利要求7所述的装置,还包括:
多个事件队列,所述事件队列中的每个事件队列被配置为临时存储并且在先进先出的基础上发送针对指令的依赖性信息。
9.根据权利要求7或权利要求8所述的装置,其中:
所述指令块中的所述指令中的每个指令与相应指令标识符相关联;并且
所述指令调度器还包括两个调度器组,所述调度器组中的第一个调度器组存储针对相应指令的指令标识符的特定位具有零值的指令的指令就绪状态数据,并且所述调度器组中的第二个调度器组存储针对相应指令的指令标识符的特定位具有一值的指令的指令就绪状态数据。
10.一种操作基于块的处理器的方法,所述方法包括:
利用所述基于块的处理器:
译码指令块的至少部分;并且
将针对译码的指令块部分的调度器状态数据存储在随机存取存储器(RAM)中。
11.根据权利要求10所述的方法,还包括:
评估存储的所述调度器状态数据,以确定所述指令块中的指令未准备好发出;
推进所述基于块的处理器的执行,并且更新存储的所述调度器状态数据的至少部分;
在所述推进执行之后,重新评估更新的存储的所述调度器状态数据;并且
基于所述重新评估,发出所述指令以用于由所述基于块的处理器的执行。
12.根据权利要求10或权利要求11所述的方法,还包括:通过重置针对所述指令中的相应每一个指令的有效位,来重置针对所述指令块的一个或多个指令的所述调度器状态数据,其中针对所述指令中的所述相应每一个指令的相应调度器状态数据在所述RAM本身中不被清除。
13.根据权利要求10-12中的任一项所述的方法,还包括:
接收通过译码和/或利用所述基于块的处理器执行所述指令块中的一个或多个指令而生成的指令事件数据;
将针对所述指令中的至少一个指令的所述指令事件数据存储在队列中;并且
在后续时钟周期中,发出具有存储在所述队列中的指令事件数据的所述至少一个指令。
14.根据权利要求13所述的方法,其中当存在比能够由所述基于块的处理器在给定时钟周期中调度的目标就绪事件更多的目标就绪事件时,所述存储发生。
15.根据权利要求10-14中的任一项所述的方法,其中存储的所述调度器状态数据包括识别所述指令块的第一序列号,并且所述方法还包括:
将RAM中的利用调度器状态数据存储的第二序列号与所述第一序列号作比较;并且
如果所述比较指示所述第二序列号与所述第一序列号不同,则生成针对所述指令的调度器状态数据,并且将针对所述指令的所述调度器状态数据存储在所述RAM中,并且
如果所述比较指示所述第二序列号与所述第一序列号相同,则使用存储在所述RAM中的所述调度器状态数据来调度所述指令。
CN201780026354.5A 2016-04-28 2017-04-25 用于乱序块isa处理器的增量调度器 Active CN109074261B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201662328976P 2016-04-28 2016-04-28
US62/328,976 2016-04-28
US15/224,473 US11106467B2 (en) 2016-04-28 2016-07-29 Incremental scheduler for out-of-order block ISA processors
US15/224,473 2016-07-29
PCT/US2017/029226 WO2017189465A1 (en) 2016-04-28 2017-04-25 Scheduler for out-of-order block isa processors

Publications (2)

Publication Number Publication Date
CN109074261A true CN109074261A (zh) 2018-12-21
CN109074261B CN109074261B (zh) 2023-06-23

Family

ID=60158893

Family Applications (4)

Application Number Title Priority Date Filing Date
CN201780026326.3A Withdrawn CN109074259A (zh) 2016-04-28 2017-04-25 用于块isa处理器的并行指令调度器
CN201780026331.4A Active CN109074260B (zh) 2016-04-28 2017-04-25 乱序的基于块的处理器和指令调度器
CN201780026354.5A Active CN109074261B (zh) 2016-04-28 2017-04-25 用于乱序块isa处理器的增量调度器
CN201780026337.1A Active CN109196468B (zh) 2016-04-28 2017-04-25 混合基于块的处理器和定制功能块

Family Applications Before (2)

Application Number Title Priority Date Filing Date
CN201780026326.3A Withdrawn CN109074259A (zh) 2016-04-28 2017-04-25 用于块isa处理器的并行指令调度器
CN201780026331.4A Active CN109074260B (zh) 2016-04-28 2017-04-25 乱序的基于块的处理器和指令调度器

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201780026337.1A Active CN109196468B (zh) 2016-04-28 2017-04-25 混合基于块的处理器和定制功能块

Country Status (4)

Country Link
US (4) US11687345B2 (zh)
EP (4) EP3449359B1 (zh)
CN (4) CN109074259A (zh)
WO (4) WO2017189466A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111382091A (zh) * 2018-12-30 2020-07-07 德克萨斯仪器股份有限公司 用于低周期存储器访问和附加功能的宽边随机访问存储器
CN113255264A (zh) * 2021-06-07 2021-08-13 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
US11922026B2 (en) 2022-02-16 2024-03-05 T-Mobile Usa, Inc. Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network

Families Citing this family (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013100783A1 (en) 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
GB2544994A (en) 2015-12-02 2017-06-07 Swarm64 As Data processing
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US11115293B2 (en) * 2016-11-17 2021-09-07 Amazon Technologies, Inc. Networked programmable logic service provider
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10474375B2 (en) 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10747565B2 (en) * 2017-04-18 2020-08-18 Amazon Technologies, Inc. Virtualization of control and status signals
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10515049B1 (en) 2017-07-01 2019-12-24 Intel Corporation Memory circuits and methods for distributed memory hazard detection and error recovery
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10671398B2 (en) * 2017-08-02 2020-06-02 International Business Machines Corporation Low-overhead, low-latency operand dependency tracking for instructions operating on register pairs in a processor core
US10460822B2 (en) * 2017-08-23 2019-10-29 Arm Limited Memory with a controllable I/O functional unit
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10380063B2 (en) * 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10445098B2 (en) 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array
US10824376B2 (en) 2017-12-08 2020-11-03 Sandisk Technologies Llc Microcontroller architecture for non-volatile memory
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths
US10747711B2 (en) * 2018-03-20 2020-08-18 Arizona Board Of Regents On Behalf Of Northern Arizona University Dynamic hybridized positional notation instruction set computer architecture to enhance security
US10733141B2 (en) 2018-03-27 2020-08-04 Analog Devices, Inc. Distributed processor system
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10564980B2 (en) 2018-04-03 2020-02-18 Intel Corporation Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10459866B1 (en) 2018-06-30 2019-10-29 Intel Corporation Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
CN109325494B (zh) * 2018-08-27 2021-09-17 腾讯科技(深圳)有限公司 图片处理方法、任务数据处理方法和装置
JP6992911B2 (ja) * 2018-10-30 2022-01-13 日本電信電話株式会社 オフロードサーバおよびオフロードプログラム
US10747545B2 (en) * 2018-11-28 2020-08-18 International Business Machines Corporation Dual compare of least-significant-bit for dependency wake up from a fused instruction tag in a microprocessor
CN109655740B (zh) * 2018-12-12 2021-07-27 上海精密计量测试研究所 K系列fpga内部clb模块定位及通用性配置测试方法
US10838389B2 (en) * 2018-12-13 2020-11-17 Hamilton Sunstrand Corporation Reconfigurable control architecture for programmable logic devices
US10657060B1 (en) * 2018-12-18 2020-05-19 Xilinx, Inc. Prefetching partial bitstreams
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11106437B2 (en) * 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
CN111625280B (zh) * 2019-02-27 2023-08-04 上海复旦微电子集团股份有限公司 指令控制方法及装置、可读存储介质
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
CN110232029B (zh) * 2019-06-19 2021-06-29 成都博宇利华科技有限公司 一种基于索引的fpga中ddr4包缓存的实现方法
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US11144290B2 (en) * 2019-09-13 2021-10-12 Huawei Technologies Co., Ltd. Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN112540796B (zh) * 2019-09-23 2024-05-07 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法
CN110806899B (zh) * 2019-11-01 2021-08-24 西安微电子技术研究所 一种基于指令扩展的流水线紧耦合加速器接口结构
US11468304B1 (en) * 2019-11-26 2022-10-11 Amazon Technologies, Inc. Synchronizing operations in hardware accelerator
CN111124492B (zh) * 2019-12-16 2022-09-20 成都海光微电子技术有限公司 指令生成方法、装置、指令执行方法、处理器及电子设备
CN112307700B (zh) * 2019-12-17 2022-07-29 成都华微电子科技股份有限公司 可编程器件的位流并行生成方法及系统
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
CN111552366B (zh) * 2020-04-07 2021-10-22 江南大学 一种动态延迟唤醒电路及乱序指令发射架构
CN113760364B (zh) * 2020-06-03 2022-06-17 广东高云半导体科技股份有限公司 逻辑器件的控制器
US11468220B2 (en) * 2020-07-24 2022-10-11 Gowin Semiconductor Corporation Method and system for enhancing programmability of a field-programmable gate array via a dual-mode port
US11662923B2 (en) 2020-07-24 2023-05-30 Gowin Semiconductor Corporation Method and system for enhancing programmability of a field-programmable gate array
US11392740B2 (en) 2020-12-18 2022-07-19 SambaNova Systems, Inc. Dataflow function offload to reconfigurable processors
US11237880B1 (en) 2020-12-18 2022-02-01 SambaNova Systems, Inc. Dataflow all-reduce for reconfigurable processor systems
TWI784845B (zh) * 2020-12-18 2022-11-21 美商聖巴諾瓦系統公司 對可重配置處理器之資料流功能卸載
US11182221B1 (en) 2020-12-18 2021-11-23 SambaNova Systems, Inc. Inter-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS)
WO2022133047A1 (en) * 2020-12-18 2022-06-23 SambaNova Systems, Inc. Dataflow function offload to reconfigurable processors
US11782760B2 (en) 2021-02-25 2023-10-10 SambaNova Systems, Inc. Time-multiplexed use of reconfigurable hardware
CN113608693A (zh) * 2021-07-26 2021-11-05 中国科学院国家空间科学中心 一种星载在轨数据的搜索排序系统和方法
TWI792546B (zh) * 2021-09-09 2023-02-11 瑞昱半導體股份有限公司 用於管線化控制的設備以及方法
US11942970B2 (en) * 2022-03-04 2024-03-26 Microsoft Technology Licensing, Llc Compression circuits and methods using tree based encoding of bit masks
CN114610394B (zh) * 2022-03-14 2023-12-22 海飞科(南京)信息技术有限公司 指令调度的方法、处理电路和电子设备
US20230315454A1 (en) * 2022-03-30 2023-10-05 Advanced Micro Devices, Inc. Fusing no-op (nop) instructions
CN115437695B (zh) * 2022-07-01 2024-01-23 无锡芯领域微电子有限公司 一种分支延时槽处理方法及装置
WO2024039370A1 (en) * 2022-08-18 2024-02-22 Rakuten Mobile, Inc. Configurable custom block in dynamic dataset builder
CN116483441B (zh) * 2023-06-21 2023-09-12 睿思芯科(深圳)技术有限公司 基于移位缓冲的输出时序优化系统、方法及相关设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070094483A1 (en) * 2005-10-26 2007-04-26 James Wilson Pipelined digital signal processor
CN101133391A (zh) * 2005-02-04 2008-02-27 美普思科技有限公司 多线程微处理器中的二分化线程调度器
US20120278593A1 (en) * 2011-04-29 2012-11-01 Arizona Technology Enterprises, Llc Low complexity out-of-order issue logic using static circuits
WO2015069583A1 (en) * 2013-11-07 2015-05-14 Microsoft Technology Licensing, Llc Energy efficient multi-modal instruction issue

Family Cites Families (134)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2111262B (en) 1981-12-04 1985-10-02 Ferranti Ltd Digital data storage apparatus
US4814978A (en) 1986-07-15 1989-03-21 Dataflow Computer Corporation Dataflow processing element, multiprocessor, and processes
US5276819A (en) 1987-05-01 1994-01-04 Hewlett-Packard Company Horizontal computer having register multiconnect for operand address generation during execution of iterations of a loop of program code
US5241635A (en) 1988-11-18 1993-08-31 Massachusetts Institute Of Technology Tagged token data processing system with operand matching in activation frames
JPH02306341A (ja) 1989-02-03 1990-12-19 Nec Corp マイクロプロセッサ
US5781753A (en) 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
US5197137A (en) 1989-07-28 1993-03-23 International Business Machines Corporation Computer architecture for the concurrent execution of sequential programs
US5067110A (en) 1989-10-10 1991-11-19 Advanced Micro Devices, Inc. Global reset and zero detection for a memory system
US5212663A (en) 1991-02-21 1993-05-18 Cypress Semiconductor Corporation Method to implement a large resettable static RAM without the large surge current
NL9100598A (nl) 1991-04-05 1992-11-02 Henk Corporaal Move: een flexibele en uitbreidbare architectuur voor het ontwerpen van processoren.
US6282583B1 (en) 1991-06-04 2001-08-28 Silicon Graphics, Inc. Method and apparatus for memory access in a matrix processor computer
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5373466A (en) 1992-03-25 1994-12-13 Harris Corporation Flash-clear of ram array using partial reset mechanism
US6101597A (en) 1993-12-30 2000-08-08 Intel Corporation Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor
US5546597A (en) * 1994-02-28 1996-08-13 Intel Corporation Ready selection of data dependent instructions using multi-cycle cams in a processor performing out-of-order instruction execution
US5541850A (en) 1994-05-17 1996-07-30 Vlsi Technology, Inc. Method and apparatus for forming an integrated circuit including a memory structure
US5572535A (en) 1994-07-05 1996-11-05 Motorola Inc. Method and data processing system for verifying the correct operation of a tri-state multiplexer in a circuit design
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US6052773A (en) 1995-02-10 2000-04-18 Massachusetts Institute Of Technology DPGA-coupled microprocessors
US5644742A (en) 1995-02-14 1997-07-01 Hal Computer Systems, Inc. Processor structure and method for a time-out checkpoint
US5790822A (en) 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US5920724A (en) 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
US5796997A (en) 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US5748978A (en) 1996-05-17 1998-05-05 Advanced Micro Devices, Inc. Byte queue divided into multiple subqueues for optimizing instruction selection logic
US6073159A (en) 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US5845103A (en) 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US6035374A (en) 1997-06-25 2000-03-07 Sun Microsystems, Inc. Method of executing coded instructions in a multiprocessor having shared execution resources including active, nap, and sleep states in accordance with cache miss latency
US5943501A (en) 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US6023753A (en) 1997-06-30 2000-02-08 Billion Of Operations Per Second, Inc. Manifold array processor
US5930158A (en) 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6192447B1 (en) 1998-04-09 2001-02-20 Compaq Computer Corporation Method and apparatus for resetting a random access memory
US6105128A (en) 1998-04-30 2000-08-15 Intel Corporation Method and apparatus for dispatching instructions to execution units in waves
US6164841A (en) 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
JP3469469B2 (ja) 1998-07-07 2003-11-25 富士通株式会社 情報処理装置
US6223254B1 (en) 1998-12-04 2001-04-24 Stmicroelectronics, Inc. Parcel cache
US6266768B1 (en) 1998-12-16 2001-07-24 International Business Machines Corporation System and method for permitting out-of-order execution of load instructions
WO2000049496A1 (en) 1999-02-15 2000-08-24 Koninklijke Philips Electronics N.V. Data processor with a configurable functional unit and method using such a data processor
US6553480B1 (en) 1999-11-05 2003-04-22 International Business Machines Corporation System and method for managing the execution of instruction groups having multiple executable instructions
US7188232B1 (en) * 2000-05-03 2007-03-06 Choquette Jack H Pipelined processing with commit speculation staging buffer and load/store centric exception handling
AU2001273873A1 (en) 2000-06-13 2001-12-24 Synergestic Computing Systems Aps Synergetic computing system
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US20020138714A1 (en) 2001-03-22 2002-09-26 Sun Microsystems, Inc. Scoreboard for scheduling of instructions in a microprocessor that provides out of order execution
US6834315B2 (en) 2001-03-26 2004-12-21 International Business Machines Corporation Method, system, and program for prioritizing input/output (I/O) requests submitted to a device driver
US7032217B2 (en) 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
WO2003038645A2 (en) 2001-10-31 2003-05-08 University Of Texas A scalable processing architecture
US6836420B1 (en) 2002-03-04 2004-12-28 Synplicity, Inc. Method and apparatus for resetable memory and design approach for same
WO2003088048A1 (en) 2002-04-08 2003-10-23 University Of Texas System Non-uniform cache apparatus, systems, and methods
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
US7299458B2 (en) 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US7293162B2 (en) 2002-12-18 2007-11-06 Fujitsu Limited Split data-flow scheduling mechanism
US7130990B2 (en) 2002-12-31 2006-10-31 Intel Corporation Efficient instruction scheduling with lossy tracking of scheduling information
US7069189B2 (en) 2002-12-31 2006-06-27 Intel Corporation Method and apparatus for controlling multiple resources using thermal related parameters
US20040128483A1 (en) 2002-12-31 2004-07-01 Intel Corporation Fuser renamer apparatus, systems, and methods
US7107553B2 (en) 2003-08-18 2006-09-12 Synopsys, Inc. Method and apparatus for solving constraints
US8006074B1 (en) 2003-12-24 2011-08-23 Altera Corporation Methods and apparatus for executing extended custom instructions
EP1731998A1 (en) 2004-03-29 2006-12-13 Kyoto University Data processing device, data processing program, and recording medium containing the data processing program
US7302527B2 (en) 2004-11-12 2007-11-27 International Business Machines Corporation Systems and methods for executing load instructions that avoid order violations
US7496735B2 (en) 2004-11-22 2009-02-24 Strandera Corporation Method and apparatus for incremental commitment to architectural state in a microprocessor
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US7853777B2 (en) 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7380038B2 (en) 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
US7721071B2 (en) 2006-02-28 2010-05-18 Mips Technologies, Inc. System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7506139B2 (en) 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US8032734B2 (en) 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8181168B1 (en) 2007-02-07 2012-05-15 Tilera Corporation Memory access assignment for parallel processing architectures
US8095618B2 (en) * 2007-03-30 2012-01-10 Microsoft Corporation In-memory caching of shared customizable multi-tenant data
US7721066B2 (en) 2007-06-05 2010-05-18 Apple Inc. Efficient encoding for detecting load dependency on store with misalignment
US20080320274A1 (en) 2007-06-19 2008-12-25 Raza Microelectronics, Inc. Age matrix for queue dispatch order
US8180997B2 (en) 2007-07-05 2012-05-15 Board Of Regents, University Of Texas System Dynamically composing processor cores to form logical processors
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
JP2009026106A (ja) 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
US20090150653A1 (en) * 2007-12-07 2009-06-11 Pedro Chaparro Monferrer Mechanism for soft error detection and recovery in issue queues
US7836282B2 (en) 2007-12-20 2010-11-16 International Business Machines Corporation Method and apparatus for performing out of order instruction folding and retirement
US8321850B2 (en) 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US7769984B2 (en) 2008-09-11 2010-08-03 International Business Machines Corporation Dual-issuance of microprocessor instructions using dual dependency matrices
WO2010043401A2 (en) 2008-10-15 2010-04-22 Martin Vorbach Data processing device
US8205066B2 (en) 2008-10-31 2012-06-19 Convey Computer Dynamically configured coprocessor for different extended instruction set personality specific to application program with shared memory storing instructions invisibly dispatched from host processor
US20100146209A1 (en) 2008-12-05 2010-06-10 Intellectual Ventures Management, Llc Method and apparatus for combining independent data caches
US8127119B2 (en) 2008-12-05 2012-02-28 The Board Of Regents Of The University Of Texas System Control-flow prediction using multiple independent predictors
US8099566B2 (en) 2009-05-15 2012-01-17 Oracle America, Inc. Load/store ordering in a threaded out-of-order processor
US8006075B2 (en) 2009-05-21 2011-08-23 Oracle America, Inc. Dynamically allocated store queue for a multithreaded processor
US8930679B2 (en) 2009-05-29 2015-01-06 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay by making an issuing of a load instruction dependent upon a dependee instruction of a store instruction
US20100325395A1 (en) 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
US8429386B2 (en) 2009-06-30 2013-04-23 Oracle America, Inc. Dynamic tag allocation in a multithreaded out-of-order processor
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
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US20110078424A1 (en) 2009-09-30 2011-03-31 International Business Machines Corporation Optimizing program code using branch elimination
US8464002B2 (en) 2009-10-14 2013-06-11 Board Of Regents Of The University Of Texas System Burst-based cache dead block prediction
JP5057256B2 (ja) 2009-12-02 2012-10-24 株式会社Mush−A データ処理装置、データ処理システムおよびデータ処理方法
WO2011067896A1 (en) 2009-12-02 2011-06-09 Mush-A Co., Ltd. Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method
US9104399B2 (en) 2009-12-23 2015-08-11 International Business Machines Corporation Dual issuing of complex instruction set instructions
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
US8201024B2 (en) 2010-05-17 2012-06-12 Microsoft Corporation Managing memory faults
KR101731742B1 (ko) 2010-06-18 2017-04-28 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 결합된 분기 타깃 및 프레디킷 예측
CN102117197B (zh) 2011-03-04 2012-08-15 中国电子科技集团公司第三十八研究所 高性能通用信号处理器指令分配装置
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US8862653B2 (en) 2011-04-26 2014-10-14 University Of South Carolina System and method for sparse matrix vector multiplication processing
US8777124B2 (en) 2011-04-29 2014-07-15 Hunter Industries, Inc. Irrigation sprinkler with ratcheting manual nozzle rotation
US9529596B2 (en) 2011-07-01 2016-12-27 Intel Corporation Method and apparatus for scheduling instructions in a multi-strand out of order processor with instruction synchronization bits and scoreboard bits
US20130054939A1 (en) 2011-08-26 2013-02-28 Cognitive Electronics, Inc. Integrated circuit having a hard core and a soft core
SG11201402727WA (en) 2011-12-01 2014-06-27 Univ Singapore Polymorphic heterogeneous multi-core architecture
US9632779B2 (en) 2011-12-19 2017-04-25 International Business Machines Corporation Instruction predication using instruction filtering
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
US9513922B2 (en) 2012-04-20 2016-12-06 Freescale Semiconductor, Inc. Computer system and a method for generating an optimized program code
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
CN105760138B (zh) 2012-06-29 2018-12-11 英特尔公司 用于测试事务性执行状态的系统
US9471317B2 (en) 2012-09-27 2016-10-18 Texas Instruments Deutschland Gmbh Execution of additional instructions in conjunction atomically as specified in instruction field
US10235180B2 (en) 2012-12-21 2019-03-19 Intel Corporation Scheduler implementing dependency matrix having restricted entries
US9632790B2 (en) 2012-12-26 2017-04-25 Intel Corporation Select logic for the instruction scheduler of a multi strand out-of-order processor based on delayed reconstructed program order
US9354884B2 (en) 2013-03-13 2016-05-31 International Business Machines Corporation Processor with hybrid pipeline capable of operating in out-of-order and in-order modes
EP2972794A4 (en) 2013-03-15 2017-05-03 Soft Machines, Inc. A method for executing blocks of instructions using a microprocessor architecture having a register view, source view, instruction view, and a plurality of register templates
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
CN104050092B (zh) 2013-03-15 2018-05-01 上海芯豪微电子有限公司 一种数据缓存系统及方法
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
US9116817B2 (en) 2013-05-09 2015-08-25 Apple Inc. Pointer chasing prediction
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
GB2515076B (en) 2013-06-13 2020-07-15 Advanced Risc Mach Ltd A data processing apparatus and method for handling retrieval of instructions from an instruction cache
US9372698B2 (en) 2013-06-29 2016-06-21 Intel Corporation Method and apparatus for implementing dynamic portbinding within a reservation station
GB2522990B (en) 2013-12-20 2016-08-03 Imagination Tech Ltd Processor with virtualized instruction set architecture and methods
US9448936B2 (en) 2014-01-13 2016-09-20 Apple Inc. Concurrent store and load operations
US9612840B2 (en) 2014-03-28 2017-04-04 Intel Corporation Method and apparatus for implementing a dynamic out-of-order processor pipeline
US20160179532A1 (en) 2014-12-22 2016-06-23 Qualcomm Incorporated Managing allocation of physical registers in a block-based instruction set architecture (isa), and related apparatuses and methods
US9135015B1 (en) 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US10606651B2 (en) 2015-04-17 2020-03-31 Microsoft Technology Licensing, Llc Free form expression accelerator with thread length-based thread assignment to clustered soft processor cores that share a functional circuit
US20170083313A1 (en) 2015-09-22 2017-03-23 Qualcomm Incorporated CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs)
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US20180032344A1 (en) 2016-07-31 2018-02-01 Microsoft Technology Licensing, Llc Out-of-order block-based processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101133391A (zh) * 2005-02-04 2008-02-27 美普思科技有限公司 多线程微处理器中的二分化线程调度器
US20070094483A1 (en) * 2005-10-26 2007-04-26 James Wilson Pipelined digital signal processor
US20120278593A1 (en) * 2011-04-29 2012-11-01 Arizona Technology Enterprises, Llc Low complexity out-of-order issue logic using static circuits
WO2015069583A1 (en) * 2013-11-07 2015-05-14 Microsoft Technology Licensing, Llc Energy efficient multi-modal instruction issue

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
KARTHIKEYAN等: ""TRIPS:A Polymorphous Architecture for Exploting ILP,TLP,and DLP"", 《ACM TRANSACTIONS ON ARCHITECTURE AND CODEOPTIMIZATION,ASSOCIATION FOR COMPUTERING MACHINERY》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111382091A (zh) * 2018-12-30 2020-07-07 德克萨斯仪器股份有限公司 用于低周期存储器访问和附加功能的宽边随机访问存储器
CN113255264A (zh) * 2021-06-07 2021-08-13 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
CN113255264B (zh) * 2021-06-07 2021-10-01 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
WO2022257330A1 (zh) * 2021-06-07 2022-12-15 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
US11922026B2 (en) 2022-02-16 2024-03-05 T-Mobile Usa, Inc. Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network

Also Published As

Publication number Publication date
CN109074259A (zh) 2018-12-21
US20170315814A1 (en) 2017-11-02
WO2017189466A1 (en) 2017-11-02
EP3449359A1 (en) 2019-03-06
CN109074261B (zh) 2023-06-23
WO2017189464A1 (en) 2017-11-02
US11687345B2 (en) 2023-06-27
EP3449357A1 (en) 2019-03-06
CN109074260A (zh) 2018-12-21
CN109196468A (zh) 2019-01-11
WO2017189465A1 (en) 2017-11-02
EP3449358A1 (en) 2019-03-06
US20170315812A1 (en) 2017-11-02
US20170315815A1 (en) 2017-11-02
EP3449358B1 (en) 2022-02-09
US11449342B2 (en) 2022-09-20
CN109074260B (zh) 2023-05-05
EP3449357B1 (en) 2022-08-24
EP3449359B1 (en) 2021-02-24
EP3449360A1 (en) 2019-03-06
US11106467B2 (en) 2021-08-31
WO2017189463A1 (en) 2017-11-02
CN109196468B (zh) 2023-04-28
US20170315813A1 (en) 2017-11-02

Similar Documents

Publication Publication Date Title
CN109074261A (zh) 用于乱序块isa处理器的增量调度器
US11900124B2 (en) Memory-network processor with programmable optimizations
Parashar et al. Triggered instructions: A control paradigm for spatially-programmed architectures
CN108027769A (zh) 使用寄存器访问指令发起指令块执行
CN108027766A (zh) 预取指令块
CN108027767A (zh) 寄存器读取/写入排序
CN107810479A (zh) 用于处理器控制传送的目标位置的确定
CN108139913A (zh) 处理器操作的配置模式
CN110249302A (zh) 在处理器核上同时执行多个程序
CN108027773A (zh) 存储器访问指令顺序编码的生成和使用
Parashar et al. Efficient spatial processing element control via triggered instructions
KR20180021812A (ko) 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐
CN108027768A (zh) 指令块地址寄存器
CN108027734A (zh) 空指令的动态生成
CN108027733A (zh) 在目标字段中存储无效
US20230281014A1 (en) Parallel processing of multiple loops with loads and stores
Murti et al. Embedded Processor Architectures
KR20230159596A (ko) 추론적 인코딩을 사용하는 병렬 처리 아키텍처
Rutzig Multicore platforms: Processors, communication and memories
Browne et al. Polymorphous Architectures: A Unified Approach for Extracting Concurrency of Different Granularities

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
GR01 Patent grant
GR01 Patent grant