一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

从FP16转换到BF8的指令的制作方法

2022-07-02 08:25:27 来源:中国专利 TAG:
从fp16转换到bf8的指令
技术领域
:1.本公开总体上涉及计算机领域,更具体地涉及从fp16转换到bf8的指令。
背景技术
::2.当前最先进的ai使用不同的32比特和16比特浮点格式,例如,大脑浮点(brainfloatingpoint)16(也称为例如bloat16或bf16)、电气与电子工程师学会(instituteofelectricalandelectronicsengineers,ieee)半精度浮点(half-precisionfloatingpoint)(也称为例如fp16或float16)和单精度浮点(single-precisionfloatingpoint)(也称为例如fp32或float32)。最近的工作还表明,8比特浮点格式,例如bfloat8(使用1-5-2格式(1比特符号、5比特指数和2比特尾数)),是诸如具有bf8输入和fp32累加器的融合乘加(fusedmultiply-add,fma)之类的混合精度计算的输入数据的可行选择。技术实现要素:3.本公开的一方面提供了一种装置,包括:解码器电路,用于对单个指令解码,所述单个指令包括:用于标识第一源操作对象(operand)的一个或多个字段;用于标识第二源操作对象的一个或多个字段;用于标识源/目的地操作对象的一个或多个字段;以及用于操作码的一个或多个字段,其中所述操作码用于表明执行电路:利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩(packed)半精度数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中;以及执行电路,用于根据所述操作码执行经解码的指令,以利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中。4.本公开的一方面提供了一种方法,包括:对单个指令解码,所述单个指令包括:用于标识第一源操作对象的一个或多个字段;用于标识第二源操作对象的一个或多个字段;用于标识源/目的地操作对象的一个或多个字段;以及用于操作码的一个或多个字段,其中所述操作码用于表明执行电路:利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中;以及根据所述操作码执行经解码的指令,以利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中。5.本公开的一方面提供了一种非暂态机器可读介质,其存储单个指令的实例,所述单个指令的实例包括:用于标识第一源操作对象的一个或多个字段;用于标识第二源操作对象的一个或多个字段;用于标识源/目的地操作对象的一个或多个字段;以及用于操作码的一个或多个字段,其中所述操作码用于表明执行电路:利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中,其中所述单个指令的实例被处理器通过执行一种方法来处理,所述方法包括:对所述单个指令解码;以及根据所述操作码执行经解码的指令,以利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中。附图说明6.将参考附图描述根据本公开的各种实施例,其中:7.图1图示了vcvtbias2ph2bf8指令的示例性执行。8.图2图示了处理诸如fp16到bf8(例如,vcvtbias2ph2bf8)指令之类的指令的硬件的实施例。9.图3图示了由处理器执行来处理vcvtbias2ph2bf8指令的方法的实施例。10.图4(a)-(b)图示了由处理器执行来处理vcvtbias2ph2bf8指令的方法的实施例。11.图5图示了用于执行vcvtbias2ph2bf8指令的伪代码的实施例。12.图6图示了示例性系统的实施例。13.图7图示了处理器的实施例的框图。14.图8(a)是根据本公开的实施例图示出示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线两者的框图。15.图8(b)是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核心两者的框图。16.图9图示了(一个或多个)执行单元的电路的实施例。17.图10是根据一些实施例的寄存器体系结构1000的框图。18.图11图示了指令格式的实施例。19.图12图示了寻址字段1105的实施例。20.图13图示了第一前缀的实施例。21.图14(a)-(d)图示了如何使用第一前缀的一些字段的实施例。22.图15(a)-(b)图示了第二前缀的实施例。23.图16图示了第三前缀的实施例。24.图17是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。具体实施方式25.本公开涉及用于利用单个指令将fp16转换到bf8的方法、装置、系统和非暂态计算机可读存储介质。为了准备更高精度的输出来用作下一个操作的输入,在一些实施例中,这些输出需要被转换/舍入为bf8数字。在至少一些矩阵操作中使用8比特浮点格式而不是单精度,有望缓解存储器利用率和带宽问题,同时即使在计算操作期间也提供非微不足道的性能提升(例如,大约2倍量级的性能提升)。此外,数值精度研究表明,深度学习应用的精度不会受到影响。然而,广泛的工作负载研究表明,在这些向下转换期间,不时地需要避免经典的就近舍入行为。相反,需要随机(stochastic)舍入操作。26.当前的实验显示了各种缓存级别和dram的带宽问题。因此,随着矩阵计算能力的大幅加速(2倍),存储器子系统能力因减少存储器占用而只是适度增大。然而,已发现,为了实现收敛,fma累积为单精度的ieeefloat32是重要的。这意味着在操作完成之后将结果向下转换为bf8可能是重要的。27.一些处理器提供float16计算和int8/int16计算堆栈。要将数字从ieeefloat16转换到bf8,要求经由各种int8/int8指令的绕道,因为偏置项(biasterm)可通过这种方式来实现,然而其执行是非常慢的。28.本文详述的实施例描述了用于针对舍入使用偏置项来执行这种转换/舍入的指令和指令支持。具体地,fp16值被转换/舍入为bf8值。具体地,详述了从fp16转换到bf8的指令的实施例。这些指令中的一个或多个在被执行时利用来自第三向量的偏置项将两个向量(在512比特寄存器中最多达32个16比特要素)转换为8比特bf8。硬件辅助的转换也可提供机会来向软件(sw)和操作系统(os)“隐藏”转换基础设施,例如,通过在转换下一个向量的同时对转换后的向量执行算术。29.指令的实施例的执行将引起一种转换,该转换使用每要素偏置舍入机制,将具有多个fp16数据要素的两个紧缩数据源操作对象(例如,simd/紧缩数据/向量寄存器或存储器位置)中的多个紧缩fp16值使用来自源/目的地向量的偏置项转换为多个紧缩bf8值,并且将这些值存储在紧缩数据目的地操作对象(例如,simd/紧缩数据/向量寄存器或存储器位置)中。在一些实施例中,指令格式利用写入掩码(writemask)或谓词(predicate),它被用来确定目的地的哪些数据要素位置要被更新、归零,等等。30.因此,实现该指令的处理器或核心将根据该指令的操作码,使用来自源/目的地的偏置项执行源的每个要素从fp16到bf8的转换,并且将每个经转换的要素存储到指定的源/目的地向量的相应数据要素位置中。注意,就数据要素位置而言,这两个源被视为一个大的源。例如,对于512比特的源,相对于源/目的地而言,其中第一源的数据要素位置为0-15,第二源的数据要素位置为16-31。在一些实施例中,如果必要,该转换要包括截断和舍入。31.在一些实施例中,fp16到bf8转换指令具有vcvtbias2ph2bf8的助记符,其中vcvt表示转换,bias表示使用偏置项,2ph表示两个紧缩fp16源,2表示“到”,而bf8表示bf8的1-5-2版本。第二fp16到bf8转换指令的格式的一种实施例是vcvtbias2ph2bf8{k1}srcdst,src1,sr2。在一些实施例中,vcvtneph2bf8是该指令的操作码助记符。srcdst表示紧缩数据源/目的地操作对象位置,src1和src2表示紧缩数据源操作对象位置。示例性操作对象大小包括但不限于64比特、128比特、256比特、512比特和1024比特。例如,src1、src2和srcdst可以是512比特寄存器,其中src1和src2用于存储32个fp16要素,并且srcdst具有用于64个bf8要素(转换后)和64个偏置项(在转换期间使用)的存储。vcvtbias2ph2bf8的好处是,在一些实施例中,高效地利用了寄存器空间和缓存端口,使其相应的宽度达到最大。32.在一些实施例中,k1表示使用写入掩蔽/谓词。操作对象中的一个或多个可以是存储器位置。在一些实施例中,使用用于modrm:reg(w)的一个或多个字段对目的地进行编码,使用来自前缀(例如,vvvv(r))的一个或多个字段对第一源进行编码,并且使用用于modrm:r/m(r)的一个或多个字段对第二源进行编码。在一些实施例中,该指令使用前缀1101(c)。33.图1图示了vcvtbias2ph2bf8指令的示例性执行。虽然这幅图采取的是低位优先格式,本文论述的原理在高位优先格式中也是可行的。在此示例中,不使用写入掩蔽/谓词。34.如图所示,紧缩数据源101和103中的每一者包括n个fp16要素。取决于实现方式,紧缩数据源101和紧缩数据源2103是紧缩数据寄存器(例如,xmm、ymm、zmm、向量、simd等等寄存器),或者是存储器位置。35.执行前的紧缩数据源/目的地131(a)存储多个紧缩偏置(例如,8比特偏置项)。紧缩数据源1101、紧缩数据源2103和执行前紧缩数据源/目的地131(a)(作为源)被馈送到执行电路109中以被操作。具体地,执行电路109使用fp16到bf8组合逻辑111执行fp16到bf8转换。该组合逻辑111的操作的实施例的细节将在后文以流程图的形式描述。36.执行后的紧缩数据源/目的地131将紧缩数据源101和103的fp16数据要素的转换的结果存储在紧缩数据目的地131的相应位置中。例如,紧缩数据源2103的紧缩数据源位置0(最右边)被存储在紧缩数据目的地位置0(最右边)。而紧缩数据源1101的最高有效位紧缩数据要素位置被存储在紧缩数据目的地131的最高有效位紧缩数据要素位置中。37.图2图示了处理诸如fp16到bf8(例如,vcvtbias2ph2bf8)指令之类的指令的硬件的实施例。如图所示,存储装置203存储要被执行的vcvtbias2ph2bf8指令301。38.指令201被解码电路205接收。例如,解码电路205从取得逻辑/电路接收此指令。该指令包括用于操作码、第一和第二源以及目的地的字段。在一些实施例中,源和目的地是寄存器,而在其他实施例中,一个或多个是存储器位置。39.稍后将详述至少一个指令格式的更详细实施例。解码电路205将指令解码成一个或多个操作。在一些实施例中,这个解码包括生成要被执行电路(例如执行电路209)执行的多个微操作。解码电路205也对指令前缀进行解码。在一些实施例中,解码电路205在指令集之间进行转化,然后对转化后的(一个或多个)指令进行解码。40.在一些实施例中,寄存器重命名、寄存器分配和/或调度电路207提供用于以下各项中的一个或多个的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表),2)向解码的指令分配状态比特和标志,以及3)调度解码的指令以在指令池之外的执行电路上执行(例如,在一些实施例中使用预留站)。41.寄存器(寄存器文件)和/或存储器208存储数据作为要被执行电路209进行操作的指令的操作对象。示例性寄存器类型包括紧缩数据寄存器、通用寄存器、以及浮点寄存器。42.执行电路209执行经解码的指令。在图1、图8等等中示出了示例性的详细执行电路。经解码的指令的执行使得执行电路利用偏置项将紧缩fp16数据要素转换成紧缩bf8要素。43.在一些实施例中,引退/写回电路211从体系结构上将目的地寄存器提交到寄存器或存储器208中并且引退该指令。44.图3图示了由处理器执行来处理vcvtbias2ph2bf8指令的方法的实施例。例如,如图8(b)所示的处理器核心、如下文详述的流水线等等执行此方法。45.在301,取得单个vcvtbias2ph2bf8指令。单个vcvtbias2ph2bf8包括:一个或多个字段,用于标识两个源操作对象(例如,(一个或多个)寻址字段1105);一个或多个字段,用于标识源/目的地操作对象(例如,(一个或多个)寻址字段1105);以及用于操作码(例如,操作码1103)的一个或多个字段,该操作码表明执行电路要:使用来自源/目的地的偏置项将来自所标识的第一和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将紧缩bfloat8数据存储到所标识的源/目的地的相应数据要素位置中。在一些实施例中,modr/m字节1202、前缀bpf01(c)m的vvvv和/或sib字节1204提供操作对象位置。46.在一些实施例中,取得的指令在302处被转化成一个或多个指令。例如,取得的指令被转化成另一指令集体系结构的一个或多个指令。47.取得的指令(或者经转化的一个或多个指令)在303处被解码。例如,取得的vcvtbias2ph2bf8指令被解码电路解码,例如本文详述的解码电路。48.在305,取回与经解码的指令的源操作对象相关联的数据值。例如,当源操作对象中的一个或多个是存储器操作对象时,来自所指示的存储器位置的数据被取回。49.在307,由执行电路(硬件)(例如本文详述的执行电路)执行经解码的单个指令,或者执行经转化的一个或多个指令。对于vcvtbias2ph2bf8指令,该执行将使得执行电路利用来自所标识的源/目的地的偏置项将来自所标识的第一和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将紧缩bfloat8数据存储到所标识的源/目的地的相应数据要素位置中。50.在一些实施例中,该指令在309处被提交或引退。51.图4(a)-(b)图示了由处理器执行来处理vcvtbias2ph2bf8指令的方法的实施例。具体地,描述了指令的执行。例如,如图8(b)所示的处理器核心、如下文详述的流水线等等执行此方法。回顾一下,对于源/目的地的数据要素位置而言,第一和第二源基本上被视为单个源(例如,两个源的串接)。52.多个动作可适用于第二源的每个数据要素,并且包括401-417中的一个或多个。注意,每要素评估可被串行或并行地进行。53.在401,确定写入掩码是否适用。例如,是否使用了写入掩码?如果是,写入掩码或谓词的相应比特位置是否被设置以允许针对数据要素存储结果转换?54.当写入掩码适用时,在一些实施例中,在403处确定第二源是否为存储器以及单要素广播是否被使能。在一些实施例中,1101(c)的比特20被用于广播设置。55.当这些条件为真时,在一些实施例中,在405,临时值(t)被设置为存储在源的初始要素位置中的值。当这些条件不为真时,在407,临时值(t)被设置为存储在源的要素位置中的值。在409,使用来自源/目的地的偏置项(根据需要)将临时值t从fp16转换到bf8。图5图示了在一些实施例中如何在“convert_fp16_to_bfloat8_bias”函数中进行这种转换。下面的表格说明了根据一些实施例如何转换t。56.[0057][0058]在一些实施例中,使用不同的函数(“convert_to_fp16_bfloat8_rno”)。下面的表格说明了根据一些实施例如何转换t。[0059][0060]在411,转换后的值被存储到目的地中的相应字节位置中。例如,源[1]被存储在目的地[1]中。[0061]如果写入掩码不适用(例如,没有设置),那么在413处确定是否使用归零。当使用归零时,在417处不对目的地的相应字节位置中的值进行改变。当不使用归零时(例如,使用合并掩蔽),在415处将目的地的相应字节位置中的值设置为零。[0062]在418处对第一源进行评估,并且此评估可包括若干动作。在419,确定写入掩码是否适用。例如,是否使用了写入掩码?如果是,写入掩码或谓词的相应比特位置是否被设置以允许针对数据要素存储结果转换?[0063]当写入掩码适用时,在420,临时值(t)被设置为要被存储在源的初始要素位置中的值。在422,使用来自源/目的地的偏置项(根据需要)将临时值t从fp16转换到bf8。图5图示了在一些实施例中如何在“convert_fp16_to_bfloat8_bias”函数中进行这种转换。[0064]下面的表格说明了根据一些实施例如何转换t。[0065][0066]在一些实施例中,使用不同的函数(“convert_to_fp16_bfloat8_rno”)。下面的表格说明了根据一些实施例如何转换t。[0067][0068]在422,转换后的值被存储到目的地中的相应字节位置中。注意,这个相应的位置需要考虑到来自第二源的存储。例如,源1[0]被存储在目的地[n]中。[0069]如果写入掩码不适用(例如,没有设置),那么在423处确定是否使用归零。当使用归零时,在425处不对目的地的相应字节位置中的值进行改变。当不使用归零时(例如,使用合并掩蔽),在427处将目的地的相应字节位置中的值设置为零。[0070]图5图示了用于执行vcvtbias2ph2bf8指令的伪代码的实施例。[0071]上文详述的指令可被用于各种计算机体系结构和环境中,利用一个或多个指令格式,等等。示例性体系结构、格式等等的实施例在下文详述。[0072]示例性计算机体系结构[0073]下面详细描述示例性计算机体系结构。本领域中已知的用于膝上型电脑、桌面型电脑、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digitalsignalprocessor,dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。[0074]图6图示了示例性系统的实施例。多处理器系统600是一种点到点互连系统,并且包括多个处理器,其中包括经由点到点互连650耦合的第一处理器670和第二处理器680。在一些实施例中,第一处理器670和第二处理器680是同构的。在一些实施例中,第一处理器670和第二处理器680是异构的。[0075]处理器670和680被示为分别包括集成存储器控制器(integratedmemorycontroller,imc)单元电路672和682。处理器670还包括点到点(p-p)接口676和678作为其互连控制器单元的一部分;类似地,第二处理器680包括p-p接口686和688。处理器670、680可利用p-p接口电路678、688经由点到点(p-p)接口650交换信息。imc672和682将处理器670、680耦合到各自的存储器,即存储器632和存储器634,这些存储器可以是在本地附接到各个处理器的主存储器的一部分。[0076]处理器670、680可各自利用点到点接口电路676、694、686、698经由个体p-p互连652、654来与芯片组690交换信息。芯片组690可以可选地经由高性能接口692与协处理器638交换信息。在一些实施例中,协处理器638是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。[0077]共享缓存(未示出)可被包括在任一处理器670、680中,或者在两个处理器之外,但经由p-p互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。[0078]芯片组690可经由接口696耦合到第一互连616。在一些实施例中,第一互连616可以是外围组件互连(peripheralcomponentinterconnect,pci)互连,或者诸如快速pci互连或另一i/o互连之类的互连。在一些实施例中,互连之一耦合到功率控制单元(powercontrolunit,pcu)617,它可包括电路、软件和/或固件,以执行关于处理器670、680和/或协处理器638的功率管理操作。pcu617向电压调节器提供控制信息以使得电压调节器生成适当的调节电压。pcu617还提供控制信息以控制生成的操作电压。在各种实施例中,pcu617可包括多种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全受处理器控制的(例如,由各种处理器硬件控制,并且可由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可响应于外部源(例如,平台或功率管理源或系统软件)而被执行。[0079]pcu617被图示为作为与处理器670和/或处理器680分开的逻辑存在。在其他情况下,pcu617可在处理器670或680的核心(未示出)中的给定的一个或多个上执行。在一些情况下,pcu617可被实现为被配置为执行其自己的专用功率管理代码(有时称为p代码)的微控制器(专用或通用)或者其他控制逻辑。在另外的其他实施例中,pcu617要执行的功率管理操作可被实现在处理器外部,例如借由单独的功率管理集成电路(powermanagementintegratedcircuit,pmic)或者在处理器外部的另一组件来实现。在另外的其他实施例中,pcu617要执行的功率管理操作可被实现在bios或其他系统软件内。[0080]各种i/o设备614可耦合到第一互连616,以及将第一互连616耦合到第二互连620的互连(总线)桥618。在一些实施例中,一个或多个额外的处理器615,例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)、或者任何其他处理器,耦合到第一互连616。在一些实施例中,第二互连620可以是低引脚数(lowpincount,lpc)互连。各种设备可耦合到第二互连620,包括例如键盘和/或鼠标622、通信设备627、和存储单元电路628。存储单元电路628可以是盘驱动器或其他大容量存储设备,在一些实施例中,它可包括指令/代码和数据630。在一些实施例中,指令/代码和数据630包括二进制转化器或其他仿真功能。另外,音频i/o624可耦合到第二互连620。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,取代点到点体系结构,诸如多处理器系统600之类的系统可实现多点分支互连或者其他这种体系结构。[0081]示例性核心体系结构、处理器和计算机体系结构[0082]可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用无序核心的cpu;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与cpu分开的芯片上;2)协处理器在与cpu相同的封装中、分开的管芯上;3)协处理器与cpu在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在与所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)相同的管芯上包括上述的协处理器以及额外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。[0083]图7图示了处理器700的实施例的框图,该处理器可具有多于一个核心,可具有集成的存储器控制器,并且可具有集成的图形。实线框图示了具有单个核心702a、系统代理710和一组一个或多个互连控制器单元电路716的处理器700,而虚线框的可选添加图示了具有多个核心702(a)-(n)、系统代理单元电路710中的一组一个或多个集成存储器控制单元电路714和专用逻辑708以及一组一个或多个互连控制器单元电路716的替换处理器700。注意处理器700可以是图6的处理器670或680或者协处理器638或615之一。[0084]从而,处理器700的不同实现方式可包括:1)其中专用逻辑708是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心,未示出),并且核心702(a)-(n)是一个或多个通用核心(例如,通用有序核心、通用无序核心、或者两者的组合)的cpu;2)其中核心702(a)-(n)是大量的主要打算用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心702(a)-(n)是大量的通用有序核心的协处理器。从而,处理器700可以是通用处理器、协处理器或者专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量集成众核(manyintegratedcore,mic)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。处理器700可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是bicmos、cmos或nmos。[0085]存储器层次体系包括核心702(a)-(n)内的一级或多级缓存单元电路704(a)-(n)、一组或一个或多个共享缓存单元电路706、以及耦合到该组集成存储器控制器单元电路714的外部存储器(未示出)。该组一个或多个共享缓存单元电路706可包括一个或多个中间级别缓存(例如第2级(l2)、第3级(l3)、第4级(4)或者其他级别的缓存),比如最后一级缓存(lastlevelcache,llc),和/或这些的组合。虽然在一些实施例中基于环的互连网络电路712互连专用逻辑708(例如,集成图形逻辑)、该组共享缓存单元电路706和系统代理单元电路710,但替换实施例使用任何数目的公知技术来互连这种单元。在一些实施例中,在共享缓存单元电路706中的一个或多个和核心702(a)-(n)之间维持一致性。[0086]在一些实施例中,核心702(a)-(n)中的一个或多个能够进行多线程处理。系统代理单元电路710包括协调和操作核心702(a)-(n)的那些组件。系统代理单元电路710可包括例如功率控制单元(powercontrolunit,pcu)电路和/或显示单元电路(未示出)。pcu可以是或者可以包括调节核心702(a)-(n)和/或专用逻辑708(例如,集成图形逻辑)的功率状态所需要的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。[0087]核心702(a)-(n)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心702(a)-(n)中的两个或更多个可能够执行同一指令集,而其他核心可能够只执行该指令集的子集或者不同的指令集。[0088]示例性核心体系结构[0089]有序和无序核心框图[0090]图8(a)是根据本公开的实施例图示出示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线两者的框图。图8(b)是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核心两者的框图。图8(a)-8(b)中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名、无序发出/执行流水线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。[0091]在图8(a)中,处理器流水线800包括取得级802、可选的长度解码级804、解码级806、可选的分配级808、可选的重命名级810、调度(也称为调遣或发出)级812、可选的寄存器读取/存储器读取级814、执行级816、写回/存储器写入级818、可选的异常处理级822、以及可选的提交级824。在这些处理器流水线级的每一者中可执行一个或多个操作。例如,在取得级802期间,从指令存储器取得一个或多个指令,在解码级806期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(loadstoreunit,lsu)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(linkregister,lr))。在一个实施例中,解码级806和寄存器读取/存储器读取级814可以被组合到一个流水线级中。在一个实施例中,在执行级816期间,可以执行解码的指令,可以执行到高级微控制器总线(advancedmicrocontrollerbus,ahb)接口的lsu地址/数据流水线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。[0092]作为示例,示例性寄存器重命名、无序发出/执行核心体系结构可实现流水线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。[0093]图8(b)示出了处理器核心890包括耦合到执行引擎单元电路850的前端单元电路830,并且两者都耦合到存储器单元电路870。核心890可以是精简指令集计算(reducedinstructionsetcomputing,risc)核心、复杂指令集计算(complexinstructionsetcomputing,cisc)核心、超长指令字(verylonginstructionword,vliw)核心、或者混合或替换核心类型。作为另外一个选项,核心890可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(generalpurposecomputinggraphicsprocessingunit,gpgpu)核心、图形核心,等等。[0094]前端单元电路830可包括分支预测单元电路832,其耦合到指令缓存单元电路834,指令缓存单元电路834耦合到指令转化后备缓冲器(translationlookasidebuffer,tlb)836,指令tlb836耦合到指令取得单元电路838,指令取得单元电路838耦合到解码单元电路840。在一个实施例中,指令缓存单元电路834被包括在存储器单元电路870中,而不是前端单元电路830。解码单元电路840(或解码器)可对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路840可还包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用转发的寄存器端口来生成lsu地址,并且可进一步执行分支转发(例如,立即数偏移分支转发,lr寄存器分支转发,等等)。可利用各种不同的机制来实现解码单元电路840。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmablelogicarray,pla)、微代码只读存储器(readonlymemory,rom),等等。在一个实施例中,核心890包括微代码rom(未示出)或其他介质,其为某些宏指令存储微代码(例如,在解码单元电路840中或者以其他方式在前端单元电路830内)。在一个实施例中,解码单元电路840包括微操作(micro-op)或操作缓存(未示出),以保持/缓存在解码或处理器流水线800的其他级期间生成的经解码的操作、微标记或微操作。解码单元电路840可耦合到执行引擎单元电路850中的重命名/分配器单元电路852。[0095]执行引擎电路850包括重命名/分配器单元电路852,其耦合到引退单元电路854和一组一个或多个调度器电路856。调度器电路856表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中,调度器电路856可包括算术逻辑单元(arithmeticlogicunit,alu)调度器/调度电路、alu队列、算术生成单元(arithmeticgenerationunit,agu)调度器/调度电路、agu队列,等等。调度器电路856耦合到物理寄存器文件电路858。物理寄存器文件电路858的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元电路858包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。物理寄存器文件单元电路858与引退单元电路854(也称为退役队列或引退队列)重叠以说明可用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorderbuffer,rob)和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元电路854和物理寄存器文件电路858耦合到(一个或多个)执行集群860。(一个或多个)执行集群860包括一组一个或多个执行单元电路862和一组一个或多个存储器访问电路864。执行单元电路862可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他实施例可只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。调度器电路856、物理寄存器文件单元电路858、以及(一个或多个)执行集群860被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,它们各自具有其自己的调度器电路、物理寄存器文件单元电路和/或执行集群—并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有存储器访问单元电路864)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是无序发出/执行,并且其余的是有序的。[0096]在一些实施例中,执行引擎单元电路850可以执行到高级微控制器总线(ahb)接口(未示出)的加载存储单元(lsu)地址/数据流水线化,以及地址级和写回、数据级加载、存储、以及分支。[0097]存储器访问电路864的集合耦合到存储器单元电路870,存储器单元电路870包括数据tlb单元电路872,数据tlb单元电路872耦合到数据缓存电路874,数据缓存电路874耦合到第2级(l2)缓存电路876。在一个示例性实施例中,存储器访问单元电路864可包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路870中的数据tlb电路872。指令缓存电路834进一步耦合到存储器单元电路870中的第2级(l2)缓存单元电路876。在一个实施例中,指令缓存834和数据缓存874在l2缓存单元电路876、第3级(l3)缓存单元电路(未示出)和/或主存储器中被组合成单个指令和数据缓存(未示出)。l2缓存单元电路876耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。[0098]核心890可支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);mips指令集;arm指令集(带有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心890包括逻辑来支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。[0099]示例性执行单元电路[0100]图9图示了(一个或多个)执行单元的电路的实施例,例如图8(b)的执行单元电路862。如图所示,执行单元电路862可包括一个或多个alu电路901、向量/simd单元电路903、加载/存储单元电路905、和/或分支/跳转单元电路907。alu电路901执行整数算术和/或布尔操作。向量/simd单元电路903对紧缩数据(例如,simd/向量寄存器)执行向量/simd操作。加载/存储单元电路905执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路905也可以生成地址。分支/跳转单元电路907依据指令引起到某个存储器地址的分支或跳转。浮点单元(floating-pointunit,fpu)电路909执行浮点算术。执行单元电路862的宽度依据实施例而有所不同,并且可以在从16比特到1024比特的范围中。在一些实施例中,两个或更多个更小的执行单元被从逻辑上组合以形成更大的执行单元(例如,两个128比特执行单元被从逻辑上组合以形成256比特执行单元)。[0101]示例性寄存器体系结构[0102]图10是根据一些实施例的寄存器体系结构1000的框图。如图所示,存在向量/simd寄存器1010,其宽度从128比特到1024比特不等。在一些实施例中,向量/simd寄存器1010在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些实施例中,向量/simd寄存器1010是512比特的zmm寄存器:低位256比特被用于ymm寄存器,并且低位128比特被用于xmm寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他更短的长度之间做出选择,其中每个这种更短长度是前一长度的一半长度;标量操作是在zmm/ymm/xmm寄存器中的最低阶数据要素位置上执行的操作;更高阶数据要素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。[0103]在一些实施例中,寄存器体系结构1000包括写入掩码/谓词寄存器1015。例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),其中每一者是16比特、32比特、64比特或128比特大小的。写入掩码/谓词寄存器1015可以允许合并(例如,允许目的地中的任何要素集合在任何操作的执行期间免受更新)和/或归零(例如,归零向量掩码允许了目的地中的任何要素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写入掩码/谓词寄存器1015中的每个数据要素位置对应于目的地的一个数据要素位置。在其他实施例中,写入掩码/谓词寄存器1015是可缩放的,并且由给定向量要素的设定数目的使能比特组成(例如,每个64比特向量要素有8个使能比特)。[0104]寄存器体系结构1000包括多个通用寄存器1025。这些寄存器可以是16比特、32比特、64比特等等,并且可被用于标量操作。在一些实施例中,这些寄存器被用名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8至r15来引用。[0105]在一些实施例中,寄存器体系结构1000包括标量浮点寄存器1045,它被用于使用x87指令集扩展的32/64/80比特浮点数据上的标量浮点操作,或者作为mmx寄存器,来对64比特紧缩整数数据执行操作,以及为mmx和xmm寄存器之间执行的一些操作保存操作对象。[0106]一个或多个标志寄存器1040(例如,eflags,rflags,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器1040可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些实施例中,一个或多个标志寄存器1040被称为程序状态和控制寄存器。[0107]片段寄存器1020包含用于访问存储器的片段点。在一些实施例中,这些寄存器由名称cs、ds、ss、es、fs和gs来称呼。[0108]机器特定寄存器(machine-specificregister,msr)1035控制和报告处理器性能。大多数msr1035处理与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器1060由用于检测和报告硬件差错的控制、状态和差错报告msr组成。[0109]一个或多个指令指针寄存器1030存储指令指针值。(一个或多个)控制寄存器1055(例如,cr0-cr4)确定处理器(例如,处理器670、680、638、615和/或700)的操作模式和当前执行任务的特性。调试寄存器1050控制并允许监视处理器或核心的调试操作。[0110]存储器管理寄存器1065指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可包括gdtr、idrt、任务寄存器、以及ldtr寄存器。[0111]本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。[0112]指令集[0113]指令集体系结构(instructionsetarchitecture,isa)可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式被解读的给定字段。从而,isa的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,以该指令格式的指令模板中的给定一个指令模板来表达)并且包括用于指定操作和操作对象的字段。例如,示例性add指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且此add指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。[0114]示例性指令格式[0115]可按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示例性系统、体系结构和流水线。(一个或多个)指令的实施例可在这种系统、体系结构和流水线上被执行,但不限于详述的那些。[0116]图11图示了指令格式的实施例。如图所示,指令可包括多个组件,包括但不限于一个或多个字段,用于:一个或多个前缀1101、操作码1103、寻址信息1105(例如,寄存器标识符、存储器寻址信息,等等)、位移值1107、和/或立即数1109。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码1103的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当明白,在其他实施例中,这些字段可被以不同的顺序来编码、被组合,等等。[0117](一个或多个)前缀字段1101当被使用时会修改指令。在一些实施例中,一个或多个前缀被用于重复字符串指令(例如,0xf0、0xf2、0xf3,等等),以提供片段覆盖(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e,等等),以执行总线锁定操作,和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xf2、0xf3,等等)。这些前缀中的某些可能被认为是“传统”前缀。其他前缀——其一个或多个示例在此详述——表明和/或提供了进一步的能力,例如指定特定的寄存器,等等。其他前缀通常在“传统”前缀之后。[0118]操作码字段1103被用于至少部分地定义在指令解码时要执行的操作。在一些实施例中,在操作码字段1103中编码的主操作码的长度为1、2或3个字节。在其他实施例中,主操作码可以是不同的长度。额外的3比特操作码字段有时被编码在另一字段中。[0119]寻址字段1105被用于寻址指令的一个或多个操作对象,例如存储器中的位置或者一个或多个寄存器。图12图示了寻址字段1105的实施例。在这个图示中,示出了可选的modr/m字节1202和可选的缩放比例、索引、基址(scale,index,base,sib)字节1204。modr/m字节1202和sib字节1204被用于编码一指令的多达两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。modr/m字节1202包括mod字段1242、寄存器字段1244、和r/m字段1246。[0120]mod字段1242的内容区分存储器访问和非存储器访问模式。在一些实施例中,当mod字段1242的值为b11时,就利用了寄存器直接寻址模式,否则就使用寄存器间接寻址。[0121]寄存器字段1244可编码目的地寄存器操作对象或者源寄存器操作对象,或者可编码操作码扩展,并且可不被用于编码任何指令操作对象。寄存器索引字段1244的内容直接指定或者通过地址生成指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些实施例中,寄存器字段1244被补充以来自前缀(例如,前缀1101)的额外比特,以允许更大的寻址。[0122]r/m字段1246可被用于编码引用存储器地址的指令操作对象,或者可被用于编码目的地寄存器操作对象或源寄存器操作对象。注意r/m字段1246在一些实施例中可被与mod字段1242相组合以规定寻址模式。[0123]sib字节1204包括缩放比例字段1252、索引字段1254、以及基址字段1256,以用于地址的生成。缩放比例字段1252指示缩放因子。索引字段1254指定要使用的索引寄存器。在一些实施例中,索引字段1254被补充以来自前缀(例如,前缀1101)的额外比特,以允许更大的寻址。基址字段1256指定了要使用的基址寄存器。在一些实施例中,基址字段1256被补充以来自前缀(例如,前缀1101)的额外比特,以允许更大的寻址。在实践中,缩放比例字段1252的内容允许了缩放索引字段1254的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引 基址的地址生成)。[0124]一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放比例*索引 基址 位移、索引*缩放比例 位移、r/m 位移、指令指针(rip/eip) 位移、寄存器 位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些实施例中,位移字段1107提供这个值。此外,在一些实施例中,在寻址字段1105的mod字段中编码了位移因子用法,其表明压缩位移方案,对于该方案,位移值是通过将disp8与缩放因子n结合相乘来计算的,该缩放因子n是基于向量长度、b比特的值和指令的输入要素大小而确定的。该位移值被存储在位移字段1107中。[0125]在一些实施例中,立即数字段1109为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值,等等。[0126]图13图示了第一前缀1101(a)的实施例。在一些实施例中,第一前缀1101(a)是rex前缀的实施例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令、多数据(singleinstruction,multipledata,simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。[0127]使用第一前缀1101(a)的指令可以使用3比特字段指定最多达三个寄存器,这取决于格式:1)使用modr/m字节1202的reg字段1244和r/m字段1246;2)使用modr/m字节1202与sib字节1204,包括使用reg字段1244和基址字段1256和索引字段1254;或者3)使用操作码的寄存器字段。[0128]在第一前缀1101(a)中,比特位置7:4被设置为0100。比特位置3(w)可被用于确定操作对象大小,但可能不会单独确定操作对象宽度。因此,当w=0时,操作对象大小由代码段描述符(codesegmentdescriptor,cs.d)决定,而当w=1时,操作对象大小为64比特。[0129]注意,添加另一比特则允许了寻址16(24)个寄存器,而单独的modr/mreg字段1244和modr/mr/m字段1246各自只能寻址8个寄存器。[0130]在第一前缀1101(a)中,比特位置2(r)可以是modr/mreg字段1244的扩展,并且当该字段编码通用寄存器、64比特紧缩数据寄存器(例如,sse寄存器)或者控制或调试寄存器时,可被用来修改modr/mreg字段1244。当modr/m字节1202指定其他寄存器或定义扩展操作码时,r被忽略。[0131]比特位置1(x)x比特可以修改sib字节索引字段1254。[0132]比特位置b(b)b可以修改modr/mr/m字段1246中的基址或sib字节基址字段1256;或者它可以修改用于访问通用寄存器(例如,通用寄存器1025)的操作码寄存器字段。[0133]图14(a)-(d)图示了如何使用第一前缀1101(a)的r、x和b字段的实施例。图14(a)图示了当sib字节1204不被用于存储器寻址时,来自第一前缀1101(a)的r和b被用来扩展modr/m字节1202的reg字段1244和r/m字段1246。图14(b)图示了当不使用sib字节1204时,来自第一前缀1101(a)的r和b被用来扩展modr/m字节1202的reg字段1244和r/m字段1246(寄存器-寄存器寻址)。图14(c)图示了当sib字节1204被用于存储器寻址时,来自第一前缀1101(a)的r、x和b被用于扩展modr/m字节1202的reg字段1244以及索引字段1254和基址字段1256。图14(d)图示了当寄存器被编码在操作码1103中时来自第一前缀1101(a)的b被用来扩展modr/m字节1202的reg字段1244。[0134]图15(a)-(b)图示了第二前缀1101(b)的实施例。在一些实施例中,第二前缀1101(b)是vex前缀的实施例。第二前缀1101(b)编码允许了指令具有多于两个操作对象,并且允许了simd向量寄存器(例如,向量/simd寄存器1010)长于64比特(例如,128比特和256比特)。第二前缀1101(b)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行比如a=a b之类的操作,这覆写了源操作对象。对第二前缀1101(b)的使用使得操作对象能够执行非破坏性操作,例如a=b c。[0135]在一些实施例中,第二前缀1101(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀1101(b)被主要用于128比特、标量和一些256比特指令;而三字节的第二前缀1101(b)提供了对第一前缀1101(a)的紧凑替换和3字节操作码指令。[0136]图15(a)图示了第二前缀1101(b)的两字节形式的实施例。在一个示例中,格式字段1501(字节01503)包含值c5h。在一个示例中,字节11505在比特[7]中包括“r”值。这个值是第一前缀1101(a)的相同值的补码。比特[2]被用来规定向量的长度(l)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可被用于:1)编码以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0137]使用这个前缀的指令可以使用modr/mr/m字段1246来编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0138]使用这个前缀的指令可以使用modr/mreg字段1244来编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被用于编码任何指令操作对象。[0139]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1246和modr/mreg字段1244编码了四个操作对象中的三个。然后立即数1109的比特[7:4]被用来编码第三源寄存器操作对象。[0140]图15(b)图示了第二前缀1101(b)的三字节形式的实施例。在一个示例中,格式字段1511(字节01513)包含值c4h。字节11515在比特[7:5]中包括“r”、“x”和“b”,它们是第一前缀1101(a)的相同值的补码。字节11515的比特[4:0](示为mmmmm)包括内容来根据需要编码一个或多个隐含的前导操作码字节。例如,00001意味着0fh前导操作码,00010意味着0f38h前导操作码,00011意味着前导0f3ah操作码,等等。[0141]字节21517的比特[7]与第一前缀1101(a)的w被类似地使用,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(l)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可被用于:1)编码第一源寄存器操作对象,该第一源寄存器操作对象以反转(反码)形式指定并且对于具有2个或更多个源操作对象的指令是有效的;2)编码目的地寄存器操作对象,所述目的地寄存器操作对象对于某些向量移位以反码形式指定;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0142]使用这个前缀的指令可以使用modr/mr/m字段1246来编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0143]使用这个前缀的指令可以使用modr/mreg字段1244来编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被用于编码任何指令操作对象。[0144]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1246和modr/mreg字段1244编码了四个操作对象中的三个。然后立即数1109的比特[7:4]被用来编码第三源寄存器操作对象。[0145]图16图示了第三前缀1101(c)的实施例。在一些实施例中,第一前缀1101(a)是evex前缀的实施例。第三前缀1101(c)是四字节前缀。[0146]第三前缀1101(c)可以在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码/操作掩码(opmask)(见先前图中对于寄存器的论述,例如图10)或预测的指令利用这个前缀。操作掩码寄存器允许了条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀1101(b)来编码的。[0147]第三前缀1101(c)可以编码指令类所特定的功能(例如,具有“加载 操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。[0148]第三前缀1101(c)的第一字节是格式字段1611,它在一个示例中具有62h的值。随后的字节被称为有效载荷字节1615-1619,并且共同形成p[23:0]的24比特值,以一个或多个字段的形式提供特定的能力(在本文中详述)。[0149]在一些实施例中,有效载荷字节1619的p[1:0]与低位的两个mmmmm比特相同。在一些实施例中,p[3:2]被保留。比特p[4](r’)在与p[7]和modr/mreg字段1244相组合时允许了访问高16向量寄存器集合。当不需要sib类型寻址时,p[6]也可提供对高16向量寄存器的访问。p[7:5]由r、x和b构成,它们是向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与modr/m寄存器字段1244和modr/mr/m字段1246相组合时,允许了访问低8个寄存器之外的下一组8个寄存器。p[9:8]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。p[10]在一些实施例中是固定值1。被示为vvvv的p[14:11]可被用于:1)编码以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0150]p[15]类似于第一前缀1101(a)和第二前缀1111(b)的w,并且可以作为操作码扩展比特或操作对象大小提升。[0151]p[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器1015)中的寄存器的索引。在本公开的一个实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于特定指令(这可按多种方式来实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许了目的地中的任何要素集合被保护免于在(由基本操作和增强操作指定的)任何操作的执行期间的更新;在其他的一个实施例中,保留目的地的相应的掩码比特具有0的每个要素的旧值。与之不同,归零向量掩码允许了目的地中的任何要素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个实施例中,目的地的要素在相应的掩码比特具有0值时被设置到0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的要素的跨度,从第一个到最后一个)的能力;然而,被修改的要素不是必须要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述了如下本公开实施例,在该实施例中,操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接标识要执行的该掩蔽),但替换实施例作为替代或附加允许掩码写入字段的内容直接指定要执行的掩蔽。[0152]p[19]可以与p[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以使用p[19]来访问高16个向量寄存器。p[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]表明对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。[0153]在下面的表格中详述了在使用第三前缀1101(c)的指令中对寄存器的编码的示例性实施例。[0154][0155][0156]表格1:64比特模式中的32寄存器支持[0157]表格2:32比特模式中的编码寄存器指定符[0158]表格3:操作掩码寄存器指定符编码[0159]程序代码可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本技术而言,处理系统包括任何具有处理器的系统,例如数字信号处理器(digitalsignalprocessor,dsp)、微控制器、专用集成电路(applicationspecificintegratedcircuit,asic)、或者微处理器。[0160]可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者经解译的语言。[0161]可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的机制的实施例。本公开的实施例可被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备的可编程系统上执行的计算机程序或程序代码。[0162]至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“ip核心”的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。[0163]这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compactdiskread-onlymemory,cd-rom)、可改写致密盘(compactdiskrewritable,cd-rw)、以及磁光盘),半导体设备(诸如,只读存储器(read-onlymemory,rom),诸如动态随机访问存储器(dynamicrandomaccessmemory,dram)、静态随机访问存储器(staticrandomaccessmemory,sram)之类的随机访问存储器(randomaccessmemory,ram),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom),闪速存储器,电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom),相变存储器(phasechangememory,pcm)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。[0164]因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(hardwaredescriptionlanguage,hdl)。这种实施例也可被称为程序产品。[0165]仿真(包括二进制转化、代码变形等等)[0166]在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。[0167]图17是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图17示出了高级别语言1702的程序可被利用第一isa编译器1704来编译以生成第一isa二进制代码1706,第一isa二进制代码1706可由具有至少一个第一指令集核心的处理器1716原生执行。具有至少一个第一isa指令集核心的处理器1716表示任何可通过兼容地执行如下项或以其他方式处理如下项来执行与具有至少一个第一isa指令集核心的处理器基本上相同的功能,以便实现与具有至少一个第一isa指令集核心的处理器基本上相同的结果:(1)第一isa指令集核心的指令集的实质部分或者(2)目标为在具有至少一个第一isa指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本。第一isa编译器1704表示可操作来生成第一isa二进制代码1706(例如,目标代码)的编译器,第一isa二进制代码1706在带有或不带有额外的链接处理的情况下可在具有至少一个第一isa指令集核心的处理器1716上被执行。类似地,图17示出了高级别语言1702的程序可被利用替换指令集编译器1708来编译以生成替换指令集二进制代码1710,替换指令集二进制代码1710可由没有第一isa指令集核心的处理器1714原生执行。指令转换器1712用于将第一isa二进制代码1706转换成可由没有第一isa指令集核心的处理器1714原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码1710相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器1712表示通过仿真、模拟或任何其他过程允许不具有第一isa指令集处理器或核心的处理器或其他电子设备执行第一isa二进制代码1706的软件、固件、硬件或者其组合。[0168]示例性实施例包括但不限于:[0169]1.一种装置,包括:[0170]解码器电路,用于对单个指令解码,所述单个指令包括一个或多个字段,来标识第一源操作对象,一个或多个字段,来标识第二源操作对象,一个或多个字段,来标识源/目的地操作对象,以及用于操作码的一个或多个字段,其中所述操作码表明执行电路将利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中;以及[0171]执行电路,用于根据所述操作码执行经解码的指令,以利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中。[0172]2.如示例1所述的装置,其中所述第一和源操作对象是向量寄存器。[0173]3.如示例1所述的装置,其中所述偏置项是8比特值。[0174]4.如示例1所述的装置,其中当半精度浮点数据值是无穷大时,所述bfloat8数据值被设置为所述半精度浮点数据值的比特15:8。[0175]5.如示例1所述的装置,其中当半精度浮点数据值是非数字时,所述bfloat8数据值的比特7:2被设置为所述半精度浮点数据值的比特15:10,比特1被设置为1,并且比特0被设置为所述半精度浮点数据值的比特8。[0176]6.如示例1所述的装置,其中当半精度浮点数据值是非数字时,将通过以下方式来计算所述bfloat8数据值:将第一临时值设置为0,将所述第一临时值的比特7:0设置为偏置项,将第二临时值设置为所述半精度浮点数据值加上所述第一临时值,并且所述bfloat8数据值被设置为所述第二临时值的比特15:8。[0177]7.如示例1所述的装置,其中所述单个指令还包括一个或多个字段来标识写入掩码操作对象,其中所述写入掩码操作对象的一个或多个比特向执行电路表明转换后的bfloat8数据值中的哪些要被写入在所述目的地操作对象中。[0178]8.一种方法,包括:[0179]对单个指令解码,所述单个指令包括一个或多个字段,来标识第一源操作对象,一个或多个字段,来标识第二源操作对象,一个或多个字段,来标识源/目的地操作对象,以及用于操作码的一个或多个字段,其中所述操作码表明执行电路将利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中;并且[0180]根据所述操作码执行经解码的指令,以利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中。[0181]9.如示例8所述的方法,其中用于所述第一源操作对象的标识符的字段将标识向量寄存器。[0182]10.如示例8所述的方法,其中所述偏置项是8比特值。[0183]11.如示例8所述的方法,其中当半精度浮点数据值是无穷大时,所述bfloat8数据值被设置为所述半精度浮点数据值的比特15:8。[0184]12.如示例8所述的方法,其中当半精度浮点数据值是非数字时,所述bfloat8数据值的比特7:2被设置为所述半精度浮点数据值的比特15:10,比特1被设置为1,并且比特0被设置为所述半精度浮点数据值的比特8。[0185]13.如示例8所述的方法,其中当半精度浮点数据值是非数字时,将通过以下方式来计算所述bfloat8数据值:将第一临时值设置为0,将所述第一临时值的比特7:0设置为偏置项,将第二临时值设置为所述半精度浮点数据值加上所述第一临时值,并且所述bfloat8数据值被设置为所述第二临时值的比特15:8。[0186]14.如示例8所述的方法,其中所述单个指令还包括一个或多个字段来标识写入掩码操作对象,其中所述写入掩码操作对象的一个或多个比特向执行电路表明转换后的bfloat8数据值中的哪些要被写入在所述目的地操作对象中。[0187]15.如示例8所述的方法,还包括在解码之前将所述单个指令转化成另一指令集体系结构的一个或多个指令,其中所述另一指令集体系结构的一个或多个指令的执行将在功能上等同于根据所述操作码对所述单个指令的执行。[0188]16.一种非暂态机器可读介质,存储单个指令的实例,所述单个指令包括一个或多个字段,来标识第一源操作对象,一个或多个字段,来标识第二源操作对象,一个或多个字段,来标识源/目的地操作对象,以及用于操作码的一个或多个字段,其中所述操作码表明执行电路将利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中,其中所述单个指令的实例将被处理器通过执行一种方法来处理,所述方法包括:[0189]对所述单个指令解码;并且[0190]根据所述操作码执行经解码的指令,以利用来自所标识的源/目的地操作对象的偏置项将来自所标识的第一源和第二源的紧缩半精度浮点数据转换为紧缩bfloat8数据,并且将所述紧缩bfloat8数据存储到所标识的源/目的地操作对象的相应数据要素位置中。[0191]17.如示例16所述的非暂态机器可读介质,其中当半精度浮点数据值是无穷大时,所述bfloat8数据值被设置为所述半精度浮点数据值的比特15:8。[0192]18.如示例16所述的非暂态机器可读介质,其中当半精度浮点数据值是非数字时,所述bfloat8数据值的比特7:2被设置为所述半精度浮点数据值的比特15:10,比特1被设置为1,并且比特0被设置为所述半精度浮点数据值的比特8。[0193]19.如示例16所述的非暂态机器可读介质,其中当半精度浮点数据值是非数字时,将通过以下方式来计算所述bfloat8数据值:将第一临时值设置为0,将所述第一临时值的比特7:0设置为偏置项,将第二临时值设置为所述半精度浮点数据值加上所述第一临时值,并且所述bfloat8数据值被设置为所述第二临时值的比特15:8。[0194]20.如示例16所述的非暂态机器可读介质,其中用于所述第一源操作对象的标识符的字段将标识向量寄存器。[0195]提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。[0196]此外,在上文描述的各种实施例中,除非另有特别注明,否则诸如短语“a、b或c中的至少一者”之类的析取语言打算被理解为意指a、b或c,或者其任何组合(例如,a、b和/或c)。因此,析取语言并不打算也不应当被理解为暗示给定的实施例要求至少一个a、至少一个b或者至少一个c各自都存在。[0197]说明书和附图因此应被认为是说明性的,而不是限制性的。然而,很明显,在不脱离如权利要求中记载的本公开的更宽精神和范围的情况下,可对其进行各种修改和改变。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献