CN107810478A - 具有连续块的并行执行的基于块的架构 - Google Patents
具有连续块的并行执行的基于块的架构 Download PDFInfo
- Publication number
- CN107810478A CN107810478A CN201680037706.2A CN201680037706A CN107810478A CN 107810478 A CN107810478 A CN 107810478A CN 201680037706 A CN201680037706 A CN 201680037706A CN 107810478 A CN107810478 A CN 107810478A
- Authority
- CN
- China
- Prior art keywords
- instruction
- block
- core
- instruction block
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000003860 storage Methods 0.000 claims abstract description 48
- 230000015654 memory Effects 0.000 claims description 80
- 230000000977 initiatory effect Effects 0.000 claims description 20
- 239000000284 extract Substances 0.000 claims description 10
- 238000011156 evaluation Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 53
- 238000012545 processing Methods 0.000 description 23
- 238000000605 extraction Methods 0.000 description 19
- 238000004891 communication Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 10
- 239000000872 buffer Substances 0.000 description 10
- 230000005055 memory storage Effects 0.000 description 9
- 230000000694 effects Effects 0.000 description 8
- 238000013507 mapping Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000005611 electricity Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- CVOFKRWYWCSDMA-UHFFFAOYSA-N 2-chloro-n-(2,6-diethylphenyl)-n-(methoxymethyl)acetamide;2,6-dinitro-n,n-dipropyl-4-(trifluoromethyl)aniline Chemical compound CCC1=CC=CC(CC)=C1N(COC)C(=O)CCl.CCCN(CCC)C1=C([N+]([O-])=O)C=C(C(F)(F)F)C=C1[N+]([O-])=O CVOFKRWYWCSDMA-UHFFFAOYSA-N 0.000 description 1
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000001259 photo etching Methods 0.000 description 1
- 230000010181 polygamy Effects 0.000 description 1
- 238000004080 punching Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- 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
- G06F9/30054—Unconditional branch instructions
-
- 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/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- 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, look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode 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, look ahead
- G06F9/3824—Operand accessing
-
- 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, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, 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, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
-
- 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, 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, look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent 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
- G06F9/3891—Concurrent 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 organised in groups of units sharing resources, e.g. clusters
Abstract
公开了用于在基于块的处理器架构中提供对目标地址的早期访问的系统、方法和计算机可读存储装置。在所公开的技术的一个示例中,在基于块的架构中执行分支的方法可以包括使用基于块的架构的第一核心来执行第一指令块的一个或多个指令。该方法可以包括在第一指令块被提交之前发起第二指令块的指令的非推测性执行。
Description
背景技术
微处理器已经从由于摩尔定律所预测的持续晶体管扩展而导致的晶体管计数、集成电路成本、制造资本、时钟频率和能量效率的持续增加中受益,其中相关联的处理器指令集架构(ISA)几乎没有变化。然而,从过去40年来驱动半导体产业发展的光刻扩展中实现的益处正在放缓甚至扭转。精简指令集计算(RISC)架构已经成为处理器设计的主要范例很多年。无序超标量实现在面积或性能方面尚未展现出持续改进。因此,在处理器ISA方面存在充分的机会来扩大性能改善。
发明内容
公开了用于在基于块的处理器指令集架构(BB-ISA)中提供对目标地址的早期访问的方法、装置和计算机可读存储设备。所描述的用于解决方案的技术和工具可以潜在地提高处理器性能,并且可以被单独实现,或者以与彼此的各种组合被实现。如将在下面更充分地描述的,所描述的技术和工具可以在数字信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,在使用可重配置逻辑的现场可编程门阵列(FPGA)中实现的微处理器核心)、可编程逻辑或其他合适的逻辑电路中实现。对于本领域普通技术人员而言将是显而易见的,所公开的技术可以在各种计算平台中被实现,包括但不限于服务器、大型机、手机、智能电话、PDA、手持设备、手持计算机、触摸屏平板设备、平板计算机、可穿戴计算机和膝上型计算机。
在所公开的技术的一些示例中,基于块的计算系统可以包括多个处理器核心和控制逻辑。处理器核心可以包括第一处理器核心,第一处理器核心被配置为执行第一指令块的指令并且在第一指令块被提交之前生成第二指令块的目标地址。控制逻辑可以被配置为接收第二指令块的目标地址并且在第一指令块被提交之前发起第二指令块的执行。发起的第二指令块的执行可以至少部分基于被编码在第一指令块的头部中的出口类型信息。
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的概念的选择。本发明内容部分不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。从下面参考附图进行的详细描述中,所公开的主题的前述和其他目的、特征和优点将变得更加明显。
附图说明
图1示出了能够在所公开的技术的一些示例中使用的包括多个处理器核心的基于块的处理器。
图2示出了能够在所公开的技术的一些示例中使用的基于块的处理器核心。
图3示出了根据所公开的技术的某些示例的数个指令块。
图4示出了源代码的部分和相应指令块。
图5示出了能够在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6是示出针对基于块的计算机架构的编译器的示例方法的流程图。
图7示出了能够在所公开的技术的一些示例中使用的示例指令块的各个方面。
图8是示出用于在基于块的计算机架构上控制指令的执行的方法的示例的流程图。
图9-10示出了能够在所公开的技术的一些示例中使用的基于块的架构的不同配置和操作的示例。
图11是示出用于实现所公开的技术的一些实施例的合适的计算环境的框图。
具体实施方式
I.一般考虑
本公开在代表性实施例的上下文中被阐述,其不旨在以任何方式进行限制。
如在本申请中所使用的,除非上下文另有明确规定,否则单数形式“一个(a)”、“一个(an)”和“该(the)”包括复数形式。另外,术语“包括(includes)”表示“包括(comprises)”。此外,术语“耦合(coupled)”涵盖将项目耦合或链接在一起的机械、电、磁、光学以及其他实际方式,并且不排除在耦合的项目之间存在中间元件。此外,如本文中使用的,术语“和/或”是指短语中的任何一个项目或项目的组合。
本文中描述的系统、方法和装置不应当被解释为以任何方式进行限制。相反,本公开单独地以及在彼此的各种组合和子组合中涉及各种公开的实施例的所有新颖的和非显而易见的特征和方面。所公开的系统、方法和装置不限于任何特定方面或特征或其组合,所公开的事物和方法也不要求任何一个或多个特定优点存在或问题被解决。此外,所公开的实施例的任何特征或方面可以在彼此的各种组合和子组合中被使用。
尽管为了方便呈现而以特定的顺序次序描述了所公开的方法中的一些方法的操作,但是应当理解,除非下面阐述的特定语言要求特定的次序,否则这种描述方式涵盖重新排列。例如,顺序地描述的操作在一些情况下可以被重新排列或并行执行。而且,为了简单起见,附图可能并未示出所公开的事物和方法能够与其他事物和方法结合使用的各种方式。另外,本描述有时使用诸如“产生”、“生成”、“显示”、“接收”、“发出”、“验证”、“执行”和“发起”等术语来描述所公开的方法。这些术语是对所执行的实际操作的高级描述。对应于这些术语的实际操作将根据具体实现而变化,并且容易由本领域普通技术人员可辨别。
本文中参考本公开的装置或方法呈现的操作理论、科学原理或其他理论描述已经被提供用于更好理解的目的,并且不旨在限制范围。所附权利要求书中的装置和方法不限于以这种操作理论描述的方式起作用的那些装置和方法。
所公开的方法中的任一方法可以被实现为存储在一个或多个计算机可读介质(例如,计算机可读介质,诸如一个或多个光学介质盘、易失性存储器部件(诸如DRAM或SRAM)、或非易失性存储器部件(诸如硬盘驱动器))上并且在计算机(例如,任何市售计算机,包括智能电话或包括计算硬件的其他移动设备)上执行的计算机可执行指令。用于实现所公开的技术的任何计算机可执行指令、以及在实现所公开的实施例期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或者经由web浏览器或其他软件应用(诸如远程计算应用)访问或下载的软件应用的部分。例如,这样的软件可以在单个本地计算机上(例如,作为在任何合适的市售计算机上执行的代理)或者使用一个或多个网络计算机在网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)或其他这样的网络)中被执行。
为了清楚起见,仅描述了基于软件的实现的某些选定方面。本领域公知的其他细节被省略。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以通过用C、C++、Java或任何其他合适的编程语言编写的软件来实现。同样,所公开的技术不限于任何特定的计算机或硬件类型。合适的计算机和硬件的某些细节是公知的,并且不需要在本公开中详细阐述。
此外,任何基于软件的实施例(例如,包括用于使得计算机执行任何所公开的方法的计算机可执行指令)可以通过合适的通信手段来上载、下载或远程访问。这样的合适的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或其他这样的通信手段。
II.所公开的技术的介绍
超标量无序微架构使用实质的电路资源来重命名寄存器,以数据流次序调度指令,在推测未命中之后进行清理,并且为了确切的异常而有序地引退结果。这包括昂贵的耗能电路,诸如深度多端口寄存器文件、用于数据流指令调度唤醒的多端口内容可访问存储器(CAM)、以及很多宽总线多路复用器和旁路网络,所有这些都是资源密集型的。例如,多读多写RAM的基于FPGA的实现通常要求复制、多周期操作、时钟倍频、存储体交错、实时值表和其他昂贵的技术的混合。
所公开的技术能够通过对包括高指令级并行(ILP)、无序(OoO)、超标量执行的技术的应用来实现能量效率和/或性能增强,同时避免处理器硬件和相关软件方面的实质复杂性和开销。在所公开的技术的一些示例中,包括多个处理器核心的基于块的处理器使用为面积和能量效率高的高ILP执行而设计的显式数据图执行(EDGE)ISA。在一些示例中,对EDGE架构和相关联的编译器的使用避免了很多寄存器重命名、CAM和复杂性。在一些示例中,基于块的处理器的相应核心可以存储或高速缓存可以被重复执行的提取和解码的指令,并且提取和解码的指令可以被重用以潜在地实现降低的功率和/或提高的性。
在所公开的技术的某些示例中,EDGE ISA可以潜在地消除对一个或多个复杂架构特征的需要,包括寄存器重命名、数据流分析、错误查找恢复和有序引退,同时支持主流编程语言,诸如C和C++。在所公开技术的某些示例中,基于块的处理器执行多个两个或更多个指令作为原子块。基于块的指令可以被用于以更加显式的方式来表达程序数据流和/或指令流的语义,从而允许改善编译器和处理器性能。在所公开的技术的某些示例中,EDGE ISA包括关于可以用于改善对不适当的控制流指令的检测的程序控制流的信息,由此提高性能、节省存储器资源、和/或并且节省能量。
在所公开的技术的一些示例中,在指令块内组织的指令被原子地提取、执行和提交。块内部的指令以数据流顺序执行,这减少或消除了使用寄存器重命名和提供功率效率高的OoO执行。可以使用编译器以通过ISA显式地编码数据依赖关系,从而减少或消除处理器核心控制逻辑在运行时重新发现依赖关系的负担。使用谓词执行,可以将块内分支转换为数据流指令,并且除了存储器依赖关系之外的依赖关系可以被限制为直接数据依赖关系。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接传送它们的操作数,减少了对耗电的多端口物理寄存器文件的访问。在一些示例中,稍后的指令块的指令可以在较早的指令块的指令被提交之前被非推测地执行。
在指令块之间,指令可以使用存储器和寄存器进行通信。因此,通过利用混合数据流执行模型,EDGE架构仍然可以支持命令式编程语言和顺序存储器语义,但是理想地还享受具有接近按顺序执行的功率效率和复杂度的无序执行的益处。
如相关领域的普通技术人员将容易理解的,所公开的技术的一些实现可能具有各种面积、性能和功率折衷。
III.示例性的基于块的处理器
图1是能够在所公开的技术的一些示例中实现的基于块的处理器100的框图10。处理器100被配置为根据指令集架构(ISA)来执行指令的原子块,ISA描述处理器操作的数个方面,包括寄存器模型、由基于块的指令执行的数个定义的操作、存储器模型、中断和其他架构功能。基于块的处理器包括多个处理核心110,包括处理器核心111。
如图1所示,处理器核心经由核心互连120彼此连接。核心互连120承载在核心110的各个核心、存储器接口140和输入/输出(I/O)接口145之间的数据和控制信号。核心互连120可以使用电、光、磁或其他合适的通信技术传输和接收信号,并且可以取决于特定的期望配置提供根据多个不同拓扑布置的通信连接。例如,核心互连120可以具有交叉开关、总线、点对点总线或其他合适的拓扑结构。在一些示例中,核心110中的任一核心可以连接到其他核心中的任一核心,而在其他示例中,一些核心仅连接到其他核心的子集。例如,每个核心仅能连接到最近的4、8或20个相邻核心。核心互连120可以用于向核心传输输入/输出数据和从核心传输输入/输出数据,以及向核心传输控制信号和其他信息信号和从核心传输控制信号和其他信息信号。例如,核心110中的每个核心可以接收和传输指示相应核心中的每个核心当前正在执行的指令的执行状态的信号量。在一些示例中,核心互连120被实现为连接核心110和存储器系统的导线,而在其他示例中,核心互连可以包括用于在互连导线上复用数据信号的电路、交换和/或路由部件(包括有源信号驱动器和中继器)、或其他合适的电路。在所公开的技术的一些示例中,在处理器100内部以及向/从处理器100传输的信号不限于全摆幅电数字信号,但是处理器可以被配置为包括用于传输数据和控制信号的差分信号、脉冲信号或其他合适的信号。
在图1的示例中,处理器的存储器接口140包括用于连接到附加存储器的接口逻辑,附加存储器例如位于除了处理器100之外的另一集成电路上的存储器。如图1所示,外部存储器系统150包括L2高速缓存152和主存储器155。在一些示例中,L2高速缓存可以使用静态RAM(SRAM)来实现,并且主存储器155可以使用动态RAM(DRAM)来实现。在一些示例中,存储器系统150被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口140包括直接存储器访问(DMA)控制器,其允许存储器中的数据块的传送而不使用寄存器文件和/或处理器100。在一些示例中,存储器接口管理虚拟存储器的分配,以扩展可用主存储器155。
I/O接口145包括用于接收和向其他部件发送输入和输出信号的电路,诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或其他协处理部件的信号)、时钟信号、信号量或其他合适的I/O信号。I/O信号可以是同步的或异步的。在一些示例中,I/O接口的全部或部分使用结合存储器接口140的存储器映射I/O技术来实现。
基于块的处理器100还可以包括控制单元160。控制单元160监督处理器100的操作。可以由控制单元160执行的操作可以包括分配和解除分配用于执行指令处理的核心,在任何核心、寄存器文件、存储器接口140和/或I/O接口145之间控制输入数据和输出数据,修改执行流程,以及验证分支指令的目标位置、指令头部和控制流程中的其他更改。控制单元160也可以处理硬件中断,并且控制特殊系统寄存器的读写,例如存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的一些示例中,控制单元160至少部分使用处理核心110中的一个或多个处理核心来实现,而在其他示例中,控制单元160使用不基于块的处理核心(例如,耦合到存储器的通用RISC处理核心)来实现。在一些示例中,控制单元160至少部分使用以下的一项或多项来实现:硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路。在备选示例中,控制单元功能可以由核心110中的一个或多个核心执行。
控制单元160包括用于向处理器核心110分配指令块的调度器。如本文中使用的,调度器分配指代引导指令块的操作,包括发起指令块映射、提取、解码、执行、提交、中止、空闲和刷新指令块。处理器核心110在指令块映射期间被指派给指令块。所述的指令操作级是为了说明的目的,并且在所公开的技术的一些示例中,某些操作可以被组合、省略、分离成多个操作,或者添加附加的操作。
基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分发给处理器内的各种部件(例如,核心110、互连120、存储器接口140和I/O接口145)。在所公开的技术的一些示例中,部件中的所有部件共享公共时钟,而在其他示例中,不同部件使用不同的时钟,例如具有不同时钟频率的时钟信号。在一些示例中,时钟的部分被门控以当处理器部件中的一些处理器部件未被使用时允许功率节省。在一些示例中,时钟信号使用锁相环(PLL)来生成以生成固定的、恒定的频率和占空比的信号。接收时钟信号的电路可以在单个边缘(例如,上升沿)被触发,而在其他示例中,接收电路中的至少一些被上升时钟边缘和下降时钟边缘触发。在一些示例中,时钟信号可以被光学地或无线地传输。
IV.示例的基于块的处理器核心
图2是进一步详细描述用于基于块的处理器100的示例微架构、以及具体地能够在所公开的技术的某些示例中使用的基于块的处理器核心之一的实例的框图200。为了便于解释,示例性的基于块的处理器核心被示出有五个级:指令提取(IF)、解码(DC)、操作数提取、执行(EX)和存储器/数据访问(LS)。然而,相关领域的普通技术人员将容易理解,对所示出的微架构的修改(诸如添加/移除级、添加/去除执行操作的单元、以及其他实现细节)可以被修改以适应基于块的处理器的特定应用。
如图2所示,处理器核心111包括控制单元205,其输出控制信号以调节核心操作并且使用指令调度器206调度核心内的指令流。可以由控制单元205和/或指令调度器206执行的操作可以包括分配和解除分配用于执行指令处理的核心,在任何核心、寄存器文件、存储器接口140和/或I/O接口145之间控制输入数据和输出数据。控制单元205也可以处理硬件中断,并且控制对特殊系统寄存器的读写,例如存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的其他示例中,控制单元205和/或指令调度器206使用不基于块的处理核心(例如,耦合到存储器的通用RISC处理核心)来实现。在一些示例中,控制单元205和/或指令调度器206至少部分使用以下的一项或多项来实现:硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路。
示例性处理器核心111包括两个指令窗口210和211,每个指令窗口可以被配置为执行指令块。在所公开的技术的一些示例中,指令块是基于块的处理器指令的原子集合,其包括指令块头部和多个一个或多个指令。如将在下面进一步讨论的,指令块头部包括可以用于进一步定义指令块内的多个指令中的一个或多个指令的语义的信息。取决于所使用的特定ISA和处理器硬件,指令块头部也可以在指令的执行期间被使用,并且用于通过例如允许指令和/或数据的提前提取、改进的分支预测、推测执行、提高的能量效率和提高的代码紧凑性来提高执行指令块的性能。在其他示例中,不同数目的指令窗口是可能的,诸如一个、四个、八个或其他数目的指令窗口。
指令窗口210和211中的每个指令窗口可以从连接到互连总线和指令高速缓存227的输入端口220、221和222中的一个或多个输入端口接收指令和数据,互连总线和指令高速缓存227又连接到指令解码器228和229。附加的控制信号也可以在附加的输入端口225上被接收。指令解码器228和229中的每个指令解码器解码指令块的指令头部和/或指令,并且将已解码指令存储在位于每个相应指令窗口210和211中的存储器储存库215和216内。
处理器核心111还包括耦合到L1(一级)高速缓存器235的寄存器文件230。寄存器文件230存储用于在基于块的处理器架构中定义的寄存器的数据,并且可以具有一个或多个读端口和一个或多个写端口。例如,寄存器文件可以包括用于将数据存储在寄存器文件中的两个或更多个写端口,以及具有用于从寄存器文件内的各个寄存器读取数据的多个读端口。在一些示例中,单个指令窗口(例如,指令窗口210)一次仅能访问寄存器文件的一个端口,而在其他示例中,指令窗口210可以访问一个读端口和一个写端口,或者可以同时访问两个或多个读端口和/或写端口。在一些示例中,寄存器文件230可以包括64个寄存器,每个寄存器保存32位数据的字。(除非另有说明,否则本申请将32位数据称为字)。在一些示例中,寄存器文件230中的一些寄存器可以被分配给特定的目的。例如,寄存器中的一些寄存器可以专用作系统寄存器,其示例包括存储恒定值(例如,全零字)的寄存器、指示正在执行的程序线程的当前地址的程序计数器(PC)、物理核心编号、逻辑核心编号、核心指派拓扑、核心控制标志、处理器拓扑或其他合适的专用目的。在一些示例中,存在多个程序计数器寄存器(每个程序计数器一个寄存器),以允许跨一个或多个处理器核心和/或处理器对多个执行线程的并行执行。在一些示例中,程序计数器被实现为指定的存储器位置而不是寄存器文件中的寄存器。在一些示例中,系统寄存器的使用可能受操作系统或其他监督计算机指令的限制。在一些示例中,寄存器文件230被实现为触发器阵列,而在其他示例中,寄存器文件可以使用锁存器、SRAM或其他形式的存储器存储装置来实现。给定处理器(例如,处理器100)的ISA规范指定如何定义和使用寄存器文件230内的寄存器。
在一些示例中,处理器100包括由多个处理器核心共享的全局寄存器文件。在一些示例中,取决于处理器ISA和配置,与处理器核心相关联的各个寄存器文件可以被静态地或动态地组合以形成更大的文件。
如图2所示,指令窗口210的存储器储存库215包括数个已解码指令241、左操作数(LOP)缓冲器242、右操作数(ROP)缓冲器243以及指令记分板245。在所公开的技术的一些示例中,指令块的每个指令被分解成一行已解码指令、左操作数和右操作数以及记分板数据,如图2所示。已解码指令241可以包括作为位级控制信号存储的指令的部分或完全解码版本。操作数缓冲器242和243存储操作数(例如,从寄存器文件230接收到的寄存器值、从存储器接收到的数据、在指令内编码的立即操作数、由较早发出的指令计算的操作数或其他操作数值),直到它们相应的已解码指令已经准备好执行。指令操作数从操作数缓冲器242和243而不是寄存器文件中读取。
第二指令窗口211的存储器储存库216存储与存储器储存库215相似的指令信息(已解码指令、操作数和记分板),但是为了简单起见未在图2中示出。受制于ISA限制并且如控制单元205所指示的,指令块可以由第二指令窗口211相对于第一指令窗口并行地或顺序地执行。
在所公开的技术的一些示例中,前端流水线级IF和DC可以从后端流水线级(IS、EX、LS)解耦。在一个实施例中,控制单元可以每个时钟周期提取两个指令并且将其解码到指令窗口210和211中的每个指令窗口中。在备选实施例中,控制单元可以每个时钟周期提取一个、四个或另一数目的指令并且将解码到对应数目的指令窗口中。控制单元205提供指令窗口数据流调度逻辑,以监测每个已解码指令的输入的就绪状态(例如,使用计分板245的每个相应指令的谓词和操作数)。当特定已解码指令的输入中的所有输入就绪时,指令准备好发出。控制逻辑205然后每个周期发起一个或多个下一指令(例如,编号最小的就绪指令)的执行,并且其已解码指令和输入操作数被发送到一个或多个功能单元260用于执行。已解码指令也可以编码数个就绪事件。控制逻辑205中的调度器接受这些和/或来自其他来源的事件,并且更新窗口中其他指令的就绪状态。因此,执行继续,从处理器核心111的就绪零输入指令、零输入指令所针对的指令等开始。
已解码指令241不需要以它们被布置在指令窗口210的存储器储存库215内的相同顺序被执行。相反,指令记分板245被用于跟踪已解码指令的依赖关系,并且当依赖关系已经满足时,相关联的单个已解码指令被调度用于执行。例如,当依赖关系针对相应指令已经被满足时,可以将对相应指令的引用推送到就绪队列上,并且指令可以从就绪队列中以先进先出(FIFO)的顺序来调度。存储在记分板245中的信息可以包括但不限于:相关联的指令的执行谓词(诸如,指令是否正在等待谓词位被计算,以及如果谓词位是真或者假指令是否执行)、操作数对指令的可用性、或在执行相关联的单个指令之前所要求的其他先决条件。
在一个实施例中,记分板245可以包括由指令解码器231初始化的已解码就绪状态和在指令的执行期间由控制单元205初始化的活动就绪状态。例如,已解码就绪状态可以对以下各项进行编码:相应的指令是否已经被解码、可能经由广播信道等待谓词和/或某个(些)操作数、或者立即准备好发出。解码活动状态可以对以下各项进行编码:相应的指令是否等待谓词和/或某个(些)操作数、准备好发出、或者已经发出。已解码就绪状态可以在块复位或块刷新时被清除。在分支到新的指令块时,已解码就绪状态和解码活动状态被清除(块或核心复位)。然而,当指令块在核心上被重新执行时,诸如当它分支回到自己(块刷新)时,仅活动就绪状态被清除。块刷新可以立即发生(当指令块分支到自己时)或者在执行数个其他中间指令块之后发生。因此可以保留指令块的已解码就绪状态,使得不必重新提取和解码块的指令。因此,块刷新可以用来节省循环和其他重复程序结构中的时间和能量。
存储在每个指令窗口中的指令的数目通常对应于指令块内的指令的数目。在一些示例中,指令块内的指令的数目可以是32、64、128、1024或另一数目的指令。在所公开的技术的一些示例中,指令块跨处理器核心内的多个指令窗口被分配。在一些示例中,指令窗口210、211可以在逻辑上被划分,使得可以在单个处理器核心上执行多个指令块。例如,一个、两个、四个或另一数目的指令块可以在一个核心上被执行。相应指令块可以彼此并行地或顺序地执行。
指令可以使用位于处理器核心111内的控制单元205来被分配和调度。控制单元205编排指令从存储器的提取、指令的解码、一旦指令已经被加载到相应指令窗口中则对指令的执行、进/出处理器核心111的数据流、以及由处理器核心输入和输出的控制信号。例如,控制单元250可以包括用于在调度指令中使用的就绪队列,如上所述。在位于每个相应指令窗口210和211中的存储器储存库215和216中存储的指令可以被原子地执行。因此,对于被所执行的指令影响的可见架构状态(诸如寄存器文件230和存储器)的更新可以被本地缓冲在核心200内直到指令被提交。
控制单元205可以确定何时指令准备好被提交,对提交逻辑进行序列化,并且发出提交信号。例如,指令块的提交级可以在所有寄存器写入被缓冲、到存储器的所有写入被缓冲和分支目标被计算时开始。指令块可以在对可见架构状态的更新完成时被提交。例如,当寄存器写入被写入到寄存器文件时,储存库被发送到加载/存储单元或存储器控制器时,下一指令块的目标地址被生成时,以及提交信号被生成时,指令块可以被提交。控制单元205还至少部分控制功能单元260到相应指令窗口中的每个指令窗口的分配。
控制单元205可以输出指向要执行的下一指令块的目标地址。目标地址可以在发出提交信号的同时或之前被输出。例如,目标地址可以在发出提交信号之前在核心200外部被传送(诸如到图1的控制单元160),使得下一指令块的指令的非推测性执行可以在当前执行的指令块被提交之前被发起。有效信号可以与目标地址相关联,以指示目标地址何时有效。
如图2所示,具有数个执行流水线寄存器255的第一路由器250用于将来自指令窗口210和211中的任一指令窗口的数据发送到功能单元260中的一个或多个功能单元,功能单元260可以包括但不限于整数ALU(算术逻辑单元)(例如,整数ALU 264和265)、浮点单元(例如,浮点ALU 267)、移位/旋转逻辑(例如,桶形移位器268)或其他合适的执行单元,其可以包括图形功能、物理功能和其他数学运算。然后,取决于正在执行的特定指令的要求,来自功能单元260的数据可以通过第二路由器270被路由到输出290、291和292,被路由回到操作数缓冲器(例如,LOP缓冲器242和/或ROP缓冲器243),或者被反馈回到另一功能单元。第二路由器270可以包括能够用于发出存储器指令的加载/存储队列275、将正在从核心输入或输出的数据存储到存储器的数据高速缓存277、以及加载/存储流水线寄存器278。
核心还包括控制输出295,其用于指示对例如指令窗口215或216中的一个或多个指令窗口的所有指令的执行何时完成。当指令块的执行完成时,指令块被指定为“已提交”,并且来自控制输出295的信号又可以由基于块的处理器100内的其他核心和/或由控制单元160使用以发起其他指令块的调度、提取和执行。第一路由器250和第二路由器270两者都可以将数据发送回指令(例如,作为指令块内的其他指令的操作数)。
如对于相关领域的普通技术人员而言将是显而易见的,单个核心200内的部件不限于图2中所示出的那些,而是可以根据特定应用的
14EIF172643P39要求而变化。例如,取决于基于块的处理器的特定目标应用,核心可以具有更少或更多的指令窗口,单个指令解码器可能被两个或更多个指令窗口共享,并且所使用的功能单元的数目和类型可以变化。应用在选择资源和向资源分配指令核心中的其他考虑包括性能要求、能量使用要求、集成电路裸片、工艺技术和/或成本。
对于相关领域的普通技术人员而言将是明显的,通过对处理器核心110的指令窗口(例如,指令窗口210)和控制逻辑205内的资源的设计和分配,可以在处理器性能方面做出权衡。面积、时钟周期、能力和限制实质上决定了各个核心110的所实现的性能和基于块的处理器110的吞吐量。
指令调度器206可以具有不同的功能。在某些更高性能的示例中,指令调度器是高度并发的。例如,每个周期,解码器将指令的已解码就绪状态和已解码指令写入到一个或多个指令窗口中,选择要发出的下一指令,并且作为响应,后端发送就绪事件:针对特定指令的输入槽(谓词,左操作数、右操作数等)的目标就绪事件、或针对所有指令的广播就绪事件。每指令就绪状态位连同已解码就绪状态一起可以用于确定指令已经准备好发出。
在一些示例中,指令调度器206使用存储数据的存储装置(例如,先进先出(FIFO)队列、内容可寻址存储器(CAM))来实现,该数据指示用于根据所公开的技术来调度指令块的执行的信息。例如,关于指令依赖关系、控制的转移、推测、分支预测和/或数据加载和存储的数据被布置在存储装置中以促进在将指令块映射到处理器核心中的确定。例如,指令块依赖关系可以与标签相关联,该标签被存储在FIFO或CAM中并且随后由用于将指令块映射到一个或多个处理器核心的选择逻辑来访问。在一些示例中,指令调度器206使用耦合到存储器的通用处理器来实现,存储器被配置为存储用于调度指令块的数据。在一些示例中,指令调度器206使用专用处理器或使用耦合到存储器的基于块的处理器核心来实现。在一些示例中,指令调度器206被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或基于块的处理器核心)上执行的操作系统生成优先级、预测以及可以至少部分用于利用指令调度器206来调度指令块的其他数据。对于相关领域的普通技术人员来说显而易见的是,可以使用在集成电路、可编程逻辑或其他合适的逻辑中实现的其他电路结构来实现用于指令调度器206的硬件。
在一些情况下,调度器206接受针对尚未被解码的目标指令的事件,并且还必须禁止已发出的就绪指令的重发。调度器206可以经由记分板245来更新和跟踪相应指令的就绪状态。在一些示例中,指令可以是非预测的,或者是预测的(基于真或假条件)。直到预测的指令被另一指令的谓词结果作为目标并且该结果与谓词条件相匹配时,预测的指令才变为就绪。如果相关联的谓词不匹配,则指令永远不会发出。在一些示例中,可以推测性地发出和执行预测的指令。在一些示例中,处理器可以随后检查推测性地发出和执行的指令被正确地推测。在一些示例中,错误推测的发出的指令和消耗其输出的块中指令的特定传递闭包可以被重新执行,或者错误推测的副作用被废除。在一些示例中,错误推测的指令的发现导致整个指令块的完整的回滚和重新执行。
V.指令块的示例流
现在转到图3的图300,示出了包括数个可变长度指令块311-315(A-E)的基于块的指令流的部分310。指令流可以用于实现用户应用、系统服务或任何其他合适的用途。在图3所示的示例中,每个指令块以指令头部开始,其跟随有不同数目的指令。例如,指令块311包括头部320和二十个指令321。所示出的特定指令头部320包括部分地控制指令块内的指令的执行并且还允许改进性能增强技术(包括例如分支预测、推测执行、懒惰评估和/或其他技术)的数个数据字段。指令头部320还包括指示头部是指令头部而不是指令的ID位。指令头部320还包括对指令块大小的指示。指令块大小可以在比1更大的指令分块中,例如在指令块内包含的4指令分块的数目。换言之,块的大小被移位4位,以便压缩被分配为规定指令块大小的头部空间。因此,为0的大小值指示最小大小的指令块,该指令块是跟随有四个指令的块头部。在一些示例中,指令块大小被表达为字节数、字数、n字分块的数目、地址、地址偏移,或者使用用于描述指令块大小的其他合适的表达式来表达。在一些示例中,指令块大小由指令块头部和/或尾部中的终止位模式指示。
指令块头部320还可以包括指示特殊指令执行要求的执行标志。例如,取决于特定的应用,对于某些指令块可以禁止分支预测或存储器依赖关系预测。
在所公开的技术的一些示例中,指令头部320包括一个或多个标识位,其指示已编码数据是指令头部。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位总是被设置为二进制值1以指示有效指令块的开始。在其他示例中,不同的位编码可以用于标识位。在一些示例中,指令头部320包括指示相关联的指令块针对其被编码的ISA的特定版本的信息。
块指令头部还可以包括用于例如分支预测、控制流确定和/或不良跳转检测的数个块出口类型。出口类型可以指示分支指令是什么类型,例如:顺序分支指令,其指向存储器中的下一连续指令块;偏移指令,其被分支到在相对于偏移计算的存储器地址处的另一指令块;子例程调用或子例程返回。通过将分支出口类型编码在指令头部中,分支预测器可以在相同指令块内的分支指令已经被提取和/或解码之前至少部分开始操作。
指令块头部320还包括存储掩码,其标识被指派给存储操作的加载存储队列标识符。指令块头部还可以包括写掩码,写掩码标识相关联的指令块将写入哪个(些)全局寄存器。在指令块能够完成之前,相关联的寄存器文件必须接收对每个条目的写入。在一些示例中,基于块的处理器架构不仅可以包括标量指令,而且还可以包括单指令多数据(SEVID)指令,其允许在单个指令内用更大数目的数据操作数进行操作。
VI.示例的块指令目标编码
图4是描绘C语言源代码的两个部分410和415及其相应指令块420和425(汇编语言)的示例的示图400,示出了基于块的指令如何可以显式地编码它们的目标。高级C语言源代码可以通过编译器被转译为低级汇编语言和机器代码,编译器的目标是基于块的处理器。高级语言可以抽象出底层计算机架构的细节中的很多细节,使得程序员可以专注于程序的功能。相比之下,机器代码根据目标计算机的ISA对程序进行编码,使得它能够在目标计算机上使用计算机的硬件资源被执行。汇编语言是机器代码的人类可读形式。
在该示例中,前两个READ指令430和431分别针对ADD指令432的右(T[2R])操作数和左(T[2L])操作数。在所示出的ISA中,读取指令是从全局寄存器文件(例如,寄存器文件160)读取的唯一指令;然而任何指令可以针对全局寄存器文件。当ADD指令432接收到两个寄存器读取的结果时,它将变为就绪并且执行。
当TLEI(小于等于立即数测试(test-less-than-equal-immediate))指令433从ADD接收到其单个输入操作数时,它将变为就绪并且执行。测试接着产生在通道1(B[1P])上向在广播通道上监听的所有指令(在本例中为两个预测分支指令(BRO_T(如果为真则分支)434和BRO_F(如果为假则分支)435))广播的谓词操作数。接收到匹配谓词值的分支将被触发。
还示出了指令块420的依赖关系图440,作为指令节点及其对应操作数目标455和456的阵列450。这示出了块指令420、对应指令窗口条目和由指令表示的底层数据流图之间的对应关系。这里已解码指令READ 430和READ 431准备好发出,因为它们没有输入依赖关系。当它们发出并且执行时,从寄存器R6和R7中读取的值被写入到ADD 432的右操作数缓冲器和左操作数缓冲器中,以将ADD 432的左操作数和右操作数标记为“就绪”。作为结果,ADD432指令变为就绪,向ALU发出,执行,并且总和被写入TLEI 433的左操作数。
作为比较,传统无序RISC或CISC处理器将使用附加的硬件复杂度、功率、面积以及降低的时钟频率和性能在运行时动态地构建依赖关系图。然而,依赖关系图在编译时是静态已知的,并且EDGE编译器可以通过ISA直接对指令之间的生产者消费者关系进行编码,从而使微架构无需动态地重新发现它们。这可以潜在地实现更简单的微架构,以减少面积、功率并且提升频率和性能。
VII.示例的基于块的指令格式
图5是示出指令头部510、通用指令520和分支指令530的指令格式的通用示例的图。指令头部或指令中的每一个根据位数来被标记。例如,指令头部510包括4个32位字并且从其最低有效位(1sb)(位0)直到其最高有效位(msb)(位127)被标记。如图所示,指令头部包括写掩码字段、存储掩码字段、数个出口类型字段、数个执行标志字段、指令块大小字段和指令头部ID位(指令头部的最低有效位)。
编译器可以使用指令头部510的出口类型字段对一个或多个分支出口类型进行编码。分支出口类型可以与由执行指令块的处理器核心生成的信号一起使用以计算下一指令块的地址。例如,一旦知道分支将被采用,则处理器核心可以生成分支标识符和目标地址。目标地址可以在指令块被提交之前被生成,使得在较早的指令块提交之前可以发起下一指令块。在一个实施例中,可以为出口类型字段保留十八位,使得可以在头部中编码一到六个不同的3位出口类型。在运行时,执行指令块的处理器核心可以经由分支标识符信号来指示要使用六个出口类型字段中的哪一个。与分支标识符相对应的出口类型字段和来自核心的目标地址可以用来计算下一指令块的地址。
在这个实施例中,有6个分支出口类型可以被编码在3位字段中,其中分支出口类型是:空、顺序、偏移、间接、调用和返回。空的分支出口类型可以指示没有与这个字段相关联的分支。针对给定指令块可以编码六个可能分支,但是一些指令块可以具有少于六个分支。例如,特定指令块可以仅有一个分支目标,所以仅第一分支出口类型字段将是非空的,并且其他五个字段将是空的。作为另一示例,特定指令块可以具有两个分支目标,并且第一分支出口类型字段可以对应于第一谓词结果,第二分支出口类型字段可以对应于第二谓词结果,并且其他四个字段将是空的。
顺序的分支出口类型可以指示与该分支相关联的下一指令块的目标地址是直接紧在当前指令块之后的指令块的地址。例如,如果顺序指令流超过指令窗口内指令的最大数目,则顺序指令流将被分解为可以连续地存储在存储器中的多个指令块。指令块中的每个指令块(除了结束指令块)的分支出口类型将是顺序出口类型,使得在执行期间,不同指令块的指令可以顺序执行。作为另一示例,指令块可以潜在地采取具有不同相应目标地址的多个分支之一。如果分支之一去往下一顺序指令块,则与该分支相关联的分支出口类型可以被编码为顺序类型。
偏移的分支出口类型可以指示与分支相关联的下一指令块的目标地址从当前执行的指令块偏移。偏移可以在编译时是已知的,诸如当分支是由于迭代或循环构造时,或者偏移可以取决于在指令块的执行期间接收到的计算或输入。在指令块的执行期间,由处理器核心为相关联的分支生成的目标地址将被解释为要添加到在处理器核心上执行的指令块的地址的偏移。备选地,偏移可以被添加到顺序跟在处理器核心上执行的指令块之后的指令块的地址。
间接的分支出口类型可以指示与分支相关联的下一指令块的目标地址由指令块内的指令确定。例如,地址可以经由加载指令来自存储器,或在指令块内被计算。存储目标地址的存储器地址在编译时可以是已知的,或者可以取决于在指令块的执行期间接收到的计算或输入。在指令块的执行期间,由处理器核心为相关联的分支生成的目标地址将被解释为存储下一指令块的目标地址的存储器地址。
调用的分支出口类型可以指示与分支相关联的下一指令块的目标地址是子例程的地址。子例程的地址可以在编译时是已知的,也可以在运行时生成,诸如当地址取决于在指令块的执行期间接收到的计算或输入时。在指令块的执行期间,由处理器核心为相关联的分支输出的目标地址将被解释为子例程的开始的存储器地址。该地址可以由诸如分支预测器的控制逻辑保存。特别地,分支预测器可以包括用于存储子例程的返回地址的一个或多个链接寄存器或堆栈。分支预测器可以使用链接寄存器值或栈顶来预测具有返回出口类型的指令块的目标地址。
返回的分支出口类型可以指示与分支相关联的下一指令块的目标地址是在处理器核心上正在执行的子例程的返回地址。子例程的返回地址在子例程被调用时在运行时被生成。在一个实施例中,返回地址可以仅由控制逻辑来维持,并且由处理器核心在执行期间生成的目标地址可以被忽略。在备选实施例中,子例程的指令块可以维持返回地址,并且由处理器核心为相关联的分支生成的目标地址将被解释为来自子例程的返回地址。由在处理器核心上运行的指令块生成的目标地址可以与在链接寄存器中存储的地址相比较。
应当理解,其他分支出口类型和分支信息是可能的,并且可以用指令块的相应头部内的更多或更少的位进行编码。例如,分支信息可以包括预定目标地址,诸如当编译器能够从程序的静态分析中生成目标地址时。作为另一示例,分支出口类型可以是用于指示可以被多次执行的块的循环、开始循环或者结束循环,其中循环类型可以指示块能够循环回到自己(单块循环),开始循环类型可以指示多块循环的开始块,结束循环类型可以指示多块循环的结束块。例如,分支信息可以包括循环是否执行固定次数以及循环执行多少次。
编译器可以使用指令头部510的“X标志”字段对执行标志进行编码。X标志可以用于对指令块的任何特殊执行要求进行编码。这些要求可以指定在指令块内使用的任何特殊硬件资源(诸如当核心具有不同的模式时,或者当在基于块的处理器上有不同类型的核心可用时),编译器提示或到基于块的处理器的控制逻辑的命令、和/或调试功能。在一个实施例中,标志可以包括用于指示以下各项的位:使用以向量模式配置的核心;禁止分支预测器;禁止存储器依赖关系预测器;要求块同步;块之后中断;以及块之前中断。应当理解,其他的执行标志是可能的,并且可以被编码在相应指令块的头部中。
所示出的通用块指令520被存储为一个32位字并且包括操作码字段、谓词字段、广播ID字段(BID)、第一目标字段(T1)和第二目标字段(T2)。对于消费者多于目标字段的指令,编译器可以使用移动指令构建扇出树,也可以将高扇出指令指派给广播。广播支持通过轻量级网络将操作数发送到核心中的任意数目的消费者指令。广播标识符可以在通用块指令520中被编码。
虽然由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域技术人员将容易理解,即使对于ISA的特定示例,指令字段中的一个或多个指令字段可能偏离特定指令的通用格式。操作码字段指定由指令520执行的操作,诸如存储器读取/写入、寄存器加载/存储、加、减、乘、除、移位、旋转、系统操作或其他合适的指令。谓词字段指定指令执行的条件。例如,谓词字段可以指定值“真”,并且仅当对应的条件标志匹配所指定的谓词值时才执行指令。在一些示例中,谓词字段至少部分指定哪个用于比较谓词,而在其他示例中,执行基于由先前指令(例如,指令块中的先前指令)设置的标志来预测。在一些示例中,谓词字段可以指定指令将总是被执行、或着永远不会被执行。因此,通过减少分支指令的数目,谓词字段的使用能够允许更密集的目标代码、提高的能量效率和提高的处理器性能。
目标字段T1和T2指定基于块的指令的结果被发送到的指令。例如,指令时隙5处的加(ADD)指令可以指定其计算结果将被发送到时隙3和10处的指令。取决于特定指令和ISA,所示出的目标字段中的一个或两个可以被其他信息替代,例如,第一目标字段T1可以被立即操作数、附加的操作码、指定的两个目标等来替代。
分支指令530包括操作码字段、谓词字段、广播ID字段(BID)和偏移字段。操作码和谓词字段在格式和功能上与关于通用指令所描述的相似。在一些示例中,偏移可以在四个指令块中被表达,由此扩展了能够在其上执行分支的存储器地址范围。利用通用指令520和分支指令530所示出的谓词可以被使用,使得指令块内的指令形成有向非循环图(DAG)。例如,特定指令的执行可以基于先前指令的结果(例如,两个操作数的比较)来预测。如果谓词为假,则指令将不提交由特定指令计算的值。如果谓词值与所要求的谓词不匹配,则指令不会发出。例如,如果BRO_F(预测的假)指令被发送有假谓词值,则其将会发出。
应当容易理解,如本文中使用的,术语“分支指令”不限于将程序执行改变到相对存储器位置,而是还包括跳转到绝对或符号存储器位置、子例程调用和返回、以及能够修改执行流的其他指令。在一些示例中,执行流通过改变系统寄存器(例如,程序计数器PC或指令指针)的值来修改,而在其他示例中,执行流可以通过修改存储在存储器中的指定位置处的值来改变。在一些示例中,跳转寄存器分支指令用于跳转到存储在寄存器中的存储器位置。在一些示例中,子例程调用和返回分别使用跳转和链接以及跳转寄存器指令来实现。
VIII.示例编译器方法
图6是示出用于编译到基于块的计算机架构的示例方法600的流程图。在610处,编译器可以生成被分组成指令块的指令流。编译器可以将高级源代码(诸如C、C++或Java)转译为在目标基于块的处理器上可执行的低级机器代码。机器代码可以被生成为连续的指令流,其可以根据计算机的硬件资源和代码的控制流而被分组。例如,所生成的机器代码可以包括多个基本块。基本块可以是代码块,其中控制只能在块的第一指令处进入块并且控制只能将块留在基本块的最后指令处。因此,基本块是一起执行的指令序列。给定指令块可以是单个基本块、基本块的一部分或多个基本块,只要指令块能够在ISA的约束和目标计算机的硬件资源内被执行。
例如,对指令块的大小和内容的约束可以包括处理器核心的指令窗口的最大大小、最大寄存器访问次数、最大加载/存储访问次数以及最大分支数。指令块中的指令数目不能超过可以在处理器核心的指令窗口内执行的指令数目。因此,取决于目标处理器的指令窗口的大小,最大指令数目可以是128、64或32个指令。一些基本块可以比指令窗口更小。为了更高效地使用核心,可以通过将组合的基本块之间的分支转换成数据流指令来将小的基本块与一个或多个其他基本块组合。特别地,从第一基本块到第二基本块(要被合并的基本块)的分支可以被转换成用于计算谓词的指令,并且第二基本块的指令可以基于谓词计算的结果来预测。或者,一些基本块可以大于指令窗口,并且因此这些基本块可以被分割成多个指令块,使得没有指令块大于最大指令窗口大小。如果基本块超过给定指令窗口的寄存器或加载/存储访问次数,则基本块也可以被分成多个指令块。
在620处,可以确定给定指令块的一个或多个出口类型和/或编译器提示。例如,可以确定每个潜在分支的分支出口类型和分支信息,诸如预定目标地址和迭代计数。如以上参考图5所述,取决于指令块之外的控制流,出口类型的示例可以是空、顺序、偏移、间接、调用和返回。单个分支或多个分支可以有可能在给定指令块之外(诸如当多个基本块被组合成给定指令块时),但是在指令块的执行期间仅分支中的一个分支将被采用。潜在分支中的每个潜在分支可以有不同的出口类型。潜在分支中的每个潜在分支可以被指派标识符,并且对应于该分支的出口类型可以被编码在对应于该标识符的字段中。例如,分支0的出口类型可以被编码在字段0中,并且分支1的出口类型可以被编码在字段1中。
在630处,可以生成给定指令块的头部。头部可以包括给定指令块的出口类型和任何编译器提示。图5中的指令头部510是指令头部的一个示例。头部可以具有固定大小,如指令头部510所示,或者头部可以具有可变大小。例如,如果指令块的目标地址可以被静态计算,则头部可以被扩展以包括预定的目标地址。例如,头部的大小可以被编码在头部的第一字的一个或多个位中。
在640处,可以在给定指令块中将目标地址计算提前到更早。通过提前目标地址计算,与目标地址计算不被提前的情况相比,能够更快地提取和执行下一指令块。因此,当前指令块可以潜在地与下一指令块并行地执行,并且基于块的处理器的性能可以被潜在地提高。这与传统ISA形成对比,其中通常,在基本块内执行的最后指令将是到下一基本块的目标地址的分支(或者在循环的情况下回到同一基本块的开始)。一些ISA可以暴露分支延迟时隙,使得分支指令将超前最后指令能够填充的尽可能多的延迟时隙。然而,分支延迟时隙的使用是有限的,因为分支延迟时隙的数目必须小于处理器的流水线级数,并且通常是一个并且有时是两个。因此,在传统ISA中,控制流不能从正在执行的基本块转移,直到基本块的结束或非常接近结束,因为提取和解码逻辑充当串行化点。
然而,包括多个处理器核心和/或指令窗口的基于块的处理器能够潜在地使得给定指令块的目标地址计算能够从块的结尾解耦并且被提升或提前到较早的执行时间。例如,在计算目标地址之后,给定指令块可以使用其指派的处理器核心的资源继续执行,而从目标地址开始的下一指令块在相同或不同处理器核心的不同资源上被发起。因此,因为指令流被分组为原子地执行的指令块并且并行资源被提供用于执行那些指令块,所以与使用分支延迟时隙可能的情况相比,在给定指令块中,基于块的处理器的目标地址计算可以被提前地更早,从而潜在地允许更多的工作并行执行。例如,在基于块的架构中,如果计算目标地址不依赖于指令块的其他指令,则目标地址计算能够被提前到指令块的第一指令。
图7示出了指令块700的各个方面,并且示出了编译器如何能够在指令块700中将目标地址计算提前到更早的示例。指令块700可以包括头部710、面向数据的指令720和面向控制的指令730。面向数据的指令720可以包括用于计算数据、接收输入数据和/或生成输出数据的指令。例如,面向数据的指令720可以用于:对数据执行数学或逻辑运算;从输入设备、寄存器或存储器读取数据;和/或将数据写入到输出设备、寄存器或存储器。面向控制的指令730可以包括用于确定程序的控制流程的指令,诸如哪些指令块被执行并且以什么顺序。为了便于说明,面向数据的指令720和面向控制的指令730被示出为指令块700内的单独的指令块。然而,应当理解,面向数据的指令和面向控制的指令可以在指令块700内被混合。此外,一些指令可以具有面向数据的指令720和面向控制的指令730两者的特性。例如,一些控制流决定取决于在计算之后或数据被输入之后的数据值。
编译器可以以相对于彼此的顺序发出程序的指令。在一些情况下,指令之间的相对执行顺序必须被维持以用于适当的程序执行。例如,一些指令产生由其他指令消费的结果。因为消费指令使用生产指令的结果,消费指令数据依赖于生产指令。因此,生产指令必须在消费指令之前被执行。作为另一示例,一些指令确定或控制是否执行其他指令。由于控制指令的结果确定受控指令是否被执行,所以受控指令控制依赖于控制指令。备选地,当这些指令的执行彼此没有影响时,一些指令可以是彼此独立的。在不改变功能的情况下,独立的指令可以以多种不同的顺序被执行。
指令块700可以包括用于计算目标地址0的指令750,并且编译器可以在指令块700中将指令750提前到更早。目标地址可以用于确定要执行的下一指令块的起始地址。每个指令块可以包括一个或多个出口点,其中相应的出口点可以指向不同的目标地址。
作为具体示例,指令块可以是基本块的一部分,诸如当基本块具有比指令窗口更多的指令时。当指令块700是基本块的一部分时,由于要执行的下一指令块将是指令块序列中的下一指令块,所以只有一个出口点。目标地址可以在编译时被计算为下一顺序指令块的地址。因此,目标地址可以使用顺序的出口类型在头部710内被标识。换言之,目标地址的计算可以被提前(如圆弧752所示)到头部710,使得当头部710被解码时并且在指令块的其他指令被执行之前,目标地址能够被计算。通过将目标地址计算提前到头部,只要头部被解码就可以非推测性地提取下一指令块。
当指令块700是单个基本块时,在指令块700之外可以存在一个或多个目标地址。例如,当基本块在无条件分支上结束时,指令块700可以具有单个目标地址,诸如子例程调用。如果目标地址在编译时是已知的,则分支信息可以被提前到头部710,如圆弧752所示。然而,如果目标地址计算依赖于在指令块700内执行的指令,诸如面向控制指令730,则目标地址计算和它所依赖的指令可以被提前到面向数据的指令720中的所有指令之前,如圆弧754所示。备选地,目标地址计算和它所依赖的指令可以被提前到面向数据的指令720中的一些指令之前。例如,可以在计算目标地址之前优先化当前指令块700的一些或全部存储器加载指令,使得在针对下一指令块提取指令之前执行当前块的存储器访问。
指令块700可以包括用于计算多个相应的潜在目标地址的多个指令(例如,750、770),并且编译器可以在指令块700中将指令750、770中的一个或多个指令提前到更早。例如,条件分支可以在条件为真时使程序流向一个目标地址,并且在条件为假时使程序流向不同的目标地址。例如,源代码可以指定:
如果(条件0){
则执行基于条件0被预测的指令;调用子例程0}
否则{
执行基于条件1被预测的指令;调用子例程1},
其中条件1是条件0的逆。在基于块的架构中,条件或谓词可以在一个指令中被评估,诸如在面向控制的指令730中。依赖控制的指令可以基于评估的结果被预测。作为具体示例,在面向控制的指令730中的测试指令可以测试条件0。在条件0被评估之后并且如果条件0为真,则基于条件0被预测的指令740和用于计算目标地址0的指令750能够被执行。如果条件0不为真(例如,条件1为真),则基于条件1被预测的指令760和用于计算目标地址1的指令770能够被执行。如圆弧756所示,编译器可以将用于计算目标地址0的指令750提前到早于基于条件0被预测的指令740中的一些或全部指令。具体地,编译器可以将指令750及其所依赖的指令提前到独立于指令750的预测指令740中的所有指令之前。类似地,如圆弧772所示,编译器可以将用于计算目标地址1的指令770提前到比基于条件1被预测的指令760中的一些或全部指令更早。
在编译之后,指令可以被存储在计算机可读存储器中,使得指令可以被基于块的处理器检索以执行程序。以下示例描述了基于块的处理器上的执行。
IX.提供对目标地址的早期访问的示例
图8是示出用于在基于块的计算机架构上控制指令的执行的方法800的示例的流程图。例如,方法800可以由基于块的处理器的控制逻辑使用。例如,控制逻辑可以在基于块的处理器外部的控制器中被实现,在基于块的处理器的专用硬件(诸如专用控制单元或分布式逻辑门)内被实现,或者作为基于块的处理器的一个或多个处理器核心内的代码来被执行。方法800可以用于向控制逻辑提供对下一指令块的目标地址的早期访问,使得多个指令块能够非推测性地并行执行。
在810处,提取和至少部分解码第一指令块的指令头部。例如,第一指令块可以从存储器系统被提取,存储器系统可以包括指令高速缓存、统一指令/数据级别1(L1)高速缓存、级别2(L2)高速缓存和/或主存储器(诸如片上存储器和/或外部存储器)。指令头部可以包括指令块的大小和一个或多个出口类型,其中每个出口类型对应于来自指令块的潜在分支。第一指令块从第一指令块的起始地址处开始的存储器被提取。第一指令块的大小可以添加到第一指令块的起始地址以计算下一顺序指令块的起始地址。第一指令块的大小可以与可用资源的列表相比较,以确定第一指令块可以被映射到哪里。
在820处,可以将第一指令块映射到基于块的处理器的处理器核心。映射的指令块是当前指派给在给定处理器核心上执行的块。基于块的处理器包括有限数目的同构或异构处理器核心。典型的程序可以包括比能够适合处理器核心的更多的指令块。因此,程序的各个指令块通常将与程序的其他指令块共享处理器核心。换言之,给定核心可以在程序的执行期间执行若干不同指令块的指令。具有有限数目的处理器核心还意味着,当处理器核心中的所有处理器核心忙于执行指令块而没有新的核心可用于分派时,程序的执行可以停顿或被延迟。当处理器核心变为可用时,指令块的实例可以被映射到处理器核心。
控制逻辑可以包括用于指派哪个指令块将在哪个处理器核心上执行以及何时将执行指令块的指令块调度器。映射可以基于各种因素,诸如要用于执行的目标能量、处理器核心的数目和配置、处理器核心的当前和/或以前的使用、程序的动态流、是否实现推测性执行、推测性块将被执行的置信度和其他因素。指令块的实例可以被映射到当前可用的处理器核心(诸如当前没有指令块正在执行时)。在一个实施例中,指令块的实例可以被映射到当前繁忙的处理器核心(诸如当核心正在执行指令块的不同实例时),并且稍后映射的实例可以在更早映射的实例完成时开始。作为另一示例,指令块的实例可以被映射到处理器核心内的空闲指令窗口。
当指令块被映射到特定处理器核心时,指令块在飞行中。飞行中的指令块是针对基于块的处理器的特定核心的块,并且该块将在或正在特定处理器核心上进行推测性或非推测性地执行。当在块的映射期间知道程序将使用由执行指令块提供的工作时,块非推测性地执行。当在映射过程中不知道程序是否将使用由执行指令块提供的工作时,块推测性地执行。推测性地执行块可以潜在地提高性能,诸如当与块将在已知块的工作将被使用时或之后被开始的情况下相比推测块更早被开始时。然而,推测性地执行可以潜在地增加在执行程序时使用的能量,诸如当推测性工作未被程序使用时。
在指令块被映射到特定处理器核心之后,指令块可以被特定处理器核心提取、解码和执行。提取可以包括将指令块的指令从存储器加载到特定处理器核心的缓冲器或寄存器中。当处理器核心被流水线化时,提取可以与解码和执行交叠。当指令块的指令被加载到处理器核心上时,指令块驻留在处理器核心上。当指令块的一些但不是全部指令被加载时,指令块部分驻留。当指令块的所有指令都被加载时,指令块完全驻留。指令块将驻留在处理器核心上,直到处理器核心被重置或不同的指令块被提取到处理器核心上。解码可以包括将提取的指令从相对紧凑的机器代码转换为能够用于控制处理器核心的硬件资源的不太紧凑的表示。已解码指令被存储在处理器核心的指令窗口内,并且当指令的操作数就绪时并且当核心的资源可用于执行指令时能够被执行。通常,在核心上执行的指令只更新核心的本地状态,直到核心进入提交级,其中核心之外的架构状态将被更新。然而,在提交指令块之前,生成下一指令块的目标地址的指令可以与控制逻辑通信。特别地,下一指令块的目标地址和分支标识符可以在指令块被提交之前被传送给控制逻辑。例如,当块的目标地址由具有偏移的分支或具有偏移指令的调用来确定时,当指令块被解码时目标地址可以被确定。
在830处,可以由控制逻辑在第一指令块提交之前接收来自第一指令块的目标地址(和分支标识符)。接收到的目标地址将根据与分支标识符相对应的出口类型被解释,使得第二指令块的起始地址能够被计算。例如,取决于与接收到的分支标识符相对应的出口类型,目标地址可以被解释为偏移或子例程地址。第二指令块是程序顺序中的下一指令块,并且因此它是非推测指令块。
在840处,可以发起第二指令块的指令的执行。发起第二指令块的执行可以包括:将第二指令块预先提取到基于块的架构的L1高速缓存中;预先提取第二指令块的头部;解码第二指令块的头部;将第二指令块映射到处理器核心;将第二指令块提取到基于块的架构的第二核心的指令窗口中;将第二指令块提取到基于块的架构的第一核心的指令窗口中;刷新被加载在第二核心上的第二指令块;解码第二指令块的一个或多个指令;和/或解码和/或执行第二指令块的一个或多个指令。因为指令块仅跟随指令块的每次迭代的一个出口点,所以一旦已经确定了所采用的出口点的谓词,下一指令块的提取和执行就可以开始,即使指令块内的其他指令正在执行。例如,即使在明确地将分支带到下一指令块之后,仍然可以继续进行预测的和/或非预测的寄存器和/或存储器写入。
指令块可以被重复执行,诸如当指令块被映射以执行子例程或循环体时。第二指令块可以已经驻留在基于块的处理器的核心中,并且因此刷新核心可以节省将被用于重新提取和重新解码第二指令块的时间和能量。如本文中使用的,指令块刷新或处理器核心刷新意味着使得处理器核心能够重新执行驻留在处理器核心上的一个或多个指令块。在一个实施例中,刷新核心可以包括重置一个或多个指令块的活动就绪状态。因此,当刷新块时,在清除活动就绪状态的同时已解码指令和已解码就绪状态能够被维持。当指令块是循环或重复的子例程的一部分时,或者当推测块被终止并且将被重新执行时,在同一处理器核心上重新执行指令块可能是令人期望的。诸如通过控制逻辑执行指令块调度,可以由处理器核心本身(连续重用)或通过处理器核心外部(非连续重用)来做出刷新的决定。
在850处,可以优先化对共享资源的访问请求,使得与较新的和/或更具推测性的指令块相比,较旧的和/或非推测的指令块对于共享资源具有更高的优先级。作为一个示例,控制逻辑可以跟踪最旧执行指令块,并且在它请求访问共享资源时总是向其给予优先权。最旧执行指令块是非推测性的,而较新的执行指令块可以是非推测性或推测性的。使用循环赛、随机或其他算法,可以向较新的执行指令块给予对共享资源的优先权。作为另一示例,控制逻辑可以为每个指令块生成时间戳,并且总是向请求访问共享资源的最旧指令块给予优先权。通过相对于较新的和/或更具推测性的指令块优先化较旧的和/或非推测的指令块,较旧的指令块能够更快地完成,使得可以较早地解决数据依赖关系,并且使得资源能够被释放以供新的指令块使用。此外,存在对共享资源的访问将被使用而不会被浪费在中止的推测性指令上的较高可能性。例如,共享资源可以包括高速缓存、寄存器文件、存储器子系统、输入端口、输出端口、专用核心或加速器和/或其他各种资源。
以下是方法800如何可以被使用的一个示例。可以提取指令块1并且可以至少部分解码头部(810)。例如,头部可以指示多大的指令块1使得其能够被映射到具有用于指令块的足够存储容量的处理器核心。可以将指令块1映射到第一处理器核心(820)。指令块1可以包括具有到指令块2的偏移指令的分支。当指令块1首先被提取到第一处理器核心上时,分支的偏移尚未被知道。然而,可以在指令块1提交之前确定指令块1的目标地址(830),诸如当指令正被解码时或在指令的执行期间。作为具体示例,分支指令可以是指令块1的唯一分支。如果分支指令没有被预测,则在分支指令的解码期间将知道目标地址。如果分支指令基于在指令块内被计算的值而被预测,则在解码之后可以知道潜在的目标地址,并且在计算谓词之后将知道实际的目标地址。然而,分支预测器可以在谓词被计算之前使用潜在目标地址来预测采用的分支并且能够发起指令块2的推测性执行,而非等待计算谓词。因此,指令块2可以在当前核心的另一指令窗口中或在第二核心中提前运行。如果分支预测器预测正确,则指令块2可以继续运行,并且可以在指令块1被提交之后被提交。如果分支预测器预测不正确,则可以中止指令块2而不提交它。
图9-10示出了基于块的架构的不同配置和操作的示例。示例示出了与提供对目标地址的早期访问相关联的各个方面。图9示出了包括多个处理核心905、控制逻辑920和存储器系统的基于块的架构900。存储器系统是基于块的架构的共享资源,因为核心905中的多个核心可以尝试访问存储器系统。存储器系统可以包括交叉开关930、1级高速缓存(L1$)940、2级高速缓存(L2$)950和主存储器910。交叉开关930可以用于在核心和LI高速缓存940之间路由数据。交叉开关930和L1高速缓存940的不同实现可以实现对L1高速缓存940的更多或更少的并行访问。在一个实施例中,当存储器访问针对L1高速缓存940的不同存储体时,交叉开关930可以使得多个核心能够访问LI高速缓存940。例如,LI高速缓存可以具有与每个核心相关联的存储体。在备选实施例中,交叉开关930可以仅在给定时间使得单个核心能够访问L1高速缓存940。
在一些实施例中,控制逻辑920可以至少部分使用以下中的一项或多项来实现:硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路。在一个实施例中,控制逻辑920可以是运行执行基于块的架构900的控制功能(诸如指令块调度)的指令块的处理器核心905之一。在另一实施例中,执行软件代码的外部处理器可以用于与基于块的架构900通信并且执行其控制功能。
程序的指令912可以被分组成指令块(A-E)并且被存储在主存储器910中。指令块地址表914可以存储指令块的起始地址。指令块可以被复制到L1高速缓存940和L2高速缓存950中,使得核心905和控制逻辑920具有对块的更快访问。
当控制逻辑920的指令块调度器925将程序的第一指令块(A)映射到核心1并且发起程序的第一指令块(A)到核心1的加载时,程序可以开始执行,其中指令块A可以开始执行。指令块调度器925可以通过维持指令块映射表916来跟踪核心的驻留,指令块映射表916存储关于哪个指令块被映射到哪个核心的信息。指令块映射表916可以被存储在存储器910(如图所示)中或存储在由软件不可访问的另一存储器结构(诸如控制逻辑920的高速缓存)内。指令块调度器925可以提取和解码指令块的指令头部。头部信息可以用于确定指令块的大小和关于如何计算下一指令块的地址的信息(例如,一个或多个出口类型字段)。
在块A在核心1上的执行期间,并且在块A被提交之前,对应于下一指令块的目标地址可以由块A生成,并且被传送给控制逻辑920。下一指令块的地址可以基于接收到的目标地址和块A头部的出口类型字段来被计算。当下一指令块的地址被计算时,控制逻辑920可以发起下一指令块的执行。例如,程序的下一指令块可以是块B,并且控制逻辑920可以发起指令块B的执行。
发起块B的执行可以包括:将块B预先提取到LI高速缓存930中;提取块B的头部;解码块B的头部;将块B映射到核心905之一;将块B提取到核心905之一(诸如核心2、或核心1的未使用窗口)中;刷新块B(如果它已经驻留在核心905之一上);解码块B的一个或多个指令;和/或解码和/或执行块B的一个或多个指令。例如,块B可以被映射和加载到核心2上,在那里它可以开始与块A并行地执行。因此,块A和B能够并行地执行,因为块A提供对块B的地址的早期访问。通过并行地执行块,与块顺序执行的情况下相比,程序能够被更快地完成。
控制逻辑920可以包括能够用于发起程序的块的推测性执行的分支预测器(未示出)。例如,分支预测器可以通过将块C映射到核心3来发起指令块C的执行,使得核心3可以开始从存储器910提取块C的指令。
加载在不同核心905上的块中的每个块可以请求对共享资源的访问,共享资源诸如存储器系统。例如,块A和B可以与块C的指令提取并行地请求来自存储器的数据。控制逻辑920可以被配置为优先访问共享资源,使得与较新的非推测指令块和推测指令块相比,较旧的非推测指令块具有对资源的优先权。在这个示例中,块A和B正在非推测地执行,而块C正在推测性地执行。块B是最旧块,由于块B由块A发起,所以块B比块A更新,块C是最新块。与块B和C相比,块A可以具有优先权,因为块A是最旧的非推测块;与块C相比,块B可以具有优先权,因为块B比块C更旧,并且还因为块B是非推测性的,而块C是推测性的。
程序执行可以以这种方式继续直到程序完成。控制逻辑920可以被配置为使得一个程序或者多个程序可以在基于块的架构900上运行。例如,控制逻辑920可以划分核心905,使得每个进程或者线程可以被分配给核心905的子集。
图10示出了基于块的架构1000可以使用与图9的存储器系统不同地组织的存储器系统。具体地,图10示出了包括多个处理核心1005、控制逻辑1020和存储器系统的基于块的架构1000。存储器系统可以包括用于每个相应核心的私有1级高速缓存(L1$)1030-1034、交叉开关1040、2级高速缓存(L2$)1050和主存储器1010。这里,交叉开关1040可以用于在私有L1高速缓存1030-1034和L2高速缓存1030之间路由数据。交叉开关1040和L2高速缓存1050的不同实现可以实现对L2高速缓存1050的更多或更少的并发访问。在一个实施例中,当存储器访问针对L2高速缓存1050的不同存储体时,交叉开关1040可以使得多个LI高速缓存能够访问L2高速缓存1050。例如,L2高速缓存可以具有与每个LI高速缓存相关联的存储体。在备选实施例中,交叉开关1040可以仅在给定时间才使得单个LI高速缓存能够访问L2高速缓存1050。
应当理解,图9和图10的存储器系统仅示出了可以与基于块的架构一起使用的很多可能的存储器系统中的两个。变体可以包括不同数目或级别的高速缓存、不同高速缓存组织(诸如提供单独的指令和数据高速缓存)、级别之间的不同连接性以及本领域中已知的其他存储器架构。
X.示例计算环境
图11示出了其中能够实现所描述的实施例、技术和工艺(包括基于块的处理器中的不良跳转检测)的合适的计算环境1100的一般化示例。例如,计算环境1100可以实现本文中描述的用于验证分支指令目标位置的所公开的技术。
计算环境1100不意图为暗示对本技术的使用范围或功能的任何限制,因为技术可以在不同的通用或专用计算环境中实现。例如,所公开的技术可以用其他计算机系统配置来实现,包括手持设备、多处理器系统、可编程消费电子产品、网络PC、小型计算机、大型计算机等。所公开的技术也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以位于本地和远程存储器存储设备两者中。
参考图11,计算环境1100包括至少一个基于块的处理单元1110和存储器1120。在图11中,这个最基本的配置1130被包括在虚线内。基于块的处理单元1110执行计算机可执行指令并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以提高处理功率,并且因此多个处理器可以同时运行。存储器1120可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或这两者的某种组合。存储器1120存储例如能够实现本文中描述的技术的软件1180、图像和视频。计算环境可以具有附加功能。例如,计算环境1100包括存储装置1140、一个或多个输入设备1150、一个或多个输出设备1160以及一个或多个通信连接1170。诸如总线、控制器或网络等互连机构(未示出)互连计算环境1100的部件。通常,操作系统软件(未示出)为在计算环境1100中执行的其他软件提供操作环境,并且协调计算环境1100的部件的活动。
存储装置1140可以是可移除的或不可移除的,并且包括可以用于存储信息并且能够在计算环境1100内被访问的磁盘、磁带或磁带盒、CD-ROM、CD-RW、DVD或任何其他介质。存储装置1140存储用于软件1180、插件数据和消息的指令,其可以用于实现本文中描述的技术。
输入设备1150可以是触摸输入设备,诸如键盘、小键盘、鼠标、触摸屏显示器、笔或轨迹球、语音输入设备、扫描设备、或者向计算环境1100提供输入的另一设备。对于音频,输入设备1150可以是接受模拟或数字形式的音频输入的声卡或类似设备、或者将音频样本提供给计算环境1100的CD-ROM读取器。输出设备1160可以是显示器、打印机、扬声器、CD刻录机或提供来自计算环境1100的输出的另一设备。
通信连接1170实现通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质在调制数据信号中传送信息,诸如计算机可执行指令、压缩图形信息、视频或其他数据。通信连接1170不限于有线连接(例如,兆位或千兆以太网、无限带宽技术、电气或光纤连接上的光纤信道),而且还包括无线技术(例如,经由蓝牙的RF连接、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外)和用于为所公开的代理、桥接器和代理数据消费者提供网络连接的其他合适的通信连接。在虚拟主机环境中,通信连接可以是由虚拟主机提供的虚拟化网络连接。
所公开的方法的一些实施例可以使用在计算云1190中实现所公开的技术的全部或部分的计算机可执行指令来执行。例如,所公开的编译器和/或基于块的处理器服务器位于计算环境1130中,或者所公开的编译器可以在位于计算云1190中的服务器上被执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或CISC处理器)上执行。
计算机可读介质是能够在计算环境1100内被访问的任何可用介质。作为示例而非限制,在计算环境1100中,计算机可读介质包括存储器1120和/或存储装置1140。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质,诸如存储器1120和存储装置1140,而不是诸如调制数据信号的传输介质。
X.所公开的技术的附加示例
根据上面讨论的示例,本文中讨论了所公开的主题的附加示例。
在一个实施例中,一种基于块的计算系统包括多个处理器核心和控制逻辑。多个处理器核心包括第一处理器核心,其被配置为执行第一指令块的指令并且在第一指令块被提交之前生成第二指令块的目标地址。控制逻辑被配置为在第一指令块被提交之前接收第二指令块的目标地址并且发起第二指令块的非推测性执行。基于块的计算系统可以还包括由多个处理器核心共享的资源。控制逻辑还可以被配置为优先访问共享资源,使得与较新的非推测性指令块和推测性指令块相比,较旧的非推测性指令块具有对资源的优先权。例如,由多个处理器核心共享的资源可以是高速缓存、寄存器文件或存储器。发起第二指令块的非推测性执行可以至少部分基于被编码在第一指令块的头部中的出口类型信息。多个处理器核心中的各个处理器核心可以包括专用指令高速缓存。发起第二指令块的执行可以包括将第二指令块加载到多个处理器核心中的第二核心中。第一指令块可以被加载到第一核心的第一指令窗口中。发起第二指令块的执行可以包括将第二指令块加载到第一核心的第二指令窗口中。
在一个实施例中,一种在基于块的架构中执行分支的方法包括:使用基于块的架构的第一核心来执行第一指令块的一个或多个指令;以及在第一指令块被提交之前,发起第二指令块的指令的非推测性执行。该方法可以还包括评估第一指令块的指令的谓词,并且至少部分基于谓词评估来执行发起。该方法可以还包括评估存储在第一指令块的指令头部中的出口类型信息;并且至少部分基于出口类型信息来执行发起。发起的非推测执行可以包括将第二指令块预先提取到基于块的架构的L1高速缓存中。发起的非推测执行可以包括将第二指令块提取到基于块的架构的第二核心的指令窗口中。发起的非推测性执行可以包括将第二指令块提取到基于块的架构的第一核心的指令窗口中。第二指令块可以在发起之前被加载在基于块的架构的第二核心上,并且发起的非推测性执行可以包括刷新被加载在第二核心上的第二指令块。发起的非推测性执行可以包括预先提取第二指令块的头部。发起的非推测性执行可以包括预先提取第二指令块的头部。该方法可以还包括优先化对基于块的架构的共享资源的访问请求,使得与较新的非推测性指令块和推测性指令块相比,较旧的非推测性指令块具有对共享资源的优先权。例如,共享资源可以是高速缓存、寄存器文件或存储器子系统。
在一个实施例中,一种计算机可读存储设备或存储器,其上具有用于使得处理器执行用于将源代码编译成在基于块的计算机架构上可执行的机器代码的方法的指令。指令包括使得处理器生成在基于块的计算机架构上可执行的机器代码指令流的指令,机器代码指令流被分成多个指令块。指令包括使得处理器确定多个指令块中的相应指令块的出口类型的指令。指令包括使得处理器将相应指令块的出口类型编码在相应指令块的头部中的指令。指令还可以包括使得处理器提前相应指令块内用于计算分支目标地址的指令的指令。出口类型可以包括以下类型中的至少一项或多项:空、顺序、偏移、间接、调用或返回。
鉴于所公开的主题的原理可以被应用到的很多可能的实施例,应当认识到,所说明的实施例仅是优选示例,并且不应当被当作将权利要求的范围限制为那些优选示例。相反,所要求保护的主题的范围由以下权利要求限定。我们因此要求保护落入这些权利要求的范围内的所有我们的发明。
Claims (15)
1.一种基于块的计算系统,包括:
多个处理器核心,其包括第一处理器核心,所述第一处理器核心被配置为执行第一指令块的指令并且在所述第一指令块被提交之前生成第二指令块的目标地址;以及
控制逻辑,其被配置为在所述第一指令块被提交之前接收所述第二指令块的所述目标地址并且发起所述第二指令块的非推测性执行。
2.根据权利要求1所述的基于块的计算系统,还包括由所述多个处理器核心共享的资源,并且其中所述控制逻辑还被配置为优先访问所述共享资源,使得与较新的非推测性指令块和推测性指令块相比,较旧的非推测性指令块具有对所述资源的优先权。
3.根据权利要求1或2中任一项所述的基于块的计算系统,其中发起所述第二指令块的非推测性执行至少部分基于被编码在所述第一指令块的头部中的出口类型信息。
4.根据权利要求1到3中任一项所述的基于块的计算系统,其中发起所述第二指令块的执行包括将所述第二指令块加载到所述多个处理器核心中的第二核心中。
5.根据权利要求1到4中任一项所述的基于块的计算系统,其中所述第一指令块被加载到所述第一核心的第一指令窗口中,并且发起所述第二指令块的执行包括将所述第二指令块加载到所述第一核心的第二指令窗口中。
6.一种在基于块的架构中执行分支方法,所述方法包括:
使用所述基于块的架构的第一核心来执行第一指令块的一个或多个指令;以及
在所述第一指令块被提交之前,发起第二指令块的指令的非推测性执行。
7.根据权利要求6所述的方法,还包括:
评估所述第一指令块的所述指令的谓词;以及
至少部分基于所述谓词评估来执行所述发起。
8.根据权利要求6或7中任一项所述的方法,还包括:
评估被存储在所述第一指令块的指令头部中的出口类型信息;以及
至少部分基于所述出口类型信息来执行所述发起。
9.根据权利要求6到8中任一项所述的方法,其中发起的所述非推测执行包括将所述第二指令块预先提取到所述基于块的架构的LI高速缓存中。
10.根据权利要求6到9中任一项所述的方法,其中发起的所述非推测性执行包括将所述第二指令块提取到所述基于块的架构的第二核心的指令窗口中。
11.根据权利要求6到10中任一项所述的方法,其中所述第二指令块在所述发起之前被加载在所述基于块的架构的第二核心上,并且发起的所述非推测性执行包括刷新被加载在所述第二核心上的所述第二指令块。
12.根据权利要求6到11中任一项所述的方法,其中发起的所述非推测性执行包括预先提取所述第二指令块的头部。
13.根据权利要求6到12中任一项所述的方法,还包括:
优先化对所述基于块的架构的共享资源的访问请求,使得与较新的非推测性指令块和推测性指令块相比,较旧的非推测性指令块具有对所述共享资源的优先权。
14.一种计算机可读存储设备或存储器,其上具有用于基于块的处理器的指令,所述指令在由所述基于块的处理器执行时使得所述基于块的处理器执行根据权利要求6-13中任一项所述的方法。
15.一种计算机可读存储设备或存储器,其上具有用于使得处理器执行方法的指令,所述方法用于将源代码编译成在基于块的计算机架构上可执行的机器代码,所述指令包括:
使得所述处理器生成在所述基于块的计算机架构上可执行的机器代码指令流的指令,所述机器代码指令流被分成多个指令块;
使得所述处理器确定所述多个指令块中的相应指令块的出口类型的指令;以及
使得所述处理器将相应指令块的所述出口类型编码在所述相应指令块的头部中的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,636 US20160378488A1 (en) | 2015-06-26 | 2015-06-26 | Access to target address |
US14/752,636 | 2015-06-26 | ||
PCT/US2016/038854 WO2016210031A1 (en) | 2015-06-26 | 2016-06-23 | Block-based architecture with parallel execution of successive blocks |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107810478A true CN107810478A (zh) | 2018-03-16 |
Family
ID=56369217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680037706.2A Withdrawn CN107810478A (zh) | 2015-06-26 | 2016-06-23 | 具有连续块的并行执行的基于块的架构 |
Country Status (15)
Country | Link |
---|---|
US (1) | US20160378488A1 (zh) |
EP (2) | EP3314401B1 (zh) |
JP (1) | JP2018519602A (zh) |
KR (1) | KR20180021812A (zh) |
CN (1) | CN107810478A (zh) |
AU (1) | AU2016281603A1 (zh) |
BR (1) | BR112017024351A2 (zh) |
CA (1) | CA2986061A1 (zh) |
CL (1) | CL2017003263A1 (zh) |
CO (1) | CO2017013272A2 (zh) |
HK (1) | HK1246442A1 (zh) |
IL (1) | IL256171A (zh) |
MX (1) | MX2017016200A (zh) |
PH (1) | PH12017550128A1 (zh) |
WO (1) | WO2016210031A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783143A (zh) * | 2019-01-25 | 2019-05-21 | 贵州华芯通半导体技术有限公司 | 用于流水线指令流的控制方法和控制设备 |
CN117707619A (zh) * | 2023-11-02 | 2024-03-15 | 上海攸化技术管理咨询有限公司 | 指令的编码方式、运算单元、运算模块及运算方法 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10409599B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Decoding information about a group of instructions including a size of the group of instructions |
US10169044B2 (en) | 2015-06-26 | 2019-01-01 | Microsoft Technology Licensing, Llc | Processing an encoding format field to interpret header information regarding a group of instructions |
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US9952867B2 (en) | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US9946548B2 (en) | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US9940136B2 (en) | 2015-06-26 | 2018-04-10 | Microsoft Technology Licensing, Llc | Reuse of decoded instructions |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
US11531552B2 (en) * | 2017-02-06 | 2022-12-20 | Microsoft Technology Licensing, Llc | Executing multiple programs simultaneously on a processor core |
CN109101276B (zh) | 2018-08-14 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 在cpu中执行指令的方法 |
US10824429B2 (en) * | 2018-09-19 | 2020-11-03 | Microsoft Technology Licensing, Llc | Commit logic and precise exceptions in explicit dataflow graph execution architectures |
US20210096861A1 (en) * | 2019-10-01 | 2021-04-01 | Higon Austin R&D Center | System and method to prefetch pointer based structures |
CN111506520B (zh) * | 2020-07-01 | 2020-09-22 | 腾讯科技(深圳)有限公司 | 一种地址生成的方法、相关装置以及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5832297A (en) * | 1995-04-12 | 1998-11-03 | Advanced Micro Devices, Inc. | Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations |
CN1682181A (zh) * | 2002-09-20 | 2005-10-12 | Arm有限公司 | 具有外部和内部指令集的数据处理系统 |
CN101203831A (zh) * | 2005-06-23 | 2008-06-18 | 英特尔公司 | 用于增强线程级推测的原语 |
WO2014105206A1 (en) * | 2012-12-29 | 2014-07-03 | Intel Corporation | Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region |
CN104011705A (zh) * | 2011-12-01 | 2014-08-27 | 新加坡国立大学 | 多形异构性多核架构 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0583089B1 (en) * | 1992-08-12 | 2000-01-26 | Advanced Micro Devices, Inc. | Instruction decoder |
JP4339371B2 (ja) * | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
US9594700B2 (en) * | 2013-04-17 | 2017-03-14 | Nvidia Corporation | Speculative memory controller |
-
2015
- 2015-06-26 US US14/752,636 patent/US20160378488A1/en not_active Abandoned
-
2016
- 2016-06-23 WO PCT/US2016/038854 patent/WO2016210031A1/en active Application Filing
- 2016-06-23 MX MX2017016200A patent/MX2017016200A/es unknown
- 2016-06-23 CN CN201680037706.2A patent/CN107810478A/zh not_active Withdrawn
- 2016-06-23 AU AU2016281603A patent/AU2016281603A1/en not_active Abandoned
- 2016-06-23 KR KR1020187001900A patent/KR20180021812A/ko unknown
- 2016-06-23 BR BR112017024351A patent/BR112017024351A2/pt not_active Application Discontinuation
- 2016-06-23 EP EP16736333.2A patent/EP3314401B1/en active Active
- 2016-06-23 JP JP2017566304A patent/JP2018519602A/ja active Pending
- 2016-06-23 EP EP19218262.4A patent/EP3660668A1/en not_active Withdrawn
- 2016-06-23 CA CA2986061A patent/CA2986061A1/en not_active Abandoned
-
2017
- 2017-11-08 PH PH12017550128A patent/PH12017550128A1/en unknown
- 2017-12-07 IL IL256171A patent/IL256171A/en unknown
- 2017-12-19 CL CL2017003263A patent/CL2017003263A1/es unknown
- 2017-12-21 CO CONC2017/0013272A patent/CO2017013272A2/es unknown
-
2018
- 2018-05-07 HK HK18105888.4A patent/HK1246442A1/zh unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5832297A (en) * | 1995-04-12 | 1998-11-03 | Advanced Micro Devices, Inc. | Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations |
CN1682181A (zh) * | 2002-09-20 | 2005-10-12 | Arm有限公司 | 具有外部和内部指令集的数据处理系统 |
CN101203831A (zh) * | 2005-06-23 | 2008-06-18 | 英特尔公司 | 用于增强线程级推测的原语 |
CN104011705A (zh) * | 2011-12-01 | 2014-08-27 | 新加坡国立大学 | 多形异构性多核架构 |
WO2014105206A1 (en) * | 2012-12-29 | 2014-07-03 | Intel Corporation | Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783143A (zh) * | 2019-01-25 | 2019-05-21 | 贵州华芯通半导体技术有限公司 | 用于流水线指令流的控制方法和控制设备 |
CN109783143B (zh) * | 2019-01-25 | 2021-03-09 | 贵州华芯通半导体技术有限公司 | 用于流水线指令流的控制方法和控制设备 |
CN117707619A (zh) * | 2023-11-02 | 2024-03-15 | 上海攸化技术管理咨询有限公司 | 指令的编码方式、运算单元、运算模块及运算方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3314401A1 (en) | 2018-05-02 |
CA2986061A1 (en) | 2016-12-29 |
CO2017013272A2 (es) | 2018-03-20 |
EP3660668A1 (en) | 2020-06-03 |
MX2017016200A (es) | 2018-03-01 |
BR112017024351A2 (pt) | 2018-07-31 |
CL2017003263A1 (es) | 2018-06-29 |
WO2016210031A1 (en) | 2016-12-29 |
KR20180021812A (ko) | 2018-03-05 |
HK1246442A1 (zh) | 2018-09-07 |
AU2016281603A1 (en) | 2017-11-30 |
EP3314401B1 (en) | 2020-02-12 |
US20160378488A1 (en) | 2016-12-29 |
JP2018519602A (ja) | 2018-07-19 |
PH12017550128A1 (en) | 2018-02-26 |
IL256171A (en) | 2018-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107810478A (zh) | 具有连续块的并行执行的基于块的架构 | |
CN108027769A (zh) | 使用寄存器访问指令发起指令块执行 | |
CN108027766A (zh) | 预取指令块 | |
US11681531B2 (en) | Generation and use of memory access instruction order encodings | |
CN108027767A (zh) | 寄存器读取/写入排序 | |
CN109074260A (zh) | 乱序的基于块的处理器和指令调度器 | |
CN108027771A (zh) | 基于块的处理器核复合寄存器 | |
US10445097B2 (en) | Multimodal targets in a block-based processor | |
CN107810479A (zh) | 用于处理器控制传送的目标位置的确定 | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method | |
US20170083320A1 (en) | Predicated read instructions | |
US10198263B2 (en) | Write nullification | |
CN108027772A (zh) | 用于逻辑处理器的不同的系统寄存器 | |
CN108027807A (zh) | 基于块的处理器核拓扑寄存器 | |
CN108027732A (zh) | 与断言的加载指令相关联的预取 | |
CN108139913A (zh) | 处理器操作的配置模式 | |
CN108027770A (zh) | 用于数据流isa的密集读取编码 | |
CN110249302A (zh) | 在处理器核上同时执行多个程序 | |
CN108027729A (zh) | 分段式指令块 | |
CN107810477A (zh) | 解码的指令的重复使用 | |
CN108027731A (zh) | 针对基于块的处理器的调试支持 | |
CN107810483A (zh) | 验证基于块的处理器中的跳转目标 | |
US10180840B2 (en) | Dynamic generation of null instructions | |
US10061584B2 (en) | Store nullification in the target field | |
US10031756B2 (en) | Multi-nullification |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1246442 Country of ref document: HK |
|
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20180316 |
|
WW01 | Invention patent application withdrawn after publication |