加速硬件中的存储器排序的制作方法

文档序号:14911056发布日期:2018-07-10 23:25阅读:210来源:国知局

本发明是在由国防部授予的合同号H98230A-13-D-0124的政府支持下进行的。政府具有本发明的某些权利。

技术领域

本公开涉及加速硬件,更具体地涉及在加速硬件(诸如,空间阵列)中的存储器排序。



背景技术:

加速硬件涉及对数据通信、存储和检索、加密和解密、数学运算、图形、网页浏览等进行加速的设备。加速硬件可包括单独的集成电路(也称为IC或芯片)、印刷电路板或独立系统。加速硬件的一些示例包括网络访问加速器(NAS)、图形加速器和浮点加速器(FPA)。在一个实施例中,加速硬件被实例化为空间架构,该空间架构是使用空间阵列在计算系统中加速用户应用的高能效和高性能手段。空间架构包括处理组件的阵列,该处理组件诸如现场可编程门阵列(FPGA)中的门或其他处理元件(PE)。

附图说明

图1A是根据本公开的实施例的系统的框图,该系统采用插入在存储器子系统与加速硬件之间的存储器排序电路。

图1B是根据本公开的实施例的图1A中的系统的框图,但是该系统采用多个存储器排序电路。

图2是示出根据本公开的实施例的进入加速硬件以及离开加速硬件的存储器操作的一般运行的框图。

图3是示出根据本公开的实施例的存储操作的空间依赖性流的框图。

图4是根据本公开的实施例的图1中的存储器排序电路的详细框图。

图5是根据本公开的实施例的图1中的存储器排序电路的微架构的流程图。

图6是根据本公开的实施例的可执行确定器电路的框图。

图7是根据本公开的实施例的优先级编码器的框图。

图8是根据本公开的实施例的逻辑和二进制两种形式的示例性加载操作的框图。

图9A是示出根据本公开的实施例的示例代码的逻辑执行的流程图。

图9B是示出根据本公开的实施例的示例代码的展开版本中的存储器级并行性的图9A的流程图。

图10A是根据本公开的实施例的用于加载操作和存储操作的示例性存储器变元(argument)的框图。

图10B是示出根据本公开的实施例的、通过图5中的存储器排序电路的微架构进行加载操作和存储操作(诸如,图10A中的那些操作)的流的框图。

图11A、11B、11C、11D、11E、11F、11G和11H是示出根据本公开的实施例的通过图11B中的微架构的队列对示例性程序进行的加载操作和存储操作的功能性流的框图。

图12是根据本公开的实施例的用于对加速硬件与乱序存储器子系统之间的存储器操作进行排序的方法的流程图。

图13A是示出根据一个实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。

图13B是示出根据本公开的实施例的用于处理器或集成电路的微架构的框图,该处理器或集成电路包括图1A-1B中的存储器子系统和加速硬件。

图14示出根据本公开的实施例的用于处理器或集成电路的微架构的框图,该处理器或集成电路包括图1A-1B中的存储器子系统和加速硬件。

图15是根据一种实现方式的计算机系统的框图。

图16是根据另一实现方式的计算机系统的框图。

图17是根据一种实现方式的芯片上系统的框图。

图18示出计算系统的框图的另一实现方式。

图19示出计算系统的框图的另一实现方式。

具体实施方式

所公开的是用于描述加速硬件内的存储器排序依赖性的架构。如所讨论的那样,加速硬件的一个示例是诸如存在于现场可编程门阵列(FPGA)中、存在于循环处理单元(LPU)等中的空间计算结构(fabric)(“空间结构”)。此类架构面临的挑战是将广泛的现有的序列的或部分并行的应用的集合映射至按性质分布且高度并行的空间阵列。由于存在于传统编程环境中的集中式高度序列化的存储器模型,执行此映射的主要困难是对传统程序中的存储器访问的自动并行化。

例如,考虑以下代码:

for(i){

p[f(i)]=p[g(i)];

}

一般而言,对于相同的i值或跨循环体的不同i值,编译器无法证明f(i)不与g(i)相同。这被称为指针或存储器别名(aliasing)。为了生成静态地正确的代码,通常迫使编译器使对阵列p的访问串行化。然而,经常的情况是在运行时f(i)和g(i)不相等,从而给予在硬件中获得动态并行性的机会。然而,在空间架构中,不存在机制来检查并利用依赖性,该依赖性促进对可能在代码执行期间产生的并行性的利用。

所公开的架构提供运行时微架构内的灵活性和并行性,同时保持原始序列化程序的存储器语义,包括保持应当按某个顺序发生的存储器操作之间的依赖性。所公开的微架构例如实现加速硬件内的传统序列化代码的并行化和加速,从而促进软件应用的加速。

在一个实施例中,一种集成电路包括存储器排序电路,该存储器排序电路耦合至存储器子系统并耦合至处理组件的加速硬件。执行对应指令的处理器可不按程序顺序向存储器子系统请求存储器操作。所公开的架构的存储器排序电路可确保当加速硬件执行对应于程序的指令的子程序时,对应存储器操作的结果按程序的序列化顺序被排序。为了确保存储器操作按程序顺序被调度和执行,存储器排序电路可包括形成在前驱与后继存储器操作之间的经定向的逻辑通道,并且依赖性令牌可与该通道内的地址相关联地被传递以向后续存储器操作指示依赖性。经定向的逻辑通道在本文中可称为队列,它可用将进行解释的各种硬件结构来实现。可取决于操作类型、使用经排队的存储器操作内的存储器变元来跟踪该逻辑通道内的以及相关联的依赖性令牌的位置。

例如,存储器排序电路可在操作队列中将存储器操作排队。存储器排序电路也可在输入队列中从加速硬件接收加速硬件按无论什么顺序执行的地址,并递送这些地址用于存储器操作。例如,对于加载操作,加载地址队列可接收从存储器从其中检索数据的地址。类似地,对于存储操作,存储地址队列可接收向存储器向其写入数据的地址,并且存储数据队列用于对将被写入那个地址的数据进行缓冲。通过将对地址的缓冲与对数据的缓冲分开,存储操作可在两个阶段中执行:首先,调度对特定地址的存储操作;其次,在接收到要存储的数据时,请求该存储操作。

此外,所公开的架构定义的存储器操作可能能够通过操纵依赖性令牌来履行存储器排序约束。使用依赖性令牌可确保将存储器操作的数据依赖性与在先存储器操作一起保留在程序内。当操作的结果变得可用于其他存储器操作时,存储器操作可触发依赖性令牌的生成。该生成可包括如下选项:传递从在先存储器操作接收到的依赖性令牌,诸如,复制那个依赖性令牌。随后,这些令牌被传递至表示程序的空间执行图中的程序后续的存储器操作。在从在先存储器操作接收到依赖性令牌时,启用后续操作以进行调度。在一个实施例中,计数器可用于跟踪已为任何给定通道生成了多少依赖性令牌,例如,提供队列的紧凑表示。饱和且因此无法将附加的唯一令牌提供给已经传递至待定存储器操作的那些依赖性令牌的计数器可在调度前一操作时触发停止。由编译器产生的存储器操作的排序或程序存储器图确保程序存储器顺序在并行执行的加速硬件(诸如,空间结构)内被履行。

相应地,当依赖性令牌与存储器中的传入地址一起从加速硬件被接收,对相关联的存储器操作的排序可被调度并最终可按程序顺序被执行。在一个示例中,当存储操作与加载操作针对存储器中的相同地址时,依赖性存在于存储操作与在先的加载操作之间。依赖性令牌可被生成(或复制)以便与加载操作一起被传递,使得排序电路在存储操作的完成之前可调度(携带该依赖性令牌的)加载操作的完成。该示例中的在加载操作之前对存储操作排序可避免以下场景:在加载操作有机会读取现有数据之前,存储操作消除该现有数据。类似地,依赖性可存在于对存储器中的相同地址的加载操作与在先的存储操作之间。在这种情况下,在先的存储操作可能需要在加载操作能够从该地址读取正确的数据之前完成向该相同地址的写入。此外,加载-加载和存储-存储依赖性也可存在,对于该加载-加载和存储-存储依赖性,依赖性令牌可分别促进连续加载操作或连续存储操作的有序调度和完成。

在一个实施例中,所公开的微架构可包括存储器接口,该存储器接口耦合至存储器子系统,该存储器子系统用于存储对应于正为程序执行的指令的数据。该微架构还可包括:操作队列,用于对于对应于指令的存储器操作进行缓冲;以及处理组件的加速硬件,该处理组件用于执行对应于指令的子程序。微架构还可包括输入队列的集合,该输入队列的集合耦合至加速硬件,该输入队列的集合包括:地址队列,用于接收存储器的地址;与存储器操作中的第二存储器操作相关联的地址;以及依赖性队列,用于接收与该地址相关联的依赖性令牌。如所讨论的那样,依赖性令牌可指示对由存储器操作中的第一存储器操作生成的数据的依赖性,第一存储器操作先于第二存储器操作。微架构可进一步包括调度器电路,该调度器电路用于:响应于依赖性队列接收到依赖性令牌且地址队列接收到地址,调度第二存储器操作向存储器的发布。在一个实施例中,调度器电路是操作管理器电路的部分,并且该操作管理器电路用于响应于第一存储器操作的完成将第二存储器操作发布至存储器。在各种实施例中,第一存储器操作是加载操作或存储操作,并且第二存储器操作是加载操作或存储操作。当前实施例也可扩展至附加操作,诸如,指示一组在先加载或存储何时已完成的围栏(fence)操作。

图1A是根据本公开的实施例的系统100的框图,该系统100采用插入在存储器子系统110与加速硬件102之间的存储器排序电路105。存储器子系统110可包括已知的存储器组件,包括与基于处理器的架构相关联的高速缓存、存储器以及一个或多个存储器控制器。加速硬件102可以是由通过处理元件(PE)间网络或另一类型的组件间网络连接的轻量型处理元件(或其他类型的处理组件)组成的粗粒度空间架构。

在一个实施例中,被视为控制数据流图的程序可通过配置PE和通信网络而被映射到空间架构上。一般而言,PE被配置为数据流操作器,类似于处理器中的功能单元:一旦输入操作数到达PE,某个操作发生,并且结果被以流水线形式转发到下游PE。数据流操作器(或其他类型的操作器)可选择逐操作器地消耗传入数据。简单操作器(像处理算术表达式的无条件求值的那些操作)常消耗所有传入数据。然而,有时操作器维持状态(例如,在累加中)是有用的。

PE使用专用虚拟电路进行通信,该专用虚拟电路通过静态地配置电路交换型通信网络而形成。这些虚拟电路是流受控且完全被回压(back pressure)的,使得如果源没有数据或目的地为满,则PE将停止。在运行时,根据数据流图实现映射算法的通过PE的数据流在本文中也被称为子程序。例如,数据可从存储器通过加速硬件102而流入,随后向外回到存储器。此类架构相对于传统多核处理器可实现卓越的性能效率:与扩展存储器子系统110相反,以PE形式计算比较大的核更简单且更多,并且通信是直接的。然而,存储器系统并行性帮助支持并行PE计算。如果存储器访问被串行化,则高并行性可能不可实现。为了促进存储器访问的并行性,所公开的存储器排序电路105包括如将详细解释的存储器排序架构和微架构。在一个实施例中,存储器排序电路105是请求地址文件电路(或“RAF”)或其他存储器请求电路。

图1B是根据本公开的实施例的图1A中的系统100的框图,但是该系统100采用多个存储器排序电路105。每一个存储器排序电路105可充当存储器子系统110与加速硬件102的部分之间的接口。存储器子系统110可包括多个高速缓存片12(例如,在图1B的实施例中,高速缓存片12A、12B、12C和12D)以及某个数量的(在该实施例中为四个)存储器排序电路105可用于每个高速缓存片12。交叉开关(crossbar)104可将存储器排序电路105连接至构成每一个高速缓存片12A、12B、12C和12D的高速缓存的区块。例如,在一个实施例中,每一个高速缓存片中可以有八个存储器的区块。系统100可实例化在单个管芯上,例如,实例化为芯片上系统(SoC)。在一个实施例中,SoC包括加速硬件102。在替代实施例中,加速硬件102是外部可编程芯片(诸如,FPGA或CGRA),并且存储器排序电路105通过输入/输出中枢等与加速硬件102对接。

每一个存储器排序电路105可将读取和写入请求接受到存储器子系统110。来自加速硬件102的请求到达用于发起读取或写入访问(在本文中也称为加载或存储访问)的数据流图的每一个节点的分开的通道中的存储器排序电路105。也提供缓冲,使得对加载的处理将会将被请求的数据按其被请求的顺序返回到加速硬件102。换言之,迭代六的数据在迭代七的数据之前被返回,以此类推。此外,注意从存储器排序电路105到特定高速缓冲区块的请求通道可实现为经排序通道,并且在第二请求之前离开的任何第一请求将在该第二请求之前到达高速缓存区块。

图2是示出根据本公开的实施例的进入加速硬件102以及离开加速硬件102的存储器操作的一般运行的框图200。在加速硬件102的顶部外发生的操作被理解为去往以及离开存储器子系统110的存储器而进行。注意,作出两个加载请求,随后是对应的加载响应。当加速硬件102执行对来自加载响应的数据的处理时,第三加载请求和响应发生,这触发附加的加速硬件处理。随后,加速硬件对这三个加载操作的处理的结果被传递到存储操作,因此,最终结果被往回存储到存储器。

通过考虑该操作序列,空间阵列更自然地映射至通道可以是明显的。此外,加速硬件102在请求和响应通道以及可能发生的固有并行处理方面是等待时间(latency)不敏感的。当与存储器的对接发生在与由加速硬件102进行的多个处理步骤分开的离散时刻时,加速硬件也可将对程序的执行从存储器子系统110的实现方式(图1A)解耦。例如,对存储器的加载请求以及来自于存储器的加载响应是分开的动作,并且在不同情况下取决于存储器操作的依赖流能以不同方式被调度。将空间结构用于例如处理指令促进了对此类加载请求和加载响应的空间分离和分布。

图3是示出根据本公开的实施例的存储操作301的空间依赖性流的框图300。参照存储操作是示例性的,因为相同的流可应用于加载操作(但是没有传入数据),或者可应用于其他操作符(诸如,围栏)。围栏是用于存储器子系统的、确保一类型的所有在先存储器操作(诸如,所有存储或所有加载)已完成的排序操作。存储操作301可接收从加速硬件102接收的(存储器的)地址302和数据304。存储操作301还可接收传入依赖性令牌308,并且响应于这三项的可用性,存储操作301可生成传出依赖性令牌312。传入依赖性令牌(其可以例如是程序的初始依赖性令牌)可在程序的编译器供应的配置中提供,或者可通过执行存储器映射的输入/输出(I/O)来提供。替代地,如果程序已经运行,则传入依赖性令牌可从加速硬件102接收,例如,与存储操作301所依赖的在先存储器操作相关联。传出依赖性令牌312可基于正由程序后续的存储器操作要求的地址302和数据304来生成。

图4是根据本公开的实施例的图1A中的存储器排序电路105的详细框图。存储器排序电路105可耦合至乱序存储器子系统110,如所讨论的,乱序存储器子系统110可包括高速缓存12和存储器18以及(多个)相关联的乱序存储器控制器。存储器排序电路105可包括或可耦合至通信网络接口20,该通信网络接口20可以是片间(inter-tile)网络接口或片内(intra-tile)网络接口,并且可以是电路切换型网络接口(如图所示),且因此包括电路切换型互连。替代地或附加地,通信网络接口20可包括分组(packet)交换型互连。

存储器排序电路105可进一步包括但不限于存储器接口410、操作队列412、(多个)输入队列416、完成队列420、操作配置数据结构424以及操作管理器电路430,该操作管理器电路430可进一步包括调度器电路432和执行电路434。在一个实施例中,存储器接口410可以是电路交换型的,在另一实施例中,存储器接口410可以是分组交换型的,或者这两者可同时存在。操作队列412可对正为请求进行处理并因此可对应于进入输入队列416的地址和数据的(具有对应变元的)存储器操作进行缓冲。

更具体地,输入队列416可以是至少以下各项的聚合:加载地址队列、存储地址队列、存储数据队列以及依赖性队列。当将输入队列416实现为被聚合时,存储器排序电路105可提供对逻辑队列的共享,并且附加的控制逻辑用于在逻辑上将队列分开,这些队列是存储器排序电路的各个通道。这可使输入队列的使用最大化,但是也会要求附加的复杂度和空间供逻辑电路管理被聚合队列的逻辑分离。替代地,如将参照图5所讨论,输入队列416能以分离方式来实现,其中每一个输入队列具有分开的硬件逻辑。无论是聚合的(图4)还是非聚合的(图5),为本公开目的的实现方式基本上相同,前者使用附加的逻辑来从逻辑上将单个共享硬件队列中的队列分开。

当被共享时,输出队列416和完成队列420可实现为固定大小的环形缓冲器。环形缓冲器是具有先入先出(FIFO)数据特性的循环队列的高效实现方式。因此,这些队列可实施存储器操作正被请求所针对的程序的语义顺序。在一个实施例中,(诸如,用于存储地址队列的)环形缓冲器可具有与以相同速率流过相关联的队列(诸如,存储数据队列或依赖性队列)的条目相对应的条目。以此方式,存储地址可保持与对应的存储数据相关联。

更具体地,加载地址队列可对存储器18从中检索数据的传入地址进行缓冲。存储地址队列可对将会向其写入数据的存储器18的传入地址进行缓冲,该数据被缓冲在存储数据队列中。依赖性队列可对与加载地址队列和存储地址队列的地址相关联的依赖性令牌进行缓冲。表示分开的通道的每一个队列能以固定或动态数量的条目来实现。当为固定数量时,越多的条目可用,就可进行越高效的复杂循环处理。但是,具有过多条目花费了要实现的更多面积和能量。在一些情况下(例如,对于聚合式架构),所公开的输入队列416可共享队列槽。对队列中的槽的使用可静态地分配。

完成队列420可以是用于响应于由加载操作发布的存储器命令而对从存储器接收的数据进行缓冲的分开的队列集。完成队列420可用于保存已被调度但用于其的数据还未被接收到的(且因此还未完成)加载操作。因此,完成队列420可用于对数据和操作流重排序。

操作管理器电路430(将参照图5至图13更详细地解释)可提供逻辑以用于当将用于提供存储器操作的正确排序的依赖性令牌考虑在内时调度并执行经排队的存储器操作。操作管理器430可访问操作配置数据结构424以确定哪些队列被分组在一起来形成给定的存储器操作。例如,操作配置数据结构424可包括特定的依赖性计数器(或队列)、输入队列、输出队列和完成队列全都分组在一起用于特定的存储器操作。由于每一个连续的存储器操作可被指派不同的队列组,因此对不同队列的访问会跨存储器操作的子程序而交织。知晓所有这些队列,操作管理器电路430可与操作队列412、(多个)输入队列416、(多个)完成队列420和存储器子系统110对接,以便最初当连续的存储器操作变得“可执行”时将存储器操作发布至存储器子系统110,并随后完成具有来自存储器子系统的某个确收的存储器操作。该确收可例如是响应于加载操作命令的数据或对响应于存储操作命令而被存储在存储器中的数据的确收。

图5是根据本公开的实施例的图1A中的存储器排序电路105的微架构500的流程图。存储器子系统110可允许由于C语言(以及其他面向对象的程序语言)的语义而对其中存储器操作的排序是错误的程序的非法执行。微架构500可实施存储器操作(从存储器加载以及向存储器存储的序列)的排序,使得加速硬件102执行的指令的结果被适当地排序。示出许多本地网络50以表示加速硬件102中耦合至微架构500的部分。

从架构的视角看,至少具有两个目的:首先,为了正确地运行总体上顺序的代码;其次,为了在由微架构500执行的存储器操作中获得高性能。为了确保程序正确性,编译器以某种方式将存储操作与加载操作之间的依赖性表达为阵列p,这将通过将进行解释的依赖性令牌来表达。为了改善性能,微架构500发现并且并行地发布相对于程序顺序合法的尽可能多的阵列的加载命令。

在一个实施例中,微架构500可包括上文中参照图4所讨论的操作队列421、输入队列416、完成队列420和操作管理器电路430,其中各个队列可称为通道。微架构500可进一步包括多个依赖性令牌计数器514(例如,每个输入队列一个)、依赖性队列518的集合(例如,每个输入队列一个)、地址多路复用器532、存储数据多路复用器534、完成队列索引多路复用器536以及加载数据多路复用器538。在一个实施例中,操作管理器电路430可指示这些不同的多路复用器生成(将发送至存储器子系统110)的存储器命令550以及从存储器子系统110往回接收加载命令的响应,如将要解释的那样。

如提及的那样,输入队列416可包括加载地址队列522、存储地址队列524和存储数据队列526。(小标数字0、1、2是通道标记,并且稍后将在图8和图11A中被引用。)在各种实施例中,这些输入队列可增殖以包含附加通道,从而处理存储器操作处理的附加的并行性。每一个依赖性队列518可与输入队列416中的一个相关联。更具体地,标记为B0的依赖性队列518可与加载地址队列522相关联,并且标记为B1的依赖性队列可与存储地址队列524相关联。如果提供了输入队列416的附加通道,则依赖性队列518可包括附加的对应通道。

在一个实施例中,完成队列420可包括输出缓冲器544和546的集合,用于从存储器子系统110和完成队列542接收加载数据以便对地址和数据进行缓冲而根据由操作管理器电路430维护的索引进行加载操作。操作管理器电路430可管理索引以确保加载操作的有序执行,并标识被接收到输出缓冲器544和546中的、可被移动到完成队列542中的经调度的加载操作的数据。

更具体地,由于存储器子系统110是乱序的,但是加速硬件102有序地完成操作,因此微架构500可利用完成队列542对存储器操作重排序。可相对于完成队列542执行三个不同的子操作,即,分配、入列和出列。为了进行分配,操作管理器电路430可将索引分配到完成队列542中的完成队列的按顺序的下一个槽中。操作管理器电路可将此索引提供给存储器子系统110,存储器子系统110随后可知晓将用于加载操作的数据写入到其中的槽。为了入列,存储器子系统110可将数据作为条目写入完成队列542(像随机存取存储器(RAM))中的经索引的按顺序的下一个槽,从而将该条目的状态位置位为有效。为了出列,操作管理器电路430可呈现存储在该按顺序的下一个槽中的数据以完成加载操作,从而将该条目的状态位置位为无效。无效条目随后可用于新的分配。

在一个实施例中,状态信号448可以指输入队列416、完成队列420、依赖性队列518和依赖性令牌计数器514的状态。这些状态例如可包括输入状态、输出状态和控制状态,控制状态可以指与输入或输出相关联的依赖性令牌的存在或缺失。输入状态可包括地址的存在或缺失,而输出状态可包括存储值和可用的完成缓冲器槽的存在或缺失。依赖性令牌计数器514可以是队列的紧凑表示,并且可跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器514饱和,则没有附加的依赖性令牌可被生成用于新的存储器操作。相应地,存储器排序电路105会停止调度新存储器操作,直到依赖性令牌计数器514变成不饱和。

再参照图6,图6是根据本公开的实施例的可执行确定器电路600的框图。存储器排序电路105能以若干不同种类的存储器操作(例如,加载和存储)来建立:

ldNo[d,x]result.outN,addr.in64,order.in0,order.out0

stNo[d,x]addr.in64,data.inN,order.in0,order.out0

可执行确定器电路600可集成为调度器电路432的部分,并且其可执行逻辑操作以确定给定的存储器操作是否是可执行的以及是否因此准备好被发布至存储器。当对应于队列的存储器变元的队列具有数据且相关联的依赖性令牌存在时,可执行存储器操作。这些存储器变元可包括例如(指示输入队列416的通道的)输入队列标识符610、(指示完成队列420的通道的)输出队列标识符620、依赖性队列标识符630(例如,应当参考什么依赖性队列或计数器)和操作类型指示符640(例如,加载操作或存储操作)。这些存储器变元可在操作队列412内被排队,并且用于对与来自存储器和加速硬件102的传入地址和数据相关联的存储器操作的发布进行调度。(参见图7。)传入状态信号448可与这些标识符逻辑地组合,随后结果可(例如,通过AND门650)相加以输出可执行信号,例如,当存储器操作为可执行时,该可执行信号被断言。传入状态信号448可包括用于输入队列标识符610的输入状态612、用于输出队列标识符620的输出状态622以及用于依赖性队列标识符630的控制状态632(与依赖性令牌相关)。

为了进行加载操作,作为示例,当加载操作具有用于对完成队列542中的加载结果(输出状态)进行缓冲的地址(输入状态)和空间时,存储器排序电路105可发布加载命令。类似地,当存储操作既具有地址又具有数据值(输入状态)时,存储器排序电路105可发布用于存储操作的存储命令。相应地,状态信号448可传递这些状态信号所涉及的队列的空(或满)等级。随后,操作类型可取决于什么地址和数据应当可用以表明逻辑是否产生可执行信号。

为了实现依赖性排序,调度器电路432可扩展存储器操作以包括在示例加载和存储操作中的上述划线的依赖性令牌。控制状态632可指示依赖性令牌在由依赖性队列标识符630标识的依赖性队列内是否可用,该依赖性队列可以是依赖性队列518(对于传入存储器操作)或依赖性令牌计数器514(对于完成的存储器操作)中的一个。在此构想下,依赖性存储器操作在该存储器操作完成时要求附加的排序令牌来执行并生成附加的排序令牌,其中,完成意味着来自存储器操作的结果的数据已变得可用于程序后续的存储器操作。

在一个实施例中,进一步参照图5,取决于当前正在调度加载操作还是存储操作供执行,操作管理器电路430可指示地址多路复用器532选择在加载地址队列522或存储地址队列524中被缓冲的地址变元。如果它是存储操作,则操作管理器电路430也可指示存储数据多路复用器534从存储数据队列526选择对应数据。操作管理器电路430也可指示完成队列索引多路复用器536检索完成队列420内的根据队列状态和/或程序顺序经索引的加载操作条目,从而完成加载操作。操作管理器电路430也可指示加载数据多路复用器538将从存储器子系统110接收的数据选到完成队列420中,用于正等待完成的加载操作。以此方式,操作管理器电路430可指示对着手形成存储器命令550(例如,加载命令或存储命令)或执行电路434正等待的用于完成存储器操作的输入的选择。

图7是根据本公开的一个实施例的执行电路434的框图,该执行电路434可包括优先级编码器706、选择电路708,该选择电路708生成(多个)输出控制线710。在一个实施例中,执行电路434可访问已确定为可执行的(图6)(操作队列412中的)经排队的存储器操作。执行电路434也可接收调度704A、704B、704C,这些调度704A、704B、704C用于已排好队且也指示为准备好发布至存储器的多个经排队的存储器操作。优先级编码器706因此可接收已经被调度的可执行存储器操作的标识,并且执行某些规则(或遵循特定逻辑)以从进入的具有要首先被执行的优先级的那些存储器操作中选择存储器操作。优先级编码器706可输出选择器信号707,该选择器信号707标识具有最高优先级且因此已被选择的经调度的存储器操作。

优先级编码器706例如可以是将多个二进制输入压缩为较少数量的输出(包括可能仅是一个输出)的电路(诸如,状态机或更简单的转换器)。优先级编码器的输出是从最高有效输出位的零开始的原始号码的二进制表示。因此,在一个实施例中,当存储器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)是可执行的且被调度时,分别对应于704A、704B和704C。优先级编码器706可配置成用于将选择器信号707输出至选择电路708,该选择器信号707将存储器操作零指示为具有最高优先级的存储器操作。在一个实施例中,选择电路708可以是多路复用器,并且可配置成用于响应于来自优先级编码器706的选择器信号(且指示对最高优先级的存储器操作的选择)将其(例如,对存储器操作零的)选择输出到控制线710上作为控制信号。该控制信号可去往如参照图5所讨论的多路复用器532、534、536和/或538以填充下一个将发布(被发送)到存储器子系统110的存储器命令550。存储器命令的传输可理解为向存储器子系统110发布存储器操作。

图8是根据本公开的实施例的逻辑和二进制两种形式的示例性加载操作800的框图。往回参照图6,加载操作800的逻辑表示可包括作为输入队列标识符610的(对应于加载地址队列522的)通道零(“0”)以及作为输出队列标识符620的(对应于输出缓冲器544的)完成通道一(“1”)。依赖性队列标识符630可包括两个标识符:用于传入依赖性令牌的(对应于依赖性队列518中的第一个的)通道B0以及用于传出依赖性令牌的计数器C0。操作类型640具有“加载”指示(其也可以是数值指示符)以指示存储器操作是加载操作。在逻辑存储器操作的逻辑表示下方的是出于示例性目的的二进制表示,例如其中加载由“00”来指示。图8中的加载操作可被扩展以包括其他配置,诸如,存储操作(图10A)或其他类型的存储器操作(诸如,围栏)。

出于解释的目的,参照图9A-9B、10A-10B和11A-11G,将利用简化的示例来说明由存储器排序电路105进行的存储器排序的示例。对于此示例,以下代码包括阵列p,该阵列p通过索引i和i+2来访问:

for(i){

temp=p[i];

p[i+2]=temp;

}

对于此示例,假设阵列p包含0、1、2、3、4、5、6,并且在循环执行的结束时,阵列p将包含0、1、0、1、0、1、0。该代码可通过将循环展开来变化,如图9A和图9B中所示。真实的地址依赖性由图9A中的箭头标注,即,在每一种情况下,加载操作依赖于向相同地址的存储操作。例如,对于此类依赖性中的第一个,向p[2]的存储(例如,写入)需要在从p[2]的加载(例如,读取)之前发生,对于此类依赖性中的第二个,向p[3]的存储需要在从p[3]的加载之前发生,以此类推。由于编译器将是悲观型的,因此编译器标注两个存储器操作load p[i]与store[i+2]之间的依赖性。注意,仅在有些时候读取和写入才确实发生冲突。微架构500设计成在当没有至相同地址的冲突的同时存储器操作可向前移动的情况下提取存储器级并行性。加载操作尤其是这种情况,由于要等待在先的依赖性存储操作完成,加载操作在代码执行中暴露等待时间。在图9B中的示例代码中,安全的重排序由展开代码左边的箭头标注。

微架构可执行此重排序的方式参照图10A-10B和11A-11G来讨论。注意,此方式不是尽可能最优化的,因为微架构500可能无法每个周期将存储器命令发送至存储器。然而,利用最少的硬件,微架构通过当操作数(例如,对于存储的地址和数据,或对于加载的地址)和依赖性令牌可用时执行存储器操作来支持依赖性流。

图10A是根据本公开的实施例的用于加载操作1002和存储操作1004的示例性存储器变元的框图。已参照图8讨论的这些或类似的存储器变元,并且在此将不再重复。然而,要注意,存储操作1004不具有用于输出队列标识符的指示符,因为数据正在被输出到加速硬件102。相反,如输入队列标识符存储器变元中所指示,输入队列416的通道1中的存储地址和通道2中的数据将被调度,以便在存储器命令中传输至存储器子系统110,从而完成存储操作1004。此外,依赖性队列的输入通道和输出通道两者都以计数器来实现。由于图9A和图9B中所显示的加载操作和存储操作是互相依赖的,因此计数器可在代码流内的加载操作与存储操作之间轮转。

图10B是示出根据本公开的实施例的、通过图5中的存储器排序电路的微架构500进行加载操作和存储操作(诸如,图9A中的加载操作1002和存储操作1004)的流的框图。为了简化解释,不是所有组件都被显示,但是可往回引用图5中显示的附加组件。指示加载操作1002的“加载”和存储操作1004的“存储”的各个椭圆形覆盖在微架构的组件中的一些组件上,作为对队列的各通道如何正被用作存储器操作,如何通过微架构500被排队和排序的指示。

图11A、11B、11C、11D、11E、11F、11G和11H是示出根据本公开的实施例的通过图10B中的微架构的队列对图9A和图9B中的示例性程序进行的加载操作和存储操作的功能性流的框图。每一个图可对应于由微架构500进行的下一处理周期。斜体的值是(进入队列的)传入值,而粗体的值是(离开队列的)传出值。普通字体的所有其他所有值是已经存在于队列中的保留值。

在图11A中,地址p[0]正传入加载地址队列522,并且地址p[2]正传入存储地址队列524,从而开始控制流过程。注意,用于加载地址队列的依赖性输入的计数器C0为“1”,而用于依赖性输出的计数器C1为零。相比之下,C0的“1”对于存储操作指示依赖性出值(out value)。这指示了对于p[0]的加载操作的传入依赖性以及对于p[2]的存储操作的传出依赖性。然而,这些值还不是活跃的,并且将在图11B中以此方式变得活跃。

在图11B中,地址p[0]是粗体的以指示它在该周期中正传出。新地址p[1]正传入加载地址队列,并且新地址p[3]正传入存储地址队列。完成队列542中的零(“0”)值位也正传入,其指示针对那个经索引条目存在的任何数据都是无效的。如所提及的那样,计数器C0和C1的值现在被指示为传入,并且因此现在对于该周期是活跃的。

在图11C中,传出地址p[0]现在已离开加载地址队列,并且新地址p[2]正传入加载地址队列。并且数据(“0”)正传入地址p[0]的完成队列。有效性位被置位为“1”以指示完成队列中的数据是有效的。此外,新地址p[4]正传入存储地址队列。计数器C0的值被指示为传出,并且计数器C1的值被指示为传入。C1的值“1”指示向地址p[4]的存储操作的传入依赖性。

注意,用于最新加载操作的地址p[2]依赖于首先需要由针对地址p[2]的存储操作存储的值,其在存储地址队列的顶部。此后,用于从地址p[2]进行的加载操作的完成队列中的经索引条目可保持被缓冲,直到来自向地址p[2]的存储操作的数据完成(参见图11F-11H)。

在图11D中,数据(“0”)正从用于地址p[0]的完成队列传出,因此它正被向外发送到加速硬件102。此外,新地址p[3]正传入加载地址队列,并且新地址p[5]正传入存储地址队列。计数器C0和C1的值保持不变。

在图11E中,用于地址p[2]的值(“0”)正传入存储数据队列,同时新地址p[4]进入加载地址队列且新地址p[6]进入存储地址队列。计数器C0和C1的值保持不变。

在图11F中,存储数据队列中用于地址p[2]的值(“0”)和存储地址队列中的地址p[2]两者都是传出值。类似地,计数器C1的值被指示为传出,而计数器C0的值(“0”)保持不变。此外,新地址p[5]正传入加载地址队列,并且新地址p[7]正传入存储地址队列。

在图11G中,值(“0”)正传入以指示在完成队列542中的经索引的值是无效的。地址p[1]是粗体的以指示它正从加载地址队列传出,同时新地址p[6]正传入加载地址队列。新地址p[8]也正传入存储地址队列。计数器C0的值正作为“1”传入,这对应于针对地址p[6]的加载操作的传入依赖性以及针对地址p[8]的存储操作的传出依赖性。计数器C1的值现在是“0”,并且被指示为传出。

在图11H中,数据值“1”正传入完成队列542,同时有效性位也作为“1”传入,这意味着经缓冲的数据是有效的。这是完成针对地址p[2]的加载操作所需的数据。回忆一下,该数据必须首选被存储到地址p[2],这在图11F中发生。计数器C0的值“0”正传出,而计数器C1的值“1”正传入。此外,新地址p[7]正传入加载地址队列,并且新地址p[9]正传入存储地址队列。

在当前实施例中,凭借用于加载操作和存储操作的“0”和“1”之间的弹跳的(bouncing)依赖性令牌,执行图9A和图9B的代码的过程可继续进行。这是由于p[i]与p[i+2]之间紧密的依赖性。具有较不频繁依赖性的其他代码能以较慢速率生成依赖性令牌,并因此以较慢速率重置计数器C0和C1,从而导致(对应于进一步语义分离的存储器操作的)较高值的令牌的生成。

图12是根据本公开的实施例的用于对加速硬件与乱序存储器子系统之间的存储器操作进行排序的方法1200的流程图。方法1200可由包括硬件(例如,电路、专用逻辑和/或可编程逻辑)、软件(例如,在计算机系统上可执行以执行硬件仿真的指令)或硬件和软件的组合的系统来执行。在说明性示例中,方法1200可由存储器排序电路105以及该存储器排序电路105的各子组件执行。

更具体地,参照图12,方法1200可开始于:存储器排序电路在该存储器排序电路的操作队列中对存储器操作排队(1210)。存储器操作和控制变元可构成如经排队的存储器操作,其中,如先前所讨论,存储器操作和控制变元被映射至存储器排序电路内的某些队列。存储器排序电路可运作以将存储器操作发布至与加速硬件相关联的存储器,从而确保这些存储器操作按程序顺序完成。方法1200可继续进行以下步骤:存储器排序电路在输入队列的集合中从加速硬件接收与存储器操作中的第二存储器操作相关联的存储器的地址(1220)。在一个实施例中,输入队列的集合中的加载地址队列是用于接收该地址的通道。在另一实施例中,输入队列的集合中的存储地址队列是用于接收该地址的通道。方法1200可继续进行以下步骤:存储器排序电路从加速硬件接收与该地址相关联的依赖性令牌,其中,该依赖性令牌指示对由存储器操作中的第一存储器操作生成的数据的依赖性,该第一存储器操作先于第二存储器操作(1230)。在一个实施例中,依赖性队列的通道用于接收该依赖性令牌。第一存储器操作可以是加载操作或存储操作。

方法1200可继续进行以下步骤:存储器排序电路响应于接收到该依赖性令牌和与该依赖性令牌相关联的地址而调度第二存储器操作向存储器的发布(1240)。例如,当加载地址队列接收用于加载操作的地址变元的地址且依赖性队列接收用于加载操作的控制变元的依赖性令牌时,存储器排序电路可将第二存储器操作的发布调度为加载操作。方法1200可继续进行以下步骤:存储器排序电路响应于第一存储器操作的完成而(例如,在命令中)将第二存储器操作发布至存储器。例如,如果第一存储器操作是存储,则完成可通过输入队列的集合中的存储数据队列中的数据已被写入存储器中的地址的确收来验证。类似地,如果第一存储器操作是加载操作,则完成可通过针对加载操作的从存储器接收到数据来验证。

图13A是示出根据实施例的用于处理器1300的微架构的框图,该处理器1300用于执行包括图1A-1B中的存储器子系统110和加速硬件102的处理器或集成电路的操作。具体地,处理器1300描绘根据本公开的至少一个实施例的要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑。

处理器1300包括前端单元1330,该前端单元1330耦合到执行引擎单元1350,前端单元1330和执行引擎单元1350两者都耦合到存储器单元1370。处理器1300可包括精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替代核类型。作为另一个选项,处理器1300可包括专用核,诸如,网络或通信核、压缩引擎、图形核,等等。在一个实施例中,处理器1300可以是多核处理器或可以是多处理器系统的部分。

前端单元1330包括耦合到指令高速缓存单元1334的分支预测单元1332,该指令高速缓存单元耦合到指令转换后备缓冲器(TLB)1336,该指令转换后备缓冲器耦合到指令取出单元1338,指令取出单元耦合到解码单元1340。解码单元1340(也称为解码器)可解码指令,并生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码器1340可使用各种不同的机制来实现。合适机构的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。指令高速缓存单元1334进一步耦合至存储器单元1370。解码单元1340耦合至执行引擎单元1350中的重命名/分配器单元1352。

执行引擎单元1350包括耦合到引退单元1354和一个或多个调度器单元1356的集合的重命名/分配器单元1352。(多个)调度器单元1356表示任意数量的不同调度器电路,包括预留站(RS)、中央指令窗口等。(多个)调度器单元1356耦合到(多个)物理寄存器组单元1358。(多个)物理寄存器组单元1358中的每一个表示一个或多个物理寄存器组,其中不同的物理寄存器组保存一个或多个不同的数据类型(诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,等等)、状态(诸如,指令指针是将要执行的下一个指令的地址)等等。(多个)物理寄存器组单元1358被引退单元1354所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用(多个)重排序缓冲器和(多个)引退寄存器组、使用(多个)未来文件(future file)、(多个)历史缓冲器、(多个)引退寄存器组、使用寄存器映射和寄存器池等等)。

通常,架构寄存器从处理器外部或从编程者的视角来看是可见的。这些寄存器不限于任何已知的特定电路类型。多种不同类型的寄存器可适用,只要它们能够存储并提供在此所述的数据。合适寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配物理寄存器的组合,等等。引退单元1354和(多个)物理寄存器组单元1358耦合至(多个)执行群集1360。(多个)执行群集1360包括一个或多个执行单元1362的集合以及一个或多个存储器访问单元1364的集合。执行单元1362可执行多种操作(例如,移位、加法、减法、乘法)并可对多种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。

尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。(多个)调度器单元1356、(多个)物理寄存器组单元1358、(多个)执行群集1360被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了多个单独流水线(例如,均具有各自调度器单元、(多个)物理寄存器组单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,并且在单独的存储器访问流水线的情况下,某些实施例被实现为仅仅该流水线的执行群集具有(多个)存储器访问单元1364)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为乱序发布/执行,并且其余流水线可以为有序发布/执行。

存储器访问单元1364的集合耦合到存储器单元1370,该存储器单元1370可包括数据预取器1380、数据TLB单元1372、数据高速缓存单元(DCU)1374、第二级(L2)高速缓存单元1376,仅举数例。在一些实施例中,DCU 1374也称为第一级数据高速缓存(L1高速缓存)。DCU 1374可处理多个未决的高速缓存未命中,并继续服务传入的存储和加载。它也支持维护高速缓存一致性。数据TLB单元1372是用于通过映射虚拟和物理地址空间来改善虚拟地址转换的高速缓存。在一个示例性实施例中,存储器访问单元1364可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元1370中的数据TLB单元1372。L2高速缓存单元1376可耦合至一个或多个其他级别的高速缓存,并最终耦合至主存储器。

在一个实施例,数据预取器1380通过自动地预测程序将消耗哪些数据来推测性地将数据加载/预取到DCU 1374。预取可以指当处理器实际需要数据之前将存储在存储器层次结构(例如,较底级别高速缓存或存储器)的一个存储器位置(例如,地方)的数据传送至更接近处理器的较高级别的存储器位置(例如,产生较低的访问等待时间)。更具体地,预取可以指当处理器发布对正在被返回的特定数据的需求之前数据从较低级别高速缓存/存储器之一至数据高速缓存和/或预取缓冲器的早期取回。

处理器1300可支持一个或多个指令集(诸如,x86指令集(具有增加有更新版本的一些扩展)、英国赫特福德郡金斯兰利的想象技术公司(Imagination Technologies)的MIPS指令集、加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集(具有可选附加扩展,诸如NEON))。

应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。

尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。虽然处理器的所示出的实施例也包括单独的指令和数据高速缓存单元以及共享的L2高速缓存单元,但替代的实施例也可具有用于指令和数据的单个内部高速缓存,诸如例如第一级(L1)内部高速缓存、或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。注意,指令高速缓存单元1334、数据高速缓存单元1374和L2高速缓存单元1376一般将不会实现本公开中描述的过程,因为一般而言,这些高速缓存单元使用不呈现页局部性行为的管芯上存储器。

图13B是示出根据本公开的一些实施例的由图13A的处理器1300实现的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。图13B中的实线框示出了有序流水线1301,而虚线框示出了寄存器重命名、乱序发布/执行流水线1303。在图13B中,流水线1301和1303包括取出级1302、长度解码级1304、解码级1306、分配级1308、重命名级1310、调度(也被称为分派或发布)级1312、寄存器读取/存储器读取级1314、执行级1316、写回/存储器写入级1318、异常处理级1322和提交级1324。在一些实施例中,各个级1302-1324的排序可以与所示的不同,并且不限于图13B中所示的特定排序。

图14示出根据本公开的实施例的用于处理器1400的微架构的框图,该处理器1400包括包含有图1A-1B中的存储器子系统110和加速硬件102的处理器或集成电路的逻辑电路。在一些实施例中,根据一个实施例的指令可被实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(诸如单精度和双精度整数和浮点数据类型)的数据元素执行操作。在一个实施例中,有序前端1401是处理器1400的一部分,其取出将要被执行的指令,并准备这些指令以在稍后供处理器流水线使用。页添加和内容复制的实施例可实现在处理器1400中。

前端1401可包括若干单元。在一个实施例中,指令预取器1416从存储器取出指令,并将指令馈送至指令解码器1418,指令解码器1418随后解码或解释指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微操作数或uop)的一个或多个操作。在其他实施例中,解码器将指令解析为操作码和对应的数据及控制字段,它们被微架构用于执行根据一个实施例的操作。在一个实施例中,追踪高速缓存1430接受经解码的微操作,并将它们组装为程序有序序列或微操作队列1434中的踪迹,以用于执行。当追踪高速缓存1430遇到复杂指令时,微代码ROM(或RAM)1432提供完成操作所需的微操作。

一些指令被转换为单个微操作,而其他指令需要若干个微操作以完成整个操作。在一个实施例中,如果需要超过四个微操作来完成指令,则解码器1418访问微代码ROM 1432以进行该指令。对于一个实施例,指令可被解码为少量的微操作以用于在指令解码器1418处进行处理。在另一个实施例中,如果需要若干微操作来完成操作,则可将指令存储在微代码ROM 1432中。追踪高速缓存1430参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以从微代码ROM 1432读取微代码序列以完成根据一个实施例的一条或多条指令。在微代码ROM 1432完成对于指令的微操作序列化之后,机器的前端1401恢复从追踪高速缓存1430提取微操作。

乱序执行引擎1403是将指令准备好用于执行的地方。乱序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器组中的条目。在指令调度器(存储器调度器、快速调度器1402、慢速/通用浮点调度器1404、简单浮点调度器1406)之前,分配器也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作,另一个微操作队列用于非存储器操作。微操作调度器1402、1404、1406基于对它们的依赖输入寄存器操作数源的准备就绪以及微操作完成它们的操作所需的执行资源的可用性来确定微操作何时准备好用于执行。一个实施例的快速调度器1402可在主时钟周期的每半个上进行调度,而其他调度器可仅仅在每个主处理器时钟周期上调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。

寄存器组1408、1410位于调度器1402、1404、1406和执行块1411中的执行单元1412、1414、1416、1418、1420、1422、1424之间。也存在单独的寄存器组1408、1410,分别用于整数和浮点操作。一个实施例的每个寄存器组1408、1410也包括旁路网络,旁路网络可将刚完成的还没有被写入寄存器组的结果旁路或转发给新的依赖微操作。整数寄存器组1408和浮点寄存器组1410也能够彼此通信数据。对于一个实施例,整数寄存器组1408被划分为两个单独的寄存器组,一个寄存器组用于低阶的32位数据,第二个寄存器组用于高阶的32位数据。一个实施例的浮点寄存器组1410具有128位宽度的条目,因为浮点指令通常具有从64至128位宽度的操作数。

执行块1411包括执行单元1412、1414、1416、1418、1420、1422、1424,在执行单元1412、1414、1416、1418、1420、1422、1424中实际执行指令。该区块包括寄存器组1408、1410,寄存器组1408、1410存储微指令需要执行的整数和浮点数据操作数值。一个实施例的处理器1400包括有多个执行单元:地址生成单元(AGU)1412、AGU 1414、快速ALU 1416、快速ALU 1418、慢速ALU 1420、浮点ALU 1412、浮点移动单元1414。对于一个实施例,浮点执行块1412、1414执行浮点、MMX、SIMD、SSE以及其他操作。一个实施例的浮点ALU 1412包括64位/64位浮点除法器,用于执行除法、平方根、以及余数微操作。对于本公开的诸个实施例,涉及浮点值的指令可使用浮点硬件来处理。

在一个实施例中,ALU操作进入高速ALU执行单元1416、1418。一个实施例的高速ALU 1416、1418可执行高速操作,有效等待时间为半个时钟周期。对于一个实施例,大多数复杂整数操作进入慢速ALU 1420,因为慢速ALU1420包括用于长等待时间类型操作的整数执行硬件,诸如,乘法器、移位器、标记逻辑和分支处理。存储器加载/存储操作由AGU 1422、1424来执行。对于一个实施例,整数ALU 1416、1418、1420被描述为对64位数据操作数执行整数操作。在替代实施例中,可实现ALU 1416、1418、1420以支持包括16、32、128、256等各种数据位。类似地,可实现浮点单元1422、1424以支持具有各种位宽的多个操作数。对于一个实施例,浮点单元1422、1424可结合SIMD和多媒体指令对128位宽度紧缩数据操作数进行操作。

在一个实施例中,在父加载完成执行之前,微操作调度器1402、1404、1406就分派依赖性操作。因为在处理器1400中微操作被投机地调度和执行,所以处理器1400也包括处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存已在带着临时错误的数据离开调度器的运行中的依赖性操作。重放机制跟踪使用错误数据的指令,并重新执行这些指令。仅仅依赖性操作需要被重放,而允许独立操作完成。处理器的一个实施例的调度器和重放机制也设计成用于捕捉用于文本串比较操作的指令序列。

术语“寄存器”指代被用作为指令的一部分以标识操作数的板上处理器存储位置。换句话说,寄存器是那些处理器外部(从编程者的角度来看)可用的处理器存储位置。然而,实施例的寄存器不限于表示特定类型的电路。相反,实施例的寄存器能够存储并提供数据,并能够执行本文中所述的功能。本文所描述的寄存器可利用任何数量的不同技术通过处理器中的电路来实现,这些不同技术诸如专用物理寄存器、利用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器组也包含用于紧缩数据的八个多媒体SIMD寄存器。

对于本文中的讨论,寄存器应被理解为设计成保存紧缩数据的数据寄存器,诸如,来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了MMX技术的微处理器中的64位宽MMXTM寄存器(在一些实例中也称为“mm”寄存器)。这些MMX寄存器(可用在整数和浮点格式中)可与伴随SIMD和SSE指令的紧缩数据元素一起操作。类似地,涉及SSE2、SSE3、SSE4或更新的技术(统称为“SSEx”)的128位宽XMM寄存器也可被用于保持这样紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点数据可被包括在相同的寄存器组中,或被包括在不同的寄存器组中。进一步地,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。

实施例可在许多不同的系统类型中实现。现在参考图15,示出的是根据实现方式的多处理器系统1500的框图。如图15中所示,多处理器系统1500是点对点互连系统,且包括经由点对点互连1550耦合的第一处理器1570和第二处理器1580。如图15中所示,处理器1570和1580中的每一个可以是多核处理器,包括第一和第二处理器核(即,处理器核1574a和1574b以及处理器核1584a和1584b),但是潜在地,多得多的核可存在于处理器中。

虽然以两个处理器1570、1580来示出,但应理解本公开的范围不限于此。在其他实现方式中,在给定处理器中可存在一个或多个附加处理器。

处理器1570和1580被示为分别包括集成存储器控制器元1572和1582。处理器1570还包括作为其总线控制器单元的一部分的点对点(P-P)接口1576和1578;类似地,第二处理器1580包括P-P接口1586和1588。处理器1570、1580可以经由使用点对点(P-P)接口电路1578、1588的P-P接口1550来交换信息。如图15中所示,IMC 1572和1582将处理器耦合到相应的存储器,即存储器1532和存储器1534,这些存储器可以是本地附连到相应处理器的主存储器的部分。

处理器1570、1580可各自经由使用点对点接口电路1576、1594、1586、1598的各个P-P接口1552、1554与芯片组1590交换信息。芯片组1590还可经由高性能图形接口1539与高性能图形电路1538交换信息。

共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器的外部但经由P-P互连与这些处理器连接,从而如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。当将条目分配至共享高速缓存时,页局部性也可跨一个或多个高速缓存控制器在共享高速缓存中被创建。

芯片组1590可以经由接口1596耦合至第一总线1516。在一个实施例中,第一总线1516可以是外围组件互连(PCI)总线或诸如PCI高速总线或互连总线之类的总线,但是本公开的范围不限于此。

现在参照图16,所示出的是根据本公开实施例的第三系统1600的框图。图15和图16中的相同部件用相同附图标记表示,并从图16中省去了图15中的某些方面,以避免使图16的其它方面变得模糊。

图16示出处理器1670、1680可分别包括集成存储器和I/O控制逻辑(“CL”)1672和1692。对于至少一个实施例,CL 1672、1682可包括如本文中所述的集成存储器控制器单元。此外,CL 1672、1692还可包括I/O控制逻辑。图16示出存储器1632、1634耦合至CL 1672、1692,并且I/O设备1614耦合至控制逻辑1672、1692。传统I/O设备1615耦合至芯片组1690。

图17是示例性芯片上系统(SoC)1700,该示例性SoC 1700可包括核1702A…1702N中的一个或多个。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其他执行逻辑的多个系统和电子设备一般都是合适的。

在图17中的示例性SoC 1700内,虚线框是更高级的SoC上的特征。(多个)互连单元1702可耦合至:应用处理器1717,包括一个或多个核1702A-N的集合以及(多个)共享高速缓存单元1706;系统代理单元1710;(多个)总线控制器单元1716;(多个)集成存储器控制器单元1714;一个或多个媒体处理器1720的集合,可包括集成图形逻辑1708、用于提供静态和/或视频照相功能的图像处理器1724、提供硬件音频加速的音频处理器1726、用于提供视频编码/解码加速的视频处理器1728;静态随机存取存储器(SRAM)单元1730;直接存储器存取(DMA)单元1732;以及显示单元1740,用于耦合至一个或多个外部显示器。

接下来转到图18,描绘了根据本公开的实施例的芯片上系统(SoC)设计的实施例。作为说明性示例,SoC 1800被包括在用户装备(UE)中。在一个实施例中,UE是指可由最终用户用于通信的任何设备,诸如,手持电话、智能电话、平板,超博笔记本、具有宽带适配器的笔记本,或任何其他类似的通信设备。UE可连接至基站或节点,该基站或节点本质上可对应于GSM网络中的移动站(MS)。页添加和内容复制的实施例可实现在SoC 1800中。

在此,SoC 1800包括2个核——1806和1807。类似于上文的讨论,核1806和1807可符合指令集架构,诸如,具有架构核TM的处理器、超微半导体公司(AMD)处理器、基于MIPS的处理器、基于ARM处理器设计、或它们的客户、以及它们的许可方或采纳方。核1806和1807耦合到高速缓存控件1808,该高速缓存控件1808与总线接口单元1809和L2高速缓存1810相关联以与系统1800的其他部分通信。互连1811包括芯片上互连,诸如,IOSF、AMBA或上文讨论的其他互连,它们可以实现所描述的公开的一个或多个方面。

在一个实施例中,SDRAM控制器1840可经由高速缓存1810而连接至互连1811。互连1811提供到其他组件的通信信道,其他组件诸如用于与用户身份模块(SIM)卡对接的SIM 1830、用于保存供核1806和1807执行以初始化和引导SoC 1800的引导代码的引导ROM 1835、用于与外部存储器(例如,DRAM 1860)对接的SDRAM控制器1840、用于与非易失性存储器(例如,闪存1865)对接的闪存控制器1845、用于与外围设备对接的外围控制装置1850(例如,串行外围接口)、用于显示和接收输入(例如,允许触摸的输入)的视频编解码器1820和视频接口1825、用于执行图形相关的计算的GPU 1815等等。这些接口中的任何一种可以包括本文中所描述的各实施例的各方面。

另外,系统示出了用于通信的外围设备,诸如,模块1870、3G调制解调器1875、GPS 1880以及Wi-1885。注意,如上文所述,UE包括用于通信的无线电装置。因此,这些外围通信模块可以不被全部包括。然而,在UE中,应当包括用于外部通信的某种形式的无线电装置。

图19示出了计算机系统1900的示例形式的机器的示意图,在该计算系统1900内,可以执行用于使机器执行本文中所讨论的方法中的任何一种或多种方法的一组指令。在替代实施例中,可以在LAN、内联网、外联网或因特网中将机器连接(例如,联网)到其他机器。机器可以在客户机-服务器网络环境中作为服务器或客户机设备操作,或者在对等(或分布式)网络环境中作为对等机器操作。该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web设备、服务器、网络路由器、交换机或桥、或者能够执行指定由该机器执行的动作的一组指令(连续的或以其他方式)的任何机器。此外,虽然仅示出单个机器,但是,术语“机器”也应当包括单独或共同执行一组(或多组)指令以执行本文所讨论的方法中的任何一种或更多种方法的机器的任意集合。可以在计算系统1900中实现页面添加和内容复制的实施例。

计算机系统1900包括处理设备1902、主存储器1904(例如,闪存、动态随机存取存储器(DRAM)(诸如,同步DRAM(SDRAM)或DRAM(RDRAM)等)、静态存储器1906(例如,闪存、静态随机存取存储器(SRAM)等)以及数据存储设备1918,它们经由总线1908彼此进行通信。

处理设备1902表示一个或多个通用处理设备,诸如,微处理器、中央处理单元等。更具体地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算机(RISC)微处理器、超长指令字(VLIW)微处理器、或实现其他指令集的处理器、或实现指令集的组合的处理器。处理设备1902也可以是一个或多个专用处理设备,诸如,专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。在一个实施例中,处理设备1902可以包括一个或多个处理核。处理设备1902被配置成执行用于执行本文中所讨论的操作的处理逻辑1926。

在一个实施例中,处理设备1902可以是包括图1A-1B中的存储器子系统和加速硬件的处理器或集成电路的部分。替代地,计算系统1900可包括本文所描述的其他组件。应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。

计算系统1900还可以包括可通信地耦合到网络1919的网络接口设备1918。计算系统1900也可包括视频显示设备1910(例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备1910(例如,键盘)、光标控制设备1914(例如,鼠标)、信号生成设备1920(例如,扬声器)或其他外围设备。此外,计算系统1900还可以包括图形处理单元1922、视频处理单元1928以及音频处理单元1932。在另一个实施例中,计算系统1900可以包括芯片组(未示出),芯片组是指被设计为与处理设备1902一起协作并控制处理设备1902与外部设备之间的通信的一组集成电路或芯片。例如,芯片组可以是将处理设备1902链接到非常高速度的设备(诸如,主存储器1904和图形控制器)以及将处理设备1902链接到较低速度的外围设备的外围总线(诸如,USB、PCI或ISA总线)的主板上的一组芯片。

数据存储设备1918可以包括计算机可读取的存储介质1924,在其上面存储了具体化本文所描述的功能的方法中的任何一种或多种的软件1926。在由计算系统1900对软件1926的执行期间,软件1926也可完全或至少部分地作为指令1926驻留在主存储器1904内和/或作为处理逻辑驻留在处理设备1902内;该主存储器1904和处理设备1902也构成计算机可读存储介质。

计算机可读存储介质1924还可用于存储指令1926,该指令1926利用处理设备1902和/或软件库,该软件库包含调用上述应用的方法。虽然计算机可读存储介质1924在示例实施例中被示出为单个介质,但术语“计算机可读存储介质”应当视为包括存储一组或多组指令的单个或多个介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。还应当认为术语“计算机可读存储介质”包括能够存储、编码或携带由机器执行并且使该机器执行当前的多个实施例的方法中的任何一种或多种的一组指令的任何介质。术语“计算机可读存储介质”应当相应地视为包括但不限于固态存储器以及光和磁介质。

以下各示例涉及进一步的实施例。

示例1是一种集成电路,包括:1)存储器接口,耦合至存储器,所述存储器用于存储对应于正为程序执行的指令的数据;2)操作队列,耦合至所述存储器接口,所述操作队列用于对于对应于所述指令的存储器操作进行缓冲;3)加速硬件,用于执行对应于所述指令的子程序;4)输入队列的集合,耦合至所述加速硬件并耦合至所述存储器接口,其中,所述输入队列的集合用于从所述加速硬件接收:a)与所述存储器操作中的第二存储器操作相关联的所述存储器的地址;以及b)与所述地址相关联的依赖性令牌,所述依赖性令牌指示对由所述存储器操作中的第一存储器操作生成的数据的依赖性,所述第一存储器操作先于所述第二存储器操作;以及5)调度器电路,耦合至所述存储器接口、所述操作队列和所述输入队列的集合,其中,所述调度器电路用于响应于所述输入队列的集合对所述依赖性令牌和所述地址的接收来调度所述第二存储器操作向所述存储器的发布。

在示例2中,如示例1的集成电路,其中,所述调度器电路是操作管理器电路的部分,并且所述操作管理器电路用于响应于所述第一存储器操作的完成而将所述第二存储器操作发布至所述存储器,其中,所述第一存储器操作是加载操作、存储操作或围栏操作中的一个,并且所述第二存储器操作是加载操作、存储操作或围栏操作中的一个。

在示例3中,如示例1的集成电路,其中,所述第二存储器操作是加载操作,并且所述输入队列的集合包括加载地址队列、存储地址队列、存储数据队列和依赖性队列,所述集成电路进一步包括完成队列,所述完成队列耦合至所述加速硬件和所述存储器接口,其中,所述完成队列用于在所述加载操作完成时对从所述存储器接收到的数据进行缓冲。

在示例4中,如示例3的集成电路,其中,所述第一存储器操作和所述第二存储器操作中的一个当在所述操作队列中被缓冲时包括存储器变元,所述存储器变元包含以下至少一项:1)输入队列标识符,用于指示所述输入队列集合内的输入通道;2)输出队列标识符,用于指示所述完成队列内的输出通道;3)依赖性队列标识符,用于指示所述依赖性队列内的依赖性通道;或者4)操作类型指示符,用于指示存储器操作的类型。

在示例5中,如示例3的集成电路,进一步包括计数器集合,所述计数器集合包括用于生成所述依赖性令牌的第一计数器,并且其中,所述调度器电路用于:进一步响应于所述第一计数器不饱和且在所述完成队列中具有用于完成所述第二存储器操作的空间而调度所述加载操作。

在示例6中,如示例3的集成电路,其中,响应于接收到存储在所述存储器中的所述地址处的数据,所述完成队列进一步用于将所述数据与所述依赖性令牌一起提供给所述加速硬件。

在示例7中,如示例3的集成电路,其中,所述调度器电路进一步用于:a)确定所述加载操作之后的第三存储器操作依赖于由所述加载操作读取的数据;b)复制所述加载操作的所述依赖性令牌;以及c)将所述依赖性令牌与所述加载操作一起发布至所述存储器,以便向所述第三存储器操作指示对由所述加载操作读取的数据的依赖性。

在示例8中,如示例1的集成电路,其中,所述第二存储器操作属于在所述操作队列中被缓冲的多个可执行存储器操作,所述集成电路进一步包括:1)优先级编码器,用于从所述多个可执行存储器操作之间确定所述第二存储器操作具有执行优先级,并生成用于标识所述第二存储器操作的选择信号;以及2)多路复用器,用于根据所述选择信号从所述多个可执行存储器操作之间选择所述第二存储器操作。

各实施例可具有以上所述的结构特征的不同组合。例如,也可参照本文中描述的方法或过程来实现上文中描述的计算系统的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。

示例9是一种存储器排序电路,包括:1)存储器接口,耦合至存储器,所述存储器用于存储对应于正为程序执行的指令的数据;2)操作队列,耦合至所述存储器接口,所述操作队列用于对于对应于所述指令的存储器操作进行缓冲;3)输入队列的集合,耦合至加速硬件,所述加速硬件用于执行对应于所述指令的子程序,其中,所述输入队列的集合用于从所述加速硬件接收:a)从中检索用于所述存储器操作中的加载操作的数据的所述存储器的地址;以及b)与所述地址相关联的依赖性令牌,其中所述依赖性令牌指示对由所述存储器操作中的存储操作存储的数据的依赖性,所述存储操作先于所述加载操作;以及4)调度器电路,耦合至所述存储器接口、所述操作队列和所述输入队列的集合,其中,所述调度器电路用于响应于所述输入队列的集合对所述依赖性令牌和所述地址的接收来调度所述加载操作向所述存储器的发布。

在示例10中,如示例9的存储器排序电路,其中,所述输入队列的集合包括:1)加载地址队列,用于从所述加速硬件接收所述存储器的所述地址;2)存储地址队列,用于从所述加速硬件接收所述存储器的所述地址,所述地址与所述存储操作相关联;3)存储数据队列,用于从所述加速硬件接收与用于所述存储操作的所述地址相关联的数据;以及4)依赖性队列,用于从所述加速硬件接收与所述加载地址队列中的所述地址相关联的所述依赖性令牌。

在示例10中,如示例9的存储器排序电路,进一步包括完成队列,所述完成队列耦合至所述加速硬件和所述存储器接口,其中,所述完成队列用于在所述加载操作的完成时对从所述存储器的所述地址接收到的数据进行缓冲,并且其中,所述加载操作和所述存储操作中的一个当在所述操作队列中被排队时包括存储器变元,所述存储器变元包含以下至少一项:1)输入队列标识符,用于指示所述输入队列集合内的输入通道;2)输出队列标识符,用于指示所述完成队列内的输出通道;3)依赖性队列标识符,用于指示所述输入队列集合中的依赖性队列内的依赖性通道;或者4)操作类型指示符,用于指示存储器操作的类型。

在示例12中,如示例11的存储器排序电路,其中,所述调度器电路进一步用于鉴于以下各项来指示所述加载操作是可执行的:所述依赖性令牌、所述地址在所述输入队列的集合中的可用性以及所述完成队列中的在其中缓冲所述数据的槽的可用性。

在示例13中,如示例12的存储器排序电路,其中,所述存储器排序电路进步包括执行电路,所述执行电路耦合至所述调度器电路,所述执行电路包括优先级编码器,所述优先级编码器用于响应于从所述操作队列中的多个可执行存储器操作之间确定所述加载操作具有执行优先级而生成用于标识所述加载操作的选择器信号,并且其中所述执行电路进一步包括选择电路,所述选择电路用于:a)响应于所述选择信号而从所述操作队列中的所述多个可执行存储器操作中选择所述加载操作;以及b)将指示对所述加载操作的选择的控制信号传输至多路复用器的集合,以便将所述地址和数据传递至将被传输到所述存储器的存储器命令。

在示例14中,如示例12的存储器排序电路,其中,所述调度器电路响应于所述输入队列的集合中的存储数据队列包含与在所述输入队列的集合中的存储地址队列中被缓冲的地址相关联的数据而确定所述存储操作是可执行的。

在示例15中,如示例9的存储器排序电路,进一步包括多个计数器,所述多个计数器耦合至所述输入队列的集合中的依赖性队列并耦合至所述调度器电路,所述多个计数器包括第一计数器,所述第一计数器用于生成依赖于所述加载操作的结果的用于后续存储器操作的第二依赖性令牌。

在示例16中,如示例15的存储器排序电路,其中,所述调度器电路进一步用于:a)确定所述后续存储器操作依赖于由所述加载操作从所述存储器中的所述地址检索的数据;b)在所述后续存储器操作内提供依赖性变元,所述依赖性变元用于标识与将在所述输入队列的集合中的存储地址队列中被缓冲的第二地址相关联的依赖性队列;c)在所述加载操作的完成时,响应于来自于所述存储器中的所述地址的数据的到达而触发第二依赖性令牌的生成;以及d)响应于所述依赖性队列接收到所述第二依赖性令牌且所述存储地址队列接收到所述第二地址,调度所述后续存储器操作以用于发布。

在示例17中,如示例9的存储器排序电路,进一步包括完成队列,所述完成队列耦合至所述加速硬件并耦合至所述调度器电路,所述完成队列用于响应于所述加载操作的完成而对接收到的数据进行缓冲,并且其中,所述调度器电路进一步用于:a)将索引分配到包括用于所述加载操作的按顺序的下一个槽的所述完成队列中以生成索引分配;b)响应于所述加载操作的完成,将所述索引分配传递至所述存储器以指示向何处发送所述数据;c)当所述数据到达时,使所述数据入列在所述完成队列中;以及d)将与所述按顺序的下一个槽相关联的有效性位置位为有效。

在示例18中,如示例17的存储器排序电路,其中,所述调度器电路进一步用于:在完成所述加载操作时,响应于将所述数据提供给所述加速硬件,使所述数据出列且将所述有效性位置位为无效。

各实施例可具有以上所述的结构特征的不同组合。例如,也可参照本文中描述的系统来实现上文中描述的处理器和方法的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。

示例19是一种方法,包括以下步骤:1)在存储器排序电路的操作队列中将存储器操作排队,所述存储器操作用于与同加速硬件相关联的存储器交互,其中,处理器不按程序顺序向所述存储器请求所述存储器操作;2)在输入队列的集合中从所述加速硬件接收与所述存储器操作中的第二存储器操作相关联的存储器的地址;3)从所述加速硬件接收与所述地址相关联的依赖性令牌,其中,所述依赖性令牌指示对由所述存储器操作中的第一存储器操作生成的数据的依赖性,所述第一存储器操作先于所述第二存储器操作;以及4)由所述存储器排序电路响应于接收到所述依赖性令牌和与所述依赖性令牌相关联的地址而调度所述第二存储器操作向所述存储器的发布。

在示例20中,如示例19的方法,进一步包括:响应于所述第一存储器操作的完成而将所述第二存储器操作发布至所述存储器,其中,所述第一存储器操作是加载操作、存储操作或围栏操作中的一个,并且所述第二存储器操作是加载操作、存储操作或围栏操作中的一个。

在示例21中,如示例19的方法,其中,所述第一存储器操作包括存储操作,并且其中,所述第二存储器操作包括用于读取所述存储器中的所述地址处的数据的加载操作,所述方法进一步包括:1)由所述存储器排序电路的调度器电路响应于检测到所述依赖性令牌并在加载地址队列中接收到所述地址而调度所述第二存储器操作;2)在所述加载操作的完成时,确定后续存储器操作依赖于从所述存储器中的所述地址检索到的数据;3)在所述后续存储器操作内提供依赖性变元,所述依赖性变元标识与将在所述输入队列的集合中被缓冲的第二地址相关联的依赖性队列;4)对于所述加载操作而言,响应于以下一种情况而触发用于所述依赖性队列的第二依赖性令牌的生成:将所述地址发送至所述存储器;或来自所述存储器中的所述地址的数据的到达;以及5)响应于所述依赖性队列接收到所述第二依赖性令牌且所述输入队列的集合接收到所述第二地址,由所述调度器电路调度所述后续存储器操作以用于发布。

在示例22中,如示例19的方法,其中,所述存储器排序电路进一步包括计数器集合,所述计数器集合包括用于生成所述依赖性令牌的第一计数器,并且其中调度所述第二存储器操作以用于发布进一步响应于所述第一计数器不饱和且在完成队列中具有用于完成所述第二存储器操作的空间。

在示例21中,如示例19的方法,其中,在所述第二存储器操作的完成时,响应于接收到存储在所述存储器中的所述地址处的数据,所述方法进一步包括:由完成队列将所述数据与所述依赖性令牌一起提供给所述加速硬件。

在示例24中,如示例19的方法,其中,所述存储器操作中的所述第二存储器操作属于在所述操作队列中经排队的一组可执行存储器操作,所述方法进一步包括:1)由所述存储器排序电路的优先级编码器从所述一组可执行存储器操作之间确定所述第二存储器操作具有执行优先级;2)由所述优先级编码器生成标识所述第二存储器操作的选择信号;以及3)根据所述选择信号从所述一组可执行存储器操作之间选择所述第二存储器操作。

尽管已参考有限数量的实施例描述了本公开,但是,本领域技术人员将从其中理解很多修改和变型。所附权利要求书旨在将所有此类修改和变型涵盖为落在本公开的真实精神和范围内。

在以下描述中,阐明了众多特定细节(诸如,特定类型的处理器和系统配置的示例、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定测量/高度、特定处理器流水线级和操作等)以提供对本公开的透彻理解。然而,对本领域普通技术人员显而易见的是,不一定要采用这些具体细节来实施本公开。在其他实例中,未详细描述公知的组件或方法(诸如,具体或替代的处理器架构、用于所描述算法的具体逻辑电路/代码、具体固件代码、具体互连操作、具体逻辑配置、具体制造技术和材料、具体编译器实现、代码中算法的具体表达、具体掉电和功率选通技术/逻辑、以及计算机系统的其他具体操作细节)以避免不必要地使本公开模糊。

实施例参照确定具体集成电路中(诸如,具体计算平台或微处理器中)的基于扇区的高速缓存的高速缓存行中的数据有效性来描述。实施例也可以适用于其他类型的集成电路和可编程逻辑器件。例如,所公开的各实施例不仅限于台式计算机系统或便携式计算机,诸如,UltrabooksTM计算机。并且也可用于其他设备,诸如,手持式设备、平板、其他薄笔记本、芯片上系统(SOC)设备以及嵌入式应用。手持式设备的一些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)和手持式PC。嵌入式应用通常包括微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机或可执行以下教导的功能与操作的任何其他系统。描述了系统可以是任何类型的计算机或嵌入式系统。所公开的各实施例可以特别用于低端设备,诸如可穿戴设备(例如,手表)、电子植入物、传感和控制基础设施设备、控制器、监视控制和数据采集(SCADA)系统等等。此外,本文描述的装置、方法和系统不限于物理计算设备,而是还可涉及用于节能和能效的软件优化。如将在以下描述中变得显而易见的,本文描述的方法、装置和系统的实施例(无论是关于硬件、固件、软件还是它们的组合)对于用性能考量来平衡的‘绿色技术’的前景是至关重要的。

虽然本文中的实施例参照处理器来描述,但其他实施例也适用于其他类型的集成电路和逻辑设备。本公开的实施例的类似技术和教导可应用于其他类型的电路或半导体器件,这些其他类型的电路或半导体器件也可受益于更高的流水线吞吐量和提高的性能。本公开的诸个实施例的教导适用于执行数据操纵的任何处理器或机器。然而,本公开不限于执行512位、256位、128位、64位、32位、或16位数据运算的处理器或机器,并适用于在其中执行数据操作或管理的任何处理器和机器。此外,本文中的描述提供了示例,并且附图出于说明性目的示出了各种示例。然而,这些示例不应当以限制性意义来解释,因为它们仅仅旨在提供本公开的诸个实施例的示例,而并非对本公开的实施例的所有可能实现方式进行穷举。

虽然上述示例在执行单元和逻辑电路的上下文中描述了指令处理和分配,但本公开的其他实施例也可通过存储在机器可读有形介质上的数据或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本公开的至少一个实施例相一致的功能。在一个实施例中,与本公开的实施例相关联的功能被具体化在机器可执行指令中。这些指令可用来使通过这些指令编程的通用处理器或专用处理器执行本公开的步骤。本公开的诸个实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程来执行根据本公开的实施例的一个或多个操作。替代地,本公开的诸个实施例的操作可由包含用于执行这些操作的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。

被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统中的存储器(诸如,DRAM、高速缓存、闪存、或其他存储设备)内。进一步的,指令可经由网络或其他计算机可读介质来分发。因此,计算机可读介质可包括用于以机器(诸如,计算机)可读的形式存储或发送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)发送信息中所用的有形机器可读存储设备。因此,计算机可读介质包括适用于存储或发送机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。

设计会经历多个阶段,从创造到仿真到制造。表示设计的数据可用多种方式来表示该设计。首先,如仿真中将有用的,可使用硬件描述语言或其他功能性描述语言来表示硬件。此外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门电路的电路级模型。此外,大多数设计在某些阶段都达到表示硬件模型中多种设备的物理布置的数据水平。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种各样特征的数据。在任何设计表示中,数据可被存储在任何形式的机器可读介质中。存储器或磁/光存储器(诸如,盘)可以是存储信息的机器可读介质,这些信息是经由光学或电学波来发送的,这些光学或电学波被调制或以其他方式生成以传送这些信息。当发送指示或承载代码或设计的电学载波达到实现电信号的复制、缓冲或重新发送的程度时,即产生了新的副本。因此,通信提供商或网络提供商会在有形机器可读介质上至少临时地存储具体化本公开的诸个实施例的技术的物品(诸如,编码在载波中的信息)。

如本文中所使用的模块指的是硬件、软件、和/或固件的任何组合。作为示例,模块包括与非暂态介质相关联的诸如微控制器之类的硬件,该非暂态介质用于存储适于由该微控制器执行的代码。因此,在一个实施例中,对模块的引用是指硬件,该硬件被专门配置成识别和/或执行要保存在非暂态介质上的代码。另外,在另一实施例中,模块的使用是指包括代码的非暂态介质,该代码专门适于由微控制器执行以进行预定操作。并且可推断,在又一实施例中,术语模块(在该示例中)可以指微控制器和非暂态介质的组合。通常,被示为分开的模块边界一般不同,并且潜在地重叠。例如,第一和第二模块可共享硬件、软件、固件、或它们的组合,同时潜在地保留一些独立的硬件、软件或固件。在一个实施例中,术语逻辑的使用包括诸如晶体管、寄存器之类的硬件或诸如可编程逻辑器件之类的其他硬件。

在一个实施例中,使用短语“被配置成”指的是安排、合在一起、制造、提供销售、进口和/或设计装置、硬件、逻辑或元件以执行指定或所确定的任务。在该示例中,如果不是正在操作的装置或其元件被设计、耦合、和/或互连以执行所述指定任务,则该不是正在操作的装置或其元件仍然“被配置成”执行指定任务。作为纯说明性示例,在操作期间,逻辑门可以提供0或1。但“被配置成”向时钟提供启用信号的逻辑门不包括可提供1或0的每一潜在逻辑门。相反,该逻辑门是以在操作期间1或0的输出用于启用时钟的某种方式来耦合的逻辑门。再次注意,使用术语“被配置成”不要求操作,而是关注于装置、硬件、和/或元件的潜在状态,其中在该潜在状态中,该装置、硬件和/或元件被设计成在该装置、硬件和/或元件正在操作时执行特定任务。

此外,在一个实施例中,使用术语“能够/能够用于”和/或“可操作用于”指的是按如下方式设计的一些装置、逻辑、硬件、和/或元件:以指定方式启用对该装置、逻辑、硬件、和/或元件的使用。如上文所注意,在一个实施例中,“用于”、“能够”、或“可操作用于”的使用指的是装置、逻辑、硬件、和/或元件的潜在状态,其中该装置、逻辑、硬件、和/或元件不是正在操作,而是以此类方式被设计以便以指定方式启用对装置的使用。

如在本文中所使用,值包括数字、状态、逻辑状态、或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值、或多个逻辑值的使用也被称为1和0,这简单地表示了二进制逻辑状态。例如,1指的是逻辑高电平,0指的是逻辑低电平。在一个实施例中,诸如晶体管或闪存单元之类的存储单元能够保持单个逻辑值或多个逻辑值。不过,也使用了计算机系统中的值的其他表示。例如,十进制数十还可以被表示为二进制值1010和十六进制字母A。因此,值包括能够被保存在计算机系统中的信息的任何表示。

而且,状态也可由值或值的部分来表示。作为示例,诸如逻辑1之类的第一值可表示默认或初始状态,而诸如逻辑0之类的第二值可表示非默认状态。此外,在一个实施例中,术语重置和置位分别指的是默认和已更新的值或状态。例如,默认值潜在地包括高逻辑值,即,重置,而已更新的值潜在地包括低逻辑值,即,置位。注意,可以使用值的任何组合来表示任何数量的状态。

上述方法、硬件、软件、固件或代码的实施例可以经由存储在机器可访问、机器可读、计算机可访问、或计算机可读介质上可由处理元件执行的指令或代码来实现。非暂态机器可访问/可读介质包括提供(即,存储和/或发送)诸如计算机或电子系统之类的机器可读形式的信息的任何机制。例如,非暂态机器可访问介质包括:随机存取存储器(RAM),诸如,静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存设备;电存储设备;光存储设备;声存储设备;用于保持从暂态(传播)信号(例如,载波、红外信号、数字信号)接收的信息的其他形式的存储设备;等等,这些与可从其接收信息的非暂态介质相区别。

被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统中的存储器(诸如,DRAM、高速缓存、闪存、或其他存储设备)内。进一步的,指令可经由网络或其他计算机可读介质来分发。因此,计算机可读介质可包括用于以机器(诸如,计算机)可读心事存储或发送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)发送信息中所用的有形机器可读存储器。因此,计算机可读介质包括用于存储或发送机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。

贯穿本说明书,对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性被包括在本公开的至少一个实施例中。因此,在整个说明书的多个位置出现短语“在一个实施例中”或“在实施例中”不一定全部是指同一实施例。此外,在一个或多个实施例中,能以任何合适的方式来组合特定的特征、结构或特性。

在上述说明书中,已经参考特定示例性实施例给出了具体实施方式。然而,将显而易见的是,可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本公开的更宽泛精神和范围。相应地,应当认为说明书和附图是说明性的而不是限制性的。此外,实施例和其他示例性语言的上述使用不一定指的是同一实施例或同一示例,而可能指的是不同和独特的实施例,也有可能是同一实施例。

具体实施方式的一些部分在对计算机存储器内的数据位的操作的算法和符号表示方面来呈现。这些算法描述及表示是数据处理领域的技术人员用于向本领域的其他技术人员最有效地传达其工作实质的手段。算法在此一般被理解为导致所需结果的自洽的操作序列。这些操作需要对物理量进行物理操纵。通常但非必须,这些量采用能被存储、传输、组合、比较、以及以其他方式操纵的电信号或磁信号的形式。主要出于常见用途的考虑,时不时地将这些信号称为位、值、要素、符号、字符、项、数字等已被证明是方便的。本文中描述的块可以是硬件、软件、固件或其组合。

然而,应当记住,所有这些及/或类似的术语将与适当的物理量关联,并且仅仅是应用于这些量的方便的标记。除非明确指明,否则从上文的讨论中显而易见地看出,可以理解,在全文中,利用诸如“定义”、“接收”、“确定”、“发布”、“链接”、“关联”、“获取”、“认证”、“禁止”、“执行”、“请求”、“通信”等术语的讨论,指的是计算系统或类似电子计算设备的动作和进程,该计算系统或类似电子计算设备操纵在该计算系统的寄存器和存储器内表示为物理(例如,电子)量的数据并将其转换成在该计算系统存储器或寄存器或其他此类信息存储、传输或显示设备内类似地表示为物理量的其他数据。

在本文中使用的词语“示例”或“示例性”意味着用作示例、实例或说明。在此被描述为“示例”或“示例性”的任何方面或设计并不一定要被解释为相比其他方面或设计更优选或有利。相反,词语“示例”或“示例性”的使用旨在以具体的方式来呈现诸概念。如在该申请中使用的,术语“或”旨在表示包含性的“或”,而不是排它性的“或”。也就是说,除非根据上下文另有指定或显而易见,否则“X包括A或B”旨在表示自然包含性排列中的任一者。也就是说,如果X包括A;X包括B;或X包括A和B两者;则在任何前述的情况下都满足“X包括A或B”。此外,在本申请和所附权利要求中使用的冠词“一”和“一个”一般应当被解释为表示“一个或多个”,除非根据上下文另有规定或明确指示为单数形式。此外,通篇对术语“实施例”或“一个实施例”或“实现”或“一种实现方式”的使用不旨在意指同一个实施例或实现方式,除非被描述为如此。此外,如此处所使用的术语“第一”、“第二”、“第三”、“第四”等旨在用作用于在不同元件之间进行区分的标记,并且可以不一定具有根据它们的数字指定的顺序含义。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1