首页> 中国专利> 用于执行指令以转换成16位浮点格式的系统和方法

用于执行指令以转换成16位浮点格式的系统和方法

摘要

本公开涉及用于执行指令以转换成16位浮点格式的系统和方法。在一个实施例中,处理器包括:提取电路,所述提取电路用于提取指令,所述指令具有字段,所述字段用于指定操作码以及包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置,所述操作码指示执行电路将所述第一源向量的每个元素转换为16位浮点格式,并且将每个经转换的元素存储到所述目标向量的对应位置中,该转换在必要时包括截断和舍入;解码电路,用于对所述指令进行解码;以及执行电路,用于根据所述操作码来对所述指令作出响应。

著录项

说明书

本申请是申请号为201911045764.1、名称为“用于执行指令以转换成16位浮点格式的系统和方法”的发明专利申请的分案申请。

技术领域

本发明的领域概括而言涉及计算机处理器体系结构,更具体而言涉及用于执行指令以转换成16位浮点格式的系统和方法。

背景技术

指令集,或者说指令集体系结构(instruction set architecture,ISA),是与编程有关的计算机体系结构的一部分,并且可包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理以及外部输入和输出(I/O)。指令集包括一个或多个指令格式。给定的指令格式定义各种字段(位的数目、位的位置)来指定要执行的操作和要在其上执行该操作的(一个或多个)操作对象(operand),等等。给定的指令是使用给定的指令格式来表述的并且指定操作和操作对象。指令流是指令的特定序列,其中序列中的每个指令是某个指令以某种指令格式的出现。

科学、金融、自动向量化通用、RMS(识别、挖掘和合成)/视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)经常要求对大量的数据项执行相同的操作(称为“数据并行”)。单指令多数据(Single Instruction MultipleData,SIMD)指的是使得处理器对多个数据项执行相同操作的一类指令。SIMD技术尤其适合于这样的处理器:这些处理器可将寄存器中的位从逻辑上划分成若干个固定大小的数据元素,每个数据元素表示单独的值。例如,512位寄存器中的位可被指定为要作为十六个单独的32位单精度浮点数据元素被操作的源操作对象。作为另一示例,256位寄存器中的位可被指定为要被作为十六个单独的16位浮点紧缩数据元素、八个单独的32位紧缩数据元素(双字大小数据元素)或者三十二个单独的8位数据元素(字节(B)大小数据元素)来操作的源操作对象。这类数据被称为紧缩数据类型(packed data type)或向量数据类型,并且此数据类型的操作对象被称为紧缩数据操作对象或者向量操作对象。换言之,紧缩数据项或向量指的是紧缩数据元素的序列;并且紧缩数据操作对象或向量操作对象是SIMD指令(也称为紧缩数据指令或向量指令)的源或目标操作对象。

作为示例,一类SIMD指令指定要以垂直方式在两个源向量操作对象上执行的单个向量操作,以生成具有相同大小、具有相同数目的数据元素并且按相同的数据元素顺序的目标向量操作对象。源向量操作对象中的数据元素被称为源数据元素,而目标向量操作对象中的数据元素被称为目标或结果数据元素。这些源向量操作对象具有相同大小并且包含相同宽度的数据元素,从而它们包含相同数目的数据元素。在两个源向量操作对象中处于相同位位置的源数据元素形成数据元素的对(也称为对应数据元素;也就是说,每个源操作对象的数据元素位置0中的数据元素相对应,每个源操作对象的数据元素位置1中的数据元素相对应,等等依此类推)。由该SIMD指令指定的操作被在这些对源数据元素的每一对上分别执行以生成匹配数目的结果数据元素,从而每对源数据元素具有相应的结果数据元素。由于操作是垂直的并且由于结果向量操作对象是相同大小、具有相同数目的数据元素并且结果数据元素被按与源向量操作对象相同的数据元素顺序存储,所以与其在源向量操作对象中的相应对源数据元素一样,结果数据元素处于结果向量操作对象的相同位位置中。除了这种示范性类型的SIMD指令以外,还存在各种其他类型的SIMD指令。

处理具有单精度的向量的一些应用改为使用16位浮点格式向量也具有几乎等同的性能。

发明内容

根据本公开的第一方面,提供了一种处理器,包括:提取电路,所述提取电路用于提取指令,所述指令具有字段,所述字段用于指定操作码以及包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置,所述操作码指示执行电路将所述第一源向量的每个元素转换为16位浮点格式,并且将每个经转换的元素存储到所述目标向量的对应位置中,该转换在必要时包括截断和舍入;解码电路,所述解码电路用于对所述指令进行解码;以及执行电路,所述执行电路用于根据所述操作码来对所述指令作出响应。

根据本公开的第二方面,提供了一种系统,包括处理器和存储器,所述处理器包括:提取电路,所述提取电路用于提取指令,所述指令具有字段,所述字段用于指定操作码以及包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置,所述操作码指示执行电路将所述第一源向量的每个元素转换为16位浮点格式,并且将每个经转换的元素存储到所述目标向量的对应位置中,该转换在必要时包括截断和舍入;解码电路,所述解码电路用于对所述指令进行解码;以及执行电路,所述执行电路用于根据所述操作码来对所述指令作出响应。

根据本公开的第三方面,提供了一种由处理器执行的方法,所述方法包括:使用提取电路提取指令,所述指令具有字段,所述字段用于指定操作码以及包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置,所述操作码指示执行电路将所述第一源向量的每个元素转换为16位浮点格式,并且将每个经转换的元素存储到所述目标向量的对应位置中,该转换在必要时包括截断和舍入;使用解码电路对所述指令进行解码;并且使用执行电路根据所述操作码来对所述指令作出响应。

根据本公开的第四方面,提供了一种机器可读介质,该机器可读介质包括代码,所述代码在被执行时使机器执行根据本公开第三方面所述的方法。

附图说明

图1是根据一实施例图示出用于执行格式转换(或)指令的处理组件的框图;

图2A是根据一实施例图示出格式转换()指令的执行的框图;

图2B是根据一实施例图示出格式转换()指令的执行的框图;

图2C是根据一实施例图示出格式转换()指令的执行的框图;

图2D是根据一实施例图示出2输入格式转换()指令的执行的框图;

图3A是根据一实施例图示出格式转换()指令的示范性执行的伪代码;

图3B是根据一实施例图示出2输入格式转换()指令的示范性执行的伪代码;

图3C是根据一实施例图示出用于图3A和3B的伪代码的帮助函数的伪代码;

图4A是根据一实施例图示出响应格式转换()指令的处理器的过程流程图;

图4B是根据一实施例图示出响应2输入格式转换()指令的处理器的过程流程图;

图5A是根据一实施例图示出格式转换(VCVTNEPS2BF16)指令的格式的框图;

图5B是根据一实施例图示出2输入格式转换(VCVTNE2PS2BF16)指令的格式的框图;

图6A-6B是根据本发明的一些实施例图示出通用向量友好指令格式及其指令模板的框图;

图6A是根据本发明的一些实施例图示出通用向量友好指令格式及其类别A指令模板的框图;

图6B是根据本发明的一些实施例图示出通用向量友好指令格式及其类别B指令模板的框图;

图7A是根据本发明的一些实施例图示出示范性特定向量友好指令格式的框图;

图7B是根据一个实施例图示出构成完整操作码字段的特定向量友好指令格式的字段的框图;

图7C是根据一个实施例图示出构成寄存器索引字段的特定向量友好指令格式的字段的框图;

图7D是根据一个实施例图示出构成增强操作字段的特定向量友好指令格式的字段的框图;

图8是根据一个实施例的寄存器体系结构的框图;

图9A是根据一些实施例图示出示范性有序管道和示范性寄存器重命名、无序发出/执行管道两者的框图;

图9B是根据一些实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、无序发出/执行体系结构核心两者的框图;

图10A-10B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一;

图10A是根据一些实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图;

图10B是根据一些实施例的图10A中的处理器核心的一部分的扩展视图;

图11是根据一些实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图;

图12-图15是示范性计算机体系结构的框图;

图12根据一些实施例示出了系统的框图;

图13是根据一些实施例的第一更具体示范性系统的框图;

图14是根据一些实施例的第二更具体示范性系统的框图;

图15是根据一些实施例的片上系统(SoC)的框图;并且

图16是根据一些实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。

具体实施方式

在以下说明书中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现一些实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。

说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特征、结构或特性,但每个实施例可不一定包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当关于一实施例来描述特征、结构或特性时,认为关于其他实施例(如果明确描述的话)实现这种特征、结构或特性是在本领域技术人员的知识范围内的。

如上所述,处理具有单精度源的向量的应用改为使用16位浮点格式向量也具有几乎等同的性能。本文公开并且借由附图图示的是实现一个或两个源向量的格式转换的向量紧缩数据格式转换指令(VCVTNEPS2BF16和VCVTNE2PS2BF16)。VCVTNEPS2BF16助记符指示:“VCVT”=向量转换(Vector ConVerT),“NE”=舍入到最近偶数(

与对于源和目标元素都使用单精度的算法相比,公开的格式转换(VCVTNEPS2BF16或VCVTNE2PS2BF16)指令被预期实现相当的质量,但具有降低的存储器使用率和存储器带宽要求,这将有助于改善性能和功率效率,尤其是在机器学习情境中。

公开的实施例使用的16位浮点格式包括bfloat16(由加州山景城的谷歌公司定义),其在本文中有时被称为“bf16”或“BF16”;以及binary16(由电气与电子工程师学会颁布为IEEE754-2008),其在本文中有时被称为“半精度”或“fp16”。公开的实施例使用的32位浮点格式包括binary32(也作为IEEE754-2008的一部分颁布),其在本文中有时被称为“单精度”或“fp32”。

表格1列出了相关数据格式之间的一些相关特性和区分。如表所示,所有三个格式都包括一个符号位。binary32、binary16和bfloat16分别具有8位、5位和8位的指数宽度,并且分别具有24位、11位和8位的有效数(本文中有时称为“尾数”或“分数”)位。bfloat16相对于fp16的一个优点是我们可以截断fp32数字并且具有有效bfloat16数字。

表格1

实现公开的格式转换(VCVTNEPS2BF16或VCVTNE2PS2BF16)指令的处理器将包括提取电路以提取指令,该指令具有字段来指定操作码和第一源、第二源(用于2输入版本)和目标向量的位置。至少参考图5A-5B、6A-6B和7A-7D进一步图示和描述了格式转换(VCVTNEPS2BF16或VCVTNE2PS2BF16)指令的格式。指定的源和目标向量可位于向量寄存器中或存储器中。指示执行电路的操作码将指定的源向量的每个元素转换成16位浮点,该转换包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量的对应位置中。这种处理器还将包括:解码电路,用于对提取的指令进行解码;以及执行电路,用于根据操作码来对指令作出响应。至少参考图1-图2D、图9A-9B和图10A-10B在下文中进一步描述和图示执行电路。

图1是根据一些实施例图示出用于执行格式转换(或)指令的处理组件的框图。如图所示,计算系统100包括存储装置101来存储要被执行的(一个或多个)格式转换指令103。在一些实施例中,计算系统100是SIMD处理器来同时处理紧缩数据向量的多个元素。

在操作中,(一个或多个)格式转换指令103是由提取电路105从存储装置101提取的。(一个或多个)格式转换指令103具有这里没有示出的字段来指定操作码和包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置,该操作码指示执行电路将指定的源向量的每个元素转换成16位浮点格式,该转换包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量的对应位置中。至少参考图5A-5B、6A-6B和7A-7D进一步图示和描述格式转换(VCVTNEPS2BF16或VCVTNE2PS2BF16)指令格式。

提取的格式转换指令107被解码电路109解码,解码电路109将提取的格式转换(VCVTNEPS2BF16或VCVTNE2PS2BF16)指令107解码成一个或多个操作。在一些实施例中,这个解码包括生成要被执行电路(例如执行电路117)执行的多个微操作。解码电路109还对指令后缀和前缀(如果使用的话)解码。

对寄存器文件和存储器115具有访问权的执行电路117根据操作码来对指令111作出响应,并且下文中至少参考图2A-2D、3A-3C、4A-4B、9A-9B和10A-10B来对其作进一步描述和图示。

在一些实施例中,寄存器重命名、寄存器分配和/或调度电路113提供用于以下各项中的一个或多个的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表),2)向解码的指令分配状态位和标志,以及3)调度经解码的格式转换(VCVTNEPS2BF16或VCVTNE2PS2BF16)指令111以在指令池之外的执行电路117上执行(例如,在一些实施例中使用保留站)

在一些实施例中,写回电路119写回执行的指令的结果。写回电路119和寄存器重命名/调度电路113是可选的,如其虚线边框所指示,因为它们可在不同的时间发生,或者根本不发生。

图2A是根据一实施例图示出格式转换()指令的执行的框图。如图所示,计算装置200(例如,处理器)接收、提取并解码(提取和解码电路在这里没有示出,但至少参考图1和图9A-9B图示和描述)格式转换指令201。格式转换指令201包括字段来指定操作码202(VCVTNEPS2BF16)和包括N个单精度元素的第一源向量206和包括至少N个16位浮点(例如,bfloat16或binary16)元素的目标向量204的位置。

这里,N等于4,并且指定的第一源212和目标218向量都具有四个元素。但源和目标向量不是平衡的,因为它们具有不同的宽度。软件可通过向源和目标向量指派不同大小的向量,例如通过指派256位ymm向量作为源并且指派128位xmm向量作为目标,来发出非平衡格式转换指令201。图2B-2D图示了通过向源和目标两者指派相同类型的向量来实现平衡的场景。至少参考图8来进一步图示和描述一种示范性处理器寄存器文件。

在一些实施例中,格式转换指令201还包括掩码{k}208和归零控制{z}210。至少参考图5A、6A-6B和7A-7D进一步图示和描述具有VCVTNEPS2BF16的操作码的格式转换指令201的格式。还示出了指定的第一源向量212、执行电路214以及指定的目标向量218,其中执行电路214包括转换电路216A-D。

在操作中,计算装置200(例如,处理器)使用提取和解码电路(未示出)提取并解码指令201,指令201具有字段来指定操作码202和第一源206和目标204向量的位置,操作码指示计算装置(例如,处理器)将指定的第一源向量212的每个元素转换成16位浮点格式(例如,bfloat16),转换器电路216A-D包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量218的对应位置中。如至少参考图5A、6A-6B和7A-7D进一步图示和描述的,指令201在其他实施例中可指定不同的向量长度,例如128位、512位或者1024位。执行电路214在这里根据操作码202来对指令作出响应。

图2B是根据一实施例图示出格式转换()指令的执行的框图。如图所示,计算装置220(例如,处理器)接收、提取并解码(提取和解码电路在这里未示出,但至少参考图1和图9A-9B来图示和描述)格式转换指令221,该格式转换指令221包括字段来指定操作码222(VCVTNEPS2BF16)和包括N个单精度元素的第一源向量226和包括至少N个16位浮点(例如bfloat16或binary16)元素的目标向量224的位置。

这里,平衡是通过指派与指定的第一源232和目标238相同类型的寄存器来实现的。然而,宽度是指定的第一源向量232的一半的指定目标向量238具有两倍那么多的条目。在操作中,经转换的条目被写入到前四个目标条目,并且零被写入到剩余四个条目。

在一些实施例中,格式转换指令221还包括掩码{k}228和归零控制{z}230。至少参考图5A、6A-6B和7A-7D进一步图示和描述具有VCVTNEPS2BF16的操作码的格式转换指令221的格式。还示出了指定的第一源向量232、执行电路234以及指定的目标向量238,其中执行电路214包括转换电路236A-D。

在操作中,计算装置220(例如,处理器)使用提取和解码电路(未示出)提取并解码指令221,指令221具有字段来指定操作码222(即,VCVTNEPS2BF16)和第一源226和目标224向量的位置,操作码指示计算装置220(例如,处理器)使用执行电路234中的转换器236A-D将指定的第一源向量232的每个元素转换成16位浮点格式(例如,bfloat16),转换器电路236A-D包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量218的对应位置中。这里,相应的目标向量位置包括前四个元素,零被写入到剩余四个元素。如至少参考图5A、6A-6B和7A-7D进一步图示和描述的,指令221在其他实施例中可指定不同的向量长度,例如128位、512位或者1024位。执行电路234在这里根据操作码202来对指令作出响应。

图2C是根据一实施例图示出格式转换()指令的执行的框图。如图所示,计算装置240(例如,处理器)接收、提取并解码(提取和解码电路在这里未示出,但至少参考图1和图9A-9B来图示和描述)格式转换指令241,该格式转换指令241包括字段来指定操作码242(VCVTNEPS2BF16)和包括N个单精度元素的第一源向量246和包括至少N个16位浮点(例如bfloat16或binary16)元素的目标向量244的位置。

这里,平衡是通过指派与指定的第一源252和目标258向量相同类型的寄存器来实现的。然而,宽度是指定的第一源向量252的一半的指定目标向量258具有两倍那么多的条目。在操作中,经转换的条目被写入到前四个目标条目,并且零被写入到剩余四个条目。归零在图2C中未被示出,而是将在此实施例中被隐式完成。

隐式归零在一些实施例中是对被掩蔽的元素的默认处理。在其他实施例中,体系结构式模型特定寄存器(model-specific register,MSR)将被软件编程来控制是否向被掩蔽元素应用归零或者掩蔽。在另外的其他实施例中,归零行为由格式转换指令来指定。

在一些实施例中,格式转换指令241还包括掩码{k}248和归零控制{z}250。至少参考图5A、6A-6B和7A-7D进一步图示和描述具有VCVTNEPS2BF16的操作码的格式转换指令241的格式。

还示出了指定的第一源向量252、执行电路254以及指定的目标向量258,其中执行电路214包括转换电路256A-D。

在操作中,计算装置240(例如,处理器)使用提取和解码电路(未示出)提取并解码指令241,指令241具有字段来指定操作码242(即,VCVTNEPS2BF16)和第一源246和目标244向量的位置,操作码指示计算装置240(例如,处理器)使用执行电路254中的转换器256A-D将指定的第一源向量252的每个元素转换成16位浮点格式(例如,bfloat16),转换器电路256A-D包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量258的对应位置中。这里,相应的目标向量位置包括前四个元素,零被隐式写入到剩余四个元素。隐式归零在一些实施例中是对被掩蔽的元素的默认处理。在其他实施例中,结构上的模型特定寄存器(MSR)将被软件编程来控制是否向被掩蔽元素应用归零或者掩蔽。在另外的其他实施例中,归零行为由格式转换指令来指定。

如至少参考图5A、6A-6B和7A-7D进一步图示和描述的,指令241在其他实施例中可指定不同的向量长度,例如128位、512位或者1024位。执行电路254在这里根据操作码242来对指令作出响应。

图2D是根据一实施例图示出格式转换(VCVTNE2PS2BF16)指令的执行的框图。如图所示,计算装置260(例如,处理器)接收、提取并解码(提取和解码电路在这里未示出,但至少参考图1和图9A-9B来图示和描述)格式转换指令261,该格式转换指令261包括字段来指定操作码262(VCVTNE2PS2BF16)和包括N个单精度元素的第一和第二源向量266和268以及包括至少N个16位浮点(例如bfloat16或binary16)元素的目标向量264的位置。这里,N等于4并且指定的目标向量264包括8个元素。

这里,目标向量的宽度是源向量的一半,但通过指派两个源向量来实现了平衡,这两个源向量的元素要被转换并写入到目标。在操作中,来自指定的第一源272A的经转换条目被写入到指定的目标278的前四个条目,并且来自指定的第二源272B的经转换条目被写入到指定的目标278的后四个条目。

在一些实施例中,格式转换指令261还包括掩码{k}268和归零控制{z}270。至少参考图5A、6A-6B和7A-7D进一步图示和描述具有VCVTNEPS2BF16的操作码的格式转换指令261的格式。

还示出了指定的第一和第二源向量272A-B、执行电路274以及指定的目标向量278,其中执行电路274包括转换电路276A-H。

在操作中,计算装置260(例如,处理器)使用提取和解码电路(未示出)提取并解码指令261,指令261具有字段来指定操作码262(即,VCVTNE2PS2BF16)和第一和第二源266和268和目标264向量的位置,操作码指示计算装置260(例如,处理器)使用执行电路274中的转换器276A-H将指定的第一和第二源向量272A-B的每个元素转换成16位浮点格式(例如,bfloat16),转换器电路276A-H包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量278的对应位置中。这里,指定的目标278的前四个元素对应于指定的第一源272A,并且指定的目标278的后四个元素对应于指定的第二源272B。如至少参考图5A、6A-6B和7A-7D进一步图示和描述的,指令261在其他实施例中可指定不同的向量长度,例如128位、512位或者1024位。执行电路274在这里根据操作码262来对指令作出响应。

图3A是根据一实施例图示出格式转换(VCVTNEPS2BF16)指令的示范性执行的伪代码。如图所示,格式转换指令301具有字段来指定操作码302(VCVTNEPS2BF16)和第一源306(src)和目标304(dest)向量的位置,根据在代码中实例化并且代表“向量长度”的常数VL,其可以是128位、256位和512位的任何一者。在一些实施例中,指令301还具有字段来指定掩码308和归零控制310。伪代码315还示出使用写掩码来控制是否掩蔽每个目标元素,被掩蔽的元素被归零或者合并(如至少参考图5A、6A-6B和7A-7D进一步图示和描述的,一些实施例中的格式转换指令包括字段来指定掩码和控制是否归零或合并)。至少参考图2A-2C、4A和9A-9B进一步图示和描述格式转换指令301的执行。

图3B是根据一实施例图示出2输入格式转换()指令的示范性执行的伪代码。如图所示,格式转换指令321具有字段来指定操作码322(VCVTNE2PS2BF16)和第一源326(src1)、第二源328(src2)和目标324(dest)向量的位置。目标向量根据常数VL可以是128位、256位和512位的任何一者。这里,源向量位置可在存储器中或者在寄存器中。在一些实施例中,格式转换指令321具有字段来指定写掩码{k}330和归零控制{z}331。伪代码335还示出使用写掩码来控制是否掩蔽每个目标元素,被掩蔽的元素被归零或者合并(如至少参考图5A、6A-6B和7A-7D进一步图示和描述的,一些实施例中的格式转换指令包括字段来指定掩码和控制是否归零或合并)。至少参考图2D、4B和9A-9B进一步图示和描述格式转换指令321的执行。

图3C是根据一实施例图示出用于图3A-3B的伪代码的帮助函数的伪代码。这里,伪代码354定义帮助函数,convert_fp32_to_bfloat16(),其从binary32格式转换成bfloat16格式。

伪代码340图示出公开的实施例与只会截断binary32数字的低十六位的简单转换不同,有利地执行正常数字的舍入并且考虑舍入偏差。代码示出该格式转换指令与只是截断相比具有改善的舍入行为。公开的实施例的舍入行为促进了与通过截断进行的转换相比更精确的计算。在一些实施例中,执行电路遵守根据颁布为IEEE 754的舍入规则的舍入行为,例如指示舍入到最近偶数的“NE”。在一些实施例中,舍入行为由指令例如通过在操作码中包括后缀“NE”以指示舍入到最近偶数来指定。在其他实施例中,舍入行为采用像“NE”那样的默认行为。在另外的其他实施例中,舍入行为由软件配置的体系结构式模型特定寄存器(MSR)来控制。

伪代码340还图示了公开的实施例在必要时执行截断,例如在函数的输入为非数据(NaN)的情况下执行截断。

至少参考图2A-2D、3A-3B、4A-4B和9A-9B进一步图示和描述格式转换指令的执行。

图4A是根据一实施例图示出响应格式转换()指令的处理器的过程流程图。格式转换指令401包括字段来指定操作码402(VCVTNEPS2BF16)和包括N个单精度元素的第一源向量406和包括至少N个16位浮点(例如,bfloat16或binary16)元素的目标向量404的位置。

如图所示,处理器通过执行流程400来响应经解码的格式转换指令。在421,处理器使用提取电路提取指令,该指令具有字段来指定操作码(例如,VCVTNEPS2BF16)和包括N个单精度元素的第一源向量和包括至少N个16位浮点(例如,bfloat16或binary16)元素的目标向量的位置,该操作码指示执行电路将指定的源向量的每个元素转换成16位浮点,该转换包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量的对应位置中。在423,处理器使用解码电路对提取的指令解码。在一些实施例中,处理器在425调度对经解码的指令的执行。在427,处理器使用执行电路根据操作码来对指令作出响应。在一些实施例中,处理器在429提交执行的指令的结果。操作425和429是可选的,如其虚线边框所指示,因为它们可在不同的时间发生,或者根本不发生。

图4B是根据一实施例图示出响应2输入格式转换()指令的处理器的过程流程图。格式转换指令451包括字段来指定操作码452(VCVTNE2PS2BF16)和包括N个单精度元素的第一和第二源向量456和462和包括至少N个16位浮点(例如,bfloat16或binary16)元素的目标向量454的位置。

注意,本发明并不打算限于操作码的任何特定助记符。这里,VCVTNEPS2BF16被选择为具有表示各种指令特性的字母的助记符。举例来说,“VCVT”被选择为指示向量转换(

如图所示,处理器通过执行流程450来响应经解码的格式转换指令。在471,处理器使用提取电路提取指令,该指令具有字段来指定操作码(例如,VCVTNE2PS2BF16)和包括N个单精度元素的第一和第二源向量和包括至少N个16位浮点(例如,bfloat16或binary16)元素的目标向量的位置,该操作码指示执行电路将指定的源第一和第二向量的每个元素转换成16位浮点,该转换包括截断和舍入(如果必要的话),并且将每个经转换的元素存储到指定的目标向量的对应位置中。在473,处理器使用解码电路对提取的指令解码。在一些实施例中,处理器在475调度对经解码的指令的执行。在477,处理器使用执行电路根据操作码来对指令作出响应。在一些实施例中,处理器在479提交执行的指令的结果。操作475和479是可选的,如其虚线边框所指示,因为它们可在不同的时间发生,或者根本不发生。

图5A是根据一实施例图示出格式转换(VCVTNEPS2BF16)指令的格式的框图。如图所示,格式转换指令500包括用于指定操作码502(VCVTNEPS2BF16)和目标504和第一源506向量的位置的字段。源和目标向量可各自位于寄存器中或者存储器中。

操作码502被示为包括星号,这表示各种可选字段可作为前缀或后缀被添加到该操作码。即,格式转换指令500还包括可选的参数来影响指令行为,包括掩码{k}508、归零控制{z}510、元素格式514、向量大小(N)516和舍入模式518。指令修饰508、510、514、516和518中的一个或多个可使用操作码502的前缀或后缀来指定。

在一些实施例中,可选的指令修饰508、510、514、516和518中的一个或多个被编码在可选地与指令500包括在一起的即时字段(未示出)中。在一些实施例中,可选的指令修饰508、510、514、516和518中的一个或多个是经由配置寄存器来指定的,例如指令集体系结构中包括的模型特定寄存器(MSR)。

至少参考图5B、6A-6B和7A-7D进一步图示和描述格式转换指令500的格式。

图5B是根据一实施例图示出2输入格式转换(VCVTNE2PS2BF16)指令的格式的框图。如图所示,格式转换指令550包括用于指定操作码552(VCVTNE2PS2BF16)和目标554、第一源556和第二源552向量的位置的字段。源和目标向量可各自位于寄存器中或者存储器中。

操作码552被示为包括星号,这表示各种可选字段可作为前缀或后缀被添加到该操作码。即,格式转换指令550还包括可选的参数来影响指令行为,包括掩码{k}558、归零控制{z}560、元素格式564、向量大小(N)566和舍入模式568。指令修饰558、560、564和566中的一个或多个可使用操作码552的前缀或后缀来指定。

在一些实施例中,可选的指令修饰558、560、564、566和568中的一个或多个被编码在可选地与指令550包括在一起的即时字段(未示出)中。在一些实施例中,可选的指令修饰558、560、564、566和568中的一个或多个是经由配置寄存器来指定的,例如指令集体系结构中包括的模型特定寄存器(MSR)。

至少参考图5A、6A-6B和7A-7D进一步图示和描述格式转换指令550的格式。

指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,位的数目、位的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些可具有不同的位位置,因为包括的字段更少)和/或被定义为不同地解读给定的字段。从而,ISA的每个指令被使用给定的指令格式来表述(并且如果定义了的话,被以该指令格式的指令模板中的给定一个来表述)并且包括用于指定操作和操作对象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码和操作对象字段来选择操作对象(源1/目标和源2);并且此ADD指令在指令流中的出现在选择特定操作对象的操作对象字段中将具有特定内容。被称为高级向量扩展(Advanced Vector Extension,AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extension,VEX)编码方案的一组SIMD扩展已被发布和/或发表(例如,参见

本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外,下文详述了示范性系统、体系结构和管道。(一个或多个)指令的实施例可被在这种系统、体系结构和管道上执行,但不限于详述的那些。

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

图6A-6B是根据本发明的一些实施例图示出通用向量友好指令格式及其指令模板的框图。图6A是根据本发明的一些实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图6B是根据本发明的一些实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,对于通用向量友好指令格式600定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问605指令模板和存储器访问620指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被绑定到任何特定的指令集。

虽然将描述其中向量友好指令格式支持以下项目的本发明的实施例:64字节向量操作对象长度(或大小),具有32位(4字节)或64位(8字节)数据元素宽度(或大小)(从而,64字节向量由16个双字大小元素或者8个四字大小元素构成);64字节向量操作对象长度(或大小),具有16位(2字节)或8位(1字节)数据元素宽度(或大小);32字节向量操作对象长度(或大小),具有32位(4字节)、64位(8字节)、16位(2字节)或者8位(1字节)数据元素宽度(或大小);以及16字节向量操作对象长度(或大小),具有32位(4字节)、64位(8字节)、16位(2字节)或者8位(1字节)数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。

图6A中的类别A指令模板包括:1)在无存储器访问605指令模板内,示出了无存储器访问、完全舍入控制型操作610指令模板和无存储器访问、数据变换型操作615指令模板;并且2)在存储器访问620指令模板内,示出了存储器访问、暂态625指令模板和存储器访问、非暂态630指令模板。图6B中的类别B指令模板包括:1)在无存储器访问605指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作612指令模板和无存储器访问、写入掩码控制、vsize型操作617指令模板;并且2)在存储器访问620指令模板内,示出了存储器访问、写入掩码控制627指令模板。

通用向量友好指令格式600包括按图6A-6B中所示的顺序的下面列出的以下字段。

格式字段640–此字段中的特定值(指令格式识别符值)唯一地识别向量友好指令格式,从而识别采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集是不需要的。

基本操作字段642–其内容区分不同的基本操作。

寄存器索引字段644–其内容直接地或者通过地址生成指定源和目标操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的位来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可最多达三个源和一个目标寄存器,但替换实施例可支持更多或更少的源和目标寄存器(例如,可支持最多达两个源,其中这些源之一也充当目标,可支持最多达三个源,其中这些源之一也充当目标,可支持最多达两个源和一个目标)。

修饰字段646–其内容区分通用向量指令格式中的指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问605指令模板和存储器访问620指令模板。存储器访问操作读取和/或写入到存储器层次体系(在一些情况下使用寄存器中的值指定源和/或目标地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目标是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。

增强操作字段650–其内容区分除了基本操作以外还要执行多种不同操作中的哪一种。此字段是依情境而定的。在一些实施例中,此字段被划分成类别字段668、阿尔法字段652和贝塔字段654。增强操作字段650允许了在单个指令而不是2、3或4个指令中执行共同操作群组。

缩放比例字段660–其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2

位移字段662A–其内容被用作存储器地址生成的一部分(例如,对于使用2

位移因子字段662B(注意将位移字段662A并列在位移因子字段662B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存储器访问中的字节的数目(例如,对于使用2

数据元素宽度字段664–其内容区分若干个数据元素宽度中的哪一个被使用(在一些实施例中用于所有指令;在其他实施例中只用于指令中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或使用操作码的某个方面来支持数据元素宽度则不需要它。

写入掩码字段670–其内容基于每个数据元素位置控制目标向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目标中的任何元素集合被保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在其他的一个实施例中,保留目标的相应的掩码位具有0的每个元素的旧值。与之不同,归零向量掩码允许了目标中的任何元素集合在任何操作(由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目标中的元素在相应的掩码位具有0值时被设置到0。此功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段670允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩码字段670的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(从而写入掩码字段670的内容间接识别要执行的该掩蔽)的本发明实施例,但替换实施例作为替代或附加允许掩码写入字段670的内容直接指定要执行的掩蔽。

即时字段672–其内容允许对即时(immediate)的指定。此字段是可选的,因为在不支持即时的通用向量友好格式的实现方式中其不存在并且在不使用即时的指令中其不存在。

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

在类别A的非存储器访问605指令模板的情况下,阿尔法字段652被解读为RS字段652A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作610和无存储器访问数据变换型操作615指令模板分别指定舍入652A.1和数据变换652A.2),而贝塔字段654区分指定类型的操作中的哪一个要被执行。在无存储器访问605指令模板中,缩放比例字段660、位移字段662A和位移缩放比例字段662B不存在。

在无存储器访问完全舍入控制型操作610指令模板中,贝塔字段654被解读为舍入控制字段654A,其(一个或多个)内容提供静态舍入。虽然在本发明的描述的实施例中舍入控制字段654A包括抑制所有浮点异常(suppress all floating-point exception,SAE)字段656和舍入操作控制字段658,但替换实施例可支持将这些概念都编码到同一字段中或者可只具有这些概念/字段中的一个或另一个(例如,可以只具有舍入操作控制字段658)。

SAE字段656–其内容区分是否禁止异常事件报告;当SAE字段656的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。

舍入操作控制字段658–其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段658允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的一些实施例中,舍入操作控制字段650的内容超越该寄存器值。

在无存储器访问数据变换型操作615指令模板中,贝塔字段654被解读为数据变换字段654B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配(swizzle)、广播)。

在类别A的存储器访问620指令模板的情况下,阿尔法字段652被解读为逐出提示字段652B,其内容区分要使用逐出提示中的哪一个(在图6A中,对于存储器访问暂态625指令模板和存储器访问非暂态630指令模板分别指定暂态652B.1和非暂态652B.2),而贝塔字段654被解读为数据操纵字段654C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目标的向下转换)。存储器访问620指令模板包括缩放比例字段660,并且可选地包括位移字段662A或者位移因子字段662B。

向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量掩码的内容来规定。

暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。

非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。

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

在类别B的非存储器访问605指令模板的情况下,贝塔字段654的一部分被解读为RL字段657A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作612指令模板和无存储器访问、写入掩码控制、VSIZE型操作617指令模板分别指定舍入657A.1和向量长度(VSIZE)57A.2),而贝塔字段654的其余部分区分指定类型的操作中的哪一个要被执行。在无存储器访问605指令模板中,缩放比例字段660、位移字段662A和位移缩放比例字段662B不存在。

在无存储器访问、写入掩码控制、部分舍入控制型操作610指令模板中,贝塔字段654的其余部分被解读为舍入操作字段659A并且异常事件报告被禁止(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。

舍入操作控制字段659A–正如舍入操作控制字段658一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段659A允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的一些实施例中,舍入操作控制字段650的内容超越该寄存器值。

在无存储器访问、写入掩码控制、VSIZE型操作617指令模板中,贝塔字段654的其余部分被解读为向量长度字段659B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。

在类别B的存储器访问620指令模板的情况下,贝塔字段654的一部分被解读为广播字段657B,其内容区分是否要执行广播型数据操纵,而贝塔字段654的其余部分被解读为向量长度字段659B。存储器访问620指令模板包括缩放比例字段660,并且可选地包括位移字段662A或者位移因子字段662B。

对于通用向量友好指令格式600,完整操作码字段674被示为包括格式字段640、基本操作字段642和数据元素宽度字段664。虽然示出了其中完整操作码字段674包括所有这些字段的一个实施例,但完整操作码字段674在不支持所有这些字段的实施例中只包括这些字段中的一些。完整操作码字段674提供操作代码(操作码)。

增强操作字段650、数据元素宽度字段664和写入掩码字段670允许了在通用向量友好指令格式中基于每个指令来指定这些特征。

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

在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本发明的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高性能通用无序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本发明的范围内的)。另外,单个处理器可包括多个核心,所有核心都支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有无序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或无序核心。当然,在本发明的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被及时编译或静态编译到)多种不同的可执行形式中,包括:1)只具有由目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有使用所有类别的指令的不同组合编写的替换例程并且具有基于当前执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。

图7A是根据本发明的一些实施例图示出示范性特定向量友好指令格式的框图。图7A示出了在如下意义上特定的特定向量友好指令格式700:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式700可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。图示出了来自图7A的字段所映射到的来自图6的字段。

应当理解,虽然出于说明目的在通用向量友好指令格式600的情境中参考特定向量友好指令格式700描述本发明的实施例,但除非有声明,否则本发明不限于特定向量友好指令格式700。例如,通用向量友好指令格式600对于各种字段设想了多种可能的大小,而特定向量友好指令格式700被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段664在特定向量友好指令格式700中被示为一位字段,但本发明不限于此(也就是说,通用向量友好指令格式600设想了数据元素宽度字段664的其他大小)。

通用向量友好指令格式600包括按图7A中所示的顺序的下面列出的以下字段。

EVEX前缀(字节0-3)702–被编码为四字节形式。

格式字段640(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段640并且其包含0x62(在一些实施例中用于区分向量友好指令格式的唯一值)。

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

REX字段705(EVEX字节1,位[7-5])-由EVEX.R位字段(EVEX字节1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)和657BEX字节1,位[5]–B)构成。EVEX.R、EVEX.X和EVEX.B位字段提供与相应的VEX位字段相同的功能,并且被使用反码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个位编码,从而Rrrr、Xxxx和Bbbb可通过添加EVEX.R、EVEX.X和EVEX.B来形成。

REX’710A–这是REX’字段710的第一部分并且是用于对扩展32寄存器集合的高16或低16编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在一些实施例中,此位以及如下所示的其他位被以位反转格式来存储以与BOUND指令相区分(在公知的x86 32位模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;本发明的替换实施例不以反转格式存储这个位和下面指示的其他位。值1被用于对低16寄存器编码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR来形成的。

操作码映射字段715(EVEX字节1,位[3:0]–mmmm)–其内容编码了暗示的主导操作码类型(0F、0F 38或0F 3)。

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

EVEX.vvvv 720(EVEX字节2,位[6:3]-vvvv)-EVEX.vvvv的作用可包括以下的:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目标寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被保留并且应当包含1111b。从而,EVEX.vvvv字段720编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶位。取决于指令,一额外的不同EVEX位字段被用于将指定符大小扩展到32寄存器。

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

前缀编码字段725(EVEX字节2,位[1:0]-pp)–为基本操作字段提供额外位。除了对于采取EVEX前缀格式的传统SSE指令提供支持以外,这还具有使SIMD前缀紧缩的益处(EVEX前缀只要求2个位,而不是要求一字节来表述SIMD前缀)。在一个实施例中,为了支持采取传统格式和采取EVEX前缀格式两者的使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时被扩展成传统SIMD前缀,然后才被提供到编码器的PLA(因此PLA可执行这些传统指令的传统和EVEX格式两者,而无需修改)。虽然更新的指令可直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性以类似的方式扩展,但允许这些传统SIMD前缀指定不同的含义。替换实施例可重设计PLA来支持2位SIMD前缀编码,从而不要求扩展。

阿尔法字段652(EVEX字节3,位[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示)–如前所述,此字段是依情境而定的。

贝塔字段654(EVEX字节3,位[6:4]–SSS;也称为EVEX.s

REX’710B–这是REX’字段710的剩余部分并且是可用于对扩展32寄存器集合的高16或低16编码的EVEX.V’位字段(EVEX字节3,位[3]-V’)。此位被以位反转格式来存储。值1被用于对低16寄存器编码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv来形成的。

写入掩码字段670(EVEX字节3,位[2:0]-kkk)-其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在一些实施例中,特定值EVEX.kkk=000具有暗示对于特定指令没有使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。

真实操作码字段730(字节4)也被称为操作码字节。操作码的一部分在此字段中指定。

MOD R/M字段740(字节5)包括MOD字段742、Reg字段744和R/M字段746。如前所述,MOD字段742的内容区分存储器访问和非存储器访问操作。Reg字段744的作用可被总结成两个情形:编码目标寄存器操作对象或者源寄存器操作对象或者被作为操作码扩展来对待并且不被用于编码任何指令操作对象。R/M字段746的作用可包括以下的:编码引用存储器地址的指令操作对象或者编码目标寄存器操作对象或源寄存器操作对象。

缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)-如前所述,缩放比例字段650的内容被用于存储器地址生成。SIB.xxx 754和SIB.bbb 756–先前已对于寄存器索引Xxxx和Bbbb参考了这些字段的内容。

位移字段662A(字节7-10)-当MOD字段742包含10时,字节7-10是位移字段662A,并且其工作方式与传统32位位移(disp32)相同并且在字节粒度上工作。

位移因子字段662B(字节7)-当MOD字段742包含01时,字节7是位移因子字段662B.此字段的位置与传统x86指令集8位位移(disp8)的相同,其在字节粒度上工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个位,这8个位可被设置到仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段662B是对disp8的重解读;当使用位移因子字段662B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来确定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶位不需要被编码。换言之,位移因子字段662B代替了传统x86指令集8位位移。从而,位移因子字段662B被按与x86指令集8位位移相同的方式编码(因此在ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节地址偏移量)。即时字段672如前所述那样操作。

图7B是根据一些实施例图示出构成完整操作码字段674的特定向量友好指令格式700的字段的框图。具体而言,完整操作码字段674包括格式字段640、基本操作字段642和数据元素宽度(W)字段664。基本操作字段642包括前缀编码字段725、操作码映射字段715和真实操作码字段730。

图7C是根据一些实施例图示出构成寄存器索引字段644的特定向量友好指令格式700的字段的框图。具体而言,寄存器索引字段644包括REX字段705、REX'字段710、MODR/M.reg字段744、MODR/M.r/m字段746、VVVV字段720、xxx字段754和bbb字段756。

图7D是根据一些实施例图示出构成增强操作字段650的特定向量友好指令格式700的字段的框图。当类别(U)字段668包含0时,其表示EVEX.U0(类别A 668A);当其包含1时,其表示EVEX.U1(类别B668B)。当U=0并且MOD字段742包含11时(表示无存储器访问操作),阿尔法字段652(EVEX字节3,位[7]–EH)被解读为rs字段652A。当rs字段652A包含1时(舍入652A.1),贝塔字段654(EVEX字节3,位[6:4]-SSS)被解读为舍入控制字段654A。舍入控制字段654A包括一位SAE字段656和两位舍入操作字段658。当rs字段652A包含0时(数据变换652A.2),贝塔字段654(EVEX字节3,位[6:4]-SSS)被解读为三位数据变换字段654B。当U=0并且MOD字段742包含00、01或10时(表示存储器访问操作),阿尔法字段652(EVEX字节3,位[7]–EH)被解读为逐出提示(eviction hint,EH)字段652B并且贝塔字段654(EVEX字节3,位[6:4]-SSS)被解读为三位数据操纵字段654C。

当U=1时,阿尔法字段652(EVEX字节3,位[7]–EH)被解读为写入掩码控制(Z)字段652C。当U=1并且MOD字段742包含11时(表示无存储器访问操作),贝塔字段654的一部分(EVEX字节3,位[4]–S

图8是根据一些实施例的寄存器体系结构800的框图。在图示的实施例中,存在32个512位宽的向量寄存器810;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256位被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128位(ymm寄存器的低阶128位)被覆盖在寄存器xmm0-15上。特定向量友好指令格式700如以下表格中所示在这些覆盖的寄存器文件上操作。

换言之,向量长度字段659B在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量长度字段659B的指令模板在最大向量长度上操作。另外,在一个实施例中,特定向量友好指令格式700的类别B指令模板在紧缩或标量单/双精度浮点数据和紧缩或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。

写入掩码寄存器815–在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64位。在替换实施例中,写入掩码寄存器815的大小是16位。如前所述,在一些实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xffff,实际上对于该指令禁用了写入掩蔽。

通用寄存器825–在图示的实施例中,有十六个64位通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来引用。

标量浮点栈寄存器文件(x87栈)845,其上化名了MMX紧缩整数平坦寄存器文件850–在图示的实施例中,x87栈是用于使用x87指令集扩展在32/64/80位浮点数据上执行标量浮点操作的八元素栈;而MMX寄存器被用于在64位紧缩整数数据上执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作对象。

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

处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用无序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一晶粒上包括描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。

图9A是根据本发明的一些实施例图示出示范性有序管道和示范性寄存器重命名、无序发出/执行管道两者的框图。图9B是根据本发明的一些实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、无序发出/执行体系结构核心两者的框图。图9A-9B中的实线框图示了有序管道和有序核心,而虚线框的可选添加图示了寄存器重命名、无序发出/执行管道和核心。考虑到有序方面是无序方面的子集,将描述无序方面。

在图9A中,处理器管道900包括提取阶段902、长度解码阶段904、解码阶段906、分配阶段908、重命名阶段910、调度(也称为分派或发出)阶段912、寄存器读取/存储器读取阶段914、执行阶段916、写回/存储器写入阶段918、异常处理阶段922和提交阶段924。

图9B示出了处理器核心990包括耦合到执行引擎单元950的前端单元930,并且两者都耦合到存储器单元970。核心990可以是精简指令集计算(reduced instruction setcomputing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心或者混合或替换核心类型。作为另外一个选项,核心990可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processing unit,GPGPU)核心、图形核心,等等。

前端单元930包括分支预测单元932,其耦合到指令缓存单元934,指令缓存单元934耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)936,指令TLB 936耦合到指令提取单元938,指令提取单元938耦合到解码单元940。解码单元940(或解码器)可对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元940可使用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心990包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元940中或者以其他方式在前端单元930内)。解码单元940耦合到执行引擎单元950中的重命名/分配器单元952。

执行引擎单元950包括耦合到引退单元954和一组一个或多个调度器单元956的重命名/分配器单元952。(一个或多个)调度器单元956表示任何数目的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元956耦合到(一个或多个)物理寄存器文件单元958。物理寄存器文件单元958的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元958包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元958与引退单元954重叠以图示出可用来实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用寄存器地图和寄存器的池;等等)。引退单元954和(一个或多个)物理寄存器文件单元958耦合到(一个或多个)执行集群960。(一个或多个)执行集群960包括一组一个或多个执行单元962和一组一个或多个存储器访问单元964。执行单元962可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个)调度器单元956、(一个或多个)物理寄存器文件单元958和(一个或多个)执行集群960被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管道(例如,标量整数管道、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管道和/或存储器访问管道,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独的存储器访问管道的情况下,实现了某些实施例,其中只有此管道的执行集群具有(一个或多个)存储器访问单元964)。还应当理解,在使用单独管道的情况下,这些管道中的一个或多个可以是无序发出/执行,其余的是有序的。

存储器访问单元964的集合耦合到存储器单元970,存储器单元970包括数据TLB单元972,TLB单元972耦合到数据缓存单元974,数据缓存单元974耦合到第2级(L2)缓存单元976。在一个示范性实施例中,存储器访问单元964可包括加载单元、存储地址单元和存储数据单元,其中每一者耦合到存储器单元970中的数据TLB单元972。指令缓存单元934进一步耦合到存储器单元970中的第2级(L2)缓存单元976。L2缓存单元976耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。

作为示例,示范性寄存器重命名、无序发出/执行核心体系结构可实现管道900如下:1)指令提取938执行提取和长度解码阶段902和904;2)解码单元940执行解码阶段906;3)重命名/分配器单元952执行分配阶段908和重命名阶段910;4)(一个或多个)调度器单元956执行调度阶段912;5)(一个或多个)物理寄存器文件单元958和存储器单元970执行寄存器读取/存储器读取阶段914;执行集群960执行执行阶段916;6)存储器单元970和(一个或多个)物理寄存器文件单元958执行写回/存储器写入阶段918;7)在异常处理阶段922中可涉及各种单元;并且8)引退单元954和(一个或多个)物理寄存器文件单元958执行提交阶段924。

核心990可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心990包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被使用紧缩数据来执行。

应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者其组合(例如,时间切片式提取和解码,然后是同时多线程处理,例如像

虽然寄存器重命名是在无序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还包括单独的指令和数据缓存单元934/974和共享的L2缓存单元976,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。

图10A-10B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。

图10A是根据本发明的一些实施例的单个处理器核心及其与片上互连网络1002以及与第2级(L2)缓存的其本地子集1004的连接的框图。在一个实施例中,指令解码器1000支持具有紧缩数据指令集扩展的x86指令集。L1缓存1006允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1008和向量单元1010使用分开的寄存器集合(分别是标量寄存器1012和向量寄存器1014)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存1006读回,但本发明的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。

L2缓存的本地子集1004是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集1004的直接访问路径。处理器核心读取的数据被存储在其L2缓存子集1004中并且可被迅速访问,与其他处理器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储在其自己的L2缓存子集1004中并且在必要时被从其他子集冲出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每个方向上是1012位宽的。

图10B是根据本发明的一些实施例的图10A中的处理器核心的一部分的扩展视图。图10B包括L1缓存1004的L1数据缓存1006A部分,以及关于向量单元1010和向量寄存器1014的更多细节。具体而言,向量单元1010是16宽向量处理单元(vector processing unit,VPU)(参见16宽ALU 1028),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持使用调配单元1020调配寄存器输入,使用数值转换单元1022A-B进行的数值转换,以及使用复制单元1024对存储器输入的复制。写入掩码寄存器1026允许断言结果向量写入。

图11是根据本发明的一些实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器1100的框图。图11中的实线框图示了具有单个核心1102A、系统代理1110和一组一个或多个总线控制器单元1116的处理器1100,而虚线框的可选添加图示了具有多个核心1102A-N、系统代理单元1110中的一组一个或多个集成存储器控制单元1114和专用逻辑1108的替换处理器1100。

从而,处理器1100的不同实现方式可包括:1)其中专用逻辑1108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心1102A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心或者两者的组合)的CPU;2)其中核心1102A-N是主要打算用于图形和/或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心1102A-N是大量的通用有序核心的协处理器。从而,处理器1100可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器,等等。处理器可实现在一个或多个芯片上。处理器1100可以是一个或多个基板的一部分和/或使用若干个工艺技术中的任何一者实现在一个或多个基板上,这些技术例如是BiCMOS、CMOS或NMOS。

存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元1106以及耦合到该组集成存储器控制器单元1114的外部存储器(未示出)。该组共享缓存单元1106可包括(一个或多个)中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元1112互连集成图形逻辑1108(集成图形逻辑1108是专用逻辑的一个示例并且在本文中也被称为专用逻辑)、该组共享缓存单元1106和系统代理单元1110/(一个或多个)集成存储器控制器单元1114,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元1106和核心1102A-N之间维持一致性。

在一些实施例中,核心1102A-N中的一个或多个能够进行多线程处理。系统代理1110包括协调和操作核心1102A-N的那些组件。系统代理单元1110可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括调控核心1102A-N和集成图形逻辑1108的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

核心1102A-N就体系结构指令集而言可以是同质的或者异质的;也就是说,核心1102A-N中的两个或更多个可能够执行同一指令集,而其他的可只能够执行该指令集的子集或者不同的指令集。

图12-图15是示范性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的许多种系统或电子设备一般是适当的。

现在参考图12,其中示出了根据本发明的一个实施例的系统1200的框图。系统1200包括一个或多个处理器1210、1215,它们耦合到控制器中心1220。在一个实施例中,控制器中心1220包括图形存储器控制器中心(graphics memory controller hub,GMCH)1290和输入/输出中心(Input/Output Hub,IOH)1250(它们可在分开的芯片上);GMCH 1290包括与存储器1240和协处理器1245耦合的存储器和图形处理器;IOH1250将输入/输出(I/O)设备1260耦合到GMCH 1290。或者,存储器和图形控制器中的一者或两者被集成在处理器内(如本文所述),存储器1240和协处理器1245直接耦合到处理器1210,并且控制器中心1220与IOH 1250在单个芯片中。

额外的处理器1215的可选性在图12中用虚线表示。每个处理器1210、1215可包括本文描述的处理核心中的一个或多个并且可以是处理器1100的某个版本。

存储器1240可例如是动态随机访问存储器(dynamic random-access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者的组合。对于至少一个实施例,控制器中心1220经由多点分支总线(例如前端总线(frontside bus,FSB))、点到点接口(例如QuickPath互连(QuickPath Interconnect,QPI))或者类似的连接1295与(一个或多个)1210、1215通信。

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

在物理资源1210、1215之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。

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

现在参考图13,其中示出了根据本发明的实施例的第一更具体示范性系统1300的框图。如图13中所示,多处理器系统1300是点到点互连系统,并且包括经由点到点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380的每一者可以是处理器1100的某个版本。在一些实施例中,处理器1370和1380分别是处理器1210和1215,而协处理器1338是协处理器1245。在另一实施例中,处理器1370和1380分别是处理器1210和协处理器1245。

处理器1370和1380被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元1372和1382。处理器1370还包括点到点(P-P)接口1376和1378作为其总线控制器单元的一部分;类似地,第二处理器1380包括P-P接口1386和1388。处理器1370、1380可使用P-P接口电路1378、1388经由点到点(P-P)接口1350交换信息。如图13中所示,IMC 1372和1382将处理器耦合到各自的存储器,即存储器1332和存储器1334,存储器1332和存储器1334可以是在本地附加到各个处理器的主存储器的一部分。

处理器1370、1380可各自使用点到点接口电路1376、1394、1386、1398经由个体P-P接口1352、1354与芯片集1390交换信息。芯片集1390可以可选地经由高性能接口1392与协处理器1338交换信息。在一个实施例中,协处理器1338是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。

共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。

芯片集1390可经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本发明的范围不限于此。

如图13中所示,各种I/O设备1314可耦合到第一总线1316,以及将第一总线1316耦合到第二总线1320的总线桥1318。在一个实施例中,一个或多个额外的处理器1315,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(low pin count,LPC)总线。各种设备可耦合到第二总线1320,例如包括键盘和/或鼠标1322、通信设备1327和存储单元1328,例如盘驱动器或者其他大容量存储设备,它们在一个实施例中可包括指令/代码和数据1330。另外,音频I/O 1324可耦合到第二总线1320。注意其他体系结构是可能的。例如,取代图13的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。

现在参考图14,其中示出了根据本发明的实施例的第二更具体示范性系统1400的框图。图13和图14中的相似元素带有相似的标号,并且图13的某些方面被从图14中省略以避免模糊图14的其他方面。

图14图示出处理器1370、1380可分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。从而,CL 1472、1482包括集成存储器控制器单元并且包括I/O控制逻辑。图14图示出不仅存储器1332、1334耦合到CL 1472、1482,而且I/O设备1414也耦合到控制逻辑1472、1482。传统I/O设备1415耦合到芯片集1390。

现在参考图15,其中示出了根据本发明的实施例的SoC 1500的框图。图11中的相似元素带有相似的标号。另外,虚线框是更高级SoC上的可选特征。在图15中,(一个或多个)互连单元1502耦合到:应用处理器1510,其包括一组一个或多个核心1102A-N,和(一个或多个)共享缓存单元1106,其中核心1102A-N包括缓存单元1104A-N;系统代理单元1110;(一个或多个)总线控制器单元1116;(一个或多个)集成存储器控制器单元1114;一组或一个或多个协处理器1520,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(static random access memory,SRAM)单元1530;直接存储器访问(directmemory access,DMA)单元1532;以及显示单元1540,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1520包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。

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

程序代码,例如图13中所示的代码1330,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器的系统,例如数字信号处理器(DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或者微处理器。

程序代码可以用高级过程式或面向对象的编程语言实现来与处理系统通信。如果希望,程序代码也可以用汇编或机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。

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

这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compact diskrewritable,CD-RW)和磁光盘,半导体设备,例如只读存储器(read-only memory,ROM),随机访问存储器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。

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

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

图16是根据本发明的一些实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,指令转换器可以用软件、固件、硬件或者其各种组合来实现。图16示出了高级别语言1602的程序可被使用x86编译器1604来编译以生成x86二进制代码1606,x86二进制代码1606可由具有至少一个x86指令集核心1616的处理器原生执行。具有至少一个x86指令集核心1616的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)英特尔x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本来执行与具有至少一个x86指令集核心的英特尔处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的英特尔处理器基本上相同的结果。x86编译器1604表示可操作来生成x86二进制代码1606(例如,目标代码)的编译器,x86二进制代码1606在带有或不带有额外的链接处理的情况下可被在具有至少一个x86指令集核心的处理器1616上执行。类似地,图16示出了高级别语言1602的程序可被使用替换指令集编译器1608来编译以生成替换指令集二进制代码1610,替换指令集二进制代码1610可由没有至少一个x86指令集核心的处理器1614(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器1612用于将x86二进制代码1606转换成可由没有x86指令集核心的处理器1614原生执行的代码。这个经转换的代码不太可能与替换指令集二进制代码1610相同,因为能够做到这一点的指令转换器是难以制作的;然而,经转换的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器1612表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码1606的软件、固件、硬件或者其组合。

示例1描述了一种示范性处理器,包括:提取电路,用于提取指令,所述指令具有指定操作码和包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置的字段,所述操作码指示执行电路将指定的源向量的每个元素转换成16位浮点格式,并且将每个经转换的元素存储到指定的目标向量的对应位置中,所述转换在必要时包括截断和舍入;解码电路,用于对提取的指令解码;以及执行电路,用于根据操作码来对指令作出响应。

示例2包括如示例1所述的示范性处理器的实质,其中:所述指令还指定包括N个单精度元素的第二源向量的位置;指定的目标向量包括2乘N个16位浮点元素,其前一半和后一半分别对应于所述第一源向量和第二源向量;并且所述操作码指示所述处理器将指定的第一和第二源向量的每个元素转换成16位浮点格式,并且将每个经转换的元素存储到指定的目标向量的对应位置中,所述转换在必要时包括截断和舍入。

示例3包括如示例1所述的示范性处理器的实质,其中每个指定的源向量和目标向量的位置在寄存器中或者在存储器中。

示例4包括如示例1所述的示范性处理器的实质,其中所述16位浮点格式包括符号位、8位指数以及尾数,所述尾数包括7个显式位和第八个隐式位。

示例5包括如示例1所述的示范性处理器的实质,其中N由所述指令指定并且具有4、8、16和32之一的值。

示例6包括如示例1所述的示范性处理器的实质,其中当所述执行电路执行舍入时,其根据最近偶数舍入规则来执行。

示例7包括如示例1所述的示范性处理器的实质,其中所述16位浮点格式是bfloat16或binary16。

示例8包括如示例1所述的示范性处理器的实质,其中所述执行电路并行生成指定的目标的所有N个元素。

示例9描述了一种由处理器执行的示范性方法,该方法包括:使用提取电路提取指令,所述指令具有指定操作码和包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置的字段,所述操作码指示执行电路将指定的源向量的每个元素转换成16位浮点格式,并且将每个经转换的元素存储到指定的目标向量的对应位置中,所述转换在必要时包括截断和舍入;使用解码电路对提取的指令解码;并且使用执行电路根据操作码来对指令作出响应。

示例10包括如示例9所述的示范性方法的实质,其中:所述指令还指定包括N个单精度元素的第二源向量的位置;指定的目标向量包括2乘N个16位浮点元素,其前一半和后一半分别对应于所述第一源向量和第二源向量;并且所述操作码指示执行电路将指定的第一和第二源向量的每个元素转换成16位浮点格式,并且将每个经转换的元素存储到指定的目标向量的对应位置中,所述转换在必要时包括截断和舍入。

示例11包括如示例9所述的示范性方法的实质,其中每个指定的源向量和目标向量的位置在寄存器中或者在存储器中。

示例12包括如示例9所述的示范性方法的实质,其中所述16位浮点格式包括符号位、8位指数以及尾数,所述尾数包括7个显式位和第八个隐式位。

示例13包括如示例9所述的示范性方法的实质,其中N由所述指令指定并且具有4、8、16和32之一的值。

示例14包括如示例9所述的示范性方法的实质,其中当所述执行电路执行舍入时,其根据被颁布为IEEE 754的舍入到最近偶数的舍入规则来执行。

示例15包括如示例9所述的示范性方法的实质,其中所述16位浮点格式是bfloat16或binary16。

示例16包括如示例9所述的示范性方法的实质,其中所述执行电路并行生成指定的目标的所有N个元素。

示例17描述了一种包含指令的示范性非暂态机器可读介质,所述指令当被处理器执行时使得所述处理器通过以下操作来作出响应:使用提取电路提取指令,所述指令具有指定操作码和包括N个单精度元素的第一源向量和包括至少N个16位浮点元素的目标向量的位置的字段,所述操作码指示执行电路将指定的源向量的每个元素转换成16位浮点格式,并且将每个经转换的元素存储到指定的目标向量的对应位置中,所述转换在必要时包括截断和舍入;使用解码电路对提取的指令解码;并且使用执行电路根据操作码来对指令作出响应。

示例18包括如示例17所述的示范性非暂态机器可读介质的实质,其中:所述指令还指定包括N个单精度元素的第二源向量的位置;指定的目标向量包括2乘N个16位浮点元素,其前一半和后一半分别对应于所述第一源向量和第二源向量;并且所述操作码指示执行电路将指定的第一和第二源向量的每个元素转换成16位浮点格式,并且将每个经转换的元素存储到指定的目标向量的对应位置中,所述转换在必要时包括截断和舍入。

示例19包括如示例17所述的示范性非暂态机器可读介质的实质,其中每个指定的源向量和目标向量的位置在寄存器中或者在存储器中。

示例20包括如示例17所述的示范性非暂态机器可读介质的实质,其中当所述执行电路执行舍入时,其根据最近偶数舍入规则来执行。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号