CN107810477B - 解码的指令的重复使用 - Google Patents
解码的指令的重复使用 Download PDFInfo
- Publication number
- CN107810477B CN107810477B CN201680037476.XA CN201680037476A CN107810477B CN 107810477 B CN107810477 B CN 107810477B CN 201680037476 A CN201680037476 A CN 201680037476A CN 107810477 B CN107810477 B CN 107810477B
- Authority
- CN
- China
- Prior art keywords
- instruction
- block
- processor
- core
- blocks
- 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 50
- 238000013507 mapping Methods 0.000 claims abstract description 45
- 238000011010 flushing procedure Methods 0.000 claims description 7
- 230000003111 delayed effect Effects 0.000 claims description 5
- 238000005516 engineering process Methods 0.000 abstract description 41
- 230000015654 memory Effects 0.000 description 81
- 238000012545 processing Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 19
- 238000004891 communication Methods 0.000 description 17
- 239000000872 buffer Substances 0.000 description 10
- 230000001976 improved effect Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 5
- 230000007704 transition Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 239000000835 fiber Substances 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000000306 recurrent effect Effects 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 230000008685 targeting Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- -1 bridges Substances 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change 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
- 230000014509 gene expression Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003863 physical function Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000005381 potential energy Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000008093 supporting 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/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/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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/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
- G06F9/3891—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 organised in groups of units sharing resources, e.g. clusters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- 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/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开了用于重复使用基于块的处理器架构中的提取的和解码的指令的系统和方法。在所公开的技术的一个示例中,一种系统包括多个基于块的处理器核心和指令调度器。相应的核心能够运行程序的一个或多个指令块。指令调度器能够被配置为标识驻留在处理器核心中的第一处理器核心上并且要被再次运行的程序的给定指令块。指令调度器能够被配置为在运行中调整指令块的映射,使得在没有重新提取给定指令块的情况下,给定指令块被重新运行在第一处理器核心上。
Description
背景技术
由于摩尔定律所预测的持续晶体管扩展,微处理器已经受益于晶体管数、集成电路成本、制造资本、时钟频率以及能量效率上的持续获益,而相关联的处理器指令集架构(ISA)几乎没有变化。然而,在过去40年内驱动半导体工业的由光刻扩展实现的益处缓慢或甚至倒退。多个年来,精简指令集计算(RISC)架构已经成为处理器设计中的主导规范。无序超标量实现尚未呈现面积或性能上的持续改进。因此,存在改进处理器ISA以扩展性能改进的充分机会。
发明内容
公开了用于重复使用基于块的处理器的指令集架构(BB-ISA)中的解码的指令的方法、装置以及计算机可读存储设备。所描述的技术和工具能够潜在地改进处理器性能,并且能够彼此独立地或以各种组合进行实现。如下面将更完整地描述的,所描述的技术和工具能够被实现在数字信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,使用可重配置逻辑实现在现场可编程门阵列(FPGA)中的微处理器核心)、可编程逻辑、或其他适合的逻辑电路中。如对于本领域技术人员将显而易见的,所公开的技术能够被实现在各种计算平台中,各种计算平台包括但不限于:服务器、大型机、蜂窝电话、智能电话、PDA、手持设备、手持计算机、触摸屏平板设备、平板计算机、可穿戴计算机、以及膝上型计算机。
在所公开的技术的一些示例中,一种系统包括多个基于块的处理器核心和指令调度器。相应的核心能够运行程序的一个或多个指令块。指令调度器能够被配置为标识驻留在处理器核心中的第一处理器核心上并且要被再次运行的程序的给定指令块。指令调度器能够被配置为在运行中调整指令块的映射,使得在没有重新提取给定指令块的情况下,给定指令块被重新运行在第一处理器核心上。
提供本发明内容从而以简化的形式介绍下面在具体实施方式中进一步描述的概念的选择。本发明内容不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用于限制要求保护的主题的范围。所公开的主题的前述和其他目标、特征和优点将从参考附图进行的以下详细描述变得更加明显。
附图说明
图1图示了能够在所公开的技术的一些示例中使用的包括多个处理器核心的基于块的处理器。
图2图示了能够在所公开的技术的一些示例中使用的基于块的处理器核心。
图3图示了根据所公开的某些示例的多个指令块。
图4图示了源代码的部分及其相应指令块。
图5图示了能够在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6是图示基于块的处理器的处理核心的状态的进展的示例的流程图。
图7是图示能够在所公开的技术的一些示例中使用的基于块的处理器和存储器的示图。
图8是图示能够在所公开的技术的一些示例中使用的指令块到基于块的处理器的处理器核心的不同映射的示图。
图9-10是图示能够在所公开的技术的一些示例中执行的的重复使用解码的指令的示例方法的流程图。
图11是图示了用于实现所公开的技术的一些实施例的适合的计算环境的框图。
具体实施方式
I.一般考虑
本公开内容在代表性实施例的背景下进行阐述,代表性实施例无论如何不旨在为限制性的。
如在本申请中所使用的,单数形式的“一”、“一种”和“所述”包括复数形式,除非上下文另外清楚指示。附加地,术语“包括”意指“包含”。另外,术语“耦合”包含以机械、电、磁、光、以及其他实际方式将各项耦合或链接在一起,并且不排除耦合的项之间的中间元件的存在。另外,如本文中所使用的,术语“和/或”意指短语中的任何一个项或各项的组合。
在此所描述的系统、方法和装置无论如何不应当被理解为限制性的。相反,本公开内容是针对各种所公开的实施例的所有新颖的和非显而易见的特征和方面,不管是单独的还是以彼此的各种组合及子组合的。所公开的系统、方法和装置不受限于任何具体方面或者这些方面的特征或者组合,所公开的内容和方法也不要求任何一个或多个具体优点要存在或者问题被解决。另外,所公开的实施例的任何特征和方面能够以彼此的各种组合及子组合进行使用。
虽然为了便于演示,所公开的方法中的一些方法的操作是以特定的顺序次序被描述,但是应当理解,这种描述方式涵盖重新安排,除非通过在下面阐明的具体语言来要求特定的排序。例如,顺序地描述的操作可以在一些情况下被重新安排或者被同时执行。而且,出于简洁的目的,附图可能没有示出所公开的内容和方法可以与其它内容和方法协同使用的各种方式。附加地,本说明书有时使用如“产生”、“生成”、“显示”、“接收”、“发射”、“验证”、“运行”和“启动”的术语来描述所公开的方法。这些术语是被执行的实际操作的高层描述。对应于这些术语的实际操作将取决于特定实施方式而变化,并且可容易地由本领域普通技术人员辨别。
在此参考本公开内容的装置或方法呈现的操作理论、科学原理或其他理论描述已经出于更好地理解的目的而被提供,并且不旨在范围上进行限制。所附的权利要求书中的方法和装置不限于以通过这种操作理论描述的方式工作的那些装置和方法。
所公开的方法中的任何方法可以被实现为被存储在一个或者多个计算机可读存储介质(例如,计算机可读介质,诸如一个或者多个光学介质盘、易失性存储部件(诸如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包括允许在不使用(一个或多个)寄存器文件和/或处理器100的情况下在存储器中传递数据块的直接存储器访问(DMA)控制器。在一些示例中,存储器接口管理虚拟存储器的分配,扩展可用的主存储器155。
I/O接口145包括用于从其他部件接收和发送到其他部件的输入和输出信号的电路,输入和输出信号例如为硬件中断、系统控制信号、外围接口、共处理器控制和/或数据信号(例如,用于图形处理单元、浮点共处理器、物理处理单元、数字信号处理器、或其他共处理部件的信号)、时钟信号、信号量或其他适合的I/O信号。I/O信号可以是同步的或异步的。在一些示例中,使用结合存储器接口140的存储器映射的I/O技术来实现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还能够处理硬件中断、以及控制特殊系统寄存器的读和写,例如被存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的其他示例中,控制单元250和/或指令调度器206使用非基于块的处理核心(例如,耦合到存储器的通用RISC处理核心)被实现。在一些示例中,控制单元250和/或指令调度器206至少部分地使用以下中的一个或多个被实现:硬接线有限状态机、可编程微代码、可编程门阵列、或其他适合的控制电路。
示例处理器核心111包括两个指令窗口210和211,其中的每个能够被配置为运行指令块。在所公开的技术的一些示例中,指令块是包括指令块头部和多个的一个或多个指令的基于块的处理器指令的原子集合。如下面将进一步讨论的,指令块头部包括能够用于进一步定义指令块内的多个指令中的一个或多个指令的语义的信息。取决于所使用的特定ISA和处理器硬件,指令块头部可以在执行的运行期间被使用,并且以通过以下改善运行指令块的性能:例如允许指令和/或数据、改进的分支预测、推测执行、改进的能效、改进的代码紧密度的较早提取。在其他实施例中,指令窗口的不同数目是可能的,例如一个、四个、八个或其他数目的指令窗口。
指令窗口210和211中的每个能够从输入端口220、221和222中的一个或多个接收指令和数据,输入端口220、221和222连接到互连总线和指令高速缓存227,其继而连接到指令解码器228和229。还能够在附加的输入端口225上接收附加的控制信号。指令解码器228和229中的每个解码器解码针对指令块的指令头部和/或指令,并且将解码的指令存储在位于每个相应指令窗口210和211中的存储器存储215和216内。
处理器核心111还包括耦合到LI(层一)高速缓存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到相应指令窗口中的每个的分配。
如图2中所示出的,具有多个运行管线寄存器255的第一路由器250用于将数据从指令窗口210和211中的任一个发送到功能单元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中示出的部件,而是能够根据特定应用的要求而变化。例如,核心可以具有更少或更多的指令窗口,单个指令解码器可以由两个或更多个指令窗口共享,并且使用的功能单元的数目和类型能够取决于针对基于块的处理器的特定目标应用而变化。在利用指令核心选择和分配资源中应用的其他考虑包括性能要求、能量使用要求、集成电路管芯、处理技术、和/或成本。
对相关领域普通技术人员将容易显而易见的是,能够通过处理器核心110的指令窗口(例如,指令窗口210)和控制逻辑205内的资源的设计和分配来在处理器性能中做出权衡。面积、时钟周期、能力和限制基本上确定个体核心110的实现性能和基于块的处理器110的吞吐量。
指令调度器206能够具有各种各样的功能。在某些较高性能示例中,指令调度器是高度并发的。例如,每个循环,(一个或多个)解码器将写指令的解码就绪状态和解码的指令写入到一个或多个指令窗口中,选择要发出的下一指令,并且作为响应后端发送就绪事件,无论是瞄准特定指令的输入槽(谓词、左操作数、右操作数,等等)的目标就绪事件还是瞄准所有指令的广播就绪事件。每个指令就绪状态比特与解码就绪状态一起能够用于确定指令就绪发出。
在一些示例中,指令调度器206使用存储指示用于根据所公开的技术调度指令块的运行的信息的数据的存储装置(例如,先进先出(FIFO)队列,内容可寻址的存储器(CAM))来实现。例如,关于指令依赖性、控制的传递、推测、分支预测、和/或数据加载和存储的数据被布置在存储装置中,以促进在将指令块映射到处理器核心中的确定。例如,指令块依赖性能够与存储在FIFO或CAM中的标签相关联,并且稍后由用于将指令块映射到一个或多个处理器核心的选择逻辑来访问。在一些示例中,指令调度器206使用耦合到存储器的通用处理器来实现,存储器被配置为存储数据以用于调度指令块。在一些示例中,指令调度器206使用专用处理器或者使用耦合到存储器的基于块的处理器核心来实现。在一些示例中,指令调度器206被实现为耦合到存储器的有限状态机。在一些示例中,运行在处理器(例如,通用处理器或基于块的处理器核心)上的操作系统生成能够至少部分地用于利用指令调度器206调度指令块的优先级、预测和其他数据。如对相关领域普通技术人员将容易显而易见的,被实现在集成电路、可编程逻辑或其他适合的逻辑中的其他电路结构能够用于实现针对指令调度器206的硬件。
在一些情况下,调度器206接受针对尚未被解码的目标指令的事件,并且还必须抑制发出的就绪指令的重新发出。指令能够是非谓词的或谓词的(基于真或假条件)。谓词指令不会变成就绪直到其由另一指令的谓词结果瞄准,并且该结果与谓词条件匹配。如果相关联的谓词不匹配,则指令决不会发出。在一些示例中,谓词指令可以被推测地发出和运行。在一些示例中,处理器可以随后检查推测地发出,并且运行的指令被正确地推测。在一些示例中,误推测发出的指令和块中的消耗其输出的指令的特定传递闭包可以被重新运行、或误推测副作用废除。在一些示例中,误推测指令的发现导致完全回滚和整个指令块的重新运行。
V.指令块的示例流
现在转到图3的图300,图示了包括多个可变长度指令块311-315(A-E)的基于块的指令的流的部分310。指令的流能够用于实现用户应用、系统服务、或任何其他适合的使用。在图3中示出的示例中,每个指令块以指令头部开始,指令头部跟随有不同数目的指令。例如,指令块311包括头部320和二十条指令321。图示的特定指令头部320包括部分地控制指令块内的指令的运行并且还允许改进的性能增强技术的多个数据字段,改进的性能增强技术包括例如分支预测、推测运行、惰性计算和/或其他技术。指令头部320还包括指示头部为指令头部而不是指令的ID比特。指令头部320还包括指令块大小的指示。指令块大小能够处于比一大的块的指令中,例如,包含在指令块内的4个指令块的数目。换言之,块的大小被移位4个比特,以便压缩被分配以规定指令块大小的头部空间。因此,0的大小值指示最小大小的指令块,其为由四条指令跟随的块头部。在一些示例中,指令块大小被表示为多个字节、多个字、多个n字块、地址、地址偏移、或者使用其他适合的表述来描述指令块的大小。在一些示例中,指令块大小由指令块头部和/或页脚中的终止比特样式来指示。
指令块头部320还能够包括运行标记,其指示特殊指令运行要求。例如,取决于特定应用,分支预测或存储器依赖性预测能够针对某些指令块被抑制。
在所公开的技术的一些示例中,指令头部320包括指示编码的数据为指令头部的一个或多个标识比特。例如,在一些基于块的处理器ISA中,最小有效位空间中的单个ID比特总是被设置为二进制值1以指示有效指令块的开始。在其他示例中,不同比特编码能够用于(一个或多个)标识比特。在一些示例中,指令头部320包括指示相关联的指令块被编码所针对的ISA的特定版本的信息。
块指令头部还能够包括用于在例如分支预测、控制流确定、和/或坏跳检测中使用的多个块退出类型。退出类型能够指示分支指令的类型是什么,例如:顺序分支指令,其指向存储器中的下一连续指令块;偏移指令,其分支到在相对于偏移计算的存储器地址处的另一指令块;子例程调用或子例程返回。通过在指令头部中编码分支退出类型,分支预测期能够至少部分地在相同指令块内的分支指令已经被提取和/或解码之前开始操作。
指令块头部320还包括标识被分配给存储操作的加载存储队列标识符的存储掩码。指令块头部还能够包括写掩码,其标识相关联的指令块将写入哪个(哪些)全局寄存器。相关联的寄存器文件必须在指令块能够完成之前接收对每个条目的写入。在一些示例中,基于块的处理器架构不仅能够包括标量指令,而且包括单指令多数据(SEVID)指令,其允许利用单个指令内的较大数目的数据操作数的操作。
VI.示例块指令目标编码
图4是描绘了C语言源代码和它们相应指令块420和425(以汇编语言)的两个部分410和415的示例的示图400,其图示了基于块的指令如何能够显式地编码它们的目标。高级C语言源代码能够通过编译器被转换成低级汇编语言和机器代码,编译器的目标为基于块的处理器。高级语言能够为出自底层计算机架构的细节中的多个进行抽象,使得程序员能够关注于程序的功能。相比,机器代码根据目标计算机的ISA来编码程序,使得其能够使用计算机的硬件资源被运行在目标计算机上。汇编语言是机器代码的人类可读形式。
在该示例中,头部两个READ(读)指令430和431分别瞄准ADD(加)指令432的右(T[2R])操作数和左(T[2L])操作数。在图示的ISA中,读指令是从全局寄存器文件(例如,寄存器文件160)读取的独特指令;然而任何指令能够瞄准全局寄存器文件。当ADD指令432接收两个寄存器读取的结果时,其将变成就绪且运行。
当TLEI(测试小于等于立即)指令433从ADD接收其单个输入操作数时,其将变成就绪且运行。测试然后产生谓词操作数,其在信道一(B[1P])上被广播到监听广播信道的所有指令,其在该示例中为两个预测的分支指令(BRO T 434和BRO F 435)。接收匹配谓词的分支将开始。
还图示了针对指令块420的依赖图440,如指令节点的阵列450以及它们对应的操作数目标455和456。这图示了块指令420之间的对应关系、对应的指令窗口条目、以及由指令表示的底层数据流程图。这里解码的指令READ 430和READ 431容易发出,因为它们不具有输入依赖性。当它们发出并运行时,从寄存器R6和R7读取的值被写入到ADD 432的左操作数缓冲器和右操作数缓冲器中,将ADD 432的左操作数和右操作数标记为“就绪”。作为结果,ADD 432指令变成就绪,向ALU发出,运行,并且加和被写入到TLEI 433的左操作数。
作为比较,传统的无序RISC或CISC处理器将在运行时动态地构建依赖图,使用额外的硬件复杂性、功率、面积并且减少时钟频率和性能。然而,依赖图在编译时是静态已知的,并且EDGE编译器能够通过ISA直接编码指令之间的生产者消费者关系,动态地使微架构免于重新发现它们。这能够潜在地实现更简单的微架构,减少面积、功率并且提升频率和性能。
VII.示例基于块的指令格式
图5是图示了针对指令头部510、通用指令520和分支指令530的指令格式的一般示例的示图。指令头部或指令中的每个根据比特的数目被标记。例如,指令头部510包括四个32比特字并且从其最低有效位(lsb)(比特0)直到其最高有效位(msb)(比特127)被标记。如所示出的,指令头部包括写掩码字段、存储掩码字段、多个退出类型字段、多个运行标记字段、指令块大小字段以及指令头部ID比特(指令头部的最低有效位)。
退出类型字段包括能够用于指示编码在指令块内的控制流指令的类型。例如,退出类型字段能够指示指令块包括以下中的一个或多个:顺序分支指令、偏移分支指令、间接分支指令、调用指令、和/或返回指令。在一些示例中,分支指令能够为用于在指令块之间传递控制流(包括相对地址和/或绝对地址)以及使用条件谓词或无条件谓词的任何控制流指令。除了确定隐式控制流指令,退出类型字段还能够用于分支预测和推测运行。在一些示例中,高达六个退出类型能够被编码在退出类型字段中,并且字段与对应的显式或隐式控制流指令之间的对应关系能够通过例如检查指令块中的控制流指令而被确定。
图示的通用块指令520被存储为一个32比特字并且包括操作码字段、谓词字段、广播ID字段(BID)、第一目标字段(Tl)以及第二目标字段(T2)。对于具有比目标字段更多的消费者的指令,编译器能够使用移动指令来建立扇出树,或者其能够将高扇出指令分配到广播。广播支持将操作码通过轻量级网络发送到核心中的任何数目的消费者指令。广播标识符能够被编码在通用块指令520中。
尽管由通用指令520概述的通用指令格式能够表示由基于块的处理器处理的一些或全部指令,但是本领域技术人员将容易理解,即使对于ISA的特定示例,指令字段中的一个或多个可以偏离针对特定指令的通用格式。操作码字段规定由指令520执行的(一个或多个)操作,例如存储器读/写、寄存器加载/存储、加、减、乘、除、移位、旋转、系统操作、或其他适合的指令。谓词字段规定指令将运行的条件。例如,谓词字段能够规定值“真”,并且指令将仅仅在对应的条件标记与指定谓词值匹配时运行。在一些示例中,谓词字段至少部分地规定哪个用于比较谓词,而在其他示例中,在由先前指令(例如,指令块中的前一指令)设置的标记上预测运行。在一些示例中,谓词字段能够规定指令将总是或决不被运行。因此,对谓词字段的使用能够通过减少分支指令的数目来允许更密集的目标代码、改进的能量效率和改进的处理器性能。
目标字段Tl和T2规定基于块的指令的结果被发送到其的指令。例如,在指令槽5处的ADD指令能够规定其计算的结果将被发送到在槽3和10处的指令。取决于特定指令和ISA,图示的目标字段中的一个或两者能够由其他信息替换,例如,第一目标字段T1能够由立即操作数、附加操作码、规定两个目标等替换。
分支指令530包括操作码字段、谓词字段、广播ID字段(BID)、以及偏移字段。操作码字段和谓词字段在格式与功能上与关于通用指令所描述的类似。偏移能够被表示在四个指令的单元中,因此扩展分支能够被运行在其上的存储器地址范围。利用通用指令520和分支指令530示出的谓词能够用于避免指令块内的额外分支。例如,特定指令的运行能够在先前指令(例如,两个操作数的比较)的结果上被预测。如果谓词为假,则指令将不提交由特定指令计算的值。如果谓词值不与要求的谓词匹配,则指令不发出。例如,BRO_F(谓词假)指令将在其发送假谓词值时发出。
应当容易理解,如本文中所使用的,术语“分支指令”不限于改变到相对存储器位置的程序运行,而且包括跳到绝对或象征性存储器位置、子例程调用和返回以及能够修改运行流程的其他指令。在一些示例中,运行流程通过改变系统寄存器(例如,程序计数器PC或指令指针)的值被修改,而在其他示例中,运行流程能够通过修改存储在存储器中的指定位置处的值被改变。在一些示例中,跳寄存器分支指令用于跳到存储在寄存器中的存储器位置。在一些示例中,子例程调用和返回分别使用跳和链接和跳寄存器指令进行实现。
VIII.处理器核心的示例状态
图6是图示了基于块的计算机的处理核心的进展的状态600的示例的流程图。基于块的计算机包括共同地用于运行或执行软件程序的多个处理器核心。程序能够以各种高级语言来编写并且然后使用瞄准基于块的处理器的编译器针对基于块的处理器进行编译。编译器能够发出当在基于块的处理器上运行或执行时将执行由高级程序规定的功能的代码。编译器代码能够被存储在能够由基于块的处理器访问的计算机可读存储器中。编译器代码能够包括被分组成一系列指令块的流。在运行期间,指令块中的一个或多个能够由基于块的处理器运行以执行程序的功能。通常,程序将包括能够在任何一个时间在核心上运行的更多的指令块。因此,程序的块被映射到相应核心,核心执行由块规定的工作,并且然后相应核心上的块利用不同块来替换直到程序完成。指令块中的一些可以被运行多于一次,例如在程序的循环或子例程期间。指令块的“实例”能够在每次指令块将被运行时被创建。因此,指令块的每次重复能够使用指令块的不同实例。当程序运行时,相应指令块能够基于架构约束、可用硬件资源以及动态程序流程而被映射到处理器核心并且在处理器核心上运行。在程序的运行期间,相应处理器核心能够在进展状态600中转变,使得一个核心能够处于一种状态中而另一核心能够处于不同的状态中。
在605,相应处理器核心的状态能够是非映射的。非映射的处理器核心是当前未被分配以运行指令块的实例的核心。例如,处理器核心能够在程序开始在基于块的计算机上运行之前是非映射的。作为另一示例,处理器核心能够在程序开始运行但是不是所有的核心都被使用之后是非映射的。具体地,程序的指令块至少部分地根据动态程序流程来运行。程序的一些部分可以总体上连续地或顺序地流动,例如当较晚指令块取决于来自较早指令块的结果时。程序的其他部分可以具有较并行的流程,例如当多个指令块能够同时运行而不使用并行运行的其他块的结果时。更少的核心能够用于在程序的较顺序流期间运行程序,并且更多的核心能够用于在程序的较并行流期间运行程序。
在610,相应处理器核心的状态能够是映射的。映射的处理器核心是当前被分配以运行指令块的实例的核心。当指令块被映射到特定处理器核心时,指令块在运行中。运行中的指令块是被瞄准到基于块的处理器的特定核心的块,并且块将推测地或非推测地运行或者运行在特定处理器核心上。具体地,运行中的指令块对应于被映射到处于610-650中的处理器核心的指令块。当已知在块的映射期间程序将使用通过运行指令块提供的工作时,块非推测地运行。当不知在映射期间程序是否将使用通过运行指令块提供的工作时,块推测地运行。推测地运行能够潜在地提高性能,例如当推测块比在已知块的工作将被使用之后或时块要被开始时更早地开始时。然而,推测地运行能够潜在地增大在运行程序时使用的能量,例如当推测工作不由程序使用时。
基于块的处理器包括有限数目的同质或异质处理器核心。常见的程序能够包括比能够适配到处理器核心上指令块更多的指令块。因此,程序的相应指令块一般将与程序的其他指令块共享处理器核心。换言之,给定核心可以在程序的运行期间运行若干不同指令块的指令。具有有限数目的处理器核心还意味着程序的运行可能在所有处理器核心忙于运行指令块并且没有新核心可用于派遣时停止或被延迟。当处理器核心变得可用时,指令块的实例能够被映射到处理器核心。
指令块调度器能够分配哪个指令块将运行在哪个处理器核心上并且指令块何时将被运行。映射能够基于各种因素,诸如要用于运行的目标能量、处理器核心的数目和配置、处理器核心的当前使用和/或先前使用、动态程序流程、推测运行是否要被启用、推测块将被运行的置信度水平、以及其他因素。指令块的实例能够被映射到当前可用的处理器核心(诸如当没有指令块当前在其上运行时)。在一个实施例中,指令块的实例能够被映射到当前忙碌的处理器核心(诸如当核心运行指令块的不同实例时)并且较晚映射的示例能够在较早映射的实例完成时开始。
在620处,相应处理器核心的状态能够为提取。例如,在提取状态期间处理器核心的IF管线阶段能够是活动的。正被提取的指令块是正从存储器(例如,LI高速缓存、L2高速缓存、或主存储器)传递到处理器核心的块。例如,指令块的指令能够被加载到处理器核心的缓冲器或寄存器中。提取状态能够为多个循环长,并且当处理器核心为管线型时能够与解码(630)和运行(640)状态交叠。当指令块的指令被加载到处理器核心上时,指令块驻留在处理器核心上。当指令块的一些但不是全部指令被加载时,指令块部分地驻留。当指令块的全部指令被加载时,指令块完全驻留。指令块将驻留在处理器核心上,直到处理器核心被重置或者不同的指令块被提取到处理器核心上。具体地,当核心处于状态620-670中时,指令块驻留在处理器核心中。
在630处,相应处理器核心的状态能够是解码。例如,在提取状态期间处理器核心的DC管线阶段能够是活动的。在解码状态期间,指令块的指令被解码使得它们能够被存储在处理器核心的指令窗口的存储器存储中。具体地,指令能够从相对紧凑的机器代码转变为能够用于控制处理器核心的硬件资源的较不紧凑的表示。解码状态能够为多个循环长,并且当处理器核心为管线型时能够与提取(620)和运行(640)状态交叠。在指令块的指令被解码之后,其能够在指令的所有依赖性被满足时被运行。
在640处,相应处理器核心的状态能够是运行。在运行状态期间,指令块的指令被运行。具体地,在运行状态期间,处理器核心的EX和/或LS管线阶段能够是活动的。指令块能够推测地或非推测地运行。推测块能够运行以完成或者其能够在完成之前被终止,例如当确定由推测块执行的工作将不被使用时。当指令块被终止时,处理器能够转变到中止状态。例如,推测块能够在确定块的工作将被使用、所有寄存器写被缓冲、到存储器的所有写被缓冲、以及分支目标被计算时完成。例如,非推测块能够运行以在所有寄存器写被缓冲、到存储器的所有写被缓冲、以及分支目标被计算时完成。运行状态能够多个循环长,并且当处理器核心为管线型时能够与提取(620)和解码(630)状态交叠。当指令块完成时,处理器能够转变到提交状态。
在650处,相应处理器核心的状态能够为提交或中止。在提交期间,指令块的指令的工作能够被原子地提交,使得其他块能够使用指令的工作。具体地,提交状态能够包括提交阶段,其中本地缓冲的架构状态被写入到对其他处理器核心可见或可由其他处理器核心访问的架构状态。当可见架构状态被更新时,提交信号能够被发出并且处理器核心能够被释放,使得另一指令块能够被运行在处理器核心上。在中止状态期间,核心的管线能够被停止以减少动态功率消耗。在一些应用中,核心能够被功率门控以减少静态功率消耗。在提交/中止状态的结尾,处理器核心能够接收要被运行在处理器核心上的新指令块,核心能够被刷新,核心能够被使得空闲,或者核心能够被重置。
在660处,能够确定驻留在处理器核心上的指令块是否能够被刷新。如本文中所使用的,指令块刷新或处理器核心刷新意味着使得处理器核心能够重新运行驻留在处理器核心上的一个或多个指令块。在一个实施例中,刷新核心能够包括重置针对一个或多个指令块的活动就绪状态。当指令块为循环的部分或者重复子例程时或者当推测块被终止并且要被重新运行时,可能期望在相同的处理器核心上重新运行指令块。要刷新的决定能够由处理器核心本身(连续重复使用)或由处理器核心的外部(非连续重复使用)做出。例如,要刷新的决定能够来自执行指令块调度的另一处理器核心或控制核心。与在不同的核心上运行指令块相比,当在已经运行了指令的核心上刷新指令块时能够存在潜在的能量节省。能量用于提取和解码指令块的指令,但是刷新块能够通过绕开这些状态节省在提取和解码状态中使用的大多数能量。具体地,刷新块能够在运行状态(640)处重新开始,这是因为指令已经由核心提取和解码。当块被刷新时,解码的指令和解码的就绪状态能够在活动就绪状态被清除时被维持。要刷新指令块的判定能够作为提交操作的一部分或者在稍后的时间而发生。如果指令块不被刷新,则能够使处理器核心空闲。
在670,相应处理器核心的状态能够是空闲的。基于块的处理器的性能和功率消耗能够潜在地基于在给定时间处活动的处理器核心的数目而被调整或权衡。例如,在同时运行的核心上执行推测工作可以提高计算速度但是在推测误预测率高时增大功率。作为另一示例,在提交或中止较早运行的指令块之后立即将新指令块分配到处理器可以增加同时运行的处理器的数目,但是可能减少重复使用驻留在处理器核心上的指令块的机会。重复使用可以在空闲处理器核心的高速缓存或池被维持时增大。例如,当处理器核心提交常用的指令块时,处理器核心能够被放置在空闲池中,使得核心能够在下次要运行相同指令块时被刷新。如以上所描述的,刷新处理器核心能够节省用于提取和解码驻留指令块的时间和能量。用于放置空闲高速缓存的指令块/处理器核心能够基于由编译器执行的静态分析或由指令块调度器执行的动态分析而被确定。例如,指示指令块的潜在重复使用的编译器提示能够被放置在块的头部中,并且指令块调度器能够使用提示以确定是否将在提交指令块之后将块空闲或重新分配到不同的指令块。例如,当空闲时,处理器核心能够被放置在低功率状态中以减少动态功率消耗。
在680处,能够确定驻留在空闲处理器核心上的指令块是否能够被刷新。如果核心要被刷新,则块刷新信号能够被断定并且核心能够转换到运行状态(640)。如果核心不将要被刷新,则块重置信号能够被断定并且核心能够转换到未被映射的状态(605)。当核心被重置时,核心能够与其他未映射的核心一起被放入池中使得指令块调度器能够将新指令块分配到核心。
IX.在运行期间的基于块的处理器的示例
图7是图示基于块的处理器700和存储器710的示例的示图。基于块的处理器700能够包括用于运行被存储在存储器710中的指令块715(例如,指令块A-E)的多个同质或异质处理器核心705(例如,核心0-核心N)。基于块的处理器700能够包括具有用于调度处理器核心705上的指令块715的指令块调度器725的控制单元720。在一些实施例中,控制单元720能够至少部分地使用以下中的一个或多个被实现:硬接线有限状态机、可编程微代码、可编程门阵列、或其他适合的控制电路。在一个实施例中,控制单元720能够是运行执行基于块的处理器700的控制功能(例如指令块调度)的指令块的处理器核心705中的一个。在另一实施例中,外部指令块调度器730(例如,运行调度代码的片上或片外处理器)能够用于调度处理器核心705上的指令块。
存储器710由基于块的处理器700可读和可写。例如,存储器710能够包括基于块的处理器700上的嵌入式存储器、级别1(LI)高速缓存、L2高速缓存、主存储器以及次级存储装置。存储器710能够包括包含要被运行在基于块的处理器700上的指令块715、程序数据(未示出)、用于管理基于块的处理器700的硬件资源的数据结构的一个或多个程序。例如,被存储在存储器710中的数据结构能够包括存储到指令块的开始地址的指令块地址表740、存储指令块到处理器核心的映射的指令块映射表750、可用于运行指令块的处理器的空闲池(未示出)、具有驻留指令块的空闲处理器核心的可重复使用池(未示出)、以及其他数据结构。指令块调度器725能够在确定哪些指令块能够被调度或分配到哪些处理器核心705时引用和操纵这些数据结构。
指令块调度器725(或730)能够分配处理器核心705,使得一个或多个程序能够运行在基于块的处理器700上。例如,指令块调度器725能够将程序的指令块分配到处理器核心705中的空闲的一个或多个。作为具体示例,短程序能够包括指令块A–E。程序的程序结构或数据流程图760示出了程序以指令块A开始,无条件地分支到指令块B,其无条件地分支到指令块C,其无条件地分支到指令块D,其能够循环回到指令块B或者分支到指令块E。如图7中所示出的,指令块调度器725已经分配了两个处理器核心以运行指令块A–D。具体地,处理器核心0被分配用于块A和B(块A和B驻留在核心0上),并且处理器核心1被分配用于块C和D(块C和D驻留在核心1上)。在该示例中,多个指令块能够被调度到给定处理器核心。例如,处理器核心可以具有针对高达128个解码的指令的存储,其能够进一步被分成具有针对高达128个解码的指令的存储的指令块槽或指令窗口。因此,给定处理器核心可以从一个指令块到四个指令块顺序地或同时地运行。可以期望将指令块打包到更少的处理器核心中,使得一次更多的指令块能够被加载并运行在基于块的处理器700上。
指令块调度器725能够分配处理器核心705使得一些或所有重复的或复发的指令块(例如块BCD)在多次迭代内保持驻留在处理器核心上,并且那些处理器核心可以被刷新使得指令块中的至少一些不被重新提取和重新解码。判断指令块是否为复发的一部分以及其对应的处理器是否能够被刷新能够在编译时或在运行时被确定。在一些情况下,能够已知从D到B的分支是否将基于在编译时执行的程序代码的静态分析而被采取。例如,块BCD能够处于具有固定数目的迭代的循环内。在其他情况下,仅仅能够已知从D到B的分支是否将基于在运行时执行的程序代码的动态分析而被采用。例如,块BCD能够处于可以取决于当程序运行时计算和/或输入的数据而重复的代码段内。换言之,块D的分支目标可能仅在运行块D期间分支目标由核心1计算之后是已知的。
编译器能够检测BCD的复发可能发生并且编译器能够在指令块头部中的一个或多个内(例如,指令块B的头部中)编码给指令块调度器725的提示。例如,编译器提示能够包括控制流信息,例如复发的开始,迭代的数目是否是已知的,固定数目的迭代,复发是否将发生的预测,复发中的指令块的数目,复发的结束块,以及关于复发的其他信息。附加地或备选地,指令块调度器725和/或处理器核心705能够动态地分析程序以补充或取代关于复发的信息。
当检测到复发或潜在复发时,指令块调度器725能够反转具有复发指令块驻留的处理器核心中的一个或多个。作为具体示例,指令块E能够被分配到核心2而非核心0。如果块E被分配到核心0,则解码的块A和B将被重写,并且在块E被分配到核心0之后从D到B的分支被采用时,块B将需要在不同的核心上被重新提取和重新解码。反转核心的一个示例方法能够通过将优先级分配到核心来完成。要被调度的不与当前驻留在核心上的块中的任何匹配的块能够被分配到具有较高优先级的核心,而不是具有较低优先级的核心。不具有驻留指令块的核心能够具有最高优先级,并且具有含有复发的高概率的指令块的核心能够具有最低优先级。反转核心的另一示例方法能够通过维持驻留在空闲处理器核心上的指令块的高速缓存来完成。高速缓存的核心能够被保持在池外以将新核心分配到指令块,除非要被调度的指令块与驻留在空闲核心上的指令块匹配。有可能复发的指令块(以及它们对应的核心)能够被放置在高速缓存中。当高速缓存满时,高速缓存的重新放置策略能够为最近最少使用的、随机的、最不可能复发的、或被设计为提高核心的重复使用的另一策略。
指令块调度器725能够使用各种技术来在指令块被重复时提高处理器核心的重复使用。所使用的技术能够基于各种因素,例如当复发被检测到时,处理器核心的能力、指令块调度器的能力、核心内的指令块的对齐、预测数目的迭代、以及其他因素。用于提高处理器核心上的驻留指令块的重复使用的技术能够包括:等待复发指令块在将复发指令块分配到另一处理器核心之前完成;延迟一个或多个推测指令块的分配;利用驻留复发指令块跳过处理器核心的指令窗口;复制处理器核心内的指令块状态;共享或引用处理器核心内的指令块状态;将复发指令块的一部分重新映射到一个或多个不同的处理器核心;对齐处理器核心内的复发指令块;以及展开处理器核心内的复发指令块。用于提高处理器核心上的驻留指令块的重复使用的技术能够被组合,使得多种技术能够由指令块调度器725和/或处理器核心705来使用。
指令块调度器725能够等待复发指令块的较早实例完成,而不是将复发指令块的较晚实例分配到另一处理器核心。换言之,复发指令块的较晚实例能够被调度以在当前运行指令块的较早实例的相同处理器上运行。当块的较早实例的运行完成时,能够刷新处理器。因此,较晚实例能够与较早实例运行在相同的处理器上。作为具体示例,如果调度器725确定块B要在块B的较早实例完成运行之前被重复,则调度器725能够等待块B的较早实例在刷新块B之前完成,使得块B的较晚实例能够运行在运行块B的较早实例的相同的处理器上。
指令块调度器725能够限制或延迟一个或多个推测指令块的分配,使得驻留指令块能够潜在地被重复使用。例如,在给定基于块的处理器上存在固定数目的处理器核心。分配核心以推测地运行指令块可以重写或驱逐能够潜在地被重新运行的指令块。作为一个示例,调度器725能够在被推测地运行的块的数目上设置最大限制,使得非推测驻留的指令块可以在被重写之前具有较长寿命。作为另一示例,调度器725能够等待分配推测指令块,直到已知指令块将被使用。所有推测指令块的分配能够被延迟,或者具有被采取的低概率的推测指令块能够被延迟(诸如通过设置要被分配的阈值概率)。
处理器核心705能够通过利用驻留复发指令块跳过处理器核心的指令窗口来实现重复使用。作为具体示例,块A能够被分配到核心0、窗口0;块B能够被分配到核心0、窗口1;块C能够被分配到核心1、窗口0;块D能够被分配到核心1、窗口1。如数据流程图760中所示出的,块BCD能够是复发,使得运行的流程为A、BCD、BCD...核心0包括复发块(块B)和非复发块(块A)。核心705能够被配置为使得程序的运行能够从运行在核心1上的块D的实例流动到运行在核心0上的块B的实例。例如,窗口1能够被刷新,同时窗口0不被刷新。因此,能够跳过对应于非复发块(块A)的指令窗口。
处理器核心705能够通过提供用于复制处理器核心内的指令块状态的能力来实现重复使用。作为具体示例,块A能够被初始地分配到核心0、窗口0;块B能够被初始地分配到核心0、窗口1;块C能够被初始地分配到核心1、窗口0;块D能够被初始地分配到核心1、窗口1。为了执行BCD复发的第二次迭代,复发块(块B)能够被复制到窗口0,其将重写非复发块A。例如,这可能在核心被配置为总是在窗口0处开始运行时是期望的。功率节省可能比在复发块未被复制时较少,但是功率节省可能比在复发块从存储器提取并重新解码时较大。
处理器核心705能够通过共享或参考处理器核心内的指令块状态的能力来实现重复使用。例如,窗口1的解码就绪状态和解码的指令能够在窗口0的活动就绪状态下来使用。因此,复发块B能够表现为处于窗口0中,而不将块B的所有状态从窗口1复制到窗口0。例如,这可能在核心被配置为总是在窗口0处开始运行时是期望的。
图8是图示使用如图7中的相同的示例程序和数据流程图760的指令块到处理器核心的不同映射(810、820、830)的示图。指令块调度器725能够在运行中调整块的数目和块到核心的映射以潜在地使刷新最大化。映射810图示了能够重新映射复发的一个部分同时能够刷新复发的另一部分。映射820图示了调度器725能够初始地分配复发的块使得复发开始或者被对齐在第一核心的窗口0中。映射830图示了调度器725能够在分配期间对齐并展开复发的块以潜在地提高核心的利用率和/或性能。
指令块调度器725能够将复发指令块的一部分重新映射到一个或多个不同的处理器核心,如由示例映射810所示出的。具体地,块A能够被初始地分配到核心0、窗口0;块B能够被初始地分配到核心0、窗口1;块C能够被初始地分配到核心1、窗口0;块D能够被初始地分配到核心1、窗口1。出于各种原因,对于复发BCD的第二次迭代,块B能够被重新映射到核心2、窗口0。例如,复发BCD能够稍后在运行中被检测到,诸如当运行在核心1上的块D计算它回到B的分支目标时。当复发被检测到时,核心0可以已经利用不同块来重写(使得块B不再驻留在核心0中)。当块B将在核心2上被重新提取和重新解码时,块C和D能够在核心1上被刷新。作为另一示例,核心可以被配置为总是在窗口0处开始运行,并且因此块B到核心0、窗口1的初始分配被重新分配到核心2,使得BCD的第二次迭代能够在核心2、窗口0处开始。在这里,对于复发的给定迭代,块B在块CD前面。块B能够在BCD的第一次迭代期间运行在核心0上,并且块B能够在BCD的后续迭代期间运行在核心2上。对于BCD的所有迭代,块CD能够运行在核心1上。
指令块调度器725能够将处理器核心内的复发指令块进行对齐,如由示例映射820所示出的。例如,当复发在块B的映射之前是已知的,则调度器725能够对齐块B,使得其被放置在处理器核心的开始窗口中。具体地,B能够已经适配在核心0、窗口1中但是其被放置在核心1、窗口0中使得复发在窗口0中开始。将块对齐能够潜在地在复发的结束处创建“洞”,其中,洞是指处理器核心的未利用的窗口。洞能够潜在地填充有不是复发的部分的指令块。
在复发的结束处的洞能够潜在地通过“展开”复发来填充,例如通过示例映射830所示出的。如本文中所使用的,展开是指将复发的多个块分配在多个处理器核心上。例如,能够以以下序列来运行BCD循环的四次迭代:核心1上的BC、核心2上的DB、核心3上的CD、核心1上的BC、核心2上的DB、以及核心3上的CD。因此,在核心1和2上运行第一次迭代,在核心2和3上运行第二次迭代,在核心1和2上运行第三次迭代,以及在核心2和3上运行第四次迭代。循环已经被展开使得每个指令块的两个实例被分配到处理器核心。因此,展开能够比不展开消耗更多资源,但是它能够导致通过填充空洞对资源的更好利用。
使用以上描述的技术,指令块调度器725能够在运行中调整指令块的数目以潜在地提高驻留指令块的重复使用,使得动态功率消耗能够被减少和/或性能能够被提高。
X.重复使用解码的指令的示例方法
图9是图示重复使用提取的和解码的指令的方法900的示例的流程图。在910处,指令块能够被映射到基于块的处理器的处理器核心。例如,在基于块的处理器内或外部运行的指令块调度器能够分配处理器核心以(推测地或非推测地)运行一个或多个程序的指令块。多个块能够基于块的大小、核心的能力(例如,指令窗口的数目)、以及对齐考虑而被映射到单个核心。例如,当展开循环时,相同指令块的不同实例能够被映射到不同处理器核心。例如,映射能够将块对齐到特定指令窗口,展开重复指令块,并且将驻留块保留或高速缓存在空闲核心上。
在920处,确定驻留在处理器核心上的指令块是否要被再次运行。指令块可以为驻留在处理器核心上的唯一块或者还可以存在驻留在核心上的其他块。块要被再次运行的确定能够在各个时间进行,例如当块(例如通过编译器提示)被分配时,当块被运行时,或者当块空闲时。能够由处理器核心本身、由指令块调度器、和/或由另一处理器核心来做出确定。例如,指令块能够被再次运行,这是因为其是(例如,循环或子例程内)复发的部分,或者因为块被误预测(例如,块在被提交之前被推测地运行和结束)并且稍后非推测地被运行。
在930处,当确定驻留指令块要被再次运行时刷新驻留指令块。例如,对应于指令块的活动就绪状态能够被重置。如果这些块不再重新运行的话,例如通过不重置对应的活动就绪状态来跳过驻留在处理器核心上的其他块。通过刷新块,将用于重新刷新和重新解码块的时间和能量能够相较于将指令块加载到不同核心上被节省。
图10是图示重复使用解码的指令的方法1000的另一示例的流程图。在1010处,指令块能够被映射到诸如参考910所描述的基于块的处理器的处理器核心。
在1020处,能够标识包括多个驻留指令块的复发。例如,复发能够为while循环的for的主体、子例程或函数、或其他重复代码。复发的指令块能够被映射到多个处理器核心。复发能够在编译时由编译器、在初始映射之前由指令块调度器、在初始映射之后由指令块调度器、和/或由运行指令块的处理器核心来标识。例如,编译器能够在复发的开始指令块的头部中编码编译器提示,并且指令块调度器能够解码编译器提示以标识复发。作为另一示例,运行指令块的处理器能够计算块的分支目标,并且调度器能够标识分支目标要用于驻留指令块。
在1030处,对于映射到第一核心的复发的(一个或多个)开始驻留指令块,能够重新映射、刷新、快速复制、或重复使用(一个或多个)开始驻留指令块的至少一部分。作为具体示例,图7和图8的示例中的块B能够为复发的(一个或多个)开始指令块。例如,当期望在开始指令窗口处具有复发开始时,复发的开始能够被重新映射到不同的处理器核心。映射810是重新映射的具体示例。复发的开始能够被刷新。复发的开始能够被对齐到第一核心的窗口0,使得复发的指令块是驻留在第一核心上的独特块。备选地,复发的开始能够在非零窗口(其未被对齐)处开始,使得复发外部的指令块也驻留在第一核心上。当复发的开始没有对齐时,复发的开始的指令块能够被刷新,并且复发外部的指令块能够被停留在它们的当前状态中(使得它们能够在复发的下一迭代期间被跳过)。例如,复发的开始能够从非零窗口到窗口0被快速复制到第一核心内。备选地,非零窗口的解码状态能够使用指针或其他引用来与窗口0共享。
在1040处,对于映射到第一核心外部的复发的(一个或多个)随后驻留指令块,能够刷新映射到第一核心外部的(一个或多个)驻留指令块的至少一部分。作为示例,图7和图8的示例中的块D能够为复发的(一个或多个)随后指令块中的一个。具体地,给定了810中的映射,块C和D能够被刷新。给定了820中的映射,块D能够被刷新。
XI.示例计算环境
图11图示了适合的计算环境1100的一般示例,其中能够实现所描述的实施例、技术以及工艺,包括基于块的处理器中的坏跳检测。例如,计算环境1100能够实现如在此所描述的用于验证分支指令目标位置的所公开的技术。
计算环境1100不旨在暗示对本技术的使用或功能的范围的任何限制,这是因为本技术可以被实现在各种各样的通用或专用计算环境中。例如,所公开的技术可以利用其他计算机系统配置来实现,其他计算机系统配置包括手持设备、多处理器系统、可编程消费电子、网络PC、小型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块(包括针对基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备两者中。
参考图11,计算环境1100包括至少一个基于块的处理单元1110和存储器1120。在图11中,这种最基本配置1130被包含在虚线内。基于块的处理单元1110运行计算机可执行指令并且可以为真实处理器或虚拟处理器。在多处理系统中,多个处理单元运行计算机可执行指令以增大处理功率并且因此能够同时运行多个处理器。存储器1120可以为易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存,等等)或这两者的特定组合。存储器1120存储能够例如实现本文中描述的技术的软件1180、图像和视频。计算环境可以具有附加的特征。例如,计算环境1100包括存储装置1140、一个或多个输入设备1150、一个或多个输出设备1160以及一个或多个通信连接1170。诸如总线、控制器或网络互连件的互连机制(未示出)将计算环境100的部件相互连接。通常,操作系统软件(未示出)提供针对在计算环境1100中运行的其他软件的操作环境,并且协调计算环境1100的部件的活动。
存储装置140可以为可移除的或不可移除的,并且包括磁盘、磁带或磁带盒、CD-ROM、CD-RW、DVD或者能够被用于存储信息并且能够在计算环境1100内被访问的任何其他介质。存储装置140存储能够用于实现在此描述的技术的针对软件1180的指令、插件数据、以及消息。
(一个或多个)输入设备1150可以为触摸输入设备,例如键盘、小键盘、鼠标、触摸屏显示器、笔、或跟踪球、语音输入设备、扫描设备、或将输入提供到输入环境1110的另一设备。对于音频,(一个或多个)输入设备1150可以为声卡或接受模拟或数字形式的音频输入的类似设备、或将音频样本提供到计算环境1100的CD-ROM读取器。(一个或多个)输出设备1160可以为显示器、打印机、扬声器、CD刻录机、或提供来自计算环境1100的输出的另一设备。
(一个或多个)通信连接1170实现通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质在经调制的数据信号中传达诸如计算机可执行指令、压缩图形信息、视频或其他数据的信息。(一个或多个)通信连接1170不限于有线连接(例如,兆比特或吉比特以太网、无限带宽、通过电气或光纤连接的纤维信道),而且还包括无线技术(例如,经由蓝牙的RF连接、WiFi(IEEE 802.1 1a/b/n)、WiMax、蜂窝、卫星、激光、红外)以及用于为所公开的代理、桥、以及代理数据消费者提供网络连接的其他适合的连接。在虚拟主机环境中,(一个或多个)通信连接可以为由虚拟主机提供的虚拟化网络连接。
所公开的方法的一些实施例能够使用在计算云1190中实现所公开的技术中的全部或一部分的计算机可执行指令来执行。例如,所公开的编译器和/或基于块的处理器服务器位于计算环境1130中,或者所公开的编译器能够被运行在位于计算云1190中的服务器上。在一些示例中,所公开的编译器运行在传统的中央处理单元(例如,RISC或CISC处理器)上。
计算机可读介质是能够在计算环境1100内访问的任何可用介质。通过举例而非限制的方式,在计算环境1100内,计算机可读介质包括存储器1120和/或存储装置1140。如应当容易理解的,术语计算机可读存储介质包括针对诸如存储器1120和存储装置1140的数据存储装置的介质,而不是诸如经调制的数据信号的传输介质。
X.所公开的技术的附加示例
本文中根据以上讨论的示例讨论所公开的主题的附加示例。
在一个实施例中,一种系统包括多个基于块的处理器核心和指令块调度器。核心的每个相应核心能够运行程序的一个或多个指令块。指令块调度器被配置为:标识驻留在处理器核心中的第一处理器核心上并且要被再次运行的给定指令块;以及在运行中调整指令块的映射,使得在没有重新提取给定指令块的情况下,给定指令块被重新运行在第一处理器核心上。在运行中调整指令块的映射可以包括跳过第一处理器核心的指令窗口。在运行中调整指令块的映射可以包括对要在给定指令块之前被运行的较早指令块进行重新映射。在运行中调整指令块的映射可以包括延迟对一个或多个推测指令块的分配。在运行中调整指令块的映射可以包括维持驻留在空闲处理器核心上的指令块的高速缓存。在运行中调整指令块的映射可以包括在第一处理器核心上刷新给定指令块之前等待给定指令块完成。指令块调度器还可以被配置为解码指令块的头部,其中头部可以被编码有控制流信息。标识驻留在处理器核心中的第一处理器核心上并且要被再次运行的给定指令块可以包括标识指令块的循环。
在一个实施例中,一种在基于块的计算机系统中提供重复使用的方法包括:标识包括多个指令块的复发;以及刷新复发的指令块中的至少一个,使得指令块中的至少一个在复发的至少一次迭代期间不被重新提取。复发的第一指令块可以被映射到基于块的处理器的第一核心。复发的第二指令块可以被映射到基于块的处理器的不同的第二核心。复发的第二指令块可以被刷新。可以在复发的至少一次迭代期间跳过驻留在第一指令核心上的第三指令块。复发的第一指令块可以被重新映射到基于块的处理器的第三核心以用于复发的至少一次迭代。复发的第一指令块的解码状态信息可以被复制到基于块的处理器中的第一核心内以用于复发的至少一次迭代。标识复发可以包括解码指令块的头部以接收编译器提示。
在一个实施例中,一个或多个计算机可读存储介质存储针对包括多个处理器核心的基于块的处理器的计算机可执行指令。指令包括用于使得基于块的处理器将指令块分配到处理器核心以用于运行的指令。指令包括用于使得基于块的处理器确定要被运行在处理器核心上的第一指令块是否驻留在处理器核心中的第一处理器核心中的指令。指令包括用于使得基于块的处理器基于运行在处理器核心中的第二处理器核心上的指令的结果来在第一处理器核心上刷新第一指令块的指令,其中第二处理器核心不同于第一处理器核心。将指令块分配到处理器核心以用于运行可以包括分配指令块以推测地且非推测地运行。指令可以包括用于使得基于块的处理器跟踪驻留在空闲处理器核心上的指令块的指令。第二处理器核心可以是基于块的计算机系统的控制单元。第一处理器核心和第二处理器核心二者都可以处于可用于运行指令块的处理器核心的池中。指令可以包括用于使得基于块的处理器将第二指令块重新映射到不同处理器核心的指令,其中第一指令块和第二指令块处于复发内,并且第二指令块在第一指令块的运行前面。
鉴于所公开的主题的原理可以应用的多个可能实施例,应当意识到,所说明的实施例仅仅是优选示例并且不应当被理解为将权利要求的范围限于那些优选示例。相反,要求保护的主题的范围由所附权利要求进行限定。因此,我们将落入这些权利要求的范围内的全部要求保护为我们的发明。
Claims (22)
1.一种基于块的计算机系统,包括:
多个基于块的处理器核心,其中所述核心中的每个相应核心能够运行程序的一个或多个指令块;以及
指令块调度器,其被配置为:
标识驻留在所述处理器核心中的第一处理器核心上并且要被再次运行的给定指令块;以及
调整运行中指令块到所述多个处理器核心中的多个处理器核心的映射,使得所述给定指令块被重新运行在所述第一处理器核心上,而无需重新提取所述给定指令块。
2.根据权利要求1所述的系统,其中调整所述运行中指令块的所述映射包括:跳过所述第一处理器核心的指令窗口。
3.根据权利要求1所述的系统,其中调整所述运行中指令块的所述映射包括:对要在所述给定指令块之前被运行的较早指令块进行重新映射。
4.根据权利要求1所述的系统,其中调整所述运行中指令块的所述映射包括:延迟对一个或多个推测的指令块的分配。
5.根据权利要求1所述的系统,其中调整所述运行中指令块的所述映射包括:维持驻留在空闲处理器核心上的指令块的高速缓存。
6.根据权利要求1所述的系统,其中调整所述运行中指令块的所述映射包括:在刷新所述第一处理器核心上的所述给定指令块之前,等待所述给定指令块完成。
7.根据权利要求1所述的系统,其中所述指令块调度器还被配置为对所述给定指令块的头部进行解码,所述头部被编码有控制流信息。
8.根据权利要求1所述的系统,其中标识驻留在所述处理器核心中的所述第一处理器核心上并且要被再次运行的所述给定指令块包括:标识指令块的循环。
9.一种在基于块的计算机系统中提供重复使用的方法,所述方法包括:
标识包括第一指令块和第二指令块的复发;
将所述复发的所述第一指令块映射到所述基于块的处理器的第一核心,并且将所述复发的所述第二指令块映射到所述基于块的处理器的不同的第二核心,所述第一核心和所述第二核心各自能够执行不同的相应指令块;以及
在刷新所述复发的所述第二指令块使得所述第二指令块在所述复发的至少一次迭代期间不被重新提取时,将所述复发的所述第一指令块重新映射到所述基于块的处理器的不同的第三核心。
10.根据权利要求9所述的方法,其中在所述复发的所述至少一次迭代期间驻留在所述第一指令核心上的第三指令块被跳过。
11.根据权利要求9所述的方法,其中所述复发的所述第一指令块被重新映射到所述基于块的处理器的第三核心,以用于所述复发的所述至少一次迭代。
12.根据权利要求9所述的方法,其中所述复发的所述第一指令块的解码的状态信息被复制在所述基于块的处理器的所述第一核心内,以用于所述复发的所述至少一次迭代。
13.根据权利要求9所述的方法,其中标识所述复发包括:对所述第一指令块的头部进行解码以接收编译器提示。
14.一个或多个计算机可读存储介质,其存储用于包括多个处理器核心的基于块的处理器的计算机可执行指令,所述指令包括:
用于使得所述基于块的处理器向所述处理器核心分配指令块以用于运行的指令;
用于使得所述基于块的处理器确定所述处理器核心中的所分配的所述指令块的驻留的指令;以及
用于使得所述基于块的处理器调整所述处理器核心中的所述指令块的映射的指令,所述调整包括基于运行在所述处理器核心中的第二处理器核心上的指令的结果来在第一处理器核心上刷新第一指令块,所述第二处理器核心不同于所述第一处理器核心。
15.根据权利要求14所述的计算机可读存储介质,其中向所述处理器核心分配指令块以用于运行包括:分配指令以用于推测地且非推测地运行。
16.根据权利要求14所述的计算机可读存储介质,其中所述指令还包括:
用于使得所述基于块的处理器跟踪驻留在空闲处理器核心上的指令块的指令。
17.根据权利要求14所述的计算机可读存储介质,其中所述第二处理器核心是所述基于块的计算机系统的控制单元。
18.根据权利要求14所述的计算机可读存储介质,其中所述第一处理器核心和第二处理器核心二者都处于可用于运行指令块的处理器核心的池中。
19.根据权利要求14所述的计算机可读存储介质,其中调整所述处理器核心中的所述指令块的映射还包括:
将第二指令块重新映射到不同处理器核心,其中所述第一指令块和所述第二指令块处于复发内,并且所述第二指令块在所述第一指令块的运行前面。
20.一种基于块的计算机系统,包括:
多个基于块的处理器核心,其中所述核心中的每个相应核心能够运行程序的一个或多个指令块;以及
指令块调度器,其被配置为:
标识驻留在所述处理器核心中的第一处理器核心上并且要被再次运行的给定指令块;以及
在运行中调整指令块的映射,使得所述给定指令块被重新运行在所述第一处理器核心上,而无需重新提取所述给定指令块,其中调整所述指令块的所述映射包括:延迟对一个或多个推测的指令块的分配。
21.根据权利要求20所述的系统,其中所述指令块调度器还被配置为对所述给定指令块的头部进行解码,所述头部被编码有控制流信息。
22.根据权利要求20所述的系统,其中标识驻留在所述处理器核心中的所述第一处理器核心上并且要被再次运行的所述给定指令块包括:标识指令块的循环。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,596 | 2015-06-26 | ||
US14/752,596 US9940136B2 (en) | 2015-06-26 | 2015-06-26 | Reuse of decoded instructions |
PCT/US2016/038845 WO2016210022A1 (en) | 2015-06-26 | 2016-06-23 | Reuse of decoded instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107810477A CN107810477A (zh) | 2018-03-16 |
CN107810477B true CN107810477B (zh) | 2021-04-23 |
Family
ID=56360513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680037476.XA Active CN107810477B (zh) | 2015-06-26 | 2016-06-23 | 解码的指令的重复使用 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9940136B2 (zh) |
EP (1) | EP3314398B1 (zh) |
CN (1) | CN107810477B (zh) |
TW (1) | TW201712532A (zh) |
WO (1) | WO2016210022A1 (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
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 |
US9946548B2 (en) | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US9952867B2 (en) | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
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 |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US10452399B2 (en) | 2015-09-19 | 2019-10-22 | Microsoft Technology Licensing, Llc | Broadcast channel architectures for block-based processors |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
US10303481B2 (en) | 2015-12-02 | 2019-05-28 | International Business Machines Corporation | Performance-aware instruction scheduling |
US20180341488A1 (en) * | 2017-05-26 | 2018-11-29 | Microsoft Technology Licensing, Llc | Microprocessor instruction predispatch before block commit |
US10684861B2 (en) | 2017-09-25 | 2020-06-16 | International Business Machines Corporation | Enhanced performance-aware instruction scheduling |
US10963379B2 (en) | 2018-01-30 | 2021-03-30 | Microsoft Technology Licensing, Llc | Coupling wide memory interface to wide write back paths |
CN115151892A (zh) * | 2020-03-04 | 2022-10-04 | 北京希姆计算科技有限公司 | 一种数据处理装置及数据处理方法 |
TWI806581B (zh) * | 2022-04-29 | 2023-06-21 | 瑞昱半導體股份有限公司 | 用來在管線化架構中檢查並更新程式計數器數值的邏輯電路以及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1767502A (zh) * | 2004-09-29 | 2006-05-03 | 英特尔公司 | 由多核心处理器执行的更新指令 |
CN102067684A (zh) * | 2008-06-23 | 2011-05-18 | 高通股份有限公司 | 基于组播/广播连接标识符(cid)调度消息跳过ofdm/ofdma帧的一部分 |
Family Cites Families (105)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69327688T2 (de) | 1992-08-12 | 2000-09-07 | Advanced Micro Devices Inc | Befehlsdecoder |
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 |
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 |
US5845103A (en) | 1997-06-13 | 1998-12-01 | Wisconsin Alumni Research Foundation | Computer with dynamic instruction reuse |
US6044222A (en) | 1997-06-23 | 2000-03-28 | International Business Machines Corporation | System, method, and program product for loop instruction scheduling hardware lookahead |
US5943501A (en) | 1997-06-27 | 1999-08-24 | Wisconsin Alumni Research Foundation | Multiple processor, distributed memory computer with out-of-order processing |
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 |
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 |
EP0992894A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Apparatus and method for loop execution |
JP3565314B2 (ja) | 1998-12-17 | 2004-09-15 | 富士通株式会社 | 分岐命令実行制御装置 |
GB2348305A (en) | 1999-03-24 | 2000-09-27 | Int Computers Ltd | Instruction execution mechanism |
US6513109B1 (en) | 1999-08-31 | 2003-01-28 | International Business Machines Corporation | Method and apparatus for implementing execution predicates in a computer processing system |
US6732203B2 (en) * | 2000-01-31 | 2004-05-04 | Intel Corporation | Selectively multiplexing memory coupling global bus data bits to narrower functional unit coupling local bus |
US6732260B1 (en) | 2000-03-06 | 2004-05-04 | Intel Corporation | Presbyopic branch target prefetch method and apparatus |
US6918032B1 (en) | 2000-07-06 | 2005-07-12 | Intel Corporation | Hardware predication for conditional instruction path branching |
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 |
EP1313012A1 (en) * | 2001-11-15 | 2003-05-21 | Texas Instruments France | Java DSP acceleration by byte-code optimization |
AU2003220683A1 (en) | 2002-04-08 | 2003-10-27 | University Of Texas System | Non-uniform cache apparatus, systems, and methods |
WO2004001584A2 (en) | 2002-06-24 | 2003-12-31 | Ante Vista Gmbh | A method for executing structured symbolic machine code on a microprocessor |
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 |
US7210127B1 (en) | 2003-04-03 | 2007-04-24 | Sun Microsystems | Methods and apparatus for executing instructions in parallel |
US7500087B2 (en) | 2004-03-09 | 2009-03-03 | Intel Corporation | Synchronization of parallel processes using speculative execution of synchronization instructions |
EP1731998A1 (en) | 2004-03-29 | 2006-12-13 | Kyoto University | Data processing device, data processing program, and recording medium containing the data processing program |
US7334143B2 (en) | 2004-04-19 | 2008-02-19 | Hewlett-Packard Development Company, L.P. | Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value |
US7747992B2 (en) | 2004-08-23 | 2010-06-29 | Intel Corporation | Methods and apparatus for creating software basic block layouts |
US7552318B2 (en) | 2004-12-17 | 2009-06-23 | International Business Machines Corporation | Branch lookahead prefetch for microprocessors |
US7380038B2 (en) | 2005-02-04 | 2008-05-27 | Microsoft Corporation | Priority registers for biasing access to shared resources |
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 |
US7447882B2 (en) | 2005-04-20 | 2008-11-04 | Arm Limited | Context switching within a data processing system having a branch prediction mechanism |
US7779213B2 (en) | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US7475225B2 (en) | 2005-12-30 | 2009-01-06 | Intel Corporation | Method and apparatus for microarchitecture partitioning of execution clusters |
US8510596B1 (en) | 2006-02-09 | 2013-08-13 | Virsec Systems, Inc. | System and methods for run time detection and correction of memory corruption |
US7350027B2 (en) * | 2006-02-10 | 2008-03-25 | International Business Machines Corporation | Architectural support for thread level speculative execution |
CN101449256B (zh) | 2006-04-12 | 2013-12-25 | 索夫特机械公司 | 对载明并行和依赖运算的指令矩阵进行处理的装置和方法 |
JP4849606B2 (ja) | 2006-04-28 | 2012-01-11 | 株式会社日立製作所 | 制御フロー誤り検出方法、データ処理装置、及びコンパイラ |
US7958396B2 (en) | 2006-05-19 | 2011-06-07 | Microsoft Corporation | Watchdog processors in multicore systems |
EP2527972A3 (en) | 2006-11-14 | 2014-08-06 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US8250556B1 (en) | 2007-02-07 | 2012-08-21 | Tilera Corporation | Distributing parallelism for parallel processing architectures |
JP4339371B2 (ja) | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
US8180997B2 (en) | 2007-07-05 | 2012-05-15 | Board Of Regents, University Of Texas System | Dynamically composing processor cores to form logical processors |
US8447911B2 (en) | 2007-07-05 | 2013-05-21 | Board Of Regents, University Of Texas System | Unordered load/store queue |
CN101344843B (zh) | 2007-07-10 | 2012-11-21 | 北京简约纳电子有限公司 | 一种指令级并行处理方法 |
JP2009026106A (ja) | 2007-07-20 | 2009-02-05 | Oki Electric Ind Co Ltd | 命令コード圧縮方法と命令フェッチ回路 |
US8006070B2 (en) | 2007-12-05 | 2011-08-23 | International Business Machines Corporation | Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system |
US8321850B2 (en) | 2008-06-06 | 2012-11-27 | Vmware, Inc. | Sharing and persisting code 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 |
US20100146209A1 (en) | 2008-12-05 | 2010-06-10 | Intellectual Ventures Management, Llc | Method and apparatus for combining independent data caches |
US8214831B2 (en) | 2009-05-05 | 2012-07-03 | International Business Machines Corporation | Runtime dependence-aware scheduling using assist thread |
US20100325395A1 (en) | 2009-06-19 | 2010-12-23 | Doug Burger | Dependence prediction in a memory system |
CN202873951U (zh) | 2009-07-07 | 2013-04-17 | 本杰明·大卫·利普希茨 | 一种鞋子 |
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 |
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 |
JP5057256B2 (ja) | 2009-12-02 | 2012-10-24 | 株式会社Mush−A | データ処理装置、データ処理システムおよびデータ処理方法 |
US9043769B2 (en) | 2009-12-28 | 2015-05-26 | Hyperion Core Inc. | Optimization of loops and data flow sections in multi-core processor environment |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
US8667260B2 (en) | 2010-03-05 | 2014-03-04 | International Business Machines Corporation | Building approximate data dependences with a moving window |
JP2011209904A (ja) | 2010-03-29 | 2011-10-20 | Sony Corp | 命令フェッチ装置、および、プロセッサ |
US8201024B2 (en) | 2010-05-17 | 2012-06-12 | Microsoft Corporation | Managing memory faults |
WO2011159309A1 (en) | 2010-06-18 | 2011-12-22 | The Board Of Regents Of The University Of Texas System | Combined branch target and predicate prediction |
US10241799B2 (en) | 2010-07-16 | 2019-03-26 | Qualcomm Incorporated | Out-of-order command execution with sliding windows to maintain completion statuses |
US9052890B2 (en) | 2010-09-25 | 2015-06-09 | Intel Corporation | Execute at commit state update instructions, apparatus, methods, and systems |
US8904115B2 (en) * | 2010-09-28 | 2014-12-02 | Texas Instruments Incorporated | Cache with multiple access pipelines |
US9836304B2 (en) | 2010-11-15 | 2017-12-05 | Advanced Micro Devices, Inc. | Cumulative confidence fetch throttling |
US8612726B2 (en) | 2010-12-07 | 2013-12-17 | King Fahd University Of Petroleum And Minerals | Multi-cycle programmable processor with FSM implemented controller selectively altering functional units datapaths based on instruction type |
US9164772B2 (en) | 2011-02-04 | 2015-10-20 | Qualcomm Incorporated | Hybrid queue for storing instructions from fetch queue directly in out-of-order queue or temporarily in in-order queue until space is available |
WO2012136766A1 (en) * | 2011-04-06 | 2012-10-11 | Telefonaktiebolaget L M Ericsson (Publ) | Multi-core processors |
US20130024676A1 (en) | 2011-07-19 | 2013-01-24 | Glew Andrew F | Control flow integrity |
CN102306094B (zh) | 2011-08-16 | 2014-03-26 | 北京北大众志微系统科技有限责任公司 | 实现现代处理器间接转移预测的装置及方法 |
CN104011705A (zh) | 2011-12-01 | 2014-08-27 | 新加坡国立大学 | 多形异构性多核架构 |
US9442861B2 (en) | 2011-12-20 | 2016-09-13 | Intel Corporation | System and method for out-of-order prefetch instructions in an in-order pipeline |
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 |
US9348775B2 (en) | 2012-03-16 | 2016-05-24 | Analog Devices, Inc. | Out-of-order execution of bus transactions |
US9513922B2 (en) | 2012-04-20 | 2016-12-06 | Freescale Semiconductor, Inc. | Computer system and a method for generating an optimized program code |
GB2505884B (en) | 2012-09-12 | 2015-06-03 | Imagination Tech Ltd | Dynamically resizable circular buffers |
US9063721B2 (en) | 2012-09-14 | 2015-06-23 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
US9710276B2 (en) * | 2012-11-09 | 2017-07-18 | Advanced Micro Devices, Inc. | Execution of instruction loops using an instruction buffer |
US9619229B2 (en) | 2012-12-27 | 2017-04-11 | Intel Corporation | Collapsing of multiple nested loops, methods and instructions |
US10223124B2 (en) | 2013-01-11 | 2019-03-05 | Advanced Micro Devices, Inc. | Thread selection at a processor based on branch prediction confidence |
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 |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
US9886277B2 (en) | 2013-03-15 | 2018-02-06 | Intel Corporation | Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources |
WO2014189510A1 (en) | 2013-05-23 | 2014-11-27 | Intel Corporation | Techniques for detecting return-oriented programming |
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 |
US9547496B2 (en) | 2013-11-07 | 2017-01-17 | Microsoft Technology Licensing, Llc | Energy efficient multi-modal instruction issue |
US9569613B2 (en) | 2014-12-23 | 2017-02-14 | Intel Corporation | Techniques for enforcing control flow integrity using binary translation |
US20160378488A1 (en) | 2015-06-26 | 2016-12-29 | Microsoft Technology Licensing, Llc | Access to target address |
US9720693B2 (en) | 2015-06-26 | 2017-08-01 | Microsoft Technology Licensing, Llc | Bulk allocation of instruction blocks to a processor instruction window |
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
US20160378491A1 (en) | 2015-06-26 | 2016-12-29 | Microsoft Technology Licensing, Llc | Determination of target location for transfer of processor control |
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 |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US9952867B2 (en) | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
US20170083343A1 (en) * | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Out of order commit |
-
2015
- 2015-06-26 US US14/752,596 patent/US9940136B2/en active Active
-
2016
- 2016-05-30 TW TW105116816A patent/TW201712532A/zh unknown
- 2016-06-23 WO PCT/US2016/038845 patent/WO2016210022A1/en active Application Filing
- 2016-06-23 EP EP16735791.2A patent/EP3314398B1/en active Active
- 2016-06-23 CN CN201680037476.XA patent/CN107810477B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1767502A (zh) * | 2004-09-29 | 2006-05-03 | 英特尔公司 | 由多核心处理器执行的更新指令 |
CN102067684A (zh) * | 2008-06-23 | 2011-05-18 | 高通股份有限公司 | 基于组播/广播连接标识符(cid)调度消息跳过ofdm/ofdma帧的一部分 |
Also Published As
Publication number | Publication date |
---|---|
EP3314398A1 (en) | 2018-05-02 |
EP3314398B1 (en) | 2020-08-05 |
WO2016210022A1 (en) | 2016-12-29 |
US9940136B2 (en) | 2018-04-10 |
CN107810477A (zh) | 2018-03-16 |
TW201712532A (zh) | 2017-04-01 |
US20160378483A1 (en) | 2016-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107810477B (zh) | 解码的指令的重复使用 | |
CN108027769B (zh) | 使用寄存器访问指令发起指令块执行 | |
CN107810480B (zh) | 根据性能度量的指令块分配 | |
EP3314401B1 (en) | Block-based architecture with parallel execution of successive blocks | |
US20230106990A1 (en) | Executing multiple programs simultaneously on a processor core | |
CN108027770B (zh) | 用于数据流isa的密集读取编码 | |
US11681531B2 (en) | Generation and use of memory access instruction order encodings | |
US20170083343A1 (en) | Out of order commit | |
US10095519B2 (en) | Instruction block address register | |
US10445097B2 (en) | Multimodal targets in a block-based processor | |
US20170083320A1 (en) | Predicated read instructions | |
US20170083341A1 (en) | Segmented instruction block | |
CN108027733B (zh) | 在目标字段中存储无效 | |
US10180840B2 (en) | Dynamic generation of null instructions | |
US20170083331A1 (en) | Memory synchronization in block-based processors | |
WO2017048645A1 (en) | Multimodal targets in a block-based processor |
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 |