CN109074260B - 乱序的基于块的处理器和指令调度器 - Google Patents
乱序的基于块的处理器和指令调度器 Download PDFInfo
- Publication number
- CN109074260B CN109074260B CN201780026331.4A CN201780026331A CN109074260B CN 109074260 B CN109074260 B CN 109074260B CN 201780026331 A CN201780026331 A CN 201780026331A CN 109074260 B CN109074260 B CN 109074260B
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- block
- data
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 83
- 239000000872 buffer Substances 0.000 claims description 38
- 238000013507 mapping Methods 0.000 claims description 11
- 230000003068 static effect Effects 0.000 claims description 6
- 238000011010 flushing procedure Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 48
- 238000012545 processing Methods 0.000 description 38
- 230000006870 function Effects 0.000 description 24
- 238000004891 communication Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 8
- 238000013461 design Methods 0.000 description 6
- 238000007667 floating Methods 0.000 description 4
- 230000001976 improved effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 239000000835 fiber Substances 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 230000008093 supporting effect Effects 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 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
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach 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
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012544 monitoring process Methods 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
- 238000011084 recovery Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- -1 shift registers Substances 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 230000001360 synchronised 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/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
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/30181—Instruction operation extension or modification
-
- 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/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- 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
-
- 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/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- 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/3856—Reordering of instructions, e.g. using queues or age tags
-
- 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
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3873—Variable length pipelines, e.g. elastic pipeline
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or 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/3897—Concurrent instruction execution, e.g. pipeline or 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
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Logic Circuits (AREA)
Abstract
公开了用于实现包括现场可编程门阵列实现的基于块的处理器的装置和方法。在所公开的技术的一个示例中,基于块的处理器包括被配置为针对指令的事务块生成译码的就绪依赖性的指令译码器,其中指令中的每个指令与编码在事务块中的不同指令标识符相关联。处理器还包括被配置为从指令的事务块的集合乱序地发出指令的指令调度器。指令基于确定针对指令的译码的就绪状态依赖性被满足而被发出。确定包括访问具有译码的就绪依赖性的存储装置,该译码的就绪依赖性利用被编码在指令的事务块中的相应指令标识符而被索引。
Description
背景技术
由于摩尔定律所预测的持续的晶体管缩放(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是图示了如可以在所公开的技术的某些示例中使用的、发出具有编码的指令标识符的指令的示例方法的流程图。
图11是概述如可以在所公开的技术的某些示例中执行的、当由就绪状态数据指示的依赖性可用时发出并且执行指令的示例方法的流程图。
图12是概述如可以在所公开的技术的某些示例中执行的、产生用于实现基于块的处理器的配置比特流的示例方法的流程图。
图13是图示了用于实现所公开的技术的某些实施例的适合的计算环境的块图。
具体实施方式
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架构可以仍然支持命令式编程语言和顺序的存储器语义,但是期望地还享有具有近按序的功率效率和复杂性的乱序执行的益处。
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中的任何项之间的输入数据和输出数据的控制。
基于块的处理器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维持每个译码的指令的依赖性(例如,指令的断言和数据操作数)的就绪状态的记录。当全部指令的依赖性(如果有的话)都被满足时,指令唤醒并且准备好发出。在一些示例中,最低编号的就绪指令ID在每个流水线时钟周期被选择并且其译码的指令数据和输入操作数被读取。在图示的示例中,除了数据复用和功能单元控制信号,译码的指令数据可以编码至多两个就绪事件。指令调度器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中的)所有指令窗口就绪状态被闪速清除(块重置)。然而,当块分支回到其本身(块刷新)时,仅仅活动就绪状态被清除;译码的就绪状态被保留,以使得不必重新取指和译码块的指令。因此,代替执行块重置,刷新可以用于节省循环中的时间和能量。
由于一些软件关键路径包括相关指令的单个链(例如,指令A瞄准指令B,指令B转而瞄准指令C),所以通常期望的是,数据流调度器不添加用于连续的背靠背指令唤醒的流水线气泡(bubble)。在这样的情况下,IS-阶段的就绪-发出-目标-就绪流水线的再次发生应当在一个周期中完成,假设这不会严重影响时钟频率。
诸如ADD的指令具有一个周期的延时。在EX阶段结果转发的情况下,调度器可以在IS阶段中、甚至在指令完成之前唤醒它们目标的指令。其他指令结果可以等待ALU比较、采用多个周期、或者具有未知的延时。这些指令等待直到稍后唤醒它们的目标。
最终,调度器设计可以在一定范围的EDGE ISA上可扩展。在一些示例中,每个流水线周期可以接受从一个至四个的译码的指令和从两个至四个的目标就绪事件,并且在每个周期发出一个至两个指令。
多种不同的技术可以用于实现指令调度器235。例如,调度器235可以被实现为并行调度器,其中指令的就绪状态被显式地表示在FPGA D型触发器(FF)中,并且其中每一个指令的就绪状态在每个周期都被重新评估。在其他示例中,指令调度器235可以被实现为将就绪状态保持在LUT RAM中的更紧凑的增量调度器,并且指令调度器235在每个周期更新大约两个至四个目标指令的就绪状态。
寄存器文件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可以用于选择LUT 420或进位逻辑430的输出,而多路复用器445可以用于选择LUT 420或多路复用器440的另一输出。在一些示例中,多路复用器用于选择状态元件(例如触发器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指定基于块的指令的结果被发送到的指令。例如,在指令槽7处的ADD指令可以指定其计算结果将被发送到槽3和10处的指令,包括操作数槽(例如,左操作数、右操作数、或断言操作数)的指定。取决于特定指令和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处理器核上的空闲指令块是否要被刷新。如果空闲指令块要被刷新,则指令块可以在执行状态850处重新开始执行。备选地,如果空闲指令块不要被刷新,则指令块不被映射并且处理器核可以被冲洗并且随后指令块可以被映射到冲洗的处理器核。
尽管为便于解释,状态图800将指令块的状态图示为在单个处理器核上执行,但是对相关领域的普通技术人员而言应当容易理解,在某些示例中,多个处理器核可以用于并发执行给定指令块的多个实例。
X.示例基于块的处理器和存储器配置
图9是图示包括基于块的处理器910的装置的图900,基于块的处理器910包括被配置为执行包括用于包括存储器同步和存储器锁定的存储器操作的指令的指令块的控制单元920。控制单元包括核调度器925,其控制:对用于执行指令处理的核的分配和解除分配,对在核、寄存器文件、存储器接口和/或I/O接口中的任何项之间的输入数据和输出数据的控制。控制单元920还可以包括用于执行某些存储器操作的专用寄存器。
基于块的处理器910还包括被配置为取指并且执行指令块的一个或多个处理器核930–937。核中的每个核包括控制指令块中的指令被取指、译码、发出和执行的顺序的指令调度器(例如,指令调度器941)。图示的基于块的处理器910具有至多八个核,但是在其他示例中可以存在1个、2个、4个、64个、512个、1024个或其他数量的基于块的处理器的核。基于块的处理器910被耦合到存储器950并且被耦合到计算机可读存储介质盘960,存储器950包括指令块A和B,其包括实现所公开的存储器操作的指令(分别为955和956),计算机可读存储介质盘960存储用于执行所公开的存储器操作的指令965。
XI.操作基于块的处理器的示例方法
图10是概述如可以在所公开的技术的某些示例中执行的操作基于块的处理器的示例方法的流程图1000。例如,基于块的处理器的定制或ASIC实现、或者诸如以上讨论的那些的基于块的处理器的FPGA实现可以用于执行图示的方法。
在处理块1010处,生成针对指令的事务块的结构依赖性。指令中的每个指令具有分配的指令标识符,例如,指令在指令块内的相对位置的索引可以被用作指令标识符。指令可以利用使用指令标识符的其相应的目标指令而被编码。处理器将由指令生成的结果作为针对目标指令的输入操作数发送到(一个或多个)指定目标指令。在其他示例中,指令标识符可以被编码在指令块的头部分或脚部分中。指令依赖性可以包括但不限于针对指令的输入操作数和针对到存储器的加载和存储的排序信息。
在一些示例中,仅仅针对指令的事务块的部分生成依赖性。这包括在所有指令块已经被取指之前取指、译码并且执行指令的情况。基于块的处理器不需要等待所有指令块被译码以开始操作。在一些示例中,指令利用唯一地识别事务指令块中的指令的指令标识符来编码。例如,编码指令标识符的一种方式是通过指令块内的指令的相对位置。其他指令可以随后瞄准用于通过指定指令所处的指令ID发送数据操作数和断言的特定指令。例如,如果指令被定位在针对指令块内的指令的第四可用存储器地址处,则另一指令可以通过指定为四的指令ID值来瞄准该指令。如本领域的普通技术而言将容易理解的,用于编码指令标识符的其他技术可以被使用。然而,重要的是要指出,指令标识符以静态方式被编码,其允许对指令块内的指令依赖性的更容易的跟踪。这与指令不会彼此识别而是代替地使用寄存器或主存储器来在指令之间传递值的传统CISC和RISC方法形成对比。可以针对指令生成的指令依赖性的特定示例包括:指令是否在广播信道上接收到操作数,指令断言是否就绪,指令的输入操作数是否就绪,指令是否应当被抑制(例如,因为指令已经发出)。在一些示例中,就绪状态可以被进一步分成:译码的就绪状态,其可以由指令译码器初始化并且针对指令块的后续实例保持静态;或者活动就绪状态,其可以针对执行指令块的每个实例而被刷新。因此,译码的就绪状态指示指令是否需要编码的特定依赖性中的每个依赖性,而活动就绪状态指示针对执行讨论中的指令块的特定实例已经满足了指定依赖性。在已经生成了指令依赖性之后,方法前进到处理块1020。
在处理块1020处,基于在处理块1010处生成的指令依赖性,一旦已经满足了对应指令的依赖性,就信号通知一个或多个指令已准备好。对于一些指令,例如移动立即指令,指令的依赖性被立即满足,因为该指令不需要任何依赖性。因此,这样的指令准备好甚至在任何寄存器值或其他依赖性已经到达指令块之前立即发出。对于其他指令,指令必须等待其合适的依赖性被生成和满足。就绪指令之后等待被选择以由指令调度器发出。在一些示例中,其对应的“就绪”位被设置。对于给定指令窗口,若干指令可以就绪或者变为就绪,同时仅仅一个或少量这样的指令可以在每个周期发出。发出的指令立即开始执行。在一些示例中,就绪指令被选择用于以它们被布置在指令块中的顺序来发出和后续执行。在其他示例中,其他方案可以用于确定在存在比处理器核的资源允许的可用于发出的更多指令的情况下,执行哪个就绪指令。例如,在可以并发执行两个指令的核中,当三个指令准备好发出时,两个指令可以被选择以开始执行并且第三个指令被延迟直到执行槽可用。
在处理块1030处,执行下一发出的指令。例如,在图2的微架构的检测到的流水线的功能单元250和265可以用于执行指令。指令结果可以使用加载存储队列270被存储在存储器中,写入到寄存器文件290,或者被发回到流水线中以用于由使用操作数缓冲器239或旁路机构的其他指令执行以直接前进到执行流水线寄存器245。以这种方式,操作数可以被直接发送以用于由取决于当前执行指令的指令来使用。
XII.利用刷新来操作基于块的处理器的示例方法
图11是概述如可以在所公开的技术的某些示例中执行的执行指令块的示例的流程图1100。例如,以上关于图2所描述的基于块的处理器(包括使用以上在图2中讨论的微架构的实现)可以用于实现方法的某些示例。在一些示例中,方法可以使用定制或专用集成电路(ASIC)来执行,而在其他示例中,可以使用诸如FPGA的可重新配置逻辑电路。在处理块1110处,针对指令的事务块的指令头和一个或多个指令可以被并发取指。在一些示例中,在特定时钟周期中取指指令头的仅仅一部分。在某些FPGA示例中,多读端口块RAM允许对指令头和块指令的并发取指。这在某些应用中可以是有利的,因为其允许并发指令头的译码、同时没有依赖性的指令块指令可以被立即发出并且开始执行。在方法的其他示例中,一次仅仅取指存储器的单个字。
在处理块1120处,指令头部分被译码。在处理块1110处取指的指令也被译码。指令译码器生成针对指令的就绪状态数据并且将针对指令的就绪状态数据存储在存储器中,其可以使用与指令相关联的指令标识符来索引。在一些示例中,针对给定指令的指令标识符基于指令块内的指令的相对位置,并且指令块中的其他指令基于指令的标识符来引用该指令。译码的就绪状态数据可以被存储在由被映射到FPGA的LUT上的分布式RAM组成的RAM中。在其他示例中,其他形式的RAM、或锁存器、或触发器用于存储译码的指令状态,其包括由指令调度器使用的译码的就绪状态数据。例如,就绪状态数据可以被存储在被耦合到图2的指令调度器235的存储器中,而用于控制微架构流水线的执行的控制信息可以被存储在译码的指令存储236中。指令调度器235还可以用于控制来自操作数缓冲器239的操作数读取。
在处理块1130处,处理器在如由就绪状态数据指示的其依赖性可用时发出并且执行指令中的至少一个指令。例如,多个位可以被存储在FPGA分布式LUT RAM或块RAM中,并且当所有位与指定模式匹配时,指令被发出。因为仅仅有限数量的指令可以使用执行流水线在给定时钟周期中执行,所以如果多于该数量的支持的指令变为准备好发出,则某些指令必须等待。诸如使用“准备好发出”位掩码加优先级编码器的技术可以用于确定哪些指令应当在下次被执行。
在处理块1140处,处理器使用旁路机构,以便旁路针对用于执行指令的操作数的至少一个源的其操作数缓冲器。通过旁路操作数缓冲器(例如,操作数缓存器239),流水线可以通过将下一指令的数据直接发送到流水线寄存器245来避免一个时钟周期的延迟。在其他示例中,基于块的处理器不使用这样的旁路机构。使用旁路机构还可以避免关于在操作数缓冲器239上可用的读端口的数量的限制。例如,在一些微架构中,读端口的数量或者可以在相同时钟周期中被写入到操作数缓冲器的操作数的类型可能受限制。例如,操作数缓冲器可能仅仅能够在每个时钟周期接受一个左操作数和一个右操作数。通过还允许使用旁路,当存在多于一个指令执行时,可以通过将针对下一指令的操作数直接发送到流水线寄存器245、同时由另一指令并发生成的操作数被安全地存储在操作数缓冲器239中,来避免流水线暂停。
在处理块1150处,指令块到达执行的提交阶段并且执行被延迟直到指令块到达该提交阶段的任何存储器和/或寄存器操作。例如,加载存储队列270或者寄存器文件290内的影子寄存器可以存储数据直到实际上确定其将通过执行指令块而被写入。这在例如多个指令写入到相同存储器地址、或者存储器或寄存器操作不是由于指令块的推测执行而发生的情况下维持机器状态的一致性。方法之后前进以处理程序中的下一指令块。如果相同指令块要例如在程序循环中被再次执行,则方法前进到处理块1160。在一些示例中,指令块可以全部或部分地被译码并且可用,在这种情况下方法还可以前进到处理块1160以便刷新指令块的指令窗口。在其他示例中,例如在指令块尚未被完全译码的情况下,或者在指令块被新执行的情况下,方法前进到处理块1170。
在处理块1160处,指令窗口就绪状态例如通过重置针对指令块的活动就绪状态数据、但是重新使用针对指令块的先前译码的就绪状态数据而被刷新。因此,某些依赖性可以被确定,并且允许执行前进,而不对来自指令块的先前执行的工作中的一些工作重新译码和重新使用。在处理块1170处,整个指令窗口就绪状态被重置。不管是刷新还是重置,方法前进到处理块1130以便发出并且执行附加的指令。在附加的指令信息必须被取指和译码的情况下,方法可以备选地前进到处理块1110或处理块1120(当适合于执行指令块时)。
XIII.配置可重新配置逻辑器件的示例方法
图12是概述如可以在所公开的技术的某些示例中执行的配置可重新配置逻辑器件的示例方法的流程图1200。例如,以上关于图3所讨论的FPGA可以被配置为使用以上关于图2讨论的示例微架构来实现图1的基于块的处理器。
在处理块1210处,将基于块的处理器部件的描述映射到FPGA的可重新配置逻辑器件部件。例如,处理器设计者可以指定以硬件描述语言的对基于块的处理器的描述,硬件描述语言诸如为SystemVerilog、SystemC、Verilog或硬件描述语言的任何其他适合的组合。在一些示例中,以诸如C或C++的传统编程语言编写的描述用于描述基于块的处理器的至少部分。基于块的处理器的描述可以包括以上讨论的新颖部件中的任何部件。在一些示例中,设计者可以指定要由处理器微架构的元件瞄准的特定FPGA单元。例如,设计者可以指定指令高速缓存和/或数据高速缓存使用FPGA的块RAM资源来实现。在一些示例中,程序员可以使用由FPGA供应商提供的可用宏来实现FIFO缓冲器、移位寄存器和使用针对该FPGA的经济映射的其他部件。
在处理块1220处,产生配置比特流以用于实现针对基于块的处理器的电路,其包括使用由指令标识符索引的就绪状态数据的乱序指令调度器。例如,以硬件描述语言表示的基于块的处理器的描述可以被编译以生成网表,并且该网表转而用于生成比特流文件。在比特流文件中指示的信号可以被施加到FPGA的配置接口以便将FPGA配置为执行用于实现根据所公开的技术的基于块的处理器的功能。
在处理块1230处,可重新配置逻辑器件使用在处理块1220处生成的比特流来配置。例如,一些FPGA具有用于将数据连续地流传输到FPGA的配置存储器中的回读端口,由此配置FPGA。在一些示例中,FPGA的配置存储器通过并行或其他可寻址端口而被寻址。在一些示例中,具有与FPGA类似的结构的可重新配置逻辑器件可以被配置一次,而不可被重新配置。在其他示例中,FPGA可以被电擦除并且被重新写入以便提供新配置。在一些示例中,FPGA在无论何时集成电路被重新上电时都被重新配置,而在其他示例中,FGPA配置跨重复的电力周期维持状态。
XIV.示例计算环境
图13图示了在其中可以实现所描述的实施例、技术和工艺(包括配置基于块的处理器)的适合的计算环境1300的一般示例。例如,计算环境1300可以实现所公开的技术,以用于配置处理器以实现所公开的基于块的处理器架构和微架构、和/或将代码编译成计算机可执行指令和/或用于执行这样的操作的配置比特流,如在此所描述的。
计算环境1300不旨在提出关于技术的使用或者功能的范围的任何限制,因为技术可以被实现在不同的通用或者专用计算环境中。例如,所公开的技术可以利用其他计算机系统配置被实现,包括手持式设备、多处理器系统、可编程消费者电子产品、网络PC、微型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备二者中。
参考图13,计算环境1300包括至少一个基于块的处理单元1310、以及存储器1320。在图13中,该最基本配置1330被包括在虚线内。基于块的处理单元1310执行计算机可执行指令,并且可以是真实处理器或者虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,并且由此多个处理器可以同时运行。存储器1320可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存存储器等)、或者以上两者的组合。存储器1320存储可以例如实现在此所描述的技术的软件1380、图像和视频。计算环境可以具有附加的特征。例如,计算环境1300包括存储装置1340、一个或多个输入设备1350、一个或多个输出设备1360以及一个或多个通信连接1370。诸如总线、控制器或者网络的互连机制(未示出)将计算环境1300的部件互连。通常,操作系统软件(未示出)提供用于在计算环境1300中执行的其他软件的操作环境,并且协调计算环境1300的部件的活动。
存储装置1340可以是可移除或者不可移除的,并且包括磁盘、磁带或者磁带盒、CD-ROM、CD-RW、DVD或者可以用于存储信息并且可以在计算环境1300内访问的任何其他介质。存储装置1340存储用于软件1380的指令、插件数据和消息,其可以用于实现在此所描述的技术。
(一个或多个)输入设备1350可以是触摸输入设备,诸如键盘、小键盘、鼠标、触屏显示器、笔、或轨迹球、语音输入设备、扫描设备、或者向计算环境1300提供输入的另一设备。对于音频而言,(一个或多个)输入设备1350可以是接受以模拟或者数字形式的音频输入的声卡或者类似设备,或者可以是向计算环境1300提供音频样本的CD-ROM读取器。(一个或多个)输出设备1360可以是显示器、打印机、扬声器、CD刻录机、或者提供来自计算环境1300的输出的另一设备。
(一个或多个)通信连接1370实现通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频、或者调制数据信号中的其他数据的信息。(一个或多个)通信连接1370不限于有线连接(例如,兆比特或吉比特以太网、Infiniband、通过电连接或通过光纤连接的光纤信道),而且还包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)以及用于提供用于所公开的方法的网络连接的其他适合的通信连接。在虚拟主机环境中,(一个或多个)通信连接可以是由虚拟主机所提供的虚拟化网络连接。
可以使用实现计算云1390中的所公开的技术的全部或部分的计算机可执行指令来执行所公开的方法的一些实施例。例如,所公开的编译器和/或基于块的处理器的服务器被定位在计算环境中,或者所公开的编译器可以在被定位在计算云1390中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或者CISC处理器)上执行。
计算机可读介质是可以在计算环境1300内访问的任何可用介质。以示例而非限制的方式,利用计算环境1300,计算机可读介质包括存储器1320和/或存储装置1340。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质(诸如存储器1320和存储装置1340)而非传输介质(诸如调制数据信号)。
XV.所公开的技术的附加示例
在这里根据以上讨论的示例来讨论所公开的主题的附加示例。例如,以上关于图1、图2和图9讨论的基于块的处理器的方面可以用于实现这些附加示例,包括FPGA、诸如以上关于图3和图4讨论的那些FPGA。
在所公开的技术的某些示例中,基于块的处理器中的全部或一部分通过将FPGA配置为包括用于执行在基于块的处理器ISA中表达的程序的结构来实现。在一些示例中,处理器被实现在嵌入式设备中,诸如用于部署在物联网(IoT)网络中。在一些示例中,诸如高速缓存的结构,以及在指令调度器、加载存储队列和/或寄存器文件中使用的存储被实现在具有单个写端口或单个读端口的存储器中。在其他示例中,这些结构中的一个或多个被实现在具有多个读端口和/或写端口的存储器中。在一些示例中,指令块的指令块头以及一个或多个指令可以从存储器和/或指令高速缓存并发地取指。在一些示例中,旁路机构允许从微架构流水线的执行部分生成的操作来旁路操作数,由此允许具有共享的或链式的依赖性的指令的背靠背发出。在一些示例中,旁路机构允许当在执行时钟周期期间与指令窗口操作数缓冲器上的写入端口相比存在更多生成的操作数时,避免流水线暂停。
在一些示例中,调度器可以使用译码的或先前译码的指令依赖性,来在它们已经被取指之前唤醒并且发出指令。在一些示例中,针对指令调度器的存储可以被分成两个或更多个部分,以便将存储映射到FPGA的两个或更多个物理存储单元。在一些示例中,指令调度器包括并行调度器。在其他示例中,指令调度器包括一个或多个事件队列和一个或多个指令队列。在一些示例中,调度器被配置为在重新执行指令块后刷新指令中的一些但不是全部。
在所公开的技术的一些示例中,一种装置包括基于块的处理器,并且基于块的处理器包括:指令译码器,其被配置为针对指令的事务块的至少部分生成译码的就绪依赖性,该指令中的每个指令与编码在该事务块中的不同指令标识符相关联;以及指令调度器,其被配置为从指令的该事务块不按程序顺序地发出指令。指令调度器可以基于确定针对该指令的该译码的就绪依赖性被满足来发出指令。确定可以包括访问存储使用被编码在指令的该事务块中的相应指令标识符的该译码的就绪依赖性的存储装置。
在一些示例中,该确定包括使用由执行的指令信号通知的指令标识符来生成用于访问该存储装置的索引。在一些示例中,该处理器还包括指令取指单元,该指令取指单元被配置为取指针对指令的该事务块的头的至少部分,并且并发取指指令的该事务块的指令的至少部分。在一些示例中,该指令取指单元包括存储所取指的头的第一块存储器和存储所取指的指令的第二块存储器。在一些示例中,第一块存储器可以存储所取指的头、所取指的指令、或者头和指令的混合。在一些示例中,基于块的处理器是利用可重新配置逻辑器件实现的软核处理器。在一些示例中,基于块的处理器被配置为利用优先级编码器并且基于针对下一指令编码的指令标识符来选择要执行的指令块的下一指令。在一些示例中,这包括使用准备好发出位掩码。
在一些示例中,该指令调度器被耦合到数据操作数缓冲器,该数据操作数缓冲器存储用于由该指令在后续时钟周期中执行的生成的数据。在一些示例中,处理器包括旁路逻辑,该旁路逻辑允许数据操作数被转发以用于由指令在针对指令的当前执行时钟周期之后紧跟着的后续时钟周期中执行,从而允许该数据操作数被转发而不将该数据操作数存储在该数据操作数缓冲器中。在一些示例中,该数据操作数缓冲器被配置为每个时钟周期为不超过一个的指令来存储操作数数据,并且处理器还包括旁路逻辑,该旁路逻辑允许在不同数据操作数被存储在该数据操作数缓冲器中时、针对不同指令的数据操作数在相同时钟周期中被转发到该处理器的执行单元。
在所公开的技术的一些示例中,一种可重新配置逻辑器件(诸如可重新编程或一次性编程FPGA)被配置为执行基于块的处理器指令集。该可重新配置逻辑器件被配置为使用以下各项来执行指令:多个查找表(LUT);指令高速缓存,其被配置为从由该处理器从耦合到该可重新配置逻辑器件的存储器所取指的指令块接收指令;指令调度器,其被配置为存储由编码在指令块中的指令标识符索引的就绪状态数据,并且还被配置为在该就绪状态数据指示针对指令的所有依赖性被满足时发出指令;一个或多个执行单元,其被配置为执行由发出的指令指定的操作;数据高速缓存,其被配置为存储通过使用该执行单元执行指令而从该存储器读取的和/或写入到该存储器的数据;以及寄存器文件,其被配置为存储由该指令的寄存器操作数指定的数据。该数据高速缓存可以被配置为延迟完成存储器操作直到该指令块到达执行的提交阶段。
在一些示例中,指令高速缓存和/或数据高速缓存利用可重新配置逻辑器件的块随机存取存储器(RAM)资源来实现。在一些示例中,分布式RAM或LUT RAM用于实现指令高速缓存和/或数据高速缓存。
在一些示例中,该指令调度器和/或该寄存器文件利用使用该多个LUT的一部分形成的随机存取存储器(RAM)来实现。在一些示例中,指令调度器和/或该寄存器文件利用块RAM来实现。在一些示例中,LUT由被耦合到一个或多个多路复用器的静态随机存取存储器(RAM)单元形成。
在所公开的处理器的一些示例中,该指令调度器被耦合到:译码的指令字存储器,其被配置为存储针对所接收的指令的至少部分的译码的指令控制数据;以及多个一个或多个操作数缓冲器,其被配置为存储用于执行所接收的指令的操作数数据。在一些示例中,该可重新配置逻辑器件还被配置为通过刷新并且重新执行该指令块来执行指令块的后续实例。在一些示例中,该就绪状态数据包括在该刷新后不被清除的译码的就绪状态信息、以及在该刷新后被清除的活动就绪状态数据。
在一些示例中,调度器被配置为重新使用针对用于执行该指令块的后续实例的指令的所存储的就绪状态数据的至少部分,并且处理器被配置为不重新取指并且不重新译码用于执行该后续实例的该指令。在一些示例中,该指令调度器被配置为通过将所存储的就绪状态数据与通过执行另外的指令块生成的一个或多个信号相比较,来确定所有指令的依赖性被满足。
在所公开的技术的一些示例中,一种形成具有一个或多个可配置逻辑器件的基于块的处理器的方法包括:产生配置比特流,该配置比特流包括用于利用该可配置逻辑器件来实现针对该基于块的处理器的电路的配置信息,并且一旦可配置逻辑器件已经使用配置比特流来编程,针对该基于块的处理器的该电路就包括乱序指令调度器,该乱序指令调度器被配置为基于存储在存储器中的、通过唯一地识别事务指令块的每个相应指令的指令标识符索引的就绪状态数据来发出指令。
在一些示例中,形成基于块的处理器的方法包括将指令高速缓存和/或数据高速缓存的描述映射到利用可配置逻辑器件实现的块RAM硬件的方法。在一些示例中,方法包括将部件中的至少一个部件的描述映射到使用多个LUT实现的RAM。在一些示例中,方法包括将配置比特流施加到包括对设备编程的可配置逻辑器件的集成电路的配置端口。在一些示例中,方法包括将基于块的处理器的硬件描述语言规格映射到网表、该网表包括要利用可配置逻辑器件实现的硬件元件的描述,并且得到的网表用于产生配置比特流。在一些示例中,方法包括通过将硬件描述规格与基于块的处理器的硬或软宏描述进行组合,来将计算系统的硬件描述语言规格映射到配置比特流。在一些示例中,方法包括将配置比特流存储在计算机可读存储设备或存储器中。
鉴于所公开的主题的原理可以应用的许多可能实施例,应当认识到所图示的实施例仅是优选的示例,并且不应该当作将权利要求的范围限于那些优选的示例。相反,要求保护的主题的范围由所附的权利要求进行限定。我们因此对我们的发明要求保护落在这些权利要求的范围内的全部内容。
Claims (20)
1.一种装置,包括:
指令译码器,其被配置为针对从存储器取指的一组指令的至少部分生成译码的就绪依赖性,所述一组指令中的每个指令与不同的相应指令标识符相关联,所述指令标识符指示指令在所述存储器中的所述一组指令内的相对位置;以及
指令调度器,其被配置为从所述一组指令不按程序顺序地发出第一指令,其中:
所述第一指令基于确定针对所述第一指令的所述译码的就绪依赖性被满足而被发出,
所述确定包括:访问存储装置,所述存储装置存储使用被编码在所述一组指令中的一个指令内的所述第一指令的相应指令标识符的所述译码的就绪依赖性,并且
所述确定包括:使用由执行的指令信号通知并且在所述执行的指令内编码的指令标识符,来生成用于访问所述存储装置的索引,其中所述索引是响应于所述执行的指令的执行而被生成的。
2.根据权利要求1所述的装置,其中所述装置还包括指令取指单元,所述指令取指单元被配置为:取指针对所述一组指令的头的至少部分,并且并发地取指所述一组指令的指令的至少部分。
3.根据权利要求2所述的装置,其中所述指令取指单元包括第一块存储器和第二块存储器,所述第一块存储器存储所述头的所取指的至少部分,所述第二块存储器存储所述指令的所取指的至少部分。
4.根据权利要求1所述的装置,其中所述装置是利用可配置逻辑器件实现的软核处理器。
5.根据权利要求1所述的装置,其中所述装置被配置为利用优先级编码器并且基于针对下一指令编码的所述指令标识符,选择要执行的所述一组指令中的所述下一指令。
6.根据权利要求1所述的装置,其中所述指令调度器被耦合到数据操作数缓冲器,所述数据操作数缓冲器存储用于由所述指令在后续时钟周期中的执行而生成的数据。
7.根据权利要求6所述的装置,还包括旁路逻辑电路,所述旁路逻辑电路允许数据操作数被转发以用于由指令在紧跟着的后续时钟周期中的执行,所述旁路逻辑电路允许所述数据操作数被转发而不将所述数据操作数存储在所述数据操作数缓冲器中。
8.根据权利要求6所述的装置,其中所述数据操作数缓冲器被配置为每个时钟周期为不超过一个的指令来存储操作数数据,所述装置还包括:
旁路逻辑电路,其允许在不同数据操作数被存储在所述数据操作数缓冲器中时,针对不同指令的数据操作数在相同时钟周期中被转发到执行单元。
9.一种现场可编程门阵列FPGA,包括处理器,所述处理器包括:
使用所述FPGA中的多个多输入查找表LUT实现的第一存储器;
指令高速缓存,其被配置为接收从第二存储器取指的指令,所接收的所述指令中的给定指令包括在所述给定指令中编码的第一指令标识符和第二指令标识符,所述第一指令标识符指示所述给定指令在所述第二存储器中的一组指令内的相对位置,并且所述第二指令标识符指定目标指令而不是所述给定指令来接收由执行所述给定指令生成的结果;以及
指令调度器,其被配置为在所述第一存储器中存储就绪状态数据,所述就绪状态数据由对应的指令的指令标识符索引,所存储的所述就绪状态数据指示所述对应的指令的断言操作数和/或数据操作数的状态,所述指令调度器还被配置为在所存储的所述就绪状态数据指示针对所述对应的指令的所有操作数依赖性被满足时发出所述对应的指令。
10.根据权利要求9所述的FPGA,其中所述指令高速缓存利用所述FPGA的块随机存取存储器RAM资源来实现。
11.根据权利要求9所述的FPGA,其中所述指令调度器利用使用所述多个LUT的部分形成的随机存取存储器RAM来实现。
12.根据权利要求11所述的FPGA,其中所述LUT由被耦合到一个或多个多路复用器的静态随机存取存储器RAM单元形成。
13.根据权利要求9所述的FPGA,其中所述指令调度器被耦合到:
译码的指令字存储器,其被配置为针对所接收的所述指令的至少部分存储译码的指令控制数据;以及
多个操作数缓冲器,其被配置为存储用于执行所接收的所述指令的操作数数据。
14.根据权利要求9所述的FPGA,其中所述FPGA还被配置为通过刷新并且重新执行所述给定指令来执行所述给定指令的后续实例,并且其中所述就绪状态数据包括在所述刷新后不被清除的译码的就绪状态信息、以及在所述刷新后被清除的活动就绪状态数据。
15.根据权利要求9所述的FPGA,其中所述指令调度器被配置为重新使用针对与所述给定指令不同的第二指令的所存储的所述就绪状态数据的至少部分,以用于执行所接收的所述指令的后续实例,并且其中所述FPGA被配置为不重新取指并且不重新译码所述第二指令以用于执行所述后续实例。
16.根据权利要求9所述的FPGA,其中所述指令调度器被配置为通过将所存储的所述就绪状态数据与通过执行另一指令而生成的一个或多个信号相比较,来确定所有指令的依赖性被满足。
17.根据权利要求9所述的FPGA,其中所接收的所述指令中的至少一个指令利用指令标识符而被编码,所述指令标识符指示目标指令,所述目标指令接收由执行所接收的所述指令中的所述至少一个指令生成的结果。
18.一种形成具有可配置逻辑器件的处理器的方法,所述方法包括:
产生配置比特流,所述配置比特流包括用于利用所述可配置逻辑器件来实现针对所述处理器的电路的配置信息,针对所述处理器的所述电路包括:
乱序指令调度器,其被配置为基于存储在存储器中的由指定目标指令的指令标识符索引的操作数就绪状态数据来发出所述目标指令,在产生由所述操作数就绪状态数据指示的至少一个操作数的源指令被执行时,所述目标指令接收由所述目标指令消耗的结果,所述指令标识符被编码在所述源指令中,
所述乱序指令调度器还被配置为使用来自执行的指令的指令标识符以生成用于访问另一指令的就绪依赖性的索引,其中所述索引响应于所述源指令的流水线执行而被生成。
19.根据权利要求18所述的方法,还包括将以下至少一项或多项的描述映射到利用所述可配置逻辑器件实现的块随机存取存储器RAM硬件:指令高速缓存或数据高速缓存。
20.根据权利要求18所述的方法,还包括将硬件描述语言规格映射到网表,所述网表包括要利用所述可配置逻辑器件来实现的硬件元件的描述,其中所述网表用于产生所述配置比特流。
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,469 US11687345B2 (en) | 2016-04-28 | 2016-07-29 | Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers |
US15/224,469 | 2016-07-29 | ||
PCT/US2017/029224 WO2017189463A1 (en) | 2016-04-28 | 2017-04-25 | Out-of-order block-based processors and instruction schedulers |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109074260A CN109074260A (zh) | 2018-12-21 |
CN109074260B true CN109074260B (zh) | 2023-05-05 |
Family
ID=60158893
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780026354.5A Active CN109074261B (zh) | 2016-04-28 | 2017-04-25 | 用于乱序块isa处理器的增量调度器 |
CN201780026326.3A Withdrawn CN109074259A (zh) | 2016-04-28 | 2017-04-25 | 用于块isa处理器的并行指令调度器 |
CN201780026337.1A Active CN109196468B (zh) | 2016-04-28 | 2017-04-25 | 混合基于块的处理器和定制功能块 |
CN201780026331.4A Active CN109074260B (zh) | 2016-04-28 | 2017-04-25 | 乱序的基于块的处理器和指令调度器 |
Family Applications Before (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780026354.5A Active CN109074261B (zh) | 2016-04-28 | 2017-04-25 | 用于乱序块isa处理器的增量调度器 |
CN201780026326.3A Withdrawn CN109074259A (zh) | 2016-04-28 | 2017-04-25 | 用于块isa处理器的并行指令调度器 |
CN201780026337.1A Active CN109196468B (zh) | 2016-04-28 | 2017-04-25 | 混合基于块的处理器和定制功能块 |
Country Status (4)
Country | Link |
---|---|
US (4) | US11106467B2 (zh) |
EP (4) | EP3449357B1 (zh) |
CN (4) | CN109074261B (zh) |
WO (4) | WO2017189465A1 (zh) |
Families Citing this family (85)
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 |
US11106467B2 (en) | 2016-04-28 | 2021-08-31 | Microsoft Technology Licensing, Llc | Incremental scheduler for out-of-order block ISA processors |
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 |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
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 |
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 |
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 |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
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 |
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 |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
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 |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in 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 |
US10445250B2 (en) | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with 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 |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional 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 |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for 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 |
CN111382091A (zh) * | 2018-12-30 | 2020-07-07 | 德克萨斯仪器股份有限公司 | 用于低周期存储器访问和附加功能的宽边随机访问存储器 |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
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 |
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 |
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 |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
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 |
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 |
US11182221B1 (en) | 2020-12-18 | 2021-11-23 | SambaNova Systems, Inc. | Inter-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS) |
US11392740B2 (en) | 2020-12-18 | 2022-07-19 | SambaNova Systems, Inc. | Dataflow function offload to reconfigurable processors |
TWI784845B (zh) * | 2020-12-18 | 2022-11-21 | 美商聖巴諾瓦系統公司 | 對可重配置處理器之資料流功能卸載 |
US11237880B1 (en) | 2020-12-18 | 2022-02-01 | SambaNova Systems, Inc. | Dataflow all-reduce for reconfigurable processor systems |
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 |
US11200096B1 (en) | 2021-03-26 | 2021-12-14 | SambaNova Systems, Inc. | Resource allocation for reconfigurable processors |
CN113255264B (zh) * | 2021-06-07 | 2021-10-01 | 上海国微思尔芯技术股份有限公司 | 增量分割处理方法、装置、计算机设备和存储介质 |
CN113608693B (zh) * | 2021-07-26 | 2024-05-24 | 中国科学院国家空间科学中心 | 一种星载在轨数据的搜索排序系统和方法 |
TWI792546B (zh) * | 2021-09-09 | 2023-02-11 | 瑞昱半導體股份有限公司 | 用於管線化控制的設備以及方法 |
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 |
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 (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104335183A (zh) * | 2012-06-29 | 2015-02-04 | 英特尔公司 | 用于测试事务性执行状态的指令和逻辑 |
Family Cites Families (137)
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 |
US5673426A (en) | 1995-02-14 | 1997-09-30 | Hal Computer Systems, Inc. | Processor structure and method for tracking floating-point exceptions |
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 |
AU2002363142A1 (en) | 2001-10-31 | 2003-05-12 | Doug Burger | 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 |
JP2005522773A (ja) | 2002-04-08 | 2005-07-28 | ユニバーシティー・オブ・テキサス・システム | 非均等型キャッシュ装置、システム及び方法 |
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 |
US7069189B2 (en) | 2002-12-31 | 2006-06-27 | Intel Corporation | Method and apparatus for controlling multiple resources using thermal related parameters |
US7130990B2 (en) | 2002-12-31 | 2006-10-31 | Intel Corporation | Efficient instruction scheduling with lossy tracking of scheduling information |
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 |
WO2005093562A1 (ja) | 2004-03-29 | 2005-10-06 | Kyoto University | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 |
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 |
US7613904B2 (en) | 2005-02-04 | 2009-11-03 | Mips Technologies, Inc. | Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler |
US8024551B2 (en) * | 2005-10-26 | 2011-09-20 | Analog Devices, Inc. | Pipelined digital signal processor |
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 |
US8327115B2 (en) | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
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 |
CN107368285B (zh) | 2006-11-14 | 2020-10-09 | 英特尔公司 | 多线程架构 |
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 |
US8447911B2 (en) | 2007-07-05 | 2013-05-21 | Board Of Regents, University Of Texas System | Unordered load/store queue |
US8180997B2 (en) | 2007-07-05 | 2012-05-15 | Board Of Regents, University Of Texas System | Dynamically composing processor cores to form logical processors |
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 |
EP2366144B1 (en) | 2008-10-15 | 2015-09-30 | Hyperion Core, Inc. | Sequential processor comprising an alu array |
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 |
WO2011079942A1 (en) | 2009-12-28 | 2011-07-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 |
US9021241B2 (en) | 2010-06-18 | 2015-04-28 | The Board Of Regents Of The University Of Texas System | Combined branch target and predicate prediction for instruction blocks |
CN102117197B (zh) | 2011-03-04 | 2012-08-15 | 中国电子科技集团公司第三十八研究所 | 高性能通用信号处理器指令分配装置 |
CN108108188B (zh) | 2011-03-25 | 2022-06-28 | 英特尔公司 | 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段 |
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 |
US9740494B2 (en) * | 2011-04-29 | 2017-08-22 | Arizona Board Of Regents For And On Behalf Of Arizona State University | Low complexity out-of-order issue logic using static circuits |
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 |
WO2013081556A1 (en) | 2011-12-01 | 2013-06-06 | National University Of 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 |
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 |
CN104781786B (zh) | 2012-12-26 | 2018-05-08 | 英特尔公司 | 使用延迟重构程序顺序的选择逻辑 |
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 |
CN104050092B (zh) | 2013-03-15 | 2018-05-01 | 上海芯豪微电子有限公司 | 一种数据缓存系统及方法 |
EP2972836B1 (en) | 2013-03-15 | 2022-11-09 | Intel Corporation | A method for emulating a guest centralized flag architecture by using a native distributed flag architecture |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
WO2014150941A1 (en) | 2013-03-15 | 2014-09-25 | 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 |
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 |
US9547496B2 (en) | 2013-11-07 | 2017-01-17 | Microsoft Technology Licensing, Llc | Energy efficient multi-modal instruction issue |
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) |
US11106467B2 (en) | 2016-04-28 | 2021-08-31 | Microsoft Technology Licensing, Llc | Incremental scheduler for out-of-order block ISA processors |
US20180032344A1 (en) | 2016-07-31 | 2018-02-01 | Microsoft Technology Licensing, Llc | Out-of-order block-based processor |
-
2016
- 2016-07-29 US US15/224,473 patent/US11106467B2/en active Active
- 2016-07-29 US US15/224,471 patent/US20170315812A1/en not_active Abandoned
- 2016-07-29 US US15/224,469 patent/US11687345B2/en active Active
- 2016-07-31 US US15/224,624 patent/US11449342B2/en active Active
-
2017
- 2017-04-25 WO PCT/US2017/029226 patent/WO2017189465A1/en active Application Filing
- 2017-04-25 EP EP17721016.8A patent/EP3449357B1/en active Active
- 2017-04-25 WO PCT/US2017/029224 patent/WO2017189463A1/en active Application Filing
- 2017-04-25 EP EP17733162.6A patent/EP3449360A1/en not_active Withdrawn
- 2017-04-25 CN CN201780026354.5A patent/CN109074261B/zh active Active
- 2017-04-25 CN CN201780026326.3A patent/CN109074259A/zh not_active Withdrawn
- 2017-04-25 EP EP17721017.6A patent/EP3449358B1/en active Active
- 2017-04-25 CN CN201780026337.1A patent/CN109196468B/zh active Active
- 2017-04-25 WO PCT/US2017/029225 patent/WO2017189464A1/en active Application Filing
- 2017-04-25 EP EP17722262.7A patent/EP3449359B1/en active Active
- 2017-04-25 WO PCT/US2017/029227 patent/WO2017189466A1/en active Application Filing
- 2017-04-25 CN CN201780026331.4A patent/CN109074260B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104335183A (zh) * | 2012-06-29 | 2015-02-04 | 英特尔公司 | 用于测试事务性执行状态的指令和逻辑 |
Also Published As
Publication number | Publication date |
---|---|
EP3449357A1 (en) | 2019-03-06 |
WO2017189464A1 (en) | 2017-11-02 |
US11687345B2 (en) | 2023-06-27 |
US20170315815A1 (en) | 2017-11-02 |
US11449342B2 (en) | 2022-09-20 |
CN109196468A (zh) | 2019-01-11 |
CN109074261A (zh) | 2018-12-21 |
CN109196468B (zh) | 2023-04-28 |
US11106467B2 (en) | 2021-08-31 |
WO2017189463A1 (en) | 2017-11-02 |
EP3449359A1 (en) | 2019-03-06 |
WO2017189465A1 (en) | 2017-11-02 |
CN109074261B (zh) | 2023-06-23 |
CN109074260A (zh) | 2018-12-21 |
EP3449360A1 (en) | 2019-03-06 |
WO2017189466A1 (en) | 2017-11-02 |
US20170315814A1 (en) | 2017-11-02 |
EP3449357B1 (en) | 2022-08-24 |
US20170315813A1 (en) | 2017-11-02 |
EP3449358B1 (en) | 2022-02-09 |
EP3449358A1 (en) | 2019-03-06 |
US20170315812A1 (en) | 2017-11-02 |
EP3449359B1 (en) | 2021-02-24 |
CN109074259A (zh) | 2018-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109074260B (zh) | 乱序的基于块的处理器和指令调度器 | |
CN108027767B (zh) | 寄存器读取/写入排序 | |
EP3350705B1 (en) | Initiating instruction block execution using a register access instruction | |
US20230106990A1 (en) | Executing multiple programs simultaneously on a processor core | |
EP3350708B1 (en) | Dense read encoding for dataflow isa | |
CN108027773B (zh) | 存储器访问指令顺序编码的生成和使用 | |
US20170371660A1 (en) | Load-store queue for multiple processor cores | |
US11977891B2 (en) | Implicit program order | |
CN108027733B (zh) | 在目标字段中存储无效 | |
US20170371659A1 (en) | Load-store queue for block-based processor | |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |