用于紧密耦合的异构计算的硬件处理器和方法与流程

文档序号:12362733阅读:342来源:国知局
用于紧密耦合的异构计算的硬件处理器和方法与流程

本公开通常涉及电子设备,并且更具体地,本公开的实施例涉及用于紧密耦合的异构计算的硬件处理器。



背景技术:

处理器或者处理器的集合执行来自例如指令集架构(ISA)的指令集的指令。指令集是与编程相关的计算机架构的一部分,并且通常包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理、以及外部输入和输出(I/O)。

附图说明

在附图的各图中通过示例并且非限制的方式图示本公开,其中相同的附图标记指示相似的元素,并且在附图中:

图1图示了根据本公开的实施例的硬件处理器。

图2A图示了根据本公开的实施例的通过硬件处理器的数据路径。

图2B图示了根据本公开的实施例的通过图2A中的硬件处理器的活动数据路径。

图3图示了根据本公开的实施例的通过数据路径转移的多个矢量。

图4图示了根据本公开的实施例的流程图。

图5A是图示了根据本公开的实施例的通用矢量友好的指令格式及其A类指令模板的框图。

图5B是图示了根据本公开的实施例的通用矢量友好的指令格式及其B类指令模板的框图。

图6A是图示了根据本公开的实施例的用于图5A和5B中的通用矢量友好的指令格式的字段的框图。

图6B是图示了根据本公开的一个实施例的构成完全操作码字段的图6A中的特定矢量友好的指令格式的字段的框图。

图6C是图示了根据本公开的一个实施例的构成寄存器索引字段的图6A中的特定矢量友好的指令格式的字段的框图。

图6D是图示了根据本公开的一个实施例的构成扩增操作字段550的图6A中的特定矢量友好的指令格式的字段的框图。

图7是根据本公开的一个实施例的寄存器架构的框图。

图8A是图示了根据本公开的实施例的示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线两者的框图。

图8B是图示了根据本公开的实施例的将被包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名、无序发出/执行架构核两者的框图。

图9A是根据本公开的实施例的单个处理器核连同其至裸片上互连网络的连接以及连同其二级(L2)高速缓存的本地子集的框图。

图9B是根据本公开的实施例的图9A中的处理器核的部分的展开图。

图10是根据本公开的实施例的可能具有多于一个核、可能具有集成存储器控制器并且可能具有集成图形的处理器的框图。

图11是依据本公开的一个实施例的系统的框图。

图12是依据本公开的实施例的更具体的示例性系统的框图。

图13,示出了依据本公开的实施例的第二更具体的示例性系统的框图。

图14,示出了依据本公开的实施例的片上系统(SoC)的框图。

图15是根据本公开的实施例的对比使用软件指令转换器以将源指令集中的二进制指令转换至目标指令集中的二进制指令的框图。

具体实施方式

在下面的描述中,阐述了许多具体的细节。然而,应当理解可能在没有这些具体细节的情况下实践本公开的实施例。在其他情况下,没有详细示出公知的电路、结构和技术以免使本描述的理解模糊。

本说明书中对于“一个实施例”、“实施例”、“示例实施例”等的引用指示描述的实施例可以包括特定特征、结构或特性,但是每一个实施例可以不一定包括所述特定特征、结构或特性。此外,这样的短语不一定指相同实施例。进一步的,当与实施例相关地描述特定特征、结构或特性时,认为无论是否明确描述,影响与其他实施例相关的这样的特征、结构或特性在本领域技术人员的知识范围内。

(例如,硬件)处理器或处理器的集合执行来自例如指令集架构(ISA)的指令集的指令。该指令集是与编程相关的计算机架构的一部分,并且通常包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。应当注意,术语指令在本文可以是指宏指令(例如,提供给处理器以供执行的指令),或者微指令(例如,从解码宏指令的处理器的解码单元(解码器)产生的指令)。处理器(例如,具有一个或多个核以解码和/或执行指令)可能例如在执行算术、逻辑或其他功能中在数据上进行操作。

某些功能可以包括矢量(例如,具有对应的索引以标识每个元素的数据元素(条目)的阵列或其他有序列表)上的操作,例如,在其他矢量上操作的矢量。矢量的元素通常可以指表示单个值的数据的离散部分,例如,通过它自己的索引值标识。矢量的各元素可以是数(例如,整数、浮点等)。在一个实施例中,矢量包括多个元素以表示单个数,例如,单个浮点数。

处理器可以访问(例如,加载和/或存储)(例如,与处理器裸片分离的)存储器(例如,数据存储设备)中的数据。存储器可以是系统存储器,例如,随机存取存储器(RAM)。数据存储设备可以不包括处理器高速缓存和/或不包括外部储存器,诸如,但不限于,硬盘驱动(HDD)储存器。

处理器可以将某个(某些)操作(或者(一个或多个)操作的部分)卸载至卸载引擎。硬件卸载引擎可以与处理器分离(例如,裸片外)或者是处理器的部分,例如,核的部分或与核分离。利用卸载引擎的处理器(例如,处理器核)可以包括例如当指令被执行时使数据被发送至硬件卸载引擎的在其指令集中的指令(例如,具有特定操作码)。在一个实施例中,卸载引擎包括控制其操作的有限状态机(FSM),例如,如本文所讨论的。在一个实施例中,处理器核(例如,多个(例如,矢量)执行单元)可以以第一时钟速度执行并且卸载引擎可以(例如,同时地)以第二、更快(或更慢)的时钟速度执行。在一个实施例中,卸载引擎以大于二倍的处理器时钟速度操作。在一个实施例中,卸载引擎以处理器时钟速度的2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20或25等倍(或者以处理器时钟速度的2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20或25等分之一)操作。卸载引擎可以是与利用该卸载引擎的处理器不同类型的处理器。在一个实施例中,处理器和卸载引擎使用相同的指令集,例如,ISA。

在一个实施例中,处理器包括专用卸载引擎以解决域特定的问题。与仅硬件和仅软件的方式相比,混合处理器架构的某些实施例可以提供软件的灵活性(例如,运行在处理器上的固件)和优化的硬件的效率(例如,专用卸载引擎)二者。例如,在公共密钥加密(PKE)的一个实施例中,电路(例如,内容处理模块(CPM))可以包括(例如,可编程的)矢量处理器(例如,模块化数学处理器(MMP))和(例如,大的)整数乘法器(521bx521b)卸载引擎。该实施例可以包括卸载引擎的异步使用模型,例如,以使得获得(sourcing)操作数和排出(draining)结果包括两个(例如,固件)矢量指令的执行。指令的这样的顺序执行模型可以减少卸载引擎的利用以及因此减少系统的整体吞吐量。具有(例如,高度)并行数据路径的这样的矢量处理器和卸载引擎还可以包括数据冒险(hazard)解决逻辑的利用。

在本公开的一个实施例中,用于甚长指令字(VLIW)类型的指令的矢量处理器(例如,矢量处理器架构)允许处理器自身内部以及至和/或来自卸载引擎的(例如,高度地)并行的数据移动,例如,由处理器(例如,核)发送至卸载引擎的数据和/或由卸载引擎发送至处理器的数据。VLIW指令(例如,当被执行时)可以引起多个(例如,有区别的或不同的)操作。例如,一个VLIW指令可以(例如,当被执行时)使一个(例如,不同的)操作在处理器的多个执行单元中的每一个上执行。

本公开的某些实施例包括(一个或多个)切换器和多个执行单元以实现并行数据操作。切换器可以是矩阵(例如,交叉)切换器。矩阵切换器通常可以是指在多个输入和多个输出之间的单独切换器的组件。切换器可以是非阻塞切换器,以使得其他并发连接并不阻止将其他输入连接至其他输出。单个输入可以连接至多个输出。

在一个实施例中,如果需要数据(例如,来自流水线中的第一指令)以在该数据上执行操作(例如,由流水线中的第二指令),那么该数据(例如,来自第一指令)的不可用性可能引起该操作(例如,由第二指令)的执行中的延迟。在这样的情况下,执行流水线的一部分可以使用特殊处理,例如被暂停(例如,停止),直到该数据可用(例如,第一指令完成执行因此所得到的数据可由第二指令使用)。这样的情况可能通常被称为数据冒险。

本公开的某些实施例包括数据冒险解决逻辑。在一个实施例中,硬件处理器包括一个或多个(例如,整数)卸载引擎、(例如,(一个或多个)矢量处理器的)一个或多个执行单元、多个存储体以及具有检测和/或防止数据冒险的能力的促进在任何或全部处理元件和存储器之间的数据移动的切换器(例如,包括数据切换逻辑和/或数据冒险解决逻辑)。例如,数据冒险解决逻辑可以控制支持移位(例如,向右或向左)操作(例如,矢量移位操作)的矢量处理数据路径。

图1图示了根据本公开的实施例的硬件处理器100。描述的硬件处理器100包括处理器核102、卸载引擎104、对存储器106的访问以及切换器108。可以利用这些部件的任何组合。虽然示出为分离的部件,但是存储器106可以是硬件处理器100的一部分。处理器核可以包括(例如,串行和/或并行的)一个或多个执行单元。卸载引擎可以执行例如针对处理器核的操作,以使得处理器核可以(例如,同时)执行其他操作。卸载引擎可以(例如,向处理器核)提供信号以指示其操作完成(例如,数据是可用的)。卸载引擎可以与处理器分离(例如,在裸片外)。卸载引擎可以具有对存储器的(例如,与处理器)分离的访问,例如,具有直接存储器访问。

存储器106可以是任何数据存储设备。描述的存储器106包括多个存储体,例如,存储体A、B、F和G。存储器可以包括存储体A-G。存储器可以包括任何多个存储体。例如,存储器可以包括2个或更多存储体、3个或更多存储体、4个或更多存储体、5个或更多存储体等。每个存储体可能具有其自己的一个或多个访问端口(例如,输入和/或输出)。每个存储体可能与其他存储体独立地被访问,例如,多个存储体或每个存储体可以被同时访问。处理器还可以包括存储器。处理器和/或存储器可以包括缓冲器,例如,移位寄存器。

切换器可以(例如,从处理器核102)接收控制信号以将某个(某些)输入连接至某个(某些)输出。切换器108可以包括任何通信路径并且不限于图中描述的那些。切换器可以选择性地连接(一个或多个)部件。例如,切换器108可以连接处理器核、卸载引擎、存储器及其任何组合。注意,本文的单头箭头可以不要求单向通信,例如,它可以指示双向通信(例如,至和来自该部件)。在本文的实施例中可以利用通信路径的任何或全部组合。切换器可以包括数据冒险解决逻辑以控制哪些部件被连接在一起(例如,连接在两个组件之间是活动的)。切换器可以由处理器(例如,处理器核)控制,例如,通过发送至该切换器的一个或多个控制信号。在一个实施例中,切换器可以位于处理器的部件内,例如,在处理器核和/或卸载引擎内。切换器可以控制(例如,激活)连接,以使得数据路径不允许(例如,包括)数据冒险。任何数据路径可以路由回切换器中,例如,以使得输出被路由回作为输入。

图2A图示了根据本公开的实施例的通过硬件处理器200的数据路径。图2A中的数据流通常为从左至右的方式。描述的数据路径包括处理器的指令取出单元210以取出指令。所取出的指令(例如,宏指令)然后可以引向解码器212,例如,以被解码以作为输出而生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,它们被从原始指令中解码出,或者它们以其他方式反映原始指令,或者从原始指令得出。解码的指令可以然后引向矢量分解单元214,例如,以将(例如,VLIW)矢量指令转换成可以由处理器200的描述的数据路径执行的多个(例如,双-四字)子指令(例如,以对于暴露的指令集架构透明的方式)。指令取出单元210、解码器212和矢量分解单元214的任一个或所有可以是可选的。进一步的,虽然描述了多个流水线寄存器(例如,EC/MR寄存器216、MR/EX寄存器220、EX0/EX1寄存器222以及EX/WB寄存器224),但是可以利用任何单个或多个流水线寄存器。在一个实施例中,不利用任何流水线寄存器。

描述的数据路径的其余部分包括相继的处理器流水线级,其被标记为:存储器读取(MR)、执行0(EX0)、执行1(EX1)以及存储器写回(WB)。在一个实施例中,执行级是例如具有描述的电路的处理器(例如,包括核)的处理器200(例如,其单个核202)的部分。处理器核202可以包括具有多个执行级(例如,串行)的电路或者将来自单个执行级的数据输出作为输入重新路由至该单个执行级的电路,例如,(一个或多个)输出被连接回去作为(一个或多个)输入。在一个实施例中,切换器208A和切换器208B可以为相同的切换器。指令取出单元210、解码器212以及矢量分解单元214的任何或所有可以是硬件处理器200或处理器核202的部分。虽然在某些附图中示出了单个处理器核,但是硬件处理器可以包括多个处理器核。在一个实施例中,错误校正(例如,错误校正单元)可以出现在流水线中,例如,在存储器读取(MR)之前。

在一个实施例中,在MR级中的存储(例如,RAM)体是与在写回(WB)级中相同的物理实例。在描述的实施例中,在MR级中的(例如,先进先出(FIFO))缓冲器A(例如,输入缓冲器)与接收卸载引擎204的输出的缓冲器相同。在一个实施例中,接收卸载引擎204的输出的缓冲器是不同的缓冲器。卸载引擎204被示出将其输出直接提供至缓冲器218的输入。在一个实施例中,卸载引擎通过流水线(例如,通过流水线寄存器216的输入)提供其输出。在一个实施例中,可以存在旁路以绕过任意或某些上述电路,例如,在矩阵切换器208A和矩阵切换器208B之间的单独的旁路,例如,用于图2B中的路径(2)。在一个实施例中,矩阵切换器208A和矩阵切换器208B之间的电路可以用作旁路,例如,通过ALU2、EX0/EX1寄存器222(如果存在)以及移位器2(如果存在),例如,而不对数据执行除将其向前转发外的任何操作。

在一个实施例中,处理器(例如,通过图2A中描述的数据路径)对第二(例如,FIFO)缓冲器或缓冲器集合(例如,缓冲器B226和缓冲器C228)进行写入并同时(例如,在时间上重叠)从第一缓冲器(例如,缓冲器A218)读取。在一个实施例中,硬件处理器可以预处理和后处理至和/或来自卸载引擎204的数据。在公共密钥计算中该使用的一个示例是卡拉楚巴(Karatsuba)乘法,其中中间乘法结果可以缝合在一起。另一示例是在椭圆曲线密码(ECC)点加法(point addition)和点加倍(point doubling)中使用的公式。

在某些实施例中,处理器可以包括多个(例如,两个)(例如,矢量)指令单元(例如,并行和/或串行的)。在一个实施例中,(例如,矢量)算术逻辑单元(ALU)执行单元与移位器执行单元串连(例如,向其提供输出)。在某些实施例中,这可以规避可能出现在并行操作中的数据(例如,结构上的)冒险。对于存储(例如,RAM)体(例如,存储体206)也可能发生数据(例如,结构上的)冒险。多个存储体(例如,存储体A和存储体B)可以被(例如,同时)利用,例如,其中卸载引擎204(例如,在一个实施例中的大整数乘法器)接受两个输入(例如,输入操作数)。这在无需在一个存储体上同时读取和/或写入的情况下可以允许并行获得和排出。例如,乘法的卡拉楚巴分解可以同时利用两个存储器写入和三个存储器读取以完全开发在该算法中可用的并行度。描述的数据路径包括另外多个存储体(例如,存储体F和存储体G)。在一个实施例中,利用多个存储体(例如,每个具有与其他存储体的输入端口和输出端口分离的它自己的输入端口和输出端口)可以比添加附加端口至较少数量的存储体更加(例如,面积)高效。在某些实施例(例如,MMP)中,多个(例如,少于全部的)存储体(例如,存储体F和存储体G)可以用作背靠背(back-to-back)乘法的暂时储存器和/或作为内积的累加器。在一个实施例中,第一存储体集合(例如,存储体F和存储体G)相对于第二存储体集合(例如,存储体A和存储体B)在存储容量方面较小。

源可以被路由至多个输入端口。本文公开的数据路径可以支持之前提到的使用示例,但是还实现在存储(例如,RAM)体和缓冲器(例如,输入和输出(例如,FIFO)缓冲器)之间直接的并行数据移动。在一个实施例中,处理器的数据路径可以允许数据例如与其他操作并行地在暂时储存器(例如,存储体F和G)和主储存器(例如,存储体A和B)之间来回移动。

在一个实施例中,例如,为了最大地开发与卸载引擎的同时获得和排出相关的并行度,处理器可以包括支持下面的源-宿(sink)对的任一或两者的(一个或多个)数据路径:

源(例如,存储体A、B、F和G以及缓冲器A)的多个(例如,5个)输出端口中的任一个至多个ALU(例如,在图2A-2B中的并行的ALU1和ALU2)的(例如,每一个)输入端口(例如,4个),以及

源(例如,存储体A、B、F和G、缓冲器A以及ALU1和ALU2)的多个(例如,7个)输出端口中的任一个至多个宿(例如,存储体A、B、F、和G、缓冲器B以及缓冲器C)的输入端口(例如,6个)。

在所指示的源-宿对中的并行移动可以由切换器208A和切换器208B连接(例如,使能)。在一个实施例中,(一个或多个)切换器被发送(一个或多个)控制信号以选择哪个或哪些输入(例如,端口)应当与哪个或哪些输出(例如,端口)连接。例如,指令可以包括(例如,作为其字段)控制信号,例如,以控制哪些连接是活动的。指令(例如,当由处理器执行时)可以指示ALU将在输入数据上执行什么类型的操作。ALU1和ALU2可以同时执行不同类型的操作。

例如用于以指令集架构级支持数据路径中的并行性的一个实施例可以包括64位VLIW类型的指令,在此示例中称为“dexec”并具有表1中的下述格式。

表1

现在转向图2B,将讨论另一指令的示例。图2B图示了根据本公开的实施例的通过图2A中的硬件处理器200的活动数据路径。该示例“dexec”指令201包括四个不同的字段(存储器写回、乘法器缓冲器输入、指令的ALU1部分以及指令的ALU2部分)。不同的虚线指示该指令经由切换器208A和208B引起(例如,来自由处理器对指令的执行)的不同的连接。例如,在存储器写回字段的第一部分中,a3[1]=b0[3]可以指存储体B中第零阵列的第四元素被写入至存储体A中第三阵列的第二元素。例如,始于体B的第四元素的矢量可以被写入(例如,拷贝)至存储体A中,其始于存储体A中的第二元素。“-”可以指示在字段中没有值,例如,在特定示例中并不利用操作字段。在一个实施例中,处理器并不包括暂停(例如,在执行流水线中)。暂停可以是不操作(NOP)指令、气泡(bubble)等。暂停可以是指矢量内暂停,例如,当矢量操作正在发生时的暂停,例如,在执行级0或执行级1中。

在图2B中示出的指令可以是在解决指令内和/或相继的指令间的潜在的数据冒险的同时在多个源和目的地操作数上操作的指令的示例。在高级别,描述的指令包括分别由ALU1和ALU2促进的两个算术操作,具有对用于硬件卸载引擎(例如,乘法器)的操作数进行排队的一个实例以及以四个存储体A、B、F和G为目标的数据移动操作的三个实例。这些操作(例如,顺序的)的示例可以为:

ALU1:源自存储体A的矢量操作数a3[5]经历位旋转并拷贝至输出,其中输出操作数在它的最高有效位(MSB)部分具有额外数据(例如,四字)。ALU1的输出的目的地表达在该指令的其他部分中。

ALU2:ALU2获得单个操作数,它是源自硬件卸载引擎(例如,乘法器)的输出的缓冲器A的输出。该操作可以将此操作数拷贝至ALU2的输出,例如,在MSB部分中添加附加数据(例如,四字)之后。(这最后的操作可以由“+1”指定)。该示例指令并不应用ALU1和ALU2的二元算符能力,而代替地在一元操作数的示例中。ALU可以执行二元和/或一元操作。

硬件乘法器卸载引擎(例如,乘法器):乘法器可以从ALU1的输出(例如,如上文所解释的)和源自存储体F的矢量操作数f[1]获得它的操作数(例如,从缓冲器B和缓冲器C)。

存储器拷贝操作(从左至右阅读):

(1)a2[1]=b0[3]是将(例如,矢量)操作数b0[3]拷贝至a2[1]。

(2)b3[2]=ALU2是将ALU2的输出(例如,上文所解释的)拷贝至存储体B中的(例如,矢量)操作数b3[2]。

(3)g[0]=ALU2也是将ALU2的输出(例如,作为第二目的地操作数)拷贝至存储体G中的(例如,矢量)操作数g[0]。某些实施例可以允许至存储体的第四数据拷贝操作,但是该选项并没有在该示例指令中使用。

作为另一示例,硬件处理器可以包括激活数据路径以对存储在存储体A中大于卸载引擎(例如,乘法器)的宽度(w)的数进行平方。例如,存储在存储体A中的数可以是乘法器卸载引擎的大小的两倍的矢量。在该示例中,作为步骤1,指令可以被接收以将半矢量(half vector)从体A的地址a发送至乘法器缓冲器B和C(例如,乘法一)。作为步骤2,指令可以将半矢量从体A的地址a+宽度(w)发送至乘法器缓冲器B和C(例如,乘法二)。作为步骤3,指令可以将两个半矢量从体A发送至乘法器卸载引擎,在过程中移位一(例如,乘法3)。作为步骤4,硬件处理器可以将乘法器卸载引擎的输出(例如,乘法1的结果)存储至存储体B中在地址[b,b+2w]处。作为步骤5,硬件处理器可以将乘法器卸载引擎的输出(例如,乘法2的结果)存储至体B中在地址[b+2w,b+4w]处。作为步骤6,硬件处理器可以在地址[b+w,b+3w]之间读取体B,发送数据通过ALU以将它加至乘法器卸载引擎的输出(例如,乘法3的结果),并将其存储在体B中在地址[b+w,b+3w]处。

在步骤5和6之间,存在写入后读取并且该逻辑可以防止那里的数据冒险。在步骤6内,在相同指令内可以存在读取和写入的(例如,完美)重叠。在一个实施例中,步骤4和步骤1被合并(merge)成单个指令并同时运行。在一个实施例中,步骤5和步骤2被合并成单个指令并同时运行。在一个实施例中,步骤6和步骤3被合并成单个指令并同时运行。本文的某些实施例为流水线化的处理器提供数据冒险解决逻辑。作为MMP的示例,写入后读取(RAW)冒险可以是可应用的,这可能在当前导指令写入至相同数据储存器(例如,存储体)的重叠地址(例如,地址范围)并且滞后指令从中读取时在两个相继的矢量指令之间发生。在某些实施例中,暂停(例如,NOP)并不被插入矢量内(例如,在矢量的中间)指令执行,例如,归因于涉及将(一个或多个)最低有效位(LSB)从EX0转发至EX1级的数据路径的向右移位操作。在一个实施例中,矢量操作可以从最低有效元素(例如,四字)至最高有效元素(例如,四字),例如,以使得执行向右移位操作,该移位器从矢量中的下一元素(例如,四字)获取LSB。在图2A-2B中的数据路径中,这对应于从EX0级获取所转发的LSB并绕过EX0/EX1流水线。如果在某些实施例中插入暂停,例如,在执行向右移位的矢量操作的中间插入MR/EX流水线中,则该EX1级可能由于缺乏从EX0级转发的有效LSB而不向前进行,例如,在冒险状况将持续的情况下导致死锁。

由于上文提到的在插入暂停中的限制,RAW数据冒险状况(例如,在MMP中)的检测可以在该指令被发出至矢量分解单元之前在解码器中完成,例如,通过针对在数据路径中的待决写入的地址范围检查指令的地址范围。在某些实施例中,在从多个矢量指令至多个不同的存储体的数据路径中可能存在待决写入。本公开的某些实施例在不利用矢量内暂停(例如,NOP中断)的情况下防止数据路径中的冒险。在一个实施例中,在不检查(例如,RAW)数据冒险的情况下由解码器发出矢量指令。可以在从存储体读取之前检查数据冒险,例如,在EC/MR流水线级。该检查可以在矢量的每个元素(例如,字)到达某一级(例如,EC/MR级)时在其上完成(例如,通过错误检查单元)。该检查可以检查在该数据路径的其余部分没有待决写入是将读取的(一个或多个)立即地址。如果检测到(例如,RAW)数据冒险,处理器可以在那里插入矢量间暂停(例如,NOP)而并不插入矢量内暂停(例如,NOP)。在更具侵略性的指令调度中,较早调度的尾随指令可以检测到先前指令的流水线并未完成并可能导致冒险。如果该流水线最多为n个循环,那么n个地址比较器可以被利用以检测该冒险,例如,与执行几乎重叠的地址范围的检查形成对照,当该范围包括存储器边界和存储器回绕时这可能需要具有副作用的实现。

图3图示了根据本公开的实施例的通过数据路径300转移的多个矢量,例如,作为流水线快照。数据冒险解决(例如,逻辑)可以包括下面的任一个或全部。在一个实施例(a)中,数据冒险解决包括使得流水线中的地址仅增加1,例如,在矢量向右移动时。这样,如果在将(例如,元素)x发布至流水线中时,x=m-d<m,其中d是正整数,那么在两个矢量向前行进时步幅d可以被一致地维持。具体地,来自矢量x的读取地址可以继续落后来自矢量m的写入地址距离d。在一个实施例(b)中,如果,在发布x时,x=m+j+d>m+j,其中d是正整数,那么当两个矢量向前行进时步幅d可以被一贯地维持。具体地,来自矢量x的读取地址可以(例如,总是)在来自流水线中活动的矢量m的写入地址范围之外。在一个实施例中,归因于地址检查,如果(例如,并且只有)上面的两种情况(a)和(b)之一命中d≥1,则矢量x可以移动。如果这两种情况都不适用,则(例如,矢量间)暂停(例如,NOP)可以被插入,例如,直到最终要么(a)变得适用于d=1或者矢量M消失。在一个实施例(d)中,如果存在另一矢量,例如,拖着矢量m的矢量n,则矢量x的向前行进可以进一步服从:x<n或者x>n+k。如果二者都不适用,(例如,矢量间)暂停(例如,NOP)可以被插入以允许矢量m和n行进,例如,直到矢量n位于流水线的末尾。然后,(a),(b)和(c)可以递归地适用于矢量n。在一个实施例(e)中,如果在流水线中存在尾随矢量n的更多的矢量,(d)可以是递归地适用的。在一个实施例中,地址检查可以包括检查是否(j+k+2)数量的比较器的任一个指示m的地址等于正被读取的x的地址。

本公开的某些实施例可以不检查任何范围,例如,它可以仅对照手头上的单个读取地址检查流水线中的待决写入地址的相等性。本公开的某些实施例可以允许数据冒险解决逻辑不检查是否待决写入属于一个矢量指令,例如,在不适用动态矢量追踪逻辑的情况下。

本文的某些实施例可以实现对卸载引擎的100%或大约100%的利用。本文的某些实施例提供紧密耦合用于由两个不同的处理引擎(例如,处理器核,或者,作为另外的示例,其执行单元)通过(例如,VLIW)指令集的异构并行处理,例如,与提供紧密耦合的统一处理(例如,如在单指令、多数据(SIMD)实现中)或者其中仅一个处理组(例如,总体)忙于同构处理而其他在等待(例如,如在图形处理单元(GPGPU)计算上的通用计算中)的非常宽松地耦合的执行的并行处理架构形成对照。相比之下,在本文的某些实施例中,两个处理元件(例如,其中一个是以与该系统中的处理器不同的速度运行的卸载引擎(或其他处理器))在指令级别合作以例如与SIMD结构相对地用具有VLIW结构的指令集执行给定的任务。

图4图示了根据本公开的实施例的流程图400。流程图400包括基于控制信号用切换器将硬件处理器的并行的多个执行单元的输入连接至第一缓冲器以及多个存储体的输出并且将多个存储体和并行的多个第二缓冲器的输入连接至第一缓冲器、多个存储体以及多个执行单元的输出402,并将数据从多个第二缓冲器的输出提供至卸载引擎的输入404。处理器可以包括根据本文的流程图操作的逻辑,例如,有限状态机。

在一个实施例中,硬件处理器包括并行的多个(例如,矢量)执行单元,用于将多个执行单元的输入连接至第一缓冲器和多个存储体的输出并且将多个存储体和并行的多个第二缓冲器的输入连接至第一缓冲器、多个存储体和多个执行单元的输出的切换器,以及具有连接至多个第二缓冲器的输出的输入的卸载引擎。卸载引擎的输出可以连接至第一缓冲器的输入。硬件处理器可以进一步包括数据冒险解决逻辑以同时从第一缓冲器的输出读取并向多个第二缓冲器的输入写入。数据冒险解决逻辑可以不插入(例如,矢量内)暂停。多个(例如,矢量)执行单元可以以第一时钟速度执行,并且卸载引擎可以以第二、更快(或更慢)的时钟速度执行。执行单元可以包括移位寄存器。多个执行单元可以均包括移位寄存器。第一缓冲器和多个第二缓冲器可以是先入先出(FIFO)缓冲器。多个存储体可以是四个或更多存储体,并且每个存储体可以包括与其他存储体的输入端口和输出端口分离的输入端口和输出端口。

在另一实施例中,一种方法包括基于控制信号用切换器将硬件处理器的并行的多个执行单元的输入连接至第一缓冲器以及多个存储体的输出并且将多个存储体和并行的多个第二缓冲器的输入连接至第一缓冲器、多个存储体以及多个执行单元的输出,并将数据从多个第二缓冲器的输出提供至卸载引擎的输入。所述方法可以包括将数据从卸载引擎的输出提供至第一缓冲器的输入。所述方法可以包括同时从第一缓冲器的输出读取并且向多个第二缓冲器的输入写入。所述方法可以包括不插入暂停,例如,将由执行单元执行的。所述方法可以进一步包括多个执行单元以第一时钟速度执行并且卸载引擎以第二、更快(或更慢)的时钟速度执行。多个执行单元可以均包括移位寄存器。多个存储体是四个或更多存储体并且每个存储体包括与其他存储体的输入端口和输出端口分离的输入端口和输出端口。第一缓冲器和多个第二缓冲器可以是先入先出(FIFO)缓冲器。

在再一实施例中,硬件处理器包括硬件解码器以解码指令、硬件执行单元以执行指令以:基于控制信号将硬件处理器的并行的多个执行单元的输入连接至第一缓冲器以及多个存储体的输出并且将多个存储体和并行的多个第二缓冲器的输入连接至第一缓冲器、多个存储体以及多个执行单元的输出,并将数据从多个第二缓冲器的输出提供至卸载引擎的输入。卸载引擎的输出可以连接至第一缓冲器的输入。硬件执行单元可以执行指令以导致同时的从第一缓冲器的输出读取并且向多个第二缓冲器的输入写入。硬件执行单元可以执行指令而不插入暂停。多个执行单元可以以第一时钟速度执行,并且卸载引擎可以以第二、更快(或更慢)的时钟速度执行。多个执行单元可以均包括移位寄存器。第一缓冲器和多个第二缓冲器可以是先入先出(FIFO)缓冲器。多个存储体可以是四个或更多存储体,并且每个存储体可以包括与其他存储体的输入端口和输出端口分离的输入端口和输出端口。

在另一实施例中,一种硬件装置包括并行的多个执行单元,将多个执行单元的输入连接至第一缓冲器和多个存储体的输出并且将多个存储体和并行的多个第二缓冲器的输入连接至第一缓冲器、多个存储体和多个执行单元的输出的部件,以及具有连接至多个第二缓冲器的输出的输入的卸载引擎。

在再一实施例中,一种装置包括存储代码的数据存储设备,所述代码当被硬件处理器执行时使硬件处理器执行本文公开的任何方法。

指令集可以包括一个或多个指令格式。给定指令格式可以定义各种字段(例如,位的数量,位的位置)以除了其他之外尤其指定将执行的操作(例如,操作码)和该操作将在其上执行的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码(mask))。某些指令格式通过指令模板(或者子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段典型地以相同的次序,但是至少某些具有不同的位的位置,因为包括更少的字段)和/或被定义为具有不同解释的给定字段。因此,ISA的每个指令使用给定指令格式(并且,如果被定义,在该指令格式的指令模板中的给定的一个中)来表达并包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,所述指令格式包括指定该操作码的操作码字段和选择操作数(源1(source1)/目的地和源2(source2))的操作数字段;并且在指令流中该ADD指令的出现将在选择特定操作数的操作数字段中具有特定的内容。称为高级矢量扩展(AVX)(AVX1和AVX2)并使用矢量扩展(VEX)编码方案的SIMD扩展的集合已经被发布和/或出版(例如,参见和IA-32架构软件开发者手册,2015年4月;并且参见架构指令集扩展编程参考,2014年10月)。

示例性指令格式

本文描述的(一个或多个)指令的实施例可以以不同格式来体现。此外,下面详述了示例性的系统、架构和流水线。(一个或多个)指令的实施例可以在这样的系统、架构和流水线上执行,但并不限于所详述的那些。

通用矢量友好的指令格式

矢量友好的指令格式是适合于矢量指令的指令格式(例如,存在对矢量操作特定的某些字段)。虽然描述了其中通过矢量友好的指令格式支持矢量和标量操作两者的实施例,但可替换的实施例仅使用矢量友好的指令格式的矢量操作。

图5A-5B是图示了根据本公开的实施例的通用矢量友好的指令格式及其指令模板的框图。图5A是图示了根据本公开的实施例的通用矢量友好的指令格式及其A类指令模板的框图;而图5B是图示了根据本公开的实施例的通用矢量友好的指令格式及其B类指令模板的框图。具体地,针对通用矢量友好的指令格式500定义了A类和B类指令模板,其两者都包括非存储器访问505指令模板和存储器访问520指令模板。在矢量友好的指令格式的上下文中的术语通用是指该指令格式不被束缚于任何特定指令集。

虽然将描述其中矢量友好的指令格式支持下述内容的本公开的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小)(并且因此,包括16个双字大小元素或可替换地8个四字大小元素的64字节矢量);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节矢量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节矢量操作数长度(或大小);但可替换的实施例可以支持具有更多、更少或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同的矢量操作数大小(例如,256字节矢量操作数)。

硬件处理器(例如,具有乘法器卸载引擎的MMP硬件处理器)可以执行多精度计算。硬件处理器可以使128、256、512、1024等位的矢量移位,例如,在单个(例如,VLIW)指令中执行将(例如,非常大的)整数除以2或者将(例如,非常大的)整数乘以2。

图5A中的A类指令模板包括:1)在非存储器访问505指令模板内示出非存储器访问、完全舍入控制类型操作510指令模板和非存储器访问、数据变换类型操作515指令模板;以及2)在存储器访问520指令模板内示出存储器访问、暂时525指令模板和存储器访问、非暂时530指令模板。图5B中的B类指令模板包括:1)在非存储器访问505指令模板内示出非存储器访问、写入掩蔽控制、部分舍入控制类型操作512指令模板和非存储器访问、写入掩蔽控制、vsize类型操作517指令模板;以及2)在存储器访问520指令模板内示出存储器访问、写入掩蔽控制527指令模板。

通用矢量友好的指令格式500包括以图5A-5B中图示的次序在下文列出的下述字段。

格式字段540——在该字段中的特定值(指令格式标识符值)唯一地标识矢量友好的指令格式,以及因此在指令流中以矢量友好的指令格式的指令的出现。这样,在对于仅具有通用矢量友好的指令格式的指令集而言该字段并不是需要的意义上,该字段是可选的。

基础操作字段542——其内容区分不同的基础操作。

寄存器索引字段544——其内容直接地或通过地址生成而指定源和目的地操作数的位置,它们在寄存器中或存储器中。这些包括足够的位数以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可以多达三个源和一个目的地寄存器,但可替换实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源之一还用作目的地,可以支持多达三个源,其中这些源之一还用作目的地,可以支持多达两个源和一个目的地)。

修改器字段546——其内容区分指定存储器访问的以通用矢量指令格式的指令的出现与不指定存储器访问的那些;也就是说,将非存储器访问505指令模板与存储器访问520指令模板进行区分。存储器访问操作读取和/或写入至存储器层级(在某些情况下使用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中该字段还在三个不同的方式之间进行选择以执行存储器地址计算,但可替换实施例可以支持更多、更少或不同的方式以执行存储器地址计算。

扩增操作字段550——其内容区分除了基础操作之外还将执行的各种不同操作中的哪一个。该字段是上下文特定的。在本公开的一个实施例中,该字段被划分成类别字段568、阿尔法(alpha)字段552和贝塔(beta)字段554。扩增操作字段550允许普通操作组将在单个指令而不是2、3或4个指令中执行。

缩放(scale)字段560——其内容虑及用于存储器地址生成的索引字段的内容的缩放(例如,对于使用2scale*索引+基础的地址生成)。

位移字段562A——其内容被用作存储器地址生成的部分(例如,对于使用2acale*索引+基础+位移的地址生成)。

位移因子字段562B(注意位移字段562A直接并置在位移因子字段562B之上指示使用一个或另一个)——其内容被用作地址生成的部分;它指定将按存储器访问的大小(N)缩放的位移因子——其中N是存储器访问中的字节数(例如,对于使用2scale*索引+基础+缩放的位移的地址生成)。冗余的低阶位被忽略,并因此,位移因子字段的内容与存储器操作数总大小(N)相乘以便生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完全操作码字段574(本文稍后描述)和数据操纵字段554C确定。在它们并不用于非存储器访问505指令模板和/或不同的实施例可以实现二者中仅一个或二者都不实现的意义上,位移字段562A和位移因子字段562B是可选的。

数据元素宽度字段564——其内容区分多个数据元素宽度中的哪一个将被使用(在某些实施例中,针对所有指令;在其他实施例中,仅针对部分指令)。在仅支持一个数据元素宽度和/或使用操作码的某些方面支持多个数据元素宽度的情况下并不需要该字段的意义上,该字段是可选的。

写入掩蔽字段570——其内容在每个数据元素位置的基础上控制在目的地矢量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。A类指令模板支持合并写入掩蔽,而B类指令模板支持合并和归零写入掩蔽两者。当合并时,矢量掩蔽允许保护目的地中的任何元素集合在(由基础操作和扩增操作指定的)任何操作的执行期间免于被更新;在另一实施例中,保留其中对应掩蔽位具有0的目的地的每个元素的旧值。作为对照,当归零矢量掩蔽允许目的地中的任何元素集合在(由基础操作和扩增操作指定的)任何操作的执行期间归零时;在一个实施例中,当对应掩蔽位具有0值时,目的地的元素被设置成0。该功能的子集是控制正被执行的操作的矢量长度(也就是说,正被修改的元素的跨度,从第一个至最后一个)的能力;然而,被修改的元素是连续的并不是必要的。因此,写入掩蔽字段570虑及部分矢量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩蔽字段570的内容选择多个写入掩蔽寄存器中的包含将使用的写入掩蔽的一个(并且因此写入掩蔽字段570的内容间接标识将执行的掩蔽)的本公开的实施例,但可替换的实施例替换地或附加地允许掩蔽写入字段570的内容直接指定将执行的掩蔽。

立即(immediate)字段572——其内容虑及对立即的规定。在该字段在不支持立即的通用矢量友好的格式的实现中不存在并且在不使用立即的指令中不存在的意义上,该字段是可选的。

类别字段568——其内容区分不同的指令类别。参考图5A-B,该字段的内容在A类和B类指令之间进行选择。在图5A-B中,圆角方形用于指示在字段中存在特定值(例如,对于类别字段568在图5A-B中分别为A类568A和B类568B)。

A类的指令模板

在A类的非存储器访问505指令模板的情况下,阿尔法字段552被解释为RS字段552A,其内容区分不同的扩增操作类型中的哪一种将被执行(例如,针对非存储器访问、舍入类型操作510和非存储器访问、数据变换类型操作515指令模板分别指定舍入552A.1和数据变换552A.2),而贝塔字段554区分该指定类型的操作中的哪一个将被执行。在非存储器访问505指令模板中,不存在缩放字段560、位移字段562A以及位移缩放字段562B。

非存储器访问指令模板——完全舍入控制类型操作

在非存储器访问完全舍入控制类型操作510指令模板中,贝塔字段554被解释为舍入控制字段554A,其(一个或多个)内容提供静态舍入。虽然在本公开描述的实施例中舍入控制字段554A包括抑制所有浮点异常(SAE)字段556以及舍入操作控制字段558,但可替换的实施例可以支持可以将这些概念编码到相同的字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段558)。

SAE字段556——其内容区分是否禁用异常事件报告;当SAE字段556的内容指示抑制被启用时,给定指令并不报告任何种类的浮点异常标记并且不引起任何浮点异常处理机(handler)。

舍入操作控制字段558——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段558虑及在每个指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段550的内容超越(override)该寄存器值。

非存储器访问指令模板——数据变换类型操作

在非存储器访问数据变换类型操作515指令模板中,贝塔字段554被解释为数据变换字段554B,其内容区分多个数据变换中的哪一个将被执行(例如,无数据变换、拌和(swizzle)、广播)。

在A类的存储器访问520指令模板的情况下,阿尔法字段552被解释为逐出提示字段552B,其内容区分哪一个逐出提示将被使用(在图5A中,针对存储器访问、暂时525指令模板和存储器访问、非暂时530指令模板分别指定暂时552B.1和非暂时552B.2),而贝塔字段554被解释为数据操纵字段554C,其内容区分多个数据操纵操作(还称为基元(primitive))中的哪一个将被执行(例如,无操纵;广播;源的上转换;以及目的地的下转换)。该存储器访问520指令模板包括缩放字段560以及可选地位移字段562A或位移缩放字段562B。

在转换的支持下,矢量存储器指令执行从存储器的矢量加载和向存储器的矢量存储。关于常规矢量指令,矢量存储器指令以数据元素方面的方式从/至存储器转移数据,其中被实际转移的元素由被选为写入掩蔽的矢量掩蔽的内容指定。

存储器访问指令模板——暂时

暂时数据是可能被重新使用得足够快以受益于高速缓存的数据。然而,这是一种提示,并且不同的处理器可以以不同的方式实现它,包括完全忽略该提示。

存储器访问指令模板——非暂时

非暂时数据是不太可能被足够快地重新使用以受益于高速缓存在一级高速缓存中并且应当被给予针对逐出的优先权的数据。然而,这是一种提示,并且不同的处理器可以以不同的方式实现它,包括完全忽略该提示。

B类的指令模板

在B类的指令模版的情况下,阿尔法字段552被解释为写入掩蔽控制(Z)字段552C,其内容区分由写入掩蔽字段570控制的写入掩蔽应当为合并还是归零。

在B类的非存储器访问505指令模版的情况下,贝塔字段554的部分被解释为RL字段557A,其内容区分不同扩增操作类型中的哪一个将被执行(例如,针对非存储器访问、写入掩蔽控制、部分舍入控制类型操作512指令模版和非存储器访问、写入掩蔽控制、VSIZE类型操作517指令模版分别指定舍入557A.1和矢量长度(VSIZE)557A.2),而贝塔字段554的其余部分区分要执行指定的类型的操作的哪一个。在非存储器访问505指令模板中,缩放字段560、位移字段562A以及位移缩放字段562B不存在。

在非存储器访问、写入掩蔽控制、部分舍入控制类型操作510指令模板中,贝塔字段554的其余部分被解释为舍入操作字段559A并且异常事件报告被禁用(给定的指令并不报告任何种类的浮点异常标记并且不引起任何浮点异常处理机)。

舍入操作控制字段559A——正如舍入操作控制字段558,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段559A虑及在每个指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段550的内容超越该寄存器值。

在非存储器访问、写入掩蔽控制、VSIZE类型操作517指令模板中,贝塔字段554的其余部分被解释为矢量长度字段559B,其内容区分将在多个数据矢量长度中的哪一个上执行(例如,128、256、或者512字节)。

在B类的存储器访问520指令模板的情况下,贝塔字段554的部分被解释为广播字段557B,其内容区分广播类型数据操纵操作是否将被执行,而贝塔字段554的其余部分被解释为矢量长度字段559B。存储器访问520指令模板包括缩放字段560以及可选地位移字段562A或位移缩放字段562B。

关于通用矢量友好的指令格式500,示出了包括格式字段540、基础操作字段542以及数据元素宽度字段564的完全操作码字段574。虽然示出了其中完全操作码字段574包括所有这些字段的一个实施例,但是在不支持它们所有的实施例中,完全操作码字段574包括少于所有这些字段。完全操作码字段574提供操作代码(操作码)。

扩增操作字段550、数据元素宽度字段564以及写入掩蔽字段570允许在通用矢量友好的指令格式中在每个指令的基础上指定这些特征。

写入掩蔽字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同的数据元素宽度而应用掩蔽。

在A类和B类内找到的各种指令模板有益于不同状况。在本公开的某些实施例中,不同处理器或处理器内的不同核可以支持仅A类、仅B类或者支持两类。例如,意图用于通用计算的高性能通用无序核可以仅支持B类,主要意图用于图形和/或科学(吞吐量)计算的核可以仅支持A类,并且意图用于两者的核可以支持两者(当然,具有来自两类的模板和指令的某种混合而并非来自两类的所有模板和指令的核在本公开的范围内)。而且,单个处理器可以包括多个核,其全部支持相同的类别或者其中不同的核支持不同的类别。例如,在具有单独的图形和通用核的处理器中,主要意图用于图形和/或科学计算的图形核中的一个可以仅支持A类,而通用核中的一个或多个可以为仅支持B类的意图用于通用计算的具有无序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可以包括支持A类和B类两者的一个多个通用有序或无序核。当然,在本公开的不同实施例中来自一个类别的特征还可以实现在另一类别中。以高级语言撰写的程序会被放入(例如,即时编译或静态编译成)多种不同的可执行的形式,包括:1)仅具有由目标处理器支持以供执行的(一个或多个)类别的指令的形式;或者2)具有使用所有类别的指令的不同组合撰写的可替换的例程并具有基于由当前执行代码的处理器支持的指令而选择例程以执行的控制流代码的形式。

示例性特定矢量友好的指令格式

图6是图示根据本公开的实施例的示例性特定矢量友好的指令格式的框图。图6示出了特定矢量友好的指令格式600,其在它指定了字段的位置、大小、解释和次序以及针对那些字段中某些的值的意义上而言是特定的。特定矢量友好的指令格式600可以用于扩展x86指令集,并因此某些字段与在现有x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节(real opcode byte)字段、MOD R/M字段、SIB字段、位移字段和立即字段一致。图示了从图5的字段至图6的字段的映射。

应当理解,尽管为了说明的目的在通用矢量友好的指令格式500的上下文中参考特定矢量友好的指令格式600描述本公开的实施例,但除非特别声明,本公开不限于特定矢量友好的指令格式600。例如,通用矢量友好的指令格式500预计到各种字段的各种可能的大小,而特定矢量友好的指令格式600被示出为具有特定大小的字段。通过特定示例的方式,虽然数据元素宽度字段564被图示为在特定矢量友好的指令格式600中的一位字段,但本公开并不限于此(也就是说,通用矢量友好的指令格式500预计到数据元素宽度字段564的其他大小)。

通用矢量友好的指令格式500包括以图6A中图示的次序在下文列出的下述字段。

EVEX前缀(字节0-3)602——以四字节形式编码。

格式字段540(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段540并且它包含0x62(在本公开的一个实施例中的用于区分矢量友好的指令格式的唯一值)。

第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。

REX字段605(EVEX字节1,位[7-5])——包括EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X),以及557BEX字节1,位[5]-B)。EVEX.R、EVEX.X以及EVEX.B位字段提供与对应VEX位字段相同的功能,并且使用1补码形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。如本领域所已知的,指令的其他字段对寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,以使得Rrrr、Xxxx和Bbbb可以通过添加EVEX.R、EVEX.X以及EVEX.B形成。

REX’字段510——这是REX’字段510的第一部分并且是EVEX.R’位字段(EVEX字节1,位[4]-R’),其用于对扩展的32寄存器组的高16个或低16个进行编码。在本公开的一个实施例中,该位连同如下文指示的其他位一起以位反转的格式存储以与BOUND指令区分(在公知的x86 32位模式中),其实操作码字节为62,但在MOD R/M字段(在下文描述)中并不接受在MOD字段中的值11;本公开的可替换的实施例并不以反转格式存储该位和下面指示的其他位。值1被用于编码较低的16个寄存器。换句话说,通过组合EVEX.R’,EVEX.R以及来自其他字段的其他RRR形成R’Rrrr。

操作码映射字段615(EVEX字节1,位[3:0]-mmmm)——其内容对一个暗含的引导操作码字节(0F、0F38、或者0F3)进行编码。

数据元素宽度字段564(EVEX字节2,位[7]-W)——由注释EVEX.W表示。EVEX.W用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。

EVEX.vvvv 620(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的角色可以包括以下:1)EVEX.vvvv对第一源寄存器操作数进行编码,以反转(1补码)形式指定并且对于具有2个或更多源操作数的指令有效;2)EVEX.vvvv对目的地寄存器操作数进行编码,对于某些矢量移位以1补码形式指定;或者3)EVEX.vvvv并不对任何操作数进行编码,该字段被保留并应当包含1111b。因此,EVEX.vvvv字段620对以反转(1的补码)形式存储的第一源寄存器说明符(specifier)的4个低阶位进行编码。取决于指令,额外的不同的EVEX位字段被用于将说明符大小扩展至32个寄存器。

EVEX.U 568类别字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,它指示A类或EVEX.U0;如果EVEX.U=1,它指示B类或EVEX.U1。

前缀编码字段625(EVEX字节2,位[1:0]-pp)——提供用于基础操作字段的附加位。除了为以EVEX前缀格式的传统SSE指令提供支持外,这还具有压缩SIMD前缀的益处(而不需要一个字节来表达SIMD前缀,EVEX前缀仅需要2位)。在一个实施例中,为了支持使用以传统格式和EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码成SIMD前缀编码字段;并且在运行时在被提供至解码器的PLA之前被扩充成传统SIMD前缀(因此PLA可以在没有修改的情况下执行这些传统指令的传统和EVEX格式两者)。虽然较新的指令可直接将EVEX前缀编码字段的内容用作操作码扩展,但某些实施例为了一致性而以相似的方式扩充但虑及将由这些传统SIMD前缀指定的不同的含义。可替换的实施例可以重新设计PLA以支持2位SIMD前缀编码,并因此不需要扩充。

阿尔法字段552(EVEX字节3,位[7]-EH;还称为EVEX.EH、EVEX.rs、EVEX.RL,EVEX.write mask control(写入掩蔽控制),以及EVEX.N;也用α进行说明)——如前面所述,该字段是上下文特定的。

贝塔字段554(EVEX字节3,位[6:4]-SSS,还称为EVEX.s2-0、EVEX.r2-0、EVEX.rrl、EVEX.LL0、EVEX.LLB;也用βββ进行说明)——如前面所述,该字段是上下文特定的。

REX’字段510——这是REX’字段的剩余部分并且是EVEX.V’位字段(EVEX字节3,位[3]-V’),其可用于对扩展的32寄存器组的较高16个或较低16个进行编码。该位以位反转的格式存储。值1被用于对较低的16个寄存器进行编码。换句话说,通过组合EVEX.V’,EVEX.vvvv形成V’VVVV。

写入掩蔽字段570(EVEX字节3,位[2:0]-kkk)——其内容指定了如前面所述的在写入掩蔽寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗指没有写入掩蔽被用于该特定指令的特殊行为(这可以以多种方式实现,包括使用硬接线至所有一的写入掩蔽或绕过掩蔽硬件的硬件)。

实操作码字段630(字节4)还称为操作码字节。在此字段中指定了操作码的部分。

MOD R/M字段640(字节5)包括MOD字段642、Reg字段644以及R/M字段646。如前面所描述的,MOD字段642的内容区分存储器访问和非存储器访问操作。Reg字段644的角色可被总结为两种情形:编码目的地寄存器操作数或源寄存器操作数,或者被看作操作码扩展并且不用于编码任何指令操作数。R/M字段646的角色可以包括如下:编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。

缩放、索引、基础(SIB)字节(字节6)——如前面所述,缩放字段550的内容被用于存储器地址生成。SIB.xxx 654和SIB.bbb 656——这些字段的内容之前已经是指与寄存器索引Xxxx和Bbbb相关。

位移字段562A(字节7-10)——当MOD字段642包含10时,字节7-10是位移字段562A,并且它与传统32位位移(disp32)一样地运作并以字节粒度运作。

位移因子字段562B(字节7)——当MOD字段642包含01时,字节7是位移因子字段562B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,它以字节粒度运作。由于disp8是符号扩展的,它仅可在-128至127字节偏移之间寻址;在64字节高速缓存线方面,disp8使用8个位,其可被设置为仅四个真正有用值-128、-64、0、和64;由于常常需要更大的范围,disp32被使用;然而,disp32需要4个字节。与disp8和disp32相比,位移因子字段562B是disp8的重新解释;当使用位移因子字段562B时,实际位移由位移因子字段的内容乘以存储器操作数访问的大小(N)确定。此类位移被称为disp8*N。这减少了平均指令长度(用于位移但具有大得多的范围的单个字节)。这样的被压缩的位移基于有效位移是存储器访问的粒度的倍数的假设,并因此,地址偏移的冗余低阶位不需要被编码。换句话说,位移因子字段562B代替传统x86指令集8位位移。因此,位移因子字段562B以与x86指令集8位位移相同的方式编码(因此在ModRM/SIB编码规则中没有改变),仅有例外是disp8被超载(overload)为disp8*N。换句话说,在编码规则或编码长度方面没有改变而仅在硬件对位移值的解释上有所改变(其需要将位移按存储器操作数的大小缩放以获得按字节的地址偏移)。立即字段572如之前描述的那样操作。

完全操作码字段

图6B是图示根据本公开的一个实施例的构成完全操作码字段574的特定矢量友好的指令格式600的字段的框图。具体地,完全操作码字段574包括格式字段540、基础操作字段542以及数据元素宽度(W)字段564。基础操作字段542包括前缀编码字段625、操作码映射字段615以及实操作码字段630。

寄存器索引字段

图6C是图示根据本公开的一个实施例的构成寄存器索引字段544的特定矢量友好的指令格式600的字段的框图。具体地,寄存器索引字段544包括REX字段605、REX’字段610、MODR/M.reg字段644、MODR/M.r/m字段646、VVVV字段620、xxx字段654以及bbb字段656。

扩增操作字段

图6D是图示根据本公开的一个实施例的构成扩增操作字段550的特定矢量友好的指令格式600的字段的框图。当类别(U)字段568包含0时,它表示EVEX.U0(A类568A);当它包含1时,它表示EVEX.U1(B类568B)。当U=0并且MOD字段642包含11(表示非存储器访问操作)时,阿尔法字段552(EVEX字节3,位[7]-EH)被解释为rs字段552A。当rs字段552A包含1时(舍入552A.1),贝塔字段554(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段554A。舍入控制字段554A包括一位SAE字段556以及两位舍入操作字段558。当rs字段552A包含0时(数据变换552A.2),贝塔字段554(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段554B。当U=0并且MOD字段642包含00、01或10(表示存储器访问操作)时,阿尔法字段552(EVEX字节3,位[7]-EH)被解释为逐出提示(EH)字段552B并且贝塔字段554(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段554C。

当U=1时,阿尔法字段552(EVEX字节3,位[7]-EH)被解释为写入掩蔽控制(Z)字段552C。当U=1并且MOD字段642包含11(表示非存储器访问操作)时,贝塔字段554的部分(EVEX字节3,位[4]-S0)被解释为RL字段557A;当它包含1时(舍入557A.1)贝塔字段554的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入操作字段559A,而当RL字段557A包含0时(VSIZE557.A2)贝塔字段554的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为矢量长度字段559B(EVEX字节3,位[6-5]-L1-0)。当U=1并且MOD字段642包含00、01或10(表示存储器访问操作)时,贝塔字段554(EVEX字节3,位[6:4]-SSS)被解释为矢量长度字段559B(EVEX字节3,位[6-5]-L1-0)和广播字段557B(EVEX字节3,位[4]-B)。

示例性寄存器架构

图7是根据本公开的一个实施例的寄存器架构700的框图。在图示的实施例中,存在为512位宽的32个矢量寄存器710;这些寄存器被引用为zmm0至zmm31。较低16个zmm寄存器的较低阶256位被覆盖在寄存器ymm0-16上。较低16个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)被覆盖在寄存器xmm0-15上。特定矢量友好的指令格式600如下表所说明的那样在这些覆盖的寄存器文件上操作。

换句话说,矢量长度字段559B在最大长度和一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是在前长度的一半长度;并且没有矢量长度字段559B的指令模板在最大矢量长度上操作。进一步的,在一个实施例中,特定矢量友好的指令格式600的B类指令模板在封装(packed)或标量单/双精度浮点数据和封装或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;较高阶的数据元素位置被保留为与它们在指令之前相同,或者被归零,取决于实施例。

写入掩蔽寄存器715——在图示的实施例中,存在8个写入掩蔽寄存器(k0至k7),每个在大小方面为64位。在可替换的实施例中,写入掩蔽寄存器715在大小方面为16位。如前面所描述的,在本公开的一个实施例中,矢量掩蔽寄存器k0不能被用作写入掩蔽;当通常指示k0的编码被用于写入掩蔽时,它选择0xFFFF的硬接线写入掩蔽,有效地禁用针对该指令的写入掩蔽。

通用寄存器725——在图示的实施例中,存在连同现有的x86寻址模式使用以对存储器操作数进行寻址的十六个64位通用寄存器。通过名字RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15引用这些寄存器。

标量浮点栈寄存器文件(x87栈)745,其上是别名为MMX封装整数扁平寄存器文件750——在图示的实施例中,x87栈是用于在32/64/80位浮点数据上使用x87指令集扩展执行标量浮点操作的八元素栈;而MMX寄存器被用于在64位封装整数数据上执行操作,以及保存操作数以用于在MMX和XMM寄存器之间执行的某些操作。

本公开的可替换实施例可以使用更宽或更窄的寄存器。此外,本公开的可替换的实施例可以使用更多、更少或不同的寄存器文件和寄存器。

示例性核架构、处理器和计算机架构

处理器核可以以不同方式、用于不同的目的以及在不同的处理器中实现。例如,这样的核的实现可以包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)主要意图用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包括:1)包括意图用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核的CPU;以及2)包括主要意图用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同的处理器导致不同的计算机系统架构,其可以包括:1)在与CPU分离的芯片上的协处理器;2)与CPU在相同的封装中的分离的裸片上的协处理器;3)与CPU在相同裸片上的协处理器(在这种情况下,这样的协处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或者称为专用核);以及4)可以在相同裸片上包括所述CPU(有时称为(一个或多个)应用核或(一个或多个)应用处理器)、上述协处理器以及附加功能的片上系统。接下来描述示例性核架构,之后为示例性处理器和计算机架构的描述。

示例性核架构

有序和无序核框图

图8A是图示根据本公开的实施例的示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线二者的框图。图8B是图示根据本公开的实施例的要被包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名、无序发出/执行架构核二者的框图。图8A-B中的实线框图示了有序流水线和有序核,而虚线框的可选附加图示了寄存器重命名、无序发出/执行流水线和核。考虑到有序方面是无序方面的子集,将描述无序方面。

在图8A中,处理器流水线800包括取出级802、长度解码级804、解码级806、分配级808、重命名级810、调度(也称为分派或发出)级812、寄存器读取/存储器读取级814、执行级816、写回/存储器写入级818、异常处理级822和提交级824。

图8B示出了处理器核890,其包括耦合到执行引擎单元850的前端单元830,并且二者都耦合到存储器单元870。核890可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、甚长指令字(VLIW)核或混合或替代的核类型。作为又一选项,核890可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。

前端单元830包括耦合到指令高速缓存单元834的分支预测单元832,所述指令高速缓存单元834耦合到指令转换后备缓冲器(TLB)836,所述指令转换后备缓冲器836耦合到指令取出单元838,所述指令取出单元838耦合到解码单元840。解码单元840(或解码器或解码器单元)可以解码指令(例如,宏指令),并且作为输出生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令解码或者以其他方式反映原始指令或者从原始指令得到。解码单元840可以使用各种不同的机制来实现。适当的机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核890包括微代码ROM或其他介质,其存储用于某些宏指令的微代码(例如,在解码单元单元840中或以其他方式在前端单元830中)。解码单元840被耦合到执行引擎单元850中的重命名/分配器单元852。

执行引擎单元850包括耦合到退役单元854和一个或多个调度器单元856的集合的重命名/分配器单元852。(一个或多个)调度器单元856表示任何数目的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元856被耦合到(一个或多个)物理寄存器文件单元858。(一个或多个)物理寄存器文件单元858中的每一个表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封装整数、封装浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器文件单元858包括矢量寄存器单元、写入掩蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩蔽寄存器和通用寄存器。(一个或多个)物理寄存器文件单元858由退役单元854重叠,以说明其中寄存器重命名和无序执行可以被实现的各种方式(例如,使用(一个或多个)重排序缓冲器以及(一个或多个)退役寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)退役寄存器文件;使用寄存器映射和寄存器池等)。退役单元854和(一个或多个)物理寄存器文件单元858耦合到(一个或多个)执行群集860。(一个或多个)执行群集860包括一个或多个执行单元862的集合以及一个或多个存储器访问单元864的集合。执行单元862可以实行各种操作(例如,移位、加法、减法、乘法)并且在各种类型的数据(例如,标量浮点、封装整数、封装浮点、矢量整数、矢量浮点)上实行操作。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或所有实行所有功能的多个执行单元。(一个或多个)调度器单元856、(一个或多个)物理寄存器文件单元858和(一个或多个)执行群集860被示出为可能复数的,因为某些实施例创建用于某些类型的数据/操作的单独的流水线(例如,标量整数流水线、标量浮点/封装整数/封装浮点/矢量整数/矢量浮点流水线和/或存储器访问流水线,每个都具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行群集——并且在单独的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有(一个或多个)存储器访问单元864的某些实施例)。还应当理解,在使用单独流水线的情况下,这些流水线中的一个或多个可以是无序发出/执行并且其余是有序的。

存储器访问单元864的集合可以耦合到存储器单元870,其包括耦合到数据高速缓存单元874的数据TLB单元872,所述数据高速缓存单元874耦合到2级(L2)高速缓存单元876。在一个示例性实施例中,存储器访问单元864可以包括加载单元、存储地址单元和存储数据单元,其中的每一个可以耦合到存储器单元870中的数据TLB单元872。指令高速缓存单元834进一步被耦合到存储器单元870中的2级(L2)高速缓存单元876。L2高速缓存单元876被耦合到一个或多个其他级的高速缓存并且最终耦合到主存储器。

通过示例的方式,示例性寄存器重命名、无序发出/执行核架构可以如下实现流水线800:1)指令取出838实行取出和长度解码级802和804;2)解码单元840实行解码级806;3)重命名/分配器单元852实行分配级808和重命名级810;4)(一个或多个)调度器单元856实行调度级812;5)(一个或多个)物理寄存器文件单元858和存储器单元870实行寄存器读取/存储器读取级814;执行群集860实行执行级816;6)存储器单元870和(一个或多个)物理寄存器文件单元858实行写回/存储器写入级818;7)各种单元可以在异常处理级822中被涉及;并且8)退役单元854和(一个或多个)物理寄存器文件单元858实行提交级824。

核890可以支持一个或多个指令集(例如,x86指令集(具有已经添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集;ARM指令集(具有加利福尼亚州桑尼维尔的ARM控股公司的可选附加扩展,诸如NEON),包括本文中描述的(一个或多个)指令。在一个实施例中,核890包括用于支持封装数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许被许多多媒体应用使用的操作使用封装数据来实行。

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

虽然寄存器重命名在无序执行的上下文中进行描述,但是应当理解,寄存器重命名可以在有序架构中使用。虽然所示的处理器的实施例还包括单独的指令和数据高速缓存单元834/874和共享L2高速缓存单元876,但是替代实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。替代地,所有高速缓存可以在核和/或处理器外部。

具体示例性有序核架构

图9A-B图示了更具体的示例性有序核架构的框图,其核可以是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。

图9A是根据本公开的实施例的单个处理器核连同其到裸片上互连网络902的连接以及其2级(L2)高速缓存904的本地子集的框图。在一个实施例中,指令解码单元900支持具有封装数据指令集扩展的x86指令集。L1高速缓存906允许到标量和矢量单元中的高速缓存存储器的低等待时间访问。虽然在一个实施例(为了简化设计)中,标量单元908和矢量单元910使用单独的寄存器集合(分别是标量寄存器912和矢量寄存器914),并且在其之间传输的数据被写入到存储器并且然后从1级(L1)高速缓存906被读回,但是本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在两个寄存器文件之间被传输而不被写入和读回的通信路径)。

L2高速缓存904的本地子集是全局L2高速缓存的一部分,其被划分成单独立的本地子集,每个处理器核一个。每个处理器核具有对L2高速缓存904的其自己的本地子集的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集904中,并且可以与访问其自己的本地L2高速缓存子集的其他处理器核并行地被快速访问。由处理器核写入的数据被存储在其自己的L2高速缓存子集904中,并且从其他子集清除(flush),如果必要的话。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存或其他逻辑块之类的代理在芯片内与彼此进行通信。每个环形数据路径每个方向是1012位宽。

图9B是根据本公开的实施例的图9A中的处理器核的部分的展开图。图9B包括L1高速缓存904的L1数据高速缓存906A部分以及关于矢量单元910和矢量寄存器914的更多细节。具体地,矢量单元910是16宽矢量处理单元(VPU)(见16宽ALU 928),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU用拌和单元920支持对寄存器输入进行拌和、用数值转换单元922A-B支持数值转换、以及在存储器输入上用复制单元924支持复制。写入掩蔽寄存器926允许预测所得到的矢量写入。

图10是根据本公开的实施例的处理器1000的框图,所述处理器1000可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形。图10中的实线框图示了具有单个核1002A、系统代理1010、一个或多个总线控制器单元1016集合的处理器1000,而虚线框的可选添加图示了具有多个核1002A-N、系统代理单元1010中的一个或多个集成存储器控制器单元1014的集合以及专用逻辑1008的替代处理器1000。

因此,处理器1000的不同实现可以包括:1)具有作为集成图形和/或科学(吞吐量)逻辑的专用逻辑1008(其可以包括一个或多个核)以及作为一个或多个通用核(例如,通用有序核、通用无序核、二者的组合)的核1002A-N的CPU;2)具有作为主要意图用于图形和/或科学(吞吐量)的大量专用核的核1002A-N的协处理器;以及3)具有作为大量通用有序核的核1002A-N的协处理器。因此,处理器1000可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1000可以是使用诸如例如BiCMOS、CMOS或NMOS之类的任何数目的处理技术的一个或多个衬底的部分和/或可以在所述一个或多个衬底上实现。

存储器层级包括核内的一个或多个级的高速缓存、一个或多个共享的高速缓存单元1006的集合、以及耦合到集成存储器控制器单元1014的集合的外部存储器(未示出)。共享高速缓存单元1006的集合可以包括一个或多个中间级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其他级的高速缓存、最后一级高速缓存(LLC)和/或其组合。虽然在一个实施例中,基于环的互连单元1012互连集成图形逻辑1008、共享高速缓存单元1006的集合以及系统代理单元1010/(一个或多个)集成存储器控制器单元1014,但是替代实施例可以使用用于互连这样的单元的任何数目的公知的技术。在一个实施例中,在一个或多个高速缓存单元1006与核1002-A-N之间保持一致性。

在一些实施例中,核1002A-N中的一个或多个有多线程能力。系统代理1010包括协调和操作核1002A-N的那些组件。系统代理单元1010可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核1002A-N和集成图形逻辑1008的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

核1002A-N可以在架构指令集方面是同构或异构的;即,核1002A-N中的两个或更多个可以能够执行相同的指令集,而其他可能能够仅执行该指令集的子集或不同的指令集。

示例性计算机架构

图11-14是示例性计算机架构的框图。本领域中已知的用于膝上型计算机、台式计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中心(hub)、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适当的。通常,如本文公开的能够包含处理器和/或其他执行逻辑的大量系统或电子设备通常是适当的。

现在参考图11,示出了根据本公开的一个实施例的系统1100的框图。系统1100可以包括耦合到控制器中心1120的一个或多个处理器1110、1115。在一个实施例中,控制器中心1120包括图形存储器控制器中心(GMCH)1190和输入/输出中心(IOH)1150(其可能在分离的芯片上);GMCH 1190包括存储器1140和协处理器1145所耦合到的存储器和图形控制器;IOH 1150将输入/输出(I/O)设备1160耦合到GMCH 1190。替代地,存储器和图形控制器中的一个或二者被集成在处理器内(如本文所述),存储器1140和协处理器1145被直接耦合到处理器1110,以及在具有IOH 1150的单个芯片中的控制器中心1120。存储器1140可以包括切换器控制模块1140A(和/或数据冒险解决模块)例如以存储代码,所述代码当被执行时使处理器实行本公开的任何方法。

在图11中用虚线表示附加处理器1115的可选性质。每个处理器1110、1115可以包括本文描述的处理核中的一个或多个,并且可以是某个版本的处理器1000。

存储器1140可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或者二者组合。对于至少一个实施例,控制器中心1120经由多点总线与(一个或多个)处理器1110、1115进行通信,诸如前侧总线(FSB)、诸如QuickPath互连(QPI)之类的点对点接口或类似的连接1195。

在一个实施例中,协处理器1145是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中心1120可以包括集成图形加速器。

在物理资源1110、1115之间在包括架构、微架构、热、功耗特性等的指标的一系列度量方面可能存在各种差异。

在一个实施例中,处理器1110执行控制一般类型的数据处理操作的指令。协处理器指令可以嵌入指令内。处理器1110将这些协处理器指令识别为应当由附连的协处理器1145执行的类型。因此,处理器1110在协处理器总线或其他互连上向协处理器1145发出这些协处理器指令(或表示协处理器指令的控制信号)。(一个或多个)协处理器1145接受并且执行接收到的协处理器指令。

现在参考图12,示出了根据本公开的实施例的第一更具体示例性系统1200的框图。如图12中所示,多处理器系统1200是点对点互连系统,并且包括经由点对点互连1250耦合的第一处理器1270和第二处理器1280。处理器1270和1280中的每一个可以是某个版本的处理器1000。在本公开的一个实施例中,处理器1270和1280分别是处理器1110和1115,而协处理器1238是协处理器1145。在另一实施例中,处理器1270和1280分别是处理器1110协处理器1145。

处理器1270和1280被示出分别包括集成存储器控制器(IMC)单元1272和1282。作为其总线控制器单元的部分,处理器1270还包括点对点(P-P)接口1276和1278;类似地,第二处理器1280包括P-P接口1286和1288。处理器1270、1280可以使用P-P接口电路1278、1288经由点对点(P-P)接口1250来交换信息。如图12所示,IMC 1272和1282将处理器耦合到相应存储器,即存储器1232和存储器1234,其可以是本地附连到相应处理器的主存储器的部分。

处理器1270、1280可以均经由单独的P-P接口1252、1254使用点对点接口电路1276、1294、1286、1298来与芯片组1290交换信息。芯片组1290可以可选地经由高性能接口1239来与协处理器1238交换信息。在一个实施例中,协处理器1238是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。

共享高速缓存(未示出)可以被包括在两个处理器中的任何一个处理器中或在其外部,而经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中,则任何一个或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。

芯片组1290可以经由接口1296耦合到第一总线1216。在一个实施例中,第一总线1216可以是外围组件互连(PCI)总线,或诸如快速PCI总线之类的总线或另一第三代I/O互连总线,但是本发明的范围并不限于此。

如图12中所示,各种I/O设备1214可以耦合到第一总线1216,连同总线桥1218,所述总线桥1218将第一总线1216耦合到第二总线1220。在一个实施例中,一个或多个附加处理器1215(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)被耦合到第一总线1216。在一个实施例中,第二总线1220可以是低引脚计数(LPC)总线。在一个实施例中,各种设备可以被耦合到第二总线1220,包括例如键盘和/或鼠标1222、通信设备1227和可以包括指令/代码和数据1230的存储单元1228,诸如盘驱动器或其他大容量存储设备。此外,音频I/O 1224可以被耦合到第二总线1220。注意,其他架构可以是可能的。例如,代替图12的点对点架构,系统可以实现多点总线或其他这样的架构。

现在参考图13,示出了根据本发明的实施例的第二更具体的示例性系统1300的框图。如在图12和图13中的元件承载类似的附图标记,并且图12的某些方面已经从图13中省略,以避免混淆图13的其他方面。

图13图示了处理器1270、1280可以分别包括集成存储器和I/O控制逻辑(“CL”)1272和1282。因此,CL 1272、1282包括集成存储器控制器单元并且包括I/O控制逻辑。图13图示了不仅存储器1232、1234耦合到1272、1282而且I/O设备1314也耦合到控制逻辑1272、1282。传统I/O设备1315耦合到芯片组1290。

现在参考图14,示出了根据本公开的实施例的SoC 1400的框图。图10中的类似元件承载类似的附图标记。而且,虚线框是更高级的SoC上的可选特征。在图14中,(一个或多个)互连单元1402被耦合到:应用处理器1410,其包括一个或多个核202A-N的集合和(一个或多个)共享高速缓存单元1006;系统代理单元1010;(一个或多个)总线控制器单元1016;(一个或多个)集成存储器控制器单元1014;一组或一个或多个协处理器1420,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1430;直接存储器访问(DMA)单元1432;以及用于耦合到一个或多个外部显示器的显示单元1440。在一个实施例中,(一个或多个)协处理器1420包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。

本文公开的机制的实施例可以以硬件、软件、固件或这样的实现方法的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。

诸如图12图示的代码1230的程序代码可以应用于输入指令以实行本文描述的功能并且生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,诸如,例如;数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。

程序代码可以以高级的面向过程或面向对象的编程语言来实现以与处理系统进行通信。程序代码还可以以汇编或机器语言来实现,如果需要的话。事实上,本文描述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是编译或解释语言。

至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,其当由机器读取时,使得机器制造用于实行本文描述的技术的逻辑。称为“IP核”的这样的表示可以被存储在有形的机器可读介质上并且被供应到各种客户或制造设施,以加载到实际上作出逻辑或处理器的制造机器中。

这样的机器可读存储介质可以包括但不限于,由机器或设备制造或形成的物品的非临时有形布置,包括诸如硬盘之类的存储介质、任何其他类型的盘(包括软盘、光盘、压缩盘只读存储器(CD-ROM)、可重写压缩盘(CD-RW)和磁光盘)、半导体设备(诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM))、磁卡或光卡或者适用于存储电子指令的任何其他类型的介质。

因此,本发明的实施例还包括非临时有形机器可读介质,其包含指令或包含设计数据,诸如硬件描述语言(HDL),其定义本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以被称为程序产品。

仿真(包括二进制翻译、代码变形等)

在一些情况下,指令转换器可以用于将指令从源指令集转换为目标指令集。例如,指令转换器可以翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其他方式将指令转换为要由核处理的一个或多个其他指令。指令转换器可以以软件、硬件、固件或其组合来实现。指令转换可能在处理器上、处理器外或部分在处理器上且部分在处理器外。

图15是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的实施例中,指令转换器是软件指令转换器,但是替代地,指令转换器可以以软件、固件、硬件或其各种组合来实现。图15示出了以高级语言1502的程序可以使用x86编译器1504来编译以生成可以由具有至少一个x86指令集核1516的处理器原生执行的x86二进制代码1506。具有至少一个x86指令集核1516的处理器表示可以通过兼容地执行或以其他方式处理下述来实行与具有至少一个x86指令集核的英特尔处理器大体上相同功能的任何处理器:(1)英特尔x86指令集核的指令集的大部分或(2)目的在于在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的对象代码版本,以便于与具有至少一个x86指令集核的英特尔处理器实现大体上相同结果。x86编译器1504表示操作为生成x86二进制代码1506(例如,对象代码)的编译器,其可以具有或不具有附加链接处理的情况下在具有至少一个x86指令集核1516的处理器上被执行。类似地,图15示出了以高级语言1502的程序可以使用替代指令集编译器1508来编译,以生成替代指令集二进制代码1510,其可以由不具有至少一个x86指令集核1514的处理器来原生地执行(例如,具有执行加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的核的处理器)。指令转换器1512用于将x86二进制码1506转换成可以由不具有x86指令集核1514的处理器原生地执行的代码。该转换的代码不太可能与替代指令集二进制代码1510相同,因为能够这样的指令转换器难以制作;然而,转换的代码将完成一般操作,并且由来自替代指令集的指令组成。因此,指令转换器1512表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他处理来允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1506。

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