向量友好指令格式及其执行的制作方法

文档序号:24190426发布日期:2021-03-09 14:56阅读:206来源:国知局
向量友好指令格式及其执行的制作方法
向量友好指令格式及其执行
1.本申请是针对分案申请201710936456.2再次提出的分案申请。分案申请201710936456.2是国际申请号为pct//us2011/054303、国际申请日为2011年09月30日、进入中国国家阶段的申请号为201180070598.6、名称为“向量友好指令格式及其执行”的发明专利申请的分案申请。
2.对相关申请的交叉引用
3.本申请要求于2011年4月1日提交的美国临时申请第61/471,043号的权益,该临时申请通过引用合并于此。
4.背景
5.领域
6.本发明的各实施例涉及计算机领域,且尤其涉及受处理器支持的指令集。
7.背景
8.指令集,或指令集架构(isa),是与编程相关的计算机架构的一部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理和外部输入和输出(i/o)。应注意,术语“指令”在此通常是指宏指令——即是说,被提供给处理器以供执行的指令——而不是微指令或微操作码——微指令或微操作码是处理器的解码器解码宏指令的结果。
9.指令集架构不同于微架构,微架构是被用来实现指令集的一组处理器设计技术。带有不同微架构的处理器可以共享通用指令集。例如,英特尔奔腾4处理器、英特尔酷睿(core)处理器和加利福尼亚州桑尼维尔市超微半导体有限公司的处理器实现几乎相同的版本的x86指令集(且新近版本已增加了一些扩展),但具有不同的内部设计。例如,在不同微架构中,可以使用公知的技术以不同的方式实现相同的isa寄存器架构,这些公知的技术包括专用物理寄存器、使用寄存器重命名机制(例如,使用如美国专利第5,446,912号中所述的寄存器别名表(rat)、重新排序缓冲器(rob)和隐退(retirement)寄存器组;使用如美国专利第5,207,132号中所描述的寄存器的多个映射和池)的一个或多个动态分配的物理寄存器,等等。除非以另外方式指定,在此使用短语寄存器架构、寄存器组和寄存器来指代对软件/程序员可见的设备和指令指定寄存器的方式。在要求区分时,将使用形容词“逻辑的”、“架构的”或“软件可见的”来指示寄存器架构中的寄存器/文件,同时使用不同的形容词来指派给定的微架构中的寄存器(例如,物理寄存器、重新排序缓冲器、隐退寄存器、寄存器池)。
10.指令集包括一种或多种指令格式。给定的指令格式定义各种字段(比特的数量、比特的位置)以便指定要执行的操作和对其执行该操作的(多个)操作数,以及其他。通过指令模板(或子格式)的定义,进一步细分一些指令格式。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常是以相同的次序,但是至少一些因为存在较少的所包括的字段而具有不同的比特位置)和/或被定义为具有不同地解释的给定字段。使用给定的指令格式(且,如果已定义,是以该指令格式的指令模板中的给定的一个)来表达给定指令并指定操作和操作数。指令流是特定的指令序列,其中序列中的每
一指令是以一种指令格式(且,如果已定义,是以该指令格式的指令模板中的指定的一个)的指令的发生。
11.科学、金融、自动向量化通用目的、rms(识别、挖掘和合成)/可视和多媒体应用(例如,2d/3d图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)常常要求对大量的数据项执行相同的操作(被称为“数据并行性”)。单指令多数据(simd)是指引起处理器对多个数据项执行相同的操作的指令类型。simd技术尤其适合可以逻辑上将寄存器中的比特分成多个固定大小的数据元素(其中的每一个表示不同的值)的处理器。例如,64-比特寄存器中的比特可以被指定为作为四个不同的16-比特数据元素操作的源操作数,其中的每一个表示不同的16-比特值。这种类型的数据被称为经封装数据类型或向量数据类型,且这种数据类型的操作数被称为经封装数据操作数或向量操作数。换句话说,经封装数据项或向量是指经封装数据元素的序列;且经封装数据操作数或向量操作数是simd指令(也称为经封装数据指令或向量指令)的源操作数或目的地操作数。
12.作为示例,一种类型的simd指令指定单个向量操作,以垂直方式对两个源向量操作数执行该单个向量操作,以便生成相同大小的、带有相同数量的数据元素且以相同的数据元素次序的目的地向量操作数(也称为结果向量操作数)。源向量操作数中的数据元素被称为源数据元素,而目的地向量操作数中的数据元素是指目的地或结果数据元素。这些源向量操作数具有相同的大小且包含相同宽度的数据元素,且因而它们包含相同数量的数据元素。两个源向量操作数中的相同的比特位置中的源数据元素形成一对数据元素(也称为相应的数据元素)。对这些源数据元素对中的每一对分别执行由该simd指令指定的操作,以便生成匹配数量的结果数据元素,且因而每一对源数据元素具有相应的结果数据元素。由于操作是垂直的,且由于结果向量操作数具有相同的大小、具有相同数量的数据元素,且结果数据元素以相同的数据元素次序被存储为源向量操作数,因此结果数据元素处于结果向量操作数中的、与源向量操作数中它们的相应的源数据元素对的相同的比特位置。除了这种示例性类型的simd指令之外,存在各种其他类型的simd指令(例如,具有仅一个或具有多于两个的源向量操作数的simd指令;以水平方式操作的simd指令;生成具有不同的大小、具有不同大小的数据元素和/或具有不同的数据元素次序的结果向量操作数的simd指令)。应理解,术语“目的地向量操作数(或目的地操作数)”被定义为执行由指令指定的操作的直接结果,该指定的操作包括将该目的地操作数存储在一个位置(该位置是寄存器或处于由该指令指定的存储器地址)以使得它可以作为源操作数由另一指令访问(通过另一指令对该相同的位置的指定)。
13.simd技术,例如由具有包括x86、mmx
tm
、流simd扩展(sse)、sse2、sse3、sse4.1和sse4.2指令的指令集的英特尔酷睿
tm
处理器采用的simd技术,已经允许显著改善应用性能(酷睿
tm
和mmx
tm
是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。已经公布被称为高级向量扩展(avx)且使用vex编码方案的另外的未来simd扩展集。
14.附图简述
15.通过参考下列描述和用来阐释本发明的实施例的附图可以最佳地理解本发明。附图中:
16.图1a是阐释根据本发明的一种实施例仅具有以向量友好指令格式的指令的指令流的框图;
17.图1b是阐释根据本发明的一种实施例带有以多种指令格式的指令的指令流的框图;
18.图2a是阐释根据本发明的实施例的通用向量友好指令格式及其类a指令模板的框图;
19.图2b是阐释根据本发明的实施例的通用向量友好指令格式及其类b指令模板的框图;
20.图3a是阐释根据本发明的实施例的示例性专用向量友好指令格式的框图;
21.图3b是阐释根据本发明的一种实施例的、构成完全操作码字段274的专用向量友好指令格式300的字段的框图;
22.图3c是阐释根据本发明的一种实施例的、构成寄存器索引字段244的专用向量友好指令格式300的字段的框图;
23.图3d是阐释根据本发明的一种实施例的、构成增加操作字段(augmentation operation)250的专用向量友好指令格式300的字段的框图;
24.图4a是示出根据本发明的一种实施例的向量友好指令格式的字段中的一些字段的相互关系的流程图的一部分;
25.图4b是示出根据本发明的一种实施例的向量友好指令格式的字段中的一些字段的相互关系的流程图的第二部分;
26.图4c是示出根据本发明的一种实施例的向量友好指令格式的字段中的一些字段的相互关系的流程图的第三部分;
27.图4d是示出根据本发明的一种实施例的向量友好指令格式的字段中的一些字段的相互关系的流程图的其余部分;
28.图4e是根据本发明的一种实施例的框415a-h中的每一个的分解图;
29.图5是根据本发明的一种实施例的寄存器架构500的框图;
30.图6a是根据本发明的实施例用于无存储器访问类型操作的寄存器索引字段244的流程图;
31.图6b是阐释根据本发明的实施例的将寄存器索引字段244、比例字段260、位移量字段262a和位移因子字段262b用于存储器访问类型操作的流程图;
32.图6c是阐释根据本发明的实施例在disp8、disp32和经缩放位移量的变化之间的差异的表;
33.图7a是阐释根据本发明的实施例可以由舍入控制字段254a指定的一组可能的操作的表;
34.图7b是阐释根据本发明的实施例可以由舍入控制字段259a指定的一组可能的操作的表;
35.图8a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据变换字段254b指定的一组可能的数据变换操作的表;
36.图8b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据变换字段254b指定的一组可能的数据变换操作的表;
37.图9是阐释根据本发明的实施例的叉乘调序(swizzle)815的框图;
38.图10a是阐释根据本发明的实施例跨越4元素分组820广播元素的框图;
39.图10b是阐释根据本发明的实施例广播用于32比特数据元素宽度的1元素粒度的框图;
40.图10c是阐释根据本发明的实施例广播用于32比特数据元素宽度的4元素粒度的框图;
41.图11a是阐释根据本发明的实施例可以由操作码映射字段指定的一组可能的操作码映射的表;
42.图11b是阐释根据本发明的实施例可以由操作码映射字段指定的一组可能的前缀编码的表;
43.图12a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段(data manipulation field)254c和广播字段257b指定的用于加载/操作整数(load/op int)的一组可能的数据操纵操作的表;
44.图12b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c和广播字段257b指定的用于加载/操作整数的一组可能的数据操纵操作的表;
45.图12c是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c和广播字段257b指定的用于加载/操作浮点数的一组可能的数据操纵操作的表;
46.图12d是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c和广播字段257b指定的用于加载/操作浮点数(load/op fp)的一组可能的数据操纵操作的表;
47.图13a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定的用于加载/操作整数的一组可能的数据操纵操作的表;
48.图13b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于加载/操作整数的一组可能的数据操纵操作的表;
49.图13c是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定的用于加载/操作浮点数的一组可能的数据操纵操作的表;
50.图13d是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于加载/操作浮点数的一组可能的数据操纵操作的表;
51.图14a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定的用于存储整数(store int)的一组可能的数据操纵操作的表;
52.图14b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于存储整数的一组可能的数据操纵操作的表;
53.图14c是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定的用于存储浮点数(store fp)的一组可能的数据操纵操作的表;
54.图14d是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于存储浮点数的一组可能的数据操纵操作的表;
55.图15a是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于加载图形(load graphics)的一组可能的数据操纵操作的表;
56.图15b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于加载经封装图形(load packed graphics)的一组可能的数据操纵操作的表;
57.图15c是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定的用于存储图形(store graphics)的一组可能的数据操纵操作的表;
58.图16a是阐释根据本发明的实施例在数据元素宽度是32比特且第二源和目的地相同时使用写掩码寄存器k1中的写掩码来归并的示例性操作1600的框图;
59.图16b是阐释根据本发明的实施例在数据元素宽度是32比特且第二源和目的地相同时使用全部为1的硬布线掩码(硬布线写掩码由指定写掩码寄存器k0的指令使用)来归并的示例性操作1625的框图;
60.图16c是阐释根据本发明的实施例对于8、16、32和64比特数据元素宽度写掩码寄存器中的比特与512比特向量的数据元素位置的对应关系的框图;
61.图16d是阐释根据本发明的实施例在数据元素宽度是32比特且第二源和目的地不相同时使用写掩码寄存器k1中的写掩码来归并的示例性操作1660的框图;
62.图16e是阐释根据本发明的实施例在数据元素宽度是32比特且第二源和目的地不相同时使用写掩码寄存器k1中的写掩码来归零的示例性操作1666的框图;
63.图17a阐释根据本发明的实施例的来自示例性专用向量友好指令格式的字段的子集;
64.图17b阐释根据本发明的实施例的来自图17a的专用向量友好指令格式中所编码的示例性专用向量友好指令的字段的子集;
65.图17c阐释根据本发明的实施例的来自图17a的专用向量友好指令格式中所编码的示例性专用向量友好指令的字段的子集;
66.图17d阐释根据本发明的实施例的来自图17a的专用向量友好指令格式中所编码的示例性专用向量友好指令的字段的子集;
67.图18a阐释根据本发明的实施例的来自示例性专用向量友好指令格式的字段的子集;
68.图18b阐释根据本发明的实施例来自以图18a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集;
69.图18c阐释根据本发明的实施例来自以图18a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集;
70.图18d阐释根据本发明的实施例来自以图18a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集;
71.图18e阐释根据本发明的实施例来自以图18a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集;
72.图18f阐释根据本发明的实施例来自以图18a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集;
73.图19a是阐释根据本发明的实施例的无存储器访问、类a的完全舍入控制类型操作210指令模板的哪些字段被用于第一示例性处理器流水线的不同阶段的框图;
74.图19b是阐释根据本发明的实施例的无存储器访问、类a的数据变换类型操作215指令模板的哪些字段被用于第一示例性处理器流水线的不同阶段的框图;
75.图19c是阐释根据本发明的实施例的类a的存储器访问220指令模板的哪些字段被用于第一示例性处理器流水线的不同阶段的框图;
76.图20a是阐释根据本发明的实施例的无存储器访问、类a的完全舍入控制类型操作210指令模板的哪些字段被用于第二示例性处理器流水线的不同阶段的框图;
77.图20b是阐释根据本发明的实施例的无存储器访问、类a的数据变换类型操作215指令模板的哪些字段被用于第二示例性处理器流水线的不同阶段的框图;
78.图20c是阐释根据本发明的实施例的类a的存储器访问220指令模板的哪些字段被用于第二示例性处理器流水线的不同阶段的框图;
79.图21a是阐释根据本发明的实施例的无存储器访问、类a的完全舍入控制类型操作210指令模板的哪些字段被用于第三示例性处理器流水线的不同阶段的框图;
80.图21b是阐释根据本发明的实施例的无存储器访问、类a的数据变换类型操作215指令模板的哪些字段被用于第三示例性处理器流水线的不同阶段的框图;
81.图21c是阐释根据本发明的实施例的类a的存储器访问220指令模板的哪些字段被用于第三示例性处理器流水线的不同阶段的框图;
82.图22a是阐释根据本发明的实施例的无存储器访问、类a的完全舍入控制类型操作210指令模板的哪些字段被用于第四示例性处理器流水线的不同阶段的框图;
83.图22b是阐释根据本发明的实施例的无存储器访问、类a的数据变换类型操作215指令模板的哪些字段被用于第四示例性处理器流水线的不同阶段的框图;
84.图22c是阐释根据本发明的实施例的类a的存储器访问220指令模板的哪些字段被用于第四示例性处理器流水线的不同阶段的框图;
85.图23a是根据本发明的实施例的单个cpu核心及其到片内互连网络2302的连接以及其2级(l2)高速缓存2304的本地子集的框图;
86.图23b是根据本发明的实施例图23a中的cpu核心的部分的分解图;
87.图24是阐释根据本发明的实施例的示例性乱序架构的框图;
88.图25是根据本发明的实施例的系统2500的框图;
89.图26是根据本发明的实施例的第二系统2600的框图;
90.图27是根据本发明的实施例的第三系统2700的框图;
91.图28是根据本发明的实施例的soc 2800的框图;
92.图29是根据本发明的实施例的带有集成的存储器控制器和图形的单核心处理器和多核心处理器2900的框图;以及
93.图30是对照根据本发明的实施例使用软件指令转换器来将源指令集中的二进制指令转换到目标指令集中的二进制指令的框图。
94.各实施例的描述
95.在下列描述中,陈述了诸如逻辑实现操作码、指定操作数的方式、资源划分/共享/复制实现、系统组件的类型和相互关系以及逻辑划分/集成选择等的众多特定细节,以便提供对本发明的更透彻的理解。然而,本领域中的技术人员应明白,可以不需要这样的特定细节就实践本发明。在其他实例中,没有详细示出控制结构、门级电路和完全软件指令序列,以便不模糊本发明。借助于所包括的描述,本领域中的普通技术人员无需过度的实验就可以实现适当的功能性。
96.还应明白,贯穿本说明书例如对“一种实施例”、“一实施例”或“一个或多个实施例”的引用,意味着在本发明的实施例的实践中可以包括具体的特征,但是每一实施例并不
必定包括具体的特征。类似地,应明白,出于简化本公开并帮助理解各种创造性方面的目的,在单个实施例、图或其描述中有时将各种特征的描述分组在一起。进一步,在结合实施例描述具体的特征、结构或特性时,无论是否明确地描述,宣布这是在本领域的技术人员实现结合其他实施例来实现这样的特征、结构或特性的知识范围内。然而,这种公开方法不应被解释为反映本发明需要比每一权利要求中明确记载的更多的功能的意图。相反,如下列权利要求所反映的,创造性方面可能存在于少于一个单一公开实施例的所有特征。因而,详细描述之后的权利要求据此明确地被合并该详细描述中,且每一权利要求独立成为本发明的单独的实施例。
97.在下列描述和权利要求中,可以使用术语“耦合”和“连接”以及它们的派生词。应理解,这些术语不预期是相互的同义词。“耦合”被用来指示两个或更多个元素,这些两个或更多个元素可以或可以不与彼此直接物理接触或电接触、共操作或相互交互。“连接”用来指示在相互耦合的两个或更多个元素之间的通信的建立。
98.将参考各框图的示例性实施例来描述各流程图的操作。然而,应理解,可以由不同于参考框图所讨论的那些实施例的本发明的实施例执行各流程图的操作,且参考框图所讨论的各实施例可以执行不同于参考流程图所讨论的那些操作的操作。
99.为便于理解,图中已经使用虚线来表示某些项的可选属性(例如,本发明的给定实现不支持的特征;给定实现所支持的但用于一些情形且不用于其他情形的特征)。
100.向量友好指令格式——图1-16
101.向量友好指令格式是适用于向量指令的指令格式(例如,存在向量操作专用的某些字段)。尽管描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但备选实施例仅使用向量操作向量友好指令格式。
102.指令格式的数量——图1a-1b
103.一种指令格式——图1a
104.图1a是阐释根据本发明的一种实施例的仅具有以向量友好指令格式的指令的指令流的框图。该指令流包括全都以向量友好格式100a-100j的j个指令的序列。在本发明的一种实施例中,处理器仅支持向量指令格式且可以执行这一指令流。
105.多种指令格式-图1b
106.图1b是阐释根据本发明的一种实施例的带有以多种指令格式的指令的指令流的框图。以向量友好指令格式、第二格式或第三格式表示该指令流中的每一指令。该指令流包括j指令110a-110j。在本发明的一种实施例中,处理器支持多种指令格式(包括图1b中所示出的格式)且可以执行图1a-1b两者中的指令流。
107.示例性通用向量友好指令格式——图2a-b
108.图2a-b是阐释根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图2a是阐释根据本发明的实施例的通用向量友好指令格式及其类a指令模板的框图;而图2b是阐释根据本发明的实施例的通用向量友好指令格式及其类b指令模板的框图。具体地,为通用向量友好指令格式200定义类a和类b指令模板,两者均包括无存储器访问205指令模板和存储器访问220指令模板。向量友好指令格式的上下文中的术语“通用”是指指令格式不是依赖于任何特定的指令集。尽管将描述其中以向量友好指令格式的指令对源自寄存器(无存储器访问205指令模板)或寄存器/存储器(存储器访问220指令模板)的向量操作
的实施例,但本发明的备选实施例可以仅支持这些中的一种。而且,尽管将描述其中存在以向量指令格式的加载和存储指令的本发明的实施例,但替代地或附加地,备选实施例具有以将向量移入寄存器和将向量移出寄存器(例如,从存储器进入到寄存器、从寄存器进入到存储器、在寄存器之间)的不同的指令格式的指令。进一步,尽管将描述支持两类的指令模板的本发明的实施例,但备选实施例可以仅支持这些中的一种或多于两种。
109.尽管将描述其中向量友好指令格式支持以下的本发明的实施例:带有32比特(4字节)或64比特(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小)(且因而,64字节向量由16个双字元大小的元素组成,或替代地由8个四字元大小的元素组成);带有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字节向量操作数)。
110.图2a中的类a指令模板包括:1)在无存储器访问205指令模板内示出无存储器访问、完全舍入控制类型操作210指令模板和无存储器访问、数据变换类型操作215指令模板;以及2)在存储器访问220指令模板内示出存储器访问,时效性的225指令模板和存储器访问、非时效性的230指令模板。图2b中的类b指令模板包括:1)在无存储器访问205指令模板内示出无存储器访问、写掩码控制、部分舍入控制类型操作212指令模板和无存储器访问、写掩码控制、vsize类型操作217指令模板;以及2)在存储器访问220指令模板内示出存储器访问、写掩码控制227指令模板。
111.格式
112.通用向量友好指令格式200包括下面以图2a-b中所阐释的次序列出的下列字段。
113.格式字段240——这一字段中的专用值(指令格式标识符值)唯一地标识向量友好指令格式,且因而标识指令流中以向量友好指令格式的指令的发生。因而,格式字段240的内容将以第一指令格式的指令的发生与以其他指令格式的指令的发生区分开来,由此允许将向量友好指令格式引入到具有其他指令格式的指令集中。因而,在仅具有通用向量友好指令格式的指令集不需要这一字段的意义上,这一字段是可选的。
114.基操作字段242——其内容区分不同的基操作。如本文稍后描述的,基操作字段242可以包括操作码字段和/或是操作码字段的部分。
115.寄存器索引字段244——如果源操作数和目的地操作数是在寄存器或存储器中,则其内容直接地或通过地址生成指定源操作数和目的地操作数的位置。这些包括足够从pxq(例如32x512)寄存器组选择n个寄存器的数量的比特。尽管在一种实施例中n可以是多达三个源存器和一个目的地寄存器,但备选实施例可以支持更多或更少源寄存器和目的地寄存器(例如,在两个源中的一个也充当目的地时可以支持多达两个源,在三个源中的一个也充当目的地时可以支持多达三个源,可以支持多达两个源和一个目的地)。尽管在一种实施例中p=32,但备选实施例可以支持更多或更少寄存器(例如,16)。尽管在一种实施例中q=512比特,但备选实施例可以支持更多或更少比特(例如,128、1024)。
116.修饰符字段246——其内容将指定存储器访问的以通用向量指令格式的指令的发
生与不指定存储器访问的那些区分开来;即是说,区分无存储器访问205指令模板和存储器访问220指令模板。存储器访问操作读和/或写存储器分层(在一些情况中使用寄存器中的值来指定源地址和/或目的地地址),同时非存储器访问操作不这样做(例如,源和目的地是寄存器)。尽管在一种实施例中这一字段也选择在执行存储器地址计算的三种不同的方式之间,但备选实施例可以支持更多、更少或不同的执行存储器地址计算的方式。
117.增加操作字段250——其内容区分除了基操作之外要执行各种不同的操作中的哪一种。这一字段是上下文特异的。在本发明的一种实施例中,这一字段被分割成类字段268、α字段252和β字段254。增加操作字段允许公共的操作组在单个指令而不是2、3或4个指令中执行。下面是使用增加字段250来减少所要求的指令的数量的指令的一些示例(本文中稍后更详细地描述其命名法)。
[0118][0119]
其中[rax]要用于地址生成的基指针,且其中{}指示由数据操纵字段指定的转换操作(稍后在这里更详细地描述)。
[0120]
比例字段260——其内容允许缩放索引字段的内容以供存储器地址生成(例如,用
于使用2
比例
*索引+基的地址生成)。
[0121]
位移量字段262a——其内容被用作存储器地址生成的部分(例如,用于使用2
比例
*索引+基+位移量的地址生成)。
[0122]
位移因子字段262b(注意,直接在位移因子字段262b上的位移量字段262a的毗邻指示一个或另一个被使用)——其内容被用作地址生成的部分;它指定要由存储器访问的大小(n)缩放的位移因子——其中n是存储器访问中的字节的数量(例如,用于使用2
比例
*索引+基+经缩放位移量的地址生成)。冗余的低阶比特被忽略,且因此,位移因子字段的内容乘以存储器操作数总大小(n),以便生成计算有效的地址时所使用的最终位移量。由处理器硬件在运行时基于完全操作码字段274(稍后在此描述)和如本文稍后描述的数据操纵字段254c确定值n。在位移量字段262a和位移因子字段262b不被用于无存储器访问205指令模板和/或不同的实施例可以实现两者中的仅一个或零个的意义上,位移量字段262a和位移因子字段262b是可选的。
[0123]
数据元素宽度字段264——其内容辨别要使用多种数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中用于仅一些指令)。在如果仅支持一种数据元素宽度和/或使用操作码的某一方面支持数据元素宽度则不需要这一字段的意义上,这一字段是可选的。
[0124]
写掩码字段270——其内容对于每一数据元素位置控制目的地向量操作数中的该数据元素位置是否反映基操作和增加操作的结果。类a指令模板支持归并写掩码(merging-writemasking),而类b指令模板支持归并写掩码和归零写掩码(zeroing-writemasking)两者。在归并时,向量掩码允许在(由基操作和增加操作指定的)任何操作执行期间保护目的地中的任何元素集免遭更新;在另一种实施例中,在相应的掩码比特具有0时,保留目的地的每一元素的旧值。相反,在归零时,向量掩码允许在(由基操作和增加操作指定的)任何操作执行期间归零目的地中的任何元素集;在一种实施例中,在相应的掩码比特具有0值时,目的地的元素被设置为0。这一功能性的子集是控制正在执行的操作的向量长度的能力(即是说,从第一个到最后一个修改各元素的跨距);然而,所修改的元素连续不是必要。因而,写掩码字段270允许部分向量操作,包括加载、存储、运算、逻辑等等。而且,这掩码可以被用于故障抑制(fault suppression)(即,通过掩码目的地的数据元素位置以便防止接收可以/将引起故障的任何操作的结果——例如,假设存储器中的向量跨过页面边界且第一页面而非第二页面将引起页面故障,如果位于第一页面的向量的所有数据元素被写掩码所掩码,则可以忽略页面故障)。进一步,写掩码允许包含某些类型的条件语句的“向量化循环”。尽管描述了其中写掩码字段270的内容选择多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器的本发明的实施例(且因而写掩码字段270的内容间接地标识要执行的掩码),相反地或另外,备选实施例允许掩码写字段270的内容直接地指定要执行的掩码。进一步,在以下情况中,归零允许性能改进:1)寄存器重命名被用于其目的地操作数也不是源的指令(也称为非三元指令(non-ternary instruction)),这是因为在寄存器重命名流水线阶段期间目的地不再是隐源(implicit source)(来自当前的目的地寄存器的数据元素不需要被复制到已重命名的目的地寄存器,或者以某种方式伴随着操作而被携带,这是因为不是操作的结果的任何数据元素(任何已掩码数据元素)将被归零);以及2)在回写阶段期间,这是因为正在写入零。
[0125]
立即数字段(immediate field)272——其内容允许立即数的指定。在这一字段不出现在不支持即时的通用向量友好格式的一种实现中且不出现在不使用即时的指令中的意义上,这一字段是可选的。
[0126]
指令模板类选择
[0127]
类字段268——其内容区分不同的指令类。参考图2a-b,这一字段的内容在类a和类b指令之间选择。在图2a-b中,圆角正方形被用来指示特定的值出现在字段中(例如,图2a-b中分别用于类字段268的类a 268a和类b 268b)。
[0128]
类a的无存储器访问指令模板
[0129]
在类a的非存储器访问205指令模板的情况中,α字段252被解释为rs字段252a,其内容辨别要执行不同的增加操作类型中的哪一种(例如,分别指定为用于无存储器访问、舍入类型操作210和无存储器访问、数据变换类型操作215指令模板的舍入252a.1和数据变换252a.2),而β字段254辨别要执行指定类型的操作中的哪一个。图2中,圆角框被用来指示存在特定的值(例如,修饰符字段246中的无存储器访问246a;用于α字段252/rs字段252a的舍入252a.1和数据变换252a.2)。在无存储器访问205指令模板中,不存在比例字段260、位移量字段262a和位移量比例字段262b。
[0130][0131]
在无存储器访问完全舍入控制类型操作210指令模板中,β字段254被解释为舍入控制字段254a,其内容提供静态的舍入。尽管在所描述的本发明的实施例中,舍入控制字段254a包括抑制所有浮点异常(sae)字段256和舍入操作控制字段258,但备选实施例可以支持可以将这些概念两者编码到相同的字段中或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作字段258)。
[0132]
sae字段256——其内容辨别是否禁用异常事件报告;在sae字段256的内容指示允许抑制时,给定指令不报告任何种类的浮点异常标志且不引发任何浮点异常处理程序。
[0133]
舍入操作字段258——其内容辨别要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和就近舍入)。因而,舍入操作字段258允许按每一指令改变舍入模式,且因而在要求这一点时尤其有用。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一种实施例中,舍入操作字段258的内容覆写该寄存器值(能够选择舍入模式而不必对这样的控制寄存器执行保存-修改-还原是有益的)。
[0134][0135]
在无存储器访问数据变换类型操作215指令模板中,β字段254被解释为数据变换字段254b,其内容辨别要执行多种数据变换中的哪一种(例如,无数据变换、调序、广播)。
[0136]
类a的存储器访问指令模板
[0137]
在类a的存储器访问220指令模板的情况中,α字段252被解释为驱逐提示字段252b,其内容辨别要使用驱逐提示(eviction hint)中的哪一个(在图2a中,时效性的(temporal)252b.1和非时效性的(non-temporal)252b.2分别被指定为用于存储器访问、时效性的225指令模板和存储器访问、非时效性的230指令模板),而β字段254被解释为数据操纵字段254c,其内容辨别要执行多个数据操纵操作(也称为原语)中的哪一个(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问220指令模板包括比例字段
260,且可选地包括位移量字段262a或位移量比例字段262b。
[0138]
向量存储器指令执行从存储器的向量加载和到存储器的向量存储,且带有转换支持。如同常规向量指令一样,向量存储器指令以逐个数据元素的方式从存储器传递数据/将数据传递到存储器,且实际上被传递的元素由被选择为写掩码的向量掩码的内容规定。在图2a中,圆角方框被用来指示字段中存在特定的值(例如,用于修饰符字段246的存储器访问246b;用于α字段252/驱逐提示字段252b的时效性的252b.1和非时效性的252b.2)
[0139][0140]
时效性的数据是可能足够快地被再次使用以便受益于缓存的数据。然而,这是提示,且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
[0141][0142]
非时效性的数据是不太可能足够快地被再次使用以受益于1级高速缓存中的缓存且应被给予用于驱逐的优先级的数据。然而,这是提示,且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
[0143]
类b的指令模板
[0144]
在类b的指令模板的情况中,α字段252被解释为写掩码控制(z)字段252c,其内容辨别由写掩码字段270控制的写掩码是否应当是归并或归零。
[0145]
类b的无存储器访问指令模板
[0146]
在类b的非存储器访问205指令模板的情况中,β字段254的部分被解释为rl字段257a,其内容辨别要执行不同的增加操作类型中的哪一种(例如,舍入257a.1和向量长度(vsize)257a.2分别被指定为用于无存储器访问、写掩码控制、部分舍入控制类型操作212指令模板和无存储器访问、写掩码控制、vsize类型操作217指令模板),而β字段254的其余部分辨别要执行指定类型的操作中的哪些。在图2中,圆角框被用来指示存在特定的值(例如,修饰符字段246中的无存储器访问246a;用于rl字段257a的舍入257a.1和vsize 257a.2)。在无存储器访问205指令模板中,不存在比例字段260、位移量字段262a和位移量比例字段262b。
[0147][0148]
在无存储器访问、写掩码控制、部分舍入控制类型操作210指令模板中,β字段254的其余部分被解释为舍入操作字段259a且禁用异常事件报告(给定指令不报告任何种类的浮点异常标志且不引发任何浮点异常处理程序)。
[0149]
舍入操作字段259a——只是作为舍入操作字段258,其内容辨别要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和就近舍入)。因而,舍入操作字段259a允许按每一指令改变舍入模式,且因而在要求这一点时尤其有用。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一种实施例中,舍入操作字段259a的内容覆写该寄存器值(能够选择舍入模式而不必对这样的控制寄存器执行保存-修改-还原是有益的)。
[0150][0151]
在无存储器访问、写掩码控制、vsize类型操作217指令模板中,β字段254的其余部
分被解释为向量长度字段259b,其内容辨别要对多种数据向量长度中的哪一种(例如,128、256或512比特)来执行。
[0152]
类b的存储器访问指令模板
[0153]
在类b的存储器访问220指令模板的情况中,β字段254的部分被解释为广播字段257b,其内容辨别是否要执行广播类型数据操纵操作,而β字段254的其余部分被解释为向量长度字段259b。存储器访问220指令模板包括比例字段260,且可选地包括位移量字段262a或位移量比例字段262b。
[0154]
关于各字段的附加注释
[0155]
关于通用向量友好指令格式200,完全操作码字段274被示出为包括格式字段240、基操作字段242和数据元素宽度字段264。尽管示出了其中完全操作码字段274包括所有这些字段的一种实施例,但在不支持所有这些字段的实施例中,完全操作码字段274包括少于所有这些字段。完全操作码字段274提供操作代码。
[0156]
增加操作字段250、数据元素宽度字段264和写掩码字段270允许对于以通用向量友好指令格式的每一指令来指定这些特征。
[0157]
写掩码字段和数据元素宽度字段的组合创建类型化指令(typed instruction),这是因为它们允许基于不同的数据元素宽度应用掩码。
[0158]
该指令格式要求相对小的数量的比特,这是因为它基于其他字段的内容出于不同的目的再次使用不同的字段。举例来说,一种观点认为,修饰符字段的内容在图2a-b上的无存储器访问205指令模板和图2a-b上的存储器访问220指令模板之间选择;而类字段268的内容在图2a的指令模板210/215和图2b的指令模板212/217之间在那些非存储器访问205指令模板内选择;而类字段268的内容在图2a的指令模板225/230和图2b的指令模板227之间的那些存储器访问220指令模板内选择。从另一观点来看,类字段268的内容分别在图2a的类a指令模板和图2b的类b指令模板之间选择;而修饰符字段的内容在图2a的指令模板205和220之间的那些类a指令模板内选择;而修饰符字段的内容在图2b的指令模板205和220之间的那些类b指令模板内选择。在类字段的内容指示类a指令模板的情况中,修饰符字段246的内容选择(在rs字段252a和eh字段252b之间的)α字段252的解释。以相关的方式,修饰符字段246和类字段268的内容选择α字段是否被解释为rs字段252a、eh字段252b或写掩码控制(z)字段252c。在该类和修饰符字段指示类a无存储器访问操作的情况中,增加字段的β字段的解释基于rs字段的内容而改变;而在该类和修饰符字段指示类b无存储器访问操作的情况中,β字段的解释取决于rl字段的内容。在该类和修饰符字段指示类a存储器访问操作的情况中,增加字段的β字段的解释基于基操作字段的内容而改变;而在该类和修饰符字段指示类b存储器访问操作的情况中,增加字段的β字段的广播字段257b的解释基于基操作字段的内容而改变。因而,基操作字段、修饰符字段和增加操作字段的组合允许指定甚至更多种多样的增加操作。
[0159]
在不同的情形中,在类a和类b内出现的各种指令模板是有益的。在出于性能原因期望归零写掩码或较小的向量长度时,类b是有用的。例如,在使用重命名时,归零允许避免欺骗相关性,这是由于我们不再需要人工地与目的地归并;作为另一示例,在借助于向量掩码仿真较短的向量大小时,向量长度控制减缓了存储-加载转发问题。在期望以下时,该类a是有用的:1)在同一时刻使用舍入模式控制的同时允许浮点异常(即,在sae字段的内容指
示否时);2)可以使用向上转换、调序、交换和/或向下转换;3)对图形数据类型操作。举例来说,向上转换、调序、交换、向下转换和图形数据类型减少在与以不同的格式的源一起工作时所要求的指令的数量;作为另一示例,允许异常的能力提供与定向舍入模式的完全ieee兼容。而且,在本发明的一些实施例中,不同的处理器或在处理器内的不同核心可以仅支持类a、仅支持类b或支持两者。举例来说,预期用于通用计算的高性能通用乱序核心可以仅支持类b,预期主要用于图形和/或科学(吞吐量)计算的核心可以仅支持类a,且预期用于两者的核心可以支持两者(当然,具有来自这两个类的模板和指令但不是来自这两个类的所有模板和指令的某种混合的核心落在本发明的范围内)。而且,单个处理器可以包括多个核心,其中的所有核心都支持相同的类或其中不同的核心支持不同的类。举例来说,在带有单独的图形和通用核心的处理器中,预期主要用于图形和/或科学计算的图形核心中的一个可以仅支持类a,而通用核心中的一个或多个可以是带有预期用于仅支持类b的通用计算的乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可以包括支持类a和类b两者的一个或多个通用有序或乱序核心。当然,在本发明的不同的实施例中,来自一个类的特征也可以在其他类中实现。用高级语言编写的程序将被放置(例如,被即时编译或静态编译)在多种不同的可执行形式,包括:1)仅具有目标处理器所支持的用于执行的(各)类的指令的形式;或2)具有使用所有类的指令的不同组合编写的备选例程且具有基于当前执行代码的处理器所支持的指令选择例程以便执行的控制流代码的形式。
[0160]
示例性专用向量友好指令格式——图3a-d
[0161]
图3a是阐释根据本发明的实施例的示例性专用向量友好指令格式的框图。图3a示出专用向量友好指令格式300,在指定各字段的位置、大小、解释和次序以及那些字段中的一些的值的意义上,向量友好指令格式300是专用的。专用向量友好指令格式300可以被用来扩展x86指令集,且因而各字段中的一些与现有x86指令集及其扩展(例如,avx)中所使用的那些相似或相同。这种格式保持与带有扩展的现有x86指令集的前缀编码字段、实际操作码字节字段、mod r/m字段、sib字段、位移量字段和立即数字段一致。将阐释从图2的各字段到图3a的字段的映射。
[0162]
应理解,尽管出于说明性目的在通用向量友好指令格式200的上下文中参考专用向量友好指令格式300描述了本发明的实施例,但除了所声明的场合外,本发明不限于专用向量友好指令格式300。例如,通用向量友好指令格式200设想用于各种字段的各种可能的大小,而专用向量友好指令格式300被示出为具有特定的大小的字段。作为特定的示例,尽管数据元素宽度字段264被阐释为以专用向量友好指令格式300的一个比特字段,但本发明不限于此(即是说,通用向量友好指令格式200设想其他大小的数据元素宽度字段264)。
[0163]
格式-图3a
[0164]
通用向量友好指令格式200包括下面以图3a中所述阐释的次序列出的下列字段。
[0165][0166]
evex前缀302——以四字节形式编码。
[0167]
格式字段240(evex字节0,比特[7:0])-第一字节(evex字节0)是格式字段240,且它包含0x62(在本发明的一种实施例中用于辨别向量友好指令格式的唯一值)。
[0168]
第二-第四字节(evex字节1-3)包括提供特定能力的多个比特字段。
[0169]
rex字段305(evex字节1,比特[7-5])——由evex.r比特字段(evex字节1,比特
[7]

r)、evex.x比特字段(evex字节1,比特[6]

x)和257bex字节1比特[5]

b)组成。evex.r、evex.x和evex.b比特字段提供与相应的vex比特字段相同的功能性,且使用1s补码形式来编码,即zmm0被编码为1111b,zmm15被编码为0000b。指令的其他字段编码本领域中已知的寄存器索引的低三比特(rrr、xxx和bbb),以使得可以通过添加evex.r、evex.x和evex.b形成rrrr、xxxx和bbbb。
[0170]
rex’字段310——这是rex’字段310的第一部分,并且是被用来编码扩展32寄存器集的高16或低16的evex.r’比特字段(evex字节1,比特[4]-r’)。在本发明的一种实施例中,这一比特以及下面所指示的其他比特以比特反转格式存储,以便区别于(在公知的x86 32比特模式中)bound指令,bound指令的实际操作码字节是62,但在(下面描述的)mod r/m字段中不接受mod字段中的值11;本发明的备选实施例不以反转格式存储这一比特和下面的其他所指示的比特。值1被用来编码低16寄存器。换句话说,通过组合evex.r’、evex.r和来自其他字段的其他rrr来形成r’rrrr。
[0171]
操作码映射字段315(evex字节1,比特[3:0]

mmmm)——其内容编码暗示前导操作码字节(0f、0f 38或0f 3a)。
[0172]
数据元素宽度字段264(evex字节2,比特[7]

w)——由记号法evex.w表示。evex.w被用来定义数据类型(32比特数据元素或64比特数据元素)的粒度(大小)。
[0173]
evex.vvvv 320(evex字节2,比特[6:3]-vvvv)——evex.vvvv的作用可以包括以下:1)evex.vvvv编码以反转(1s补码)形式指定的第一源寄存器操作数且对带有2个或更多个源操作数的指令有效;2)evex.vvvv编码目的地寄存器操作数,该目的地寄存器操作数以1s补码形式指定以便得到某种向量偏移;或3)evex.vvvv不编码任何操作数,该字段被保留且应包含1111b。因而,evex.vvvv字段320编码以反转(1s补码)形式存储的第一源寄存器的指定符的4低阶比特。取决于指令,额外不同的evex比特字段被用来将指定符大小扩展到32个寄存器。
[0174]
evex.u 268类字段(evex字节2,比特[2]-u)——如果evex.u=0,则它指示类a或evex.u0;如果evex.u=1,则它指示类b或evex.u1。
[0175]
前缀编码字段325(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前缀编码,且因而不要求扩展。
[0176]
α字段252(evex字节3,比特[7]——eh;也称为evex.eh、evex.rs、evex.rl、evex.写掩码控制和evex.n;也用α阐释)——如先前所描述的,这一字段是上下文专属的。稍后在此提供附加描述。
[0177]
β字段254(evex字节3,比特[6:4]-sss,也称为evex.s
2-0
、evex.r
2-0
、evex.rr1、evex.ll0、evex.llb;也用βββ阐释)——如先前所描述的,这一字段是上下文特异的。稍后
在此提供附加描述。
[0178]
rex’字段310——这是rex’字段的其余部分且是可以被用来编码扩展32寄存器集的上16或低16的evex.v’比特字段(evex字节3,比特[3]-v’)。以比特反转格式存储这一比特。值1被用来编码低16寄存器。换句话说,v’vvvv通过组合evex.v’、evex.vvvv来形成。
[0179]
写掩码字段270(evex字节3,比特[2:0]-kkk)——其内容指定如先前所描述的写掩码寄存器中的寄存器的索引。在本发明的一种实施例中,特定的值evex.kkk=000具有专用的行为暗示没有写掩码被用于具体的指令(这可以以各种方式实现,包括将硬布线的写掩码用于绕过掩码硬件的所有硬件)。
[0180][0181]
这也称为操作码字节。在这一字段中指定操作码的部分。
[0182][0183]
修饰符字段246(modr/m.mod,比特[7-6]

mod字段342)——如先前所描述的,mod字段342的内容区分存储器访问和无存储器访问操作。本文稍后将进一步描述这一字段。
[0184]
modr/m.reg字段344,比特[5-3]——modr/m.reg字段的作用可以是总结为两种情形:modr/m.reg编码目的地寄存器操作数或源寄存器操作数,或modr/m.reg被看作是操作码扩展且不被用来编码任何指令操作数。
[0185]
modr/m.r/m字段346,比特[2-0]——modr/m.r/m字段的作用可以包括以下:modr/m.r/m编码引用存储器地址的指令操作数,或modr/m.r/m编码目的地寄存器操作数或源寄存器操作数。
[0186][0187]
比例字段260(sib.ss,比特[7-6]——如先前所描述的,比例字段260的内容被用于存储器地址生成。本文稍后将进一步描述这一字段。
[0188]
sib.xxx 354(比特[5-3]和sib.bbb 356(比特[2-0])——先前已经相对于寄存器索引xxxx和bbbb提及了这些字段的内容。
[0189][0190]
位移量字段262a(字节7-10)——在mod字段342包含10时,字节7-10是位移量字段262a,且它与旧版32比特位移量(disp32)一样工作,并且以字节粒度工作。
[0191]
位移因子字段262b(字节7)——在mod字段342包含01时,字节7是位移因子字段262b。这一字段位置与旧版x86指令集8比特位移量(disp8)的位置相同,旧版x86指令集8比特位移量(disp8)以字节粒度工作。由于disp8是扩展的符号数,它可以仅在-128和127字节偏移之间寻址;对于64字节高速缓存线条,disp8使用8比特,该8比特可以被设置为仅四个实际有用的值-128、-64、0和64;由于常常需要更大的范围,使用disp32;然而,disp32要求4字节。与disp8和disp32相反,位移因子字段262b是disp8的重新解释;在使用位移因子字段262b时,通过位移因子字段的内容乘以存储器操作数访问的大小(n)来确定实际的位移量。这种类型的位移量被称为disp8*n。这减少了平均指令长度(被用于该位移量但带有大得多的范围的单个字节)。这样的已压缩位移量是基于这样的假设:有效的位移量是存储器访问的粒度的倍数,且因此不需要编码地址偏移的冗余低阶比特。换句话说,位移因子字段262b
代替了旧版x86指令集8比特位移量。因而,以与x86指令集8比特位移量相同的方式编码位移因子字段262b(因此modrm/sib编码规则没有发生改变),仅有的例外是disp8被过载为disp8*n。换句话说,编码规则或编码长度没有发生改变,但仅在硬件对位移量值的解释中发生改变(这需要按存储器操作数的大小缩放位移量以便获得逐个字节的地址偏移)。
[0192][0193]
立即数字段272如先前所描述的操作。
[0194]
完全操作码字段——图3b
[0195]
图3b是阐释根据本发明的一种实施例构成完全操作码字段274的专用向量友好指令格式300的字段的框图。具体地,完全操作码字段274包括格式字段240、基操作字段242和数据元素宽度(w)字段264。基操作字段242包括前缀编码字段325、操作码映射字段315和实际操作码字段330。
[0196]
寄存器索引字段——图3c
[0197]
图3c是阐释根据本发明的一种实施例构成寄存器索引字段244的专用向量友好指令格式300的字段的框图。具体地,寄存器索引字段244包括rex字段305、rex’字段310、modr/m.reg字段344、modr/m.r/m字段346、vvvv字段320、xxx字段354和bbb字段356。
[0198]
增加操作字段——图3d
[0199]
图3d是阐释根据本发明的一种实施例构成增加操作字段250的专用向量友好指令格式300的字段的框图。在类(u)字段268包含0时,它表示evex.u0(类a 268a);在它包含1时,它表示evex.u1(类b 268b)。在u=0和mod字段342包含11(表示无存储器访问操作)时,α字段252(evex字节3,比特[7]

eh)被解释为rs字段252a。在rs字段252a包含1(舍入252a.1)时,β字段254(evex字节3,比特[6:4]-sss)被解释为舍入控制字段254a。舍入控制字段254a包括一比特sae字段256和二比特舍入操作字段258。在rs字段252a包含0(数据变换252a.)时,β字段254(evex字节3,比特[6:4]-sss)被解释为三比特数据变换字段254b。在u=0和mod字段342包含00、01或10(表示存储器访问操作)时,α字段252(evex字节3,比特[7]

eh)被解释为驱逐提示(eh)字段252b且β字段254(evex字节3,比特[6:4]-sss)被解释为三比特数据操纵字段254c。
[0200]
在u=1时,α字段252(evex字节3,比特[7]

eh)被解释为写掩码控制(z)字段252c。在u=1和mod字段342包含11(表示无存储器访问操作)时,β字段254的部分(evex字节3,比特[4]-s0)被解释为rl字段257a;在它包含1(舍入257a.1)时,β字段254的其余部分(evex字节3,比特[6-5]-s
2-1
)被解释为舍入操作字段259a,而在rl字段257a包含0(vsize 257.a2)时,β字段254的其余部分(evex字节3,比特[6-5]-s
2-1
)被解释为向量长度字段259b(evex字节3,比特[6-5]-l
1-0
)。在u=1和mod字段342包含00、01、或10(表示存储器访问操作)时,β字段254(evex字节3,比特[6:4]-sss)被解释为向量长度字段259b(evex字节3,比特[6-5]-l
1-0
)和广播字段257b(evex字节3,比特[4]-b)。
[0201]
一些附加点
[0202]
向量格式将寄存器的数量扩展到32(rex’)。
[0203]
非破坏性源寄存器编码(适用于三个和四个操作数语法):这是以指令语法的第一源操作数。它由记号法evex.vvvv表示。使用1s补码形式(反转形式)来编码这一字段,即zmm0被编码为1111b、zmm15被编码为0000b。注意,将源扩展至32寄存器需要evex中的额外
比特字段。
[0204]
evex.w定义用于某些指令的数据类型大小(32比特或64比特)。
[0205]
32扩展寄存器集编码:evex前缀提供附加的比特字段以便用下列专用比特字段针对每个源32编码寄存器:evex.r’和evex.v’(与evex.x一起,用于寄存器-寄存器格式)。
[0206]
simd前缀的压缩:旧版sse指令有效地将simd前缀(66h、f2h、f3h)用作操作码扩展字段。evex前缀编码允许这样的旧版sse指令使用512比特向量长度的功能能力。
[0207]
二字节和三字节操作码的压缩:近来引入的旧版sse指令采用二字节操作码和三字节操作码。一个或两个前导字节是:0fh和0fh 3ah/0fh38h。一字节转义(0fh)和二字节转义(0fh 3ah、0fh 38h)也可以被解释为操作码扩展字段。evex.mmm字段提供压缩以便允许无需恒定字节序列0fh、0fh 3ah、0fh 38h就编码多个旧版指令。
[0208]
示出向量友好指令格式的字段中的一些的相互关系的示例性流程图——图4a-4e
[0209]
图4a

4d阐释示出根据本发明的一种实施例的向量友好指令格式的字段中的一些的相互关系的流程图;而图4e是根据本发明的一种实施例的框415a-h中的每一个的分解图。在框400中,判断初始字段的值是否指示向量友好指令格式(例如,0x62)。如果不是,则控制转到框402,其中根据该指令集的其他格式中的一种来处理该指令。如果是,则控制转到框492。
[0210]
在框492,它判断类(u)字段的内容是否指示类a或类b指令模板。在类a的情况中,控制转到两个分离的框:框404a和490。否则,控制通过带圆圈的b转到图4c上的两个不同的框:框404b和框493。
[0211]
在框404a,判断修饰符字段的内容是指示无存储器访问操作还是指示存储器访问操作。在无存储器访问操作的情况中(例如,mod字段342=11),控制转到框406和408。在存储器访问操作的情况中(例如,mod字段342=00、01或10),控制转到框422、框430和框440a中的每一个(在图4b上通过带圆圈的a)。
[0212]
标记有α字段252的圆角盒包括框408和框422,这是因为它们表示α字段252的不同解释。具体地,框408表示将α字段252解释为rs字段252a,而框422表示将α字段252解释为驱逐提示字段252b。
[0213]
在框406,如图6a中所阐释的,使用寄存器索引字段244的内容。
[0214]
在框408,判断rs字段252a的内容是指示舍入类型操作(例如,rs字段252a=1)还是指示数据变换类型操作(例如,rs字段252a=0)。在前一种情况中,控制转到框410、框412a和框414中的每一个。在后一种情况中,控制转到框416。
[0215]
标记有β(舍入控制)字段254a的圆角盒包括框410和框412a。框410阐释关于sae字段256的内容(是否抑制浮点异常)的判断,而框412a阐释基于舍入操作字段258的内容的判断(辨别一组可能的舍入操作中的一个)。图7a中阐释了在框410和412a中作出的判断。
[0216]
框414、416、442、448、454、460、468和474全都阐释关于数据元素宽度(w)字段264的内容的判断。如图4中所阐释的,数据元素宽度字段264是图3a的专用向量友好指令格式300中的1比特字段。因而,这些框判决数据元素宽度是否64比特(例如,1)或32比特(例如,0)。对于框414,这一判决标记该流的这一分支的结束。相反,对于64比特和32比特数据元素宽度,控制分别从框416传到框418或框420。
[0217]
标记有β(数据变换)字段254b的圆角盒包括框418和框420两者;且因而表示其中β
字段254被解释为数据变换字段254b的情况。在框418和420,数据变换字段254b的内容被用来辨别要执行多种数据变换操作中的哪一种。图8a和图8b中分别示出用于框418和框420的可能的数据变换操作的组。
[0218]
在框422,驱逐提示字段252b的内容被用来辨别应当使用一组可能的驱逐提示选项中的哪一个。图4阐释使用来自专用向量友好指令格式300的1比特驱逐提示字段252b。具体地,驱逐提示选项是非时效性的的(1)和时效性的的(0)。这标记该流程图的这一分支的结束。
[0219]
在框430,如图6b中所指示那样使用寄存器索引字段244、比例字段260和位移量字段262a或位移因子字段262b的内容。这标记该流程图的这一分支的结束。
[0220]
在框440a,基操作字段242内容被用来辨别要执行一组不同的存储器访问操作中的哪一个。下表阐释根据本发明的一种实施例的一组受支持的存储器访问操作,以及用于每一操作的从框440a开始的控制流。本发明的备选实施例可以支持更多、更少或不同的存储器访问操作。
[0221]
存储器访问操作类型框加载/操作整数(load/op int)442加载/操作浮点(load/op fp)448加载整数(load int)454加载浮点(load fp)460存储整数(store int)468存储浮点(store fp)474加载图形(load gr)480加载经封装图形(load p.gr)482存储图形(store gr)484
[0222]
如先前所描述的,框442、448、454、460、468和474基于数据元素宽度判断控制流中的改变;下表中阐释控制流。
[0223]
[0224]
类似地,分别在图15a、15b和15c中阐释框480、482和484的判决。标记有β(数据操纵)字段254c的圆角盒包括框444a、446a、450a、452a、456、458、462、464、470、472、476、478、480、482和484;由此阐释数据操纵字段254c的内容辨别要执行一组可能的数据操纵操作中的哪一个。
[0225]
在框490,写掩码(k)字段270的内容和数据元素宽度(w)字段264的内容被用来确定操作中要使用的写掩码。图4阐释其中存在八个写掩码寄存器且寄存器000指示不应使用写掩码的实施例。在写掩码字段270的内容指示不同于000时,控制转到图16a-d。
[0226]
在框404b,判断修饰符字段的内容是指示无存储器访问操作还是指示存储器访问操作。在无存储器访问操作的情况中(例如,mod字段342=11),控制转到框406(在图4a上通过带圆圈的e)和495。在存储器访问操作的情况中(例如,mod字段342=00、01或10),控制转到框498、框430中的每一个(在图4a上通过带圆圈的d)和框440b(在图4d上通过带圆圈的c)。
[0227]
标记有β字段254的部分的圆角盒包括框495、框412b和框498,这是因为它们表示β字段254的部分的不同解释。具体地,框495表示将β字段254的部分解释为rl字段257a,而图4d上标记有广播字段257b的圆角盒表示将β字段254的这一部分解释为广播字段257b。
[0228]
在框495,判断rl字段257a的内容是指示舍入类型操作(例如,rl字段257a=1)还是指示向量长度类型操作(例如,rl字段257a=0)。在前一种情况中,控制转到框412b和框415a中的每一个。在后一种情况中,控制转到框498和框415b中的每一个。
[0229]
框412b阐释基于舍入操作字段259a的内容的判决(辨别一组可能的舍入操作中的一个)。图7b中阐释在框412b中作出的判决。
[0230]
框415a-h全都阐释关于对其操作的数据元素的宽度的判决。正如所阐释的,类b的受支持的数据元素(在u=1时)是64比特、32比特、16比特和8比特。稍后在此参考图4e描述执行这些框的示例性方式。框415a-b分别标记该流程图的这些分支的结束。对于415a,到16比特和8比特数据元素宽度的线条被示出为是虚的,这是因为在本发明的一种实施例中,这些不受支持;相反,如果不存在对16比特或8比特数据元素操作的类b的存储器访问类型操作,那么,预期rl字段257a的内容是0,且因而引起控制从框495流到框415b和498(换句话说,部分舍入是不可用的)。
[0231]
在框498,向量长度(ll)字段259b的内容被用来确定对其操作的向量的大小。图4阐释其中支持以下情形的实施例:1)128比特(00);2)256比特(01);512比特(10);同时保留(11)。已保留的11可以用于不同的目的、不同类型的指令或本发明的不同的实施例。例如,11可以用于下列示例性目的:1)指派1024比特的向量长度;或2)指派应当使用动态向量长度寄存器。不同的实施例可以不同地实现动态向量长度寄存器,包括被用来编码可由程序读取和写入的向量长度的特殊寄存器。动态向量长度寄存器存储将用于指令的向量长度的值。尽管不同的实施例可以通过动态向量长度寄存器支持多种不同的向量长度,但本发明的一种实施例支持128比特的倍数(例如,128、256、512、1024、2048

)。当存在一组充当动态向量长度寄存器的一个或多个寄存器时,本发明的不同实施例可以选自使用不同的技术的那些寄存器(例如,基于指令的类型)。
[0232]
在框440b,基操作字段242的内容被用来辨别要执行一组不同的存储器访问操作中的哪一个。下表阐释根据本发明的一种实施例的一组受支持的存储器访问操作,以及对
于每一个离开框440b的控制流。本发明的备选实施例可以支持更多、更少或不同的存储器访问操作。
[0233]
存储器访问操作类型框加载/操作整数(load/op int)415c加载/操作浮点(load/op fp)415d加载整数(load int)415e加载浮点(load fp)415f存储整数(store int)415g存储浮点(store fp)415h
[0234]
如先前所描述的,框415c-h基于数据元素宽度确定控制流中的改变;下表阐释该控制流。
[0235][0236][0237]
标记有广播字段257b的圆角盒包括框444b、446b、450b和452b;由此阐释广播字段257b的内容辨别是否执行广播操作。正如所阐释的,本发明的一种实施例允许广播(b)字段257b的内容选择是否对64比特和32比特的数据元素宽度执行广播操作,对16比特和8比特数据元素宽度,这不是选项;相反,如果存在对16比特或8比特数据元素操作的类b的存储器访问类型操作,那么,预期广播(b)字段257b的内容是0。
[0238]
在框493,α字段252的内容(写掩码控制(z)字段252c)、写掩码(k)字段270的内容和数据元素宽度的判断被用来确定要执行的写掩码操作(归并或归零)和该操作中要使用的写掩码。在本发明的一些实施例中,α字段252(预期写掩码控制(z字段252c)在执行存储的存储器访问操作上是零(对于零掩码)。以与框415相同的方式完成数据元素宽度的确定。图4阐释其中存在八个写掩码寄存器且寄存器000指示不应使用写掩码的实施例。在写掩码字段270的内容指示不同于000时,控制转到图16d-e。
[0239]
图4e是根据本发明的一种实施例的框415a-h中的每一个的分解图。具体地,阐释了表示用于框415a-h中的每一个的流的单个流415流。在框417a,实际操作码字段330的内容中的一些或全部被用来在两组数据元素宽度之间选择:第一组417a.1(例如,包括64比特和32比特)和第二组417a.2(例如,16比特和8比特)。尽管基于如框417b中所阐释的数据元素宽度(w)字段264为第一组417a.1确定数据元素宽度,但在第二组471a.2内,存在确定数据元素宽度的两种方式:417a.2.2(仅基于实际操作码字段330)和417a.2.1(基于如框417c中所阐释的数据元素宽度(w)字段264)。如图4中所阐释的,数据元素宽度字段264是图3a的专用向量友好指令格式300中的1比特字段。因而,这些框417b判决数据元素宽度是64比特(例如,1)还是32比特(例如,0);而框417c判决数据元素宽度是16比特(例如,1)还是8比特(例如,0)。尽管图4e阐释实际操作码字段417a涉及确定数据元素宽度,但备选实施例可以被实现为只使用w字段(例如,具有一比特w字段且仅支持两种数据元素大小;具有二比特w字段且支持四数据元素大小)。
[0240]
尽管已经参考图4描述了本发明的实施例,但备选实施例可以使用不同的流。例如,正如借助于框480、482和484所阐释的,仅支持一种数据元素宽度的操作不需要拥有数据元素宽度判决(例如,框442a)且不要求两个β字段判决(例如,框444a和446a);备选实施例可以对于所有这样的操作仅支持一种数据元素宽度、对于所有类型的操作支持两种数据元素宽度(这将要求关于加载图形、加载经封装图形和存储图形操作的数据元素宽度和额外β字段判决)、或对于其他操作中的一些不支持不同数据元素宽度(例如,对load/op操作不支持不同的数据元素宽度)。在相似的上下文中,备选实施例可以对于无存储器访问舍入类型操作和无存储器访问数据变换类型操作中的一个或多个不支持不同的数据元素宽度(在前一种情况中,框414和415a将不出现;在后一种情况中,框415b将不出现,而框416将不出现且框418和420将被合并)。作为另一示例,本发明的不同实施例可以不包括类(u)字段268且仅支持类a或b指令模板中的一个;可以包括sae字段256且不包括舍入操作字段258;可以不包括舍入操作字段259a;可以不包括驱逐提示字段252b;可以不包括类a和b指令模板中的任一个或两者的舍入类型操作;可以不包括数据变换类型操作;可以不包括无存储器访问205和存储器访问220中的任一个或两者的向量长度字段259b;仅支持load/op和加载操作中的一个或另一个;可以不包括掩码写字段270;可以不包括写掩码控制(z)字段252c;和/或可以不包括向量长度字段259(b)。
[0241]
示例性寄存器架构——图5
[0242]
图5是根据本发明的一种实施例的寄存器架构500的框图。在下面列出该寄存器架构的寄存器组和寄存器:
[0243]
向量寄存器组510——在所阐释的实施例中,存在512比特宽的32个向量寄存器;这些寄存器被称为zmm0到zmm31。低16zmm寄存器的低阶256比特被覆写在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆写在寄存器xmm0-15上。专用向量友好指令格式300如下表中所阐释的对这些已覆写的寄存器组操作。
[0244][0245]
换句话说,向量长度字段259b在最大长度和一个或多个其他较短长度之间选择,其中每一这样的较短长度是前述长度的一半长度;且不带有向量长度字段259b的指令模板对最大向量长度操作。进一步,在一种实施例中,专用向量友好指令格式300的类b指令模板对经封装或标量单精度/双精度浮点数据和经封装或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,高阶数据元素位置要么保持与在指令之前一样,要么被归零。
[0246]
写掩码寄存器515——在所阐释的实施例中,存在8个写掩码寄存器(k0到k7),每一个的大小是64比特。如先前所描述的,在本发明的一种实施例中,向量掩码寄存器k0不能被用作写掩码;在通常指示k0的编码被用于写掩码时,它选择硬布线的写掩码0xffff,这有效地禁止了该指令的写掩码。
[0247]
多媒体扩展控制状态寄存器(mxcsr)520——在所阐释的实施例中,这种32比特寄存器提供用于浮点操作的状态和控制比特。
[0248]
通用寄存器525——在所阐释的实施例中,存在与现有x86寻址模式一起使用以便寻址存储器操作数的十六个64比特通用寄存器。通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8到r15引用这些寄存器。
[0249]
扩展标志(eflags)寄存器530——在所阐释的实施例中,这种32比特寄存器被用来记录多个指令的结果。
[0250]
浮点控制字(fcw)寄存器540和浮点状态字(fsw)寄存器530——在所阐释的实施例中,这些寄存器由x87指令集扩展用来在fcw的情况中设置舍入模式、异常掩码和标志,且在fsw的情况中保持对异常的跟踪。
[0251]
标量浮点栈区寄存器组(x87栈区)545,其又称为mmx经封装整数平寄存器组550——在所阐释的实施例中,x87栈区是被用来使用x87指令集扩展对32/64/80比特浮点数据执行标量浮点操作的八元素栈区;而mmx寄存器被用来对64比特经封装整数数据执行操作,并保持用于在mmx和xmm寄存器之间执行的一些操作的操作数。
[0252]
片段寄存器555——在所阐释的实施例中,存在六个16比特寄存器,被用来存储用于分段地址生成的数据。
[0253]
rip寄存器565——在所阐释的实施例中,这是存储指令指针的64比特寄存器。
[0254]
本发明的备选实施例可以使用更宽或更窄的寄存器。另外,本发明的备选实施例可以使用更多、更少或不同的寄存器组和寄存器。
[0255]
寄存器索引字段、比例字段、位移量字段和位移因子字段流——图6a-6c
[0256]
修饰符字段=无存储器访问——图6a
[0257]
图6a是根据本发明的实施例的无存储器访问类型操作的寄存器索引字段244的流程图。图6a从椭圆600开始,椭圆600指示根据mod字段342(=11)正在执行寄存器到寄存器寻址。离开框600,控制转到框605。
[0258]
在框605,从寄存器索引字段244选择比特以便寻址寄存器。对于专用向量友好指令格式300,基于rex字段305、reg字段344、r/m字段346、vvvv字段320、xxx字段354和bbb字段356,带有扩展的现有x86指令集允许多种多样的不同的寄存器寻址选项。rex’字段310扩展这些选项。离开框605,控制转到框610。
[0259]
在框610,选择寄存器a(例如,zmm19)且控制转到框615。在框615,选择寄存器b(例如,zmm5)且控制可选地传到框620。在框625,选择寄存器c(例如,zmm7)。寄存器a可以是源操作数寄存器;寄存器b可以是源操作数寄存器、目的地操作数寄存器或源/目的地操作数寄存器;且寄存器c可以是源操作数寄存器、目的地操作数寄存器或源/目的地操作数。
[0260]
修饰符字段=存储器访问——图6b
[0261]
图6b是阐释根据本发明的实施例将寄存器索引字段244、比例字段260、位移量字段262a和位移因子字段262b用于存储器访问类型操作的流程图。图6b从椭圆630开始,椭圆630指示寄存器-存储器寻址(mod字段342=00、01或10)。离开630,控制转到框635。
[0262]
在框635,从寄存器索引字段选择各比特以便寻址寄存器,且控制转到框640。
[0263]
在框640,选择寄存器a(例如,zmm19)且控制可选地传到框645。在框645,选择寄存器b(例如,zmm31)且控制转到框650。在其中不使用框645的情况中,控制直接地从框640传到框650。
[0264]
在框650,rex字段305、rex’字段310、mod r/m字段340、sib字节350和位移量字段262a或位移因子字段262b的内容被用来寻址存储器;具体地,从rex字段305和sib字节350拉出索引和基,而从sib字节350拉出比例字段260的内容(ss字段352)。离开框650,控制转到框660。
[0265]
在框660,判断存储器访问模式(例如,基于mod字段342的内容)。在存储器访问模式是无位移量模式(mod字段342=00)时,控制转到框665,框665中如下生成地址:2
ss
*索引+基。
[0266]
在存储器访问模式是未经缩放位移量模式时(mod字段342=10),控制转到框670,框670中如下生成地址:2
ss
*索引+基+disp32。在其中存储器访问模式是经缩放位移量模式的情况中(mod字段342=01),控制转到框675,框675中如下生成地址:2
ss
*索引+基+经缩放位移量;其中经缩放位移量(disp8*n)=位移因子字段262b的内容乘以存储器访问大小(n),其中n依赖于完全操作码字段274(例如,基操作字段和/或数据元素宽度字段)和增加操作字段250(例如,类字段268和数据操纵字段254c、向量长度字段259b和/或广播字段257b)的内容。
[0267]
经缩放位移量

图6c
[0268]
图6c是阐释根据本发明的实施例在disp8、disp32和经缩放位移量的变化之间的差异的表。表的各列是:1)“字节”,其指示按字节递增的地址;2)“disp8字段”,这是被用来存储从-128到127的1字节字段;3)“disp32字段”,这是被用来存储从-2
31
到2
31-1的4字节字段;4)“disp32*n字段”,这是被用来存储从-128到127的1字节字段,该列具有带有“n=1”、“n=2”和“n=64”的子列。
[0269]“字节”列中的各行的值沿着该列向下增加。第二列、第三列和每一子列包括各行中加黑的圆,其用于可以由该字段生成的地址。值得注意的是,disp8字段、disp32字段和其中n=1具有用于每一字节的加黑的点,且这些字节的范围表示这些字段按字节粒度递增。相反,n=2列按两个字节递增,且因此仅具有用于在其范围内的每一其他字节的加黑的点;因而,与disp8字段相比,它具有较宽的范围但具有较粗的粒度,而在相同的时间它要求disp32字段的字节的四分之。n=64列按64字节递增,且因此仅具有用于在其范围内的每一第64个字节的加黑的点;因而,与disp8字段和n=2相比,它具有较宽的范围但具有较粗的粒度,而同时它同样要求disp32字段的字节的四分之一。
[0270]
舍入字段表

图7a-b
[0271]
图7a是阐释根据本发明的实施例可以由舍入控制字段254a指定的一组可能的操作的表。图7a示出包含β字段254的可能内容的第一列(该可能内容充当舍入控制字段254a且被分解成sae字段256和舍入操作字段258)。
[0272]
类似地,图7b是阐释根据本发明的实施例可以由舍入控制字段259a指定的一组可能的操作的表。在类b指令模板的情况中,不存在sae字段256,且浮点异常抑制总是活动的。
[0273]
注意,在其中一些指令已经允许静态地经由即时比特规定舍入模式的一种实施例中,即时比特比舍入模式操作字段258和259a优先。
[0274]
数据类型
[0275]
下表列出在此使用的一些示例性数据类型(其中的一些在微软下表列出在此使用的一些示例性数据类型(其中的一些在微软10中描述(参见微软数据转换规则(2010年8月17日)):
[0276][0277][0278]
unorm指示无符号归一化整数,这意味着对于n比特数,所有0意味着0.0f,且所有1意味着1.0f。表示从0.0f到1.0f均匀隔开的浮点值的序列,例如2比特unorm表示0.0f、1/3、2/3和1.0f。
[0279]
snorm指示有符号归一化整数,意味着对于n比特2的补数,最大值意味着1.0f(例如5比特值01111映射到1.0f),且最小值值意味着-1.0f(例如5比特值10000映射到-1.0f)。另外,第二最小值数映射到-1.0f(例如5比特值10001映射到-1.0f)。因而存在用于-1.0f的两种整数表示。存在用于0.0f的单个表示,以及用于1.0f的单个表示。这得到用于范围(-1.0f...0.0f)内的均匀隔开的浮点值的一组整数表示,且也得到用于范围(0.0f...1.0f)的数字的表示的补集。
[0280]
如先前所描述的,simd技术尤其适用于可以逻辑上将寄存器中的比特分割成多个固定/一定大小的数据元素(其中的每一个表示不同的值)的处理器。这种类型的数据被称为经封装数据类型或向量数据类型,且这种数据类型的操作数被称为经封装数据操作数或向量操作数。通常,向量操作数的数据元素属于相同的数据类型;给定数据元素的数据类型被称为数据元素数据类型。在所有数据元素的数据元素数据类型相同时,那么,向量操作数可以被称为属于该数据类型(例如,在向量操作数的所有数据元素都是32比特浮点数据元素数据类型的情况下,则向量操作数可以被称为32比特浮点向量操作数)。
[0281]
描述了支持单值数据元素数据类型和多值数据元素数据类型的本发明的实施例。单值数据元素数据类型在每一数据元素中存储单个值;在本发明的一些实施例中使用的单值数据元素数据类型的示例是32比特浮点、64比特浮点、32比特无符号整数、64比特无符号整数、32比特有符号整数和64比特有符号整数。多值数据元素数据类型在每一数据元素位置中存储其中包含多个值的分组;在本发明的一些实施例中使用的多值数据元素数据类型的示例是下面描述的经封装图形数据元素数据类型:
[0282]
unorm10a10b10c2d:三个unorm10值和一个unorm2值的32比特分组,从位于32b字段的最重要的比特的最后2b(10b)字段(例如,unorm2d[31-30]float 10c[29-20]float 10b[20-10]float 10a[9-0],其中d-a指定y插槽位置且前述名称/数字指示格式)开始。
[0283]
float11a11b10c:两个float11值和一个float10值的32比特分组,从位于于高阶比特的最后一个(例如,float 10c[31-22]float 11b[21-11]float 11a[10-0])开始。
[0284]
应注意,尽管上面的多值数据元素数据类型的分组中不同的值由不同数量的比特表示,但备选实施例可以具有不同的配置(例如,由不同的数量的比特的值表示的更多值,由相同数量的比特表示的所有值)。
[0285]
尽管描述了支持单值数据元素数据类型和多值数据元素数据类型两者的实施例,但备选实施例可以支持一个或另一个。另外,尽管描述了利用某些数据类型的本发明的实施例,但本发明的备选实施例可以利用更多、更少或不同的数据类型。
[0286]
数据变换字段表——图8a和8b
[0287]
图8a-8b是阐释根据本发明的实施例可以由数据变换字段指定的一组可能的数据变换操作的表。两个表中的第一列阐释数据变换字段254b的内容的可能值;第二列阐释函数,且第三列阐释用法。
[0288]
数据元素大小字段=64比特——图8a
[0289]
图8a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据变换字段指定的一组可能的数据变换操作的表。该表被称为64比特寄存器swizzupconv调序原语,且它代表框418。记号法:dcba指示形成源中的一个256比特块的64比特元素(’a’为最不重要且’d’为最重要),因此aaaa意味着源中的256比特块的最不重要的元素被复制到目的地中的相同的256比特块的所有四个元素;然后,对于源和目的地中的两个256比特块重复所叙述的模式。记号法’hgfe dcba’被用来指示完全源寄存器,其中’a’是最不重要的元素且’h’是最重要的元素。然而,由于每一256比特块对寄存器调序执行相同的置换,仅阐释了最不重要的块。
[0290]
数据元素大小字段=32比特——图8b
[0291]
图8b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据变换字
段指定的一组可能的数据变换操作的表。该表被称为32比特寄存器swizzupconv调序原语且它代表框420。记号法:dcba指示形成源中的一个128比特块的32比特元素(’a’为最不重要且’d’为最重要),因此aaaa意味着源中的128比特块的最不重要的元素被复制到目的地中的相同的128比特块的所有四个元素;然后,对源和目的地中的所有四个128比特块重复所叙述的模式。短语’ponm lkji hgfe dcba’被用来指示源寄存器,其中’a’是最不重要的元素且’p’是最重要的元素。然而,由于每一128比特块对寄存器调序执行相同的置换,仅示出最不重要的块。
[0292]
图8b集中了两个示例性操作以便进一步阐释图8a-8b中所示出的全部操作的含义:图9中阐释的叉乘调序815和图10a中阐释的跨越4元素分组820广播元素。
[0293]
示例性调序操作——图9
[0294]
图9是阐释根据本发明的实施例的叉乘调序815的框图。图9示出源操作数900和目的地操作数910,两者均为512比特宽且被分成连续128块(称为分组位置3-0),其中每一块被分成四个32比特数据元素(例如,源操作数900中的分组位置0的内容是d0 c0 b0 a0,而目的地操作数910中的分组位置0的内容是d0 a0 c0 b0。
[0295]
示例性广播操作——图10a-10c
[0296]
图10a是阐释根据本发明的实施例跨越4元素分组820广播元素的框图。图10a示出源操作数1000和目的地操作数1010,两者均为512比特宽且被分成连续的128块(称为分组位置3-0),其中每一框被分成四个32比特数据元素(例如,源操作数1000中的分组位置0的内容是d0 c0 b0a0,而目的地操作数1010中的分组位置0的内容是a0 a0 a0 a0;源操作数1000中的分组位置1的内容是d1 c1 b1 a1,而目的地操作数1010中的分组位置1的内容是a1 a1 a1 a1)。
[0297]
尽管图10a是用于无存储器访问操作的示例广播,但图10b-10c是用于存储器访问操作的示例广播。在源存储器操作数包含少于总数量的元素时,它可以广播(被重复)以便形成有效的源操作数的完全数量的元素(对于32比特指令是16,对于64比特指令是8)。图12a-12d中提及了这些类型的广播操作。存在两种广播粒度:
[0298]
1元素粒度,其中源存储器操作数的1个元素被广播16次,以便形成完全16元素有效源操作数(对于32比特指令),或广播8次以便形成完全8元素有效源操作数(对于64比特指令)。图10b是阐释根据本发明的实施例对于32比特数据元素宽度广播1元素粒度的框图。图12b中将该操作的示例标记为1210。图10b示出具有一个32比特数据元素(a0)的源自存储器的源操作数1020以及为512比特宽且包含十六个32比特数据元素的目的地操作数1030(目的地操作数1030中所有数据元素都是a0)。1元素广播可用于混合向量和标量源的指令,其中各源中的一个跨越不同的操作是通用的。
[0299]
4元素粒度,其中源存储器操作数的4元素广播4次,以便形成完全16元素有效源操作数(对于32比特指令),或广播2次,以便形成完全8元素有效源操作数(对于64比特指令)。图10c是阐释根据本发明的实施例对于32比特数据元素广播4元素粒度的框图。图12b中将该操作的示例标记为1220。图10c示出具有四个32比特数据元素(d0 c0 b0 a0)的源自存储器的源操作数1040以及为512比特宽且被分成连续的128块(称为分组位置3-0)的目的地操作数1050,其中每一块被分成四个32比特数据元素(例如,目的地操作数1050的分组位置3-0的每一个中的内容是d0 c0b0 a0)。在对经封装值(类似的色彩分量rgba)的数组执行计算
的场合,4到16广播对aos(结构的数组)源代码非常有用;在这种情况中,当存在跨越向量指令的不同操作时使用通用分组时,4到16是有益的(16元素向量被认为是每个有4元素的4个分组的数组)。
[0300]
基操作字段表——图11a和11b
[0301]
操作码映射字段——图11a
[0302]
图11a是阐释根据本发明的实施例可以由操作码映射字段指定的一组可能的操作码映射的表。第一列阐释操作码映射字段315的内容的可能的值;第二列暗示前导操作码字节,且第三列暗示是否出现即时。
[0303]
前缀编码字段——图11b
[0304]
图11b是阐释根据本发明的实施例可以由操作码映射字段指定的一组可能的前缀编码的表。第一列阐释前缀编码字段325的内容的可能的值;且第二列阐释该前缀的含义。
[0305]
数据操纵字段表——图12-15
[0306]
图12-15是阐释根据本发明的实施例的多组可能的数据操纵操作和广播操作的表,数据操纵操作和广播操作可以分别由数据操纵字段254c指定且对于图12a-d由广播字段257b指定。该表中的第一列阐释数据操纵字段254c的内容的可能的值;第二列阐释函数,且第三列阐释用法。
[0307]
用于load/op的数据操纵字段表——图12a-12d
[0308]
图12a-12d是阐释根据本发明的实施例的多组可能的数据操纵操作和广播操作的表,数据操纵操作和广播操作可以分别由用于load/op指令的数据操纵字段254c和广播字段257b指定。在图3a-d中的示例性专用向量友好指令格式的情况中,数据操纵字段254c是三比特字段且广播字段257b是一比特字段。在所阐释的实施例中,广播字段257b的内容在图12a-d中出现的表中前两行之间选择;换句话说,其内容在数据操纵字段254c中的000和001等效物之间选择。在图12a-d中使用仅包括该表的前两行的括号来阐释这一点。
[0309][0310]
图12a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c和广播字段257b指定为用于load/op int的一组可能的数据操纵操作的表。该表被称为64比特整数load-op swizzupconv
i64
(四字元)调序/转换原语,且它代表框444a和框444b。
[0311][0312]
图12b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c和广播字段257b指定为用于load/op int的一组可能的数据操纵操作的表。该表被称为32比特整数load-op swizzupconv
i32
调序/转换原语,且它代表框446a和框446b。
[0313][0314]
图12c是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c和广播字段257b指定为用于load/op fp的一组可能的数据操纵操作的表。该表被称为64比特浮点load-op swizzupconv
f64
调序/转换原语,且它代表框450a和框450b。
[0315]
[0316]
图12d是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c和广播字段257b指定为用于load/op fp的一组可能的数据操纵操作的表。该表被称为32比特浮点load-op swizzupconv
f32
调序/转换原语,且它代表框452a和框452b。
[0317]
用于加载的数据操纵字段表——图13a-13d
[0318]
图13a-13d是阐释根据本发明的实施例可以由数据操纵字段指定为用于加载指令的多组可能的数据操纵操作的表。
[0319]
加载整数且数据元素大小字段=64比特——图13a
[0320]
图13a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定为用于加载int的一组可能的数据操纵操作的表。
[0321]
该表被称为upconv
i64
,且它代表框456。
[0322][0323]
图13b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定为用于加载int的一组可能的数据操纵操作的表。
[0324]
该表被称为upconv
i32
,且它代表框458。
[0325][0326]
图13c是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定为用于load fp的一组可能的数据操纵操作的表。该表被称为upconv
f64
,且它代表框462。
[0327]
加载浮点且数据元素大小字段=32比特——图13d
[0328]
图13d是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定为用于load fp的一组可能的数据操纵操作的表。
[0329]
该表被称为upconv
f32
,且它代表框464。
[0330][0331]
在图13a-13d(load/op表)中的每一个中所指定的多组可能的数据操纵操作是相应的图12a-12d(加载表)中的那些的子集。具体地,各子集不包括广播操作。这样做是因为完全操作码字段274中的某些值(例如,指定聚集或广播操作的那些)不能与数据操纵字段254c中所指定的广播组合使用,且因而完全操作码字段274中的这样的值仅可以与图12a-12d(加载表)的加载一起使用。作为更具体的示例,如果完全操作码字段274中存在指定广播操作的值,则数据操纵字段254c不能也指示广播操作。尽管本发明的某些实施例包括带有单独的load/op和加载表的单独的load/op和加载操作,但备选实施例不需要具有这种强制机制(例如,它们可以仅支持load/op,它们可以仅支持加载,它们可以判断完全操作码字段274中的广播引起忽略数据操纵字段254c中的广播)。
[0332][0333]
图14a-14d是阐释根据本发明的实施例可以由数据操纵字段指定为用于存储指令的多组可能的数据操纵操作的表。
[0334][0335]
图14a是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字
段254c指定为用于存储整数(store int)的一组可能的数据操纵操作的表。该表被称为downconv
i64
,且它代表框470。
[0336][0337]
图14b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定为用于存储整数(store int)的一组可能的数据操纵操作的表。该表被称为downconv
i32
,且它代表框472。
[0338][0339]
图14c是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定为用于存储浮点数(store fp)的一组可能的数据操纵操作的表。该表被称为downconv
f64
,且它代表框476。
[0340][0341]
图14d是阐释根据本发明的实施例在数据元素宽度是64比特时可以由数据操纵字段254c指定为用于存储浮点数(store fp)的一组可能的数据操纵操作的表。该表被称为downconv
f32
,且它代表框478。
[0342]
用于图形数据类型的数据操纵字段表——图15a-15c
[0343]
图15a-15c是阐释根据本发明的实施例可以由数据操纵字段指定为用于对图形数据类型操作的指令的多组可能的数据操纵操作的表。
[0344][0345]
图15a是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定为用于加载图形的一组可能的数据操纵操作的表。
[0346]
该表被称为upconv
g32
,且它代表框480。
[0347][0348]
图15b是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定为用于加载经封装图形的一组可能的数据操纵操作的表。该表被称为upconv
pg32
,且它代表框482。
[0349][0350]
图15c是阐释根据本发明的实施例在数据元素宽度是32比特时可以由数据操纵字段254c指定为用于存储图形的一组可能的数据操纵操作的表。该表被称为upconv
g32
,且它代表框484。
[0351]
写掩码字段——图16a-d
[0352]
图16a-16b阐释根据本发明的实施例的借助于不同的写掩码和相同的第二源和目的地执行的两个归并操作。图16a是阐释根据本发明的实施例在数据元素宽度是32比特时并且在第二源和目的地是相同的时使用写掩码寄存器k1中的写掩码来归并的示例性操作1600的框图。图16a示出源操作数1605;源/目的地操作数1610;掩码寄存器k1的内容1615(低16比特包括一和零的混合);以及目的地操作数1620。掩码寄存器k1中的低16比特位置中的每一个对应于数据元素位置中的一个(k1[0]对应于数据元素位置0,k1[1]对应于数据元素位置1,等等)。对于目的地操作数1620中的每一数据元素位置,分别取决于掩码寄存器
k1中相应的比特位置是零还是1,它包含源/目的地1610中该数据元素位置的内容或操作(被阐释为添加)的结果。在其他实施例中,用第二源操作数代替源/目的地操作数1610。在那些实施例中,从在其中掩码寄存器k1的相应的比特位置是零(如果有的话)的数据元素位置的那些中的操作以前,目的地操作数1620包含目的地操作数1620的内容,且包含其中掩码寄存器k1的相应比特位置是1(如果有的话)的数据元素位置的那些中的操作的结果。
[0353]
如先前所描述的,本发明的一种实施例使用k0来指示不应当执行掩码。图16b阐释根据本发明的实施例在数据元素宽度是32比特时并且在第二源和目的地是相同的时使用全为1的硬布线的掩码来归并(硬布线的写掩码由指定写掩码寄存器k0的指令使用)的示例性操作1625的框图。除了用硬布线的掩码1630代替k1 1615且用目的地操作数1635代替目的地操作数1620之外,图16b与图16a相同。硬布线的掩码1630都是一,且因而目的地操作数1635包含表示操作的结果的数据元素。
[0354]
图16c是阐释根据本发明的实施例对于8、16、32和64比特数据元素宽度写掩码寄存器中的比特与512比特向量的数据元素位置的对应关系的框图。具体地,阐释了64比特寄存器k
n 1640,其中在数据元素宽度是8比特时使用了所有64比特,在数据元素宽度是16比特时仅使用了最不重要的32比特,在数据元素宽度是32比特时仅使用了最不重要的16比特,且在数据元素宽度是64比特时仅使用了最不重要的8比特。对于256比特向量,在数据元素宽度是8比特时仅使用了最不重要的32比特,在数据元素宽度是16比特时仅使用了最不重要的16比特,在数据元素宽度是32比特时仅使用了最不重要的8比特,且在数据元素宽度是64比特时仅使用了最不重要的4比特。对于128比特向量,在数据元素宽度是8比特时仅使用了最不重要的16比特,在数据元素宽度是16比特时仅使用了最不重要的8比特,在数据元素宽度是32比特时仅使用了最不重要的2比特,且在数据元素宽度是64比特时仅使用了最不重要的2比特。
[0355]
给定掩码寄存器的值可以作为向量比较指令的直接结果而建立、从gp寄存器传递或作为两个掩码之间的逻辑操作的直接结果而计算。
[0356]
图16d是阐释根据本发明的实施例在数据元素宽度是32比特时以及在第二源和目的地不同时使用写掩码寄存器k1中的写掩码来归并的示例性操作1660的框图。
[0357]
图16e是阐释根据本发明的实施例在数据元素宽度是32比特时以及在第二源和目的地不同时使用写掩码寄存器k1中的写掩码来归零的示例性操作1666的框图。尽管仅相对于在目的地不同于源时的操作阐释归零操作,但在第二源和目的地相同时归零也起作用。
[0358]
示例性模板和指令——图17-18
[0359]
提供下列记号法以便介绍图17-18。
[0360]
操作数记号法
[0361]
[0362][0363]
向量操作数值记号法
[0364][0365]
swizzupconv、fullupconv和downconv函数约定
[0366]
用于evex.u0的示例性指令编码——图17a-d
[0367]
图17a阐释根据本发明的实施例来自示例性专用向量友好指令格式的字段的子集。具体地,图17a示出evex前缀302、实际操作码字段330和mod r/m字段340。在这一实施例,格式字段240包含0x62以便指示该指令格式是向量友好指令格式。
[0368]
图17b-17d均阐释根据本发明的实施例来自以图17a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集。在图17b-17d的描述中,描述了一些字段的具体使用以便例示那些字段用于vaddps指令的各种示例性配置的可能编码。在图17b-17d的每一个中,格式字段240包含0x62以便指示以向量友好指令格式编码该指令且实际操作码字段330包含vaddps操作码。图17b-17d均阐释根据本发明的实施例的evex.u0类中的vaddps指令的编码;图17b和图17c均阐释无存储器访问205指令模板中的vaddps的exev.u0编码,而图17d阐释存储器访问220指令模板中的vaddps的evex.u0编码。vaddps指令将来自
第一寄存器或存储器操作数(例如zmm3)的经封装的单精度浮点值添加到第二寄存器(例如zmm2),并根据写掩码(例如k1)将结果存储在第三寄存器(例如zmm1)中。取决于指令的编码,这一指令允许各种舍入操作、数据变换操作或数据操纵操作。这一指令可以由下列指令助记符描述:evex.u0.nds.512.0f 58/r vaddps zmm1{k1},zmm2,s
f32
(zmm3/mv){eh}。
[0369]
图17b阐释无存储器访问、完全舍入控制类型操作210指令模板中的vaddps指令的编码。数据元素宽度字段264是0,以便指示32比特数据元素宽度。类字段268(即evex.u)被设定为0,以便指示evex.u0类。α字段252被解释为rs字段252a(即evex.rs)且被设定为1(即rs字段252a.1),以便选择舍入控制类型操作。由于α字段252充当rs字段252a.1,β字段254被解释为舍入操作字段258(即evex.r
2-0
)。具体地,evex.r2被解释为sae字段256,而evex.r
1-0
充当舍入控制字段254a。修饰符字段246(即modr/m.mod 342)被设定为11,以便指示无存储器访问(即寄存器zmm3是第一源操作数而不是存储器操作数)。
[0370]
图17c阐释无存储器访问、数据变换类型操作215指令模板中的vaddps指令的编码。除了α字段252和β字段254之外,图17c的编码与图17b相同。α字段252被解释为rs字段252a(即evex.rs)且被设定为0(即rs字段252a.2),以便选择数据变换类型操作。由于α字段252充当rs字段252a.2,β字段254被解释为数据变换字段254b(即evex.s2-0)。
[0371]
图17d阐释存储器访问220指令模板中的vaddps指令的编码。数据元素宽度字段264是0,以便指示32比特数据元素宽度。类字段268(即evex.u)被设定为0,以便指示evex.u0类。α字段252被解释为驱逐提示字段252b(即evex.eh)。β字段254被解释为数据操纵字段254c(即evex.s
2-0
)。修饰符字段246(即modr/m.mod 342)被设定为00、01或10,以便指示第一源操作数是存储器操作数;在图17d中这被示出为(即除了11之外的任何输入)。
[0372]
用于evex.u1的示例性指令编码——图18a-18f
[0373]
图18a阐释根据本发明的实施例来自示例性专用向量友好指令格式的字段的子集。具体地,图18a示出evex前缀302、实际操作码字段330和mod r/m字段340。在这一实施例,格式字段240包含0x62,以便指示该指令格式是向量友好指令格式。
[0374]
图18b-18f均阐释根据本发明的实施例来自以图18a的专用向量友好指令格式编码的示例性专用向量友好指令的字段的子集。在图18b-18f的描述中,描述了一些字段的具体使用以便例示那些字段用于vaddps指令的各种示例性配置的可能编码。在图18b-18f的每一个中,格式字段240包含0x62以便指示以向量友好指令格式编码该指令且实际操作码字段330包含vaddps操作码。图18b-18f均阐释根据本发明的实施例的evex.u1类中的vaddps指令的编码;图18b-18e均阐释无存储器访问205指令模板中的vaddps的exev.u1编码,而图18f阐释存储器访问220指令模板中的vaddps的evex.u1编码。
[0375]
图18b阐释无存储器访问、写掩码控制、部分舍入控制类型操作212指令模板中的vaddps指令的编码。数据元素宽度字段264是0,以便指示32比特数据元素宽度。类字段268(即evex.u)被设定为1,以便指示evex.u1类。α字段252被解释为写掩码控制字段252c(在归并或归零写掩码之间选择)。β字段254的最不重要的比特被解释为rl字段257a且被设定为1,以便指示部分舍入类型操作(即舍入257a.1)。β字段254的两个最重要的比特被解释为舍入操作字段259a。修饰符字段246(即modr/m.mod 342)被设定为11,以便指示无存储器访问(即寄存器zmm3是第一源操作数而不是存储器操作数)。在这种编码中,vaddps指令将来自第一寄存器(例如zmm3)的经封装单精度浮点值添加到第二寄存器(例如zmm2),并根据写掩
码(例如k1)将经舍入的结果存储到第三寄存器(例如zmm1)。这可以由下列助记符描述:用于归零写掩码的evex.u1.nds.512.0f.w0 58/r vaddps zmm1{k1}{z},zmm2,zmm3{er},且用于归并写掩码的不带有{z}的相同助记符。尽管这一部分中在下面示出的其他助记符全都包括{z},但应理解,不带有{z}的相同助记符类似地也是可能的。
[0376]
图18c-18e均阐释无存储器访问、写掩码控制、vsize类型操作217指令模板中的vaddps指令的编码。除了β字段之外,图18c-18e的编码与图17b相同。在图18c-18e中的每一个中,β字段254的最不重要的比特被解释为rl字段257a且被设定为0,以便指示vsize类型操作257a.2。β字段254的两个最重要的比特被解释为向量长度字段259b。
[0377]
在图18c中,向量长度字段259b被设定为10,以便指示512比特的向量大小。在图18d中,向量长度字段259b被设定为01,以便指示256比特的向量大小。在图18e中,向量长度字段259b被设定为00,以便指示128比特的向量大小。在这种编码中,vaddps指令将来自第一寄存器(例如zmm3)的经封装单精度浮点值添加到第二寄存器(例如zmm2),并根据写掩码(例如k1)将结果存储在第三寄存器(例如zmm1)中。图18c可以由下列助记符描述:evex.u1.nds.512.0f.w0 58/r vaddps zmm1{k1}{z},zmm2,zmm3。图18d可以由下列助记符描述:evex.u1.nds.256.0f.w0 58/r vaddps ymm1{k1}{z},ymm2,ymm3。图18e可以由下列助记符描述:evex.u1.nds.128.0f.w0 58/r vaddps xmm1{k1}{z},xmm2,xmm3。
[0378]
图18f阐释存储器访问、写掩码控制227指令模板中的vaddps指令的编码。数据元素宽度字段264是0,以便指示32比特数据元素宽度。类字段268(即evex.u)被设定为1,以便指示evex.u1类。α字段252被解释为写掩码控制字段252c(在归并或归零写掩码之间选择)。β字段254的最不重要的比特被解释为广播字段257b。β字段254的两个最重要的比特被解释为向量长度字段259b。修饰符字段246(即modr/m.mod342)被设定为00、01或10,以便指示第一源操作数是存储器操作数;在图18f中这被示出为11(即除了11之外的任何输入)。在这种编码中,vaddps指令将可以在加载时广播的、来自存储器操作数的经封装单精度浮点值添加到第一寄存器(例如zmm2),并根据写掩码(例如k1)将结果存储在第二寄存器(例如zmm1)。在向量长度字段指示512比特的向量时,这可以由下列助记符描述:evex.u1.nds.512.0f.w0 58/r vaddps zmm1{k1}{z},zmm2,b
32
(mv)。在向量长度字段指示256比特的向量时,这可以由下列助记符描述:evex.u1.nds.256.0f.w0 58/r vaddps ymm1{k1}{z},ymm2,b
32
(mv)。在向量长度字段指示128比特的向量时,这可以由下列助记符描述:evex.u1.nds.128.0f.w0 58/r vaddps xmm1{k1}{z},xmm2,b
32
(mv)。
[0379]
示例性偏移量8*n值
[0380]
在本发明的一种实施例中,取决于所使用的指令模板和下面描述的其他因素,基于基操作字段、数据元素宽度字段和增加操作字段中的两个或更多个的内容,确定存储器访问大小n。在本发明的一种实施例中,对于u=0(类a),下表示出存储器中所访问的向量(或元素)的大小,且类似地示出用于经压缩位移量的位移因子(disp8*n)。注意,一些指令以元素粒度而不是在存储器的级别的完全向量粒度工作,且因此应使用下表中的“元素级别”列。函数列的标签(例如,u/s
i64
)表示由基操作字段(例如,u/s
i
表示load int和load/op int)和数据元素宽度(例如,
64
是64比特数据元素宽度)指定的存储器访问类型。这一列中的值是图3的实施例中的数据操纵字段254c的可能的值。参见图4b,各种存储器访问类型被示出为(在一些情况中通过数据元素宽度判决)流动到它们的数据操纵图12a-15c;各种表
12a-15c驱动n的值的选择,且因而根据需要被放置在列2和3上。作为示例,load/op int 64比特数据元素宽度存储器访问操作流到图12a,在此处数据操纵字段254c的内容被用来选择数据操纵操作(如图12a中所述)和值n(如下面所指示的)两者。作为另一示例,load int 64比特数据元素宽度存储器访问操作(其指示基操作字段242中的广播)流到图13a,在此处数据操纵字段254c的内容被用来选择数据操纵操作(如图13a中所述,它不包括广播数据变换)和值n(如下面所指示)两者。因而,第二列用于其基操作字段242不指定广播或元素级别存储器访问的指令;第三列的第一子列用于其基操作字段242指定广播但是不指定元素级别存储器访问的指令;且第三列的第二子列用于其基操作字段242指定广播或元素级别存储器访问的指令。
[0381]
swizzleupconvert
i64
和upconvert
i64
[0382][0383]
swizzleupconvert
i32
和upconvert
i32
[0384]
[0385][0386]
swizzleupconvert
f64
和upconvert
f64
[0387][0388]
swizzleupconvert
f32
和upconvert
f32
[0389]
[0390][0391]
downconversion
i64
[0392][0393]
downconversion
i32
[0394][0395]
[0396]
downconversion
f64
[0397][0398]
downconversion
f32
[0399][0400][0401]
upconvert
g32
[0402][0403]
upconvert
pg32
[0404][0405][0406]
downconversion
g32
[0407][0408]
在本发明的一种实施例中,对于u=1(类b),通过结合存储器访问大小n来使用disp8,各种指令具有使用经压缩位移量的能力,对于不同类型的指令,基于以下来确定存储器访问大小n:向量长度(通过向量长度字段259b的内容来确定)、向量操作的类型以及是否正在执行广播(基操作字段242和/或广播字段257b的值)和数据元素宽度(通过如图4e中所描述的实际操作码字段330和/或数据元素宽度字段264的内容来确定)。通常,存储器访问大小n对应于存储器输入中的字节的数量(例如,在访问完全512比特存储器向量时是64)。在本发明的一种实施例中,下面的第一表解释下面的第二表中所使用的一些术语,且下面的第二表给出对于各种类型的指令的值n。下面各表中的元组是存储器中的经封装数据结构。
[0409]
[0410][0411]
[0412]
[0413][0414]
保存比特
[0415]
而且,在本发明的一些实施例中,不同的处理器或在处理器内的不同核心可以仅支持类a、仅支持类b或支持这两类。举例来说,预期用于通用计算的高性能通用乱序核心可以仅支持类b,预期主要用于图形和/或科学(吞吐量)计算核心可以仅支持类a,且预期用于两者的核心可以支持两者(当然,具有来自这两个类的模板和指令但不是来自这两个类的所有模板和指令的某种混合的核心落在本发明的范围内)。而且,单个处理器可以包括多个核心,其中的所有核心都支持相同的类或其中不同的核心支持不同的类。举例来说,在带有单独的图形和通用核心的处理器中,预期主要用于图形和/或科学计算的图形核心中的一个可以仅支持类a,而通用核心中的一个或多个可以是预期用于仅支持类b的通用计算的高性能通用乱序核心。不具有分离的图形核心的另一处理器可以包括支持类a和类b两者的一个或多个通用有序或乱序核心。当然,在本发明的不同的实施例中,来自一个类的特征也可以在其他类中实现。用高级语言编写的程序将被放置(例如,被即时编译或静态编译)在多种不同的可执行形式,包括:1)目标处理器所支持的用于执行的仅具有(各)类的指令的形式;或2)具有使用所有类的指令的不同组合编写的备选例程且具有基于当前执行代码的处理器所支持的指令选择例程以便执行的控制流代码的形式。
[0416][0417]
对于加载、广播和插入,本发明的一种实施例借助于基操作字段实现不同版本的广播,且因而不需要广播字段257b。对于字节/字操作,本发明的一种实施例不支持带有广播字段257b的广播,这是因为支持这种特征的硬件成本当前不合理。对于聚集(这是一种类型的加载),本发明的一种实施例借助于基操作字段实现不同版本的广播,且因而不需要广播字段257b。对于分散、提取和存储,一种实施例不支持带有广播字段257b的广播,这是因为这些类型的指令具有寄存器源(不是存储器源)和存储器目的地,且仅在存储器是源时广播才是有意义的。聚集指令的掩码是完成掩码;且因而归并写掩码操作是当前所期望的操作。对存储、分散或提取执行归零写掩码将归零存储器中的位置——这是通常不使用向量存储、分散或提取的操作。作为比较,在本发明的一种实施例中,归零写掩码将是不正常的,这是由于如果比较结果是否定的(例如,在平等比较的情况中所比较的两个元素不相等)则比较已经写0,且因而可以干扰如何解释比较结果。
[0418]
示例性流水线——图19-22
[0419]
图19-22是阐释根据本发明的实施例在四个示例性处理器流水线的不同阶段中利用图2a中的指令模板的哪些字段的框图。应注意,在所要求的理解水平上,所阐释的流水线阶段和它们的函数是公知的。图19-22中的每一个包括a、b和c图,a、b和c图分别阐释无存储器访问、完全舍入控制类型操作210指令模板;无存储器访问、数据变换类型操作215指令模板;以及存储器访问225/230指令模板。尽管图19-22中的每一个示出不同的示例性流水线,但在a-c图的每一个中对于每一图号示出相同的流水线。例如,图19a示出无存储器访问、完全舍入控制类型操作210指令模板和第一示例性指令流水线;图19b示出无存储器访问数据变换类型操作215以及与图19a中相同的示例性流水线;而图20a示出无存储器访问、完全舍入类型控制操作210指令模板和第二示例性处理器流水线。
[0420]
图19-22分别阐释处理器流水线1900、处理器流水线2000、处理器流水线2100和处理器流水线2200。跨越不同的示例性流水线,流水线阶段名称是相同的,为便于理解使用了相同的标号;然而,这不暗示跨越不同的示例性流水线的相同名称的流水线阶段是相同的,只是它们执行相似的操作(但它可以包括更多或更少的子操作)。
[0421]
示例性普通流水线——图19
[0422]
处理器流水线1900表示普通处理器流水线,且因而它包括提取阶段1910、解码阶段1920、寄存器读/存储器读阶段1930、数据变换阶段1940、执行阶段1950和回写/存储器写阶段1960。
[0423]
括号和从指令模板到处理器流水线阶段的带箭头线条阐释由流水线阶段中的不
同阶段所利用的字段。例如,在图19a中,所有字段均被解码阶段1920利用;寄存器索引字段244被寄存器读/存储器读阶段1930利用;基操作字段292、rs字段252a(舍入252a.1)、sae字段256、舍入操作字段258和数据元素宽度字段264被执行阶段1950利用;数据元素宽度字段264也被回写/写存储器阶段1960利用;并且写掩码字段270被执行阶段1950或回写/存储器写阶段1960使用(可选地在两个不同的阶段中使用写掩码字段270表示,写掩码字段可以禁止在执行阶段1950中对已掩码数据元素的操作的执行(由此阻止在写/存储器写阶段1960中更新那些数据元素位置),或者执行阶段1950可以执行该操作,且在写/存储器写阶段1960期间应用写掩码,以便防止已掩码数据元素位置的更新)。
[0424]
应注意,带箭头的线条并不必定表示由不同的字段利用的仅有阶段,而是表示该字段将可能具有最大影响的场合。如在a和b图之间,应注意,主要差异在于:增加操作字段250被执行阶段1950用于舍入操作;增加操作字段250被数据变换阶段1940用于数据变换类型操作;且从数据元素宽度字段264到执行阶段1950的线条被移动到数据变换阶段1940。图19c示出基操作字段242替代地去往寄存器读/存储器读阶段1930;增加操作字段250的eh字段252b被寄存器读/存储器读阶段1930利用;比例字段260、位移量字段262a/位移因子字段262b、写掩码字段270和数据元素宽度字段264可选地被寄存器读/存储器读阶段1930或回写/存储器写1960利用,这取决于它是存储器读操作还是存储器写操作。由于流水线阶段将利用立即数字段272是公知的,为了不模糊本发明,不表示用于该字段的映射。
[0425]
示例性有序流水线——图20
[0426]
处理器流水线2000表示有序处理器流水线,且具有与处理器流水线1900相同的已命名流水线阶段,但在提取阶段1910和解码阶段1920之间插入长度解码阶段2012。
[0427]
图20a-20c的映射图19a-19c中的那些基本相同。
[0428]
第一示例性乱序流水线——图21
[0429]
处理器流水线2100表示具有与处理器流水线2000相同的已命名流水线阶段的第一示例性乱序流水线,但也具有以下:1)在解码阶段1920和寄存器读/存储器读阶段1930之间插入的分配阶段2122、重命名阶段2124和调度阶段2126;以及2)在写回/存储器写阶段1960之后添加的重新排序缓冲器(rob)读阶段2162、异常处理阶段2164和提交阶段2166。
[0430]
在图21a-21c中,各映射通常与图20a-20c中的映射相同,但有以下例外:1)寄存器索引字段244和修饰符字段246被重命名阶段2124利用;2)仅在图21a中,写掩码字段270也可选地被异常处理阶段2164用来在已掩码数据元素位置上抑制异常;以及3)仅在图21a中,取决于将在何处抑制浮点异常,sae字段256可选地被执行阶段1950和异常处理阶段2164使用。
[0431]
第二示例性乱序流水线——图22
[0432]
处理器流水线2200表示与处理器流水线2100相同的已命名流水线阶段的第二示例性乱序流水线,但有以下例外:数据变换和执行阶段已经被合并,以便形成执行/数据变换阶段2245。
[0433]
图22a-22c中的映射与图21a-21c中的那些基本相同,但有以下例外:分离地去往数据变换阶段1940和执行阶段1950的映射替代地去往执行/数据变换阶段2245。
[0434]
示例性流水线上的类b指令模板
[0435]
下表阐释根据本发明的实施例如何修改图19-22以便容纳图2b中的指令模板的字
段。
[0436][0437]
解码阶段1920
[0438]
各种不同的公知的解码单元可以被用于解码阶段1920。例如,解码单元可以将每一宏指令解码单个宽的微指令。作为另一示例,解码单元可以将一些宏指令解码成单个宽的微指令,但将其他宏指令解码成多个宽的微指令。作为尤其适用于乱序处理器流水线的另一示例,解码单元可以将每一宏指令解码成一个或多个微操作,其中可以乱序发起每一微操作且乱序执行。
[0439]
还应注意,解码单元可以被实现为带有一个或多个解码器,且每一解码器可以被实现为可编程逻辑阵列(pla),如本领域中公知的。作为示例,给定的解码单元可以:1)具有
将不同的宏指令引导到不同的解码器的导引逻辑;2)可以解码指令集的子集(但该子集以外的由第二、第三和第四解码器解码)且每次生成两个微码的第一解码器;3)均可以仅解码整个指令集的子集且每次生成仅一个微码的第二、第三和第四解码器;4)可以仅解码整个指令集的子集且每次生成四个微码的微定序器rom;以及5)确定将谁的输出提供给微操作队列的由解码器和微定序器rom馈入的多路复用逻辑。解码器单元的其他实施例可以具有解码更多或更少的指令和指令子集的更多或更少的解码器。例如,一种实施例可以具有均可以每次生成两个微操作的第二、第三和第四解码器;且可以包括每次生成八个微操作的微定序器rom。
[0440]
示例性处理器架构——图23-24
[0441]
示例性有序处理器架构——图23a-23b
[0442]
图23a-b阐释示例性有序处理器架构的框图。这一示例性实施例是围绕增加了宽向量处理器(vpu)的有序cpu核心的多个例示而设计的。取决于确切的应用,各核心通过高带宽互连网络与某种固定功能逻辑、存储器i/o接口以及其他必要的i/o逻辑通信。例如,这一实施例作为独立gpu的实现将通常包括pcie总线。
[0443]
图23a是根据本发明的实施例的单个cpu核心的框图,以及它到片上互连网络2302的连接和它的2级(l2)高速缓存2304的本地子集。指令解码器2300支持带有包括专用向量指令格式300的扩展的x86指令集。尽管在本发明的一种实施例中,(为了简化设计)标量单元2308和向量单元2310使用不同的寄存器集(分别是标量寄存器2312和向量寄存器2314),并且将在它们之间传输的数据写到存储器且然后从1级(l1)高速缓存2306读回,但本发明的备选实施例可以使用不同的方法(例如,使用单个寄存器集或包括允许在两个寄存器组之间传递数据而无需写回和读回的通信路径)。
[0444]
l1高速缓存2306允许低延迟访问将存储器高速缓存成标量和向量单元。连同以向量友好指令格式的加载操作指令一起,这意味着l1高速缓存2306可以在某种程度上被看作是类似于扩展寄存器组。这显著地改善多种算法尤其是带有驱逐提示字段252b的算法的性能。
[0445]
l2高速缓存2304的本地子集是分割成分离的本地子集(每个cpu核心一个子集)的全局l2高速缓存的部分。每一cpu具有到其自己的l2高速缓存2304的本地子集的直接访问路径。cpu核心读取的数据被存储在其l2高速缓存子集2304中且可以快速地访问,与其他cpu访问它们自己的本地l2高速缓存子集并行进行。cpu核心写入的数据被存储在其自己的l2高速缓存子集2304中且如果必要的话从其他子集清除掉。环状网络确保共享数据的相干性。
[0446]
图23b是根据本发明的实施例的图23a中的cpu核心的部分的分解图。图23b包括l1高速缓存2304的l1数据高速缓存2306a部分,以及关于向量单元2310和向量寄存器2314的更多细节。具体地,向量单元2310是16比特宽的向量处理单元(vpu)(参见16比特宽的alu 2328),其执行整数、单精度浮点数和双精度浮点数指令。vpu借助于调序单元2320支持调序寄存器输入、借助于数字转换单元2322a-b支持数字转换以及借助于复制单元2324支持对存储器输入的复制。写掩码寄存器2326允许推断所得到的向量写入。
[0447]
可以以各种方式调序寄存器数据,例如以便支持矩阵乘法。可以跨越vpu通道复制来自存储器的数据。这是图形和非图形并行数据处理两者中的通用操作,它显著地增加高
速缓存效率。
[0448]
环状网络是双向的,以便允许诸如cpu核心、l2高速缓存及其他逻辑块等的代理在芯片内相互通信。每一环状数据路径是每个方向512比特宽。
[0449]
示例性乱序架构——图24
[0450]
图24是阐释根据本发明的实施例的示例性乱序架构的框图。具体地,图24阐释已经被修改为合并向量友好指令格式及其执行的公知的示例性乱序架构。在图24中,箭头指示在两个或更多个单元之间的耦合,且箭头的方向指示在那些单元之间的数据流的方向。图24包括被耦合到执行引擎单元2410和存储器单元2415的前端单元2405;执行引擎单元2410还被耦合到存储器单元2415。
[0451]
前端单元2405包括被耦合到2级(l2)分支预测单元2422的1级(l1)分支预测单元2420。l1和l2分支预测单元2420和2422被耦合到l1指令高速缓存单元2424。l1指令高速缓存单元2424被耦合到指令转换后备缓冲器(tlb)2426,指令转换后备缓冲器(tlb)2426还被耦合到指令提取和预解码单元2428。指令提取和预解码单元2428被耦合到指令队列单元2430,指令队列单元2430还被耦合解码单元2432。解码单元2432包括复杂解码器单元2434和三个简单解码器单元2436、2438和2440。解码单元2432包括微代码rom单元2442。解码单元2432可以如先前上面在解码阶段部分所描述那样操作。l1指令高速缓存单元2424还被耦合到存储器单元2415中的l2高速缓存单元2448。指令tlb单元2426还被耦合到存储器单元2415中的二级tlb单元2446。解码单元2432、微代码rom单元2442和循环流检测器单元2444均被耦合到执行引擎单元2410中的重命名/分配器单元2456。
[0452]
执行引擎单元2410包括被耦合到隐退单元2474和统一调度程序单元2458的重命名/分配器单元2456。隐退单元2474还被耦合到执行单元2460且包括重新排序缓冲器单元2478。统一调度程序单元2458还被耦合到物理寄存器组单元2476,物理寄存器组单元2476被耦合到执行单元2460。物理寄存器组单元2476包括向量寄存器单元2477a、写掩码寄存器单元2477b和标量寄存器单元2477c;这些寄存器单元可以提供向量寄存器510、向量掩码寄存器515和通用寄存器525;且物理寄存器组单元2476可以包括未示出的附加寄存器组(例如,在mmx上别名为经封装整数平坦的寄存器组550的标量浮点栈区寄存器组545)。执行单元2460包括三个混合的标量和向量单元2462、2464和2472;加载单元2466;存储地址单元2468;存储数据单元2470。加载单元2466、存储地址单元2468和存储数据单元2470还分别进一步被耦合到存储器单元2415中的数据tlb单元2452。
[0453]
存储器单元2415包括二级tlb单元2446,二级tlb单元2446是被耦合到数据tlb单元2452。数据tlb单元2452被耦合到l1数据高速缓存单元2454。l1数据高速缓存单元2454还被耦合到l2高速缓存单元2448。在一些实施例中,l2高速缓存单元2448还被耦合到在存储器单元2415中和/或在存储器单元2415外的l3和更高的高速缓存单元2450。
[0454]
作为示例,示例性乱序架构可以如下实现进程流水线2200:1)指令提取和预解码单元2428执行提取阶段1910和长度解码阶段2012;2)解码单元2432执行解码阶段1920;3)重命名/分配器单元2456执行分配阶段2122和重命名阶段2124;4)统一调度程序2458执行调度阶段2126;5)物理寄存器组单元2476、重新排序缓冲器单元2478和存储器单元2415执行寄存器读/存储器读阶段1930;执行单元2460执行执行/数据变换阶段2245;6)存储器单元2415和重新排序缓冲器单元2478执行回写/存储器写阶段1960;7)隐退单元2474执行rob
读2162阶段;8)在异常处理阶段2164中可以涉及各种单元;以及9)隐退单元2474和物理寄存器组单元2476执行提交阶段2166。
[0455]
示例性单核心和多核心处理器——图29
[0456]
图29是根据本发明的实施例带有集成的存储器控制器和图形的单核心处理器和多核心处理器2900的框图。图29中的实线盒阐释带有单个核心2902a、系统代理2910、一组一个或多个总线控制器单元2916的处理器2900,而可选增加的虚线盒阐释带有多个核心2902a-n、系统代理单元2910中的一组一个或多个集成的存储器控制器单元2914和集成的图形逻辑2908的备选处理器2900。
[0457]
存储器分层包括在核心内的一个或多个级别的高速缓存、一组或一个或多个共享的高速缓存单元2906和耦合至一组集成的存储器控制器单元2914的外部存储器(未示出)。一组共享的高速缓存单元2906可以包括一个或多个中级高速缓存,例如2级(l2)、3级(l3)、4级(l4)或其他级别的高速缓存、末级高速缓存(llc)和/或其组合。尽管在一种实施例中基于互连单元2912的环互连集成的图形逻辑2908、一组共享的高速缓存单元2906和系统代理单元2910,但备选实施例可以将任何数量的公知技术用来互连这样的单元。
[0458]
在一些实施例中,核心2902a-n中的一个或多个能够被多线程化。系统代理2910包括协调和操作核心2902a-n的那些组件。系统代理单元2910可以包括例如功率控制单元(pcu)和显示单元。pcu可以是用于调节核心2902a-n和集成的图形逻辑2908的功率状态所需要的逻辑和组件或包括这样的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
[0459]
在架构和/或指令集方面,核心2902a-n可以是同质或异质的。例如,核心2902a-n中的一些可以是有序的(例如,类似于图23a和23b中所示出的)而其他是乱序的(例如,类似于图24中所示出的)。作为另一示例,核心2902a-n中的两个或更多个能够执行相同的指令集,而其他仅能够执行该指令集的子集或不同的指令集。各核心中的至少一个能够执行在此描述的向量友好指令格式。
[0460]
处理器可以是通用处理器,例如核心
tm
i3、i5、i7、2duo和quad、xeon
tm
或安腾处理器,这些处理器可从加利福尼亚州圣克拉拉市英特尔公司商购。替代地,处理器可以来自另一公司。处理器可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等。处理器可以在一个或多个芯片上实现。处理器2900可以是利用诸如例如bicmos、cmos或nmos之类的多种工艺技术中的任何一种工艺技术的一个或多个基片的部分和/或可以在其上实现。
[0461]
示例性计算机系统和处理器——图25-28
[0462]
图25-27是适于包括处理器2900的示例性系统,而图28是可以包括核心2902中的一个或多个的示例性片上系统(soc)。本领域中已知用于膝上型计算机、台式机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝式电话、便携式媒体播放器、手持式和各种其他电子设备的其他系统设计和配置也是合适的。通常,能够合并在此公开的处理器和/或其他执行逻辑的多种多样的系统或电子设备往往是适用的。
[0463]
现在参见图25,所示出的是根据本发明的一种实施例的系统2500的框图。系统2500可以包括一个或多个处理器2510、2515,它们被耦合到图形存储器控制器中枢(gmch)
2520。在图25中用虚线指示附加处理器2515的可选属性。
[0464]
每一处理器2510、2515可以是某种版本的处理器2900。然而,应注意,集成图形逻辑和集成存储器控制单元存在于处理器2510、2515中是不太可能的。
[0465]
图25阐释gmch 2520可以被耦合到存储器2540,存储器2540可以是例如动态随机存取存储器(dram)。对于至少一种实施例,dram可以与非易失性高速缓存相关联。
[0466]
gmch 2520可以是芯片组或芯片组的部分。gmch 2520可以与处理器2510、2515通信并控制在处理器2510、2515和存储器2540之间的交互。gmch 2520也可以充当在处理器2510、2515和系统2500的其他元件之间的加速总线接口。对于至少一种实施例,gmch 2520经由诸如前端总线(fsb)2595等的多点总线与处理器2510、2515通信。
[0467]
此外,gmch 2520被耦合到显示器2545(例如平板显示器)。gmch2520可以包括集成图形加速器。gmch 2520还被耦合到输入/输出(i/o)控制器中枢(ich)2550,输入/输出(i/o)控制器中枢(ich)2550可以被用来将各种外围设备耦合到系统2500。例如在图25的实施例中示出的是外部图形设备2560以及另一外围设备2570,外部图形设备2560可以是被耦合到ich 2550的单独的图形设备。
[0468]
替代地,附加的或不同的处理器也可以出现在系统2500中。例如,附加处理器2515可以包括与处理器2510相同的附加处理器、对处理器2510来说是异质或非对称的附加处理器、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器。在包括架构特性、微架构特性、热消耗特性、功率消耗特性等等的品质指标谱(spectrum of metrics of merit)方面,在物理资源2510、2515之间可以存在各种差异。这些差异可以有效地表明它们本身在处理元件2510、2515当中的非对称性和多机种性。对于至少一种实施例,各种处理元件2510、2515可以驻留在相同的芯片封装中。
[0469]
现在参见图26,所示出的是根据本发明的实施例的第二系统2600的框图。如图26中所示出的,多处理器系统2600是点对点互连系统,且包括经由点对点互连2650耦合的第一处理器2670和第二处理器2680。如图26中所示出的,处理器2670和2680中的每一个可以是某种版本的处理器2900。
[0470]
备选地,处理器2670、2680中的一个或多个可以是不同于处理器的元件,例如加速器或现场可编程门阵列。
[0471]
尽管被示出为仅带有两个处理器2670、2680,但应理解,本发明的范围不限于此。在其他实施例中,一个或多个附加处理元件可以出现在给定的处理器中。
[0472]
处理器2670可以还包括集成的存储器控制器中枢(imc)2672和点对点(p-p)接口2676和2678。类似地,第二处理器2680可以包括imc 2682和p-p接口2686和2688。处理器2670、2680可以使用ptp接口电路2678、2688经由点对点(ptp)接口2650交换数据。如图26中所示出,imc 2672和2682将处理器耦合到各自的存储器,即存储器2632和存储器2634,存储器2642和存储器2644可以是本地附加到各自的处理器的主存储器的部分。
[0473]
处理器2670、2680均可以使用点对点接口电路2676、2694、2686、2698经由单独的p-p接口2652、2654与芯片组2690交换数据。芯片组2690也可以经由高性能图形接口2639与高性能图形电路2638交换数据。
[0474]
共享的高速缓存(未示出)可以被包括在任一处理器中,或者在两个处理器外但经由p-p互连与各处理器连接,以使得如果处理器被置于低功率模式则处理器中的任一个或
两者的本地高速缓存信息可以被存储在共享的高速缓存中。
[0475]
芯片组2690可以经由接口2696耦合到第一总线2616。在一种实施例中,第一总线2616可以是外围组件互连(pci)总线,或诸如pci express总线或另一第三代i/o互连总线等的总线,尽管本发明的范围不限于此。
[0476]
如图26中所示出,各种i/o设备2614可以被耦合到第一总线2616以及总线桥2618,总线桥2618将第一总线2616耦合到第二总线2620。在一种实施例中,第二总线2620可以是低针数(lpc)总线。在一种实施例中,各种设备可以被耦合到第二总线2620,这些设备包括例如键盘/鼠标2622、通信设备2626和诸如盘驱动器或其他大容量存储设备等的数据存储单元2628,数据存储单元2628可以包括代码2630。进一步,音频i/o 2624可以被耦合到第二总线2620。注意,其他架构是可能的。例如,代替图26的点对点架构,系统可以实现多点总线或其他这样的架构。
[0477]
现在参见图27,所示出的是根据本发明的实施例的第三系统2700的框图。图26和27中类似的元件带有类似的标号;且图27中已经忽略图26的某些方面,以便避免模糊图27的其他方面。
[0478]
图27阐释处理元件2670、2680分别可以包括集成存储器和i/o控制逻辑(“cl”)2672和2682。对于至少一种实施例,cl 2672、2682可以包括存储器控制器中枢逻辑(imc),例如以上结合图29和26所描述的。另外,cl 2672、2682也可以包括i/o控制逻辑。图27阐释不仅是存储器2632、2634被耦合到cl 2672、2682,i/o设备2714也被耦合到控制逻辑2672、2682。旧版i/o设备2715被耦合到芯片组2690。
[0479]
现在参见图28,所示出的是根据本发明的实施例的soc 2800的框图。图29中类似的元件带有类似的标号。而且,虚线盒是关于更多高级的soc的可选特征。在图28中,互连单元2802被耦合到:包括一组一个或多个核心2902a-n和共享高速缓存单元2906的应用处理器2810;系统代理单元2910;总线控制器单元2916;集成存储器控制器单元2914;一组或一个或多个媒体处理器2820,它可以包括集成图形逻辑2908、用于提供静态图像和/或摄像机功能性的图像处理器2824、用于提供硬件音频加速的音频处理器2826以及用于提供视频编码/解码加速的视频处理器2828;静态随机存取存储器(sram)单元2830;直接存储器访问(dma)单元2832;以及用于耦合到一个或多个外部显示器的显示单元2840。
[0480]
在此公开的机制的实施例可以用硬件、软件、固件或这样的实现方法的组合实现。本发明的实施例可以被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元素)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
[0481]
诸如图26中所阐释的代码2630等的程序代码可以被应用到输入数据以执行在此描述的函数并生成输出信息。输出信息可以用已知的方式被应用到一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器等的处理器的任何系统。
[0482]
程序代码可以用高级过程语言或面向对象编程语言实现以便与处理系统通信。如果期望的话,程序代码也可以用汇编语言或机器语言实现。事实上,在此描述的机制不限于任何特定编程语言的范围。在任何情况中,语言可以是编译语言或解释语言。
[0483]
至少一种实施例的一个或多个方面可以由被存储在机器可读介质上的代表性指
令实现,代表性指令表示在处理器内的各种逻辑,这些逻辑在由机器读取时引起机器组合逻辑执行在此描述的技术。被称为“ip核心”的这样的表示可以被存储在有形的机器可读介质上并被提供给各种顾客或制造性设备以便加载到实际上构成逻辑或处理器的制造机器。
[0484]
这样的机器可读存储介质可以包括而不限于由机器或设备制造或形成的制品的非瞬态有形排列,包括诸如以下的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘(紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw))和磁-光盘),半导体设备例如只读存储器(rom)、诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)等的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪速存储器、电可擦除可编程只读存储器(eeprom),磁卡或光卡,或适用于存储电子指令的任何其他类型介质。
[0485]
因此,本发明的实施例也包括包含指令向量友好指令格式或包含诸如硬件描述语言(hdl)等的定义在此描述的结构、电路、装置、处理器和/或系统特征的设计数据的非瞬态有形机器可读介质。这样的实施例也可以被称为程序产品。
[0486]
在一些情况中,指令转换器可以被用来将指令从源指令集转换到目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、拟态、模拟或以另外方式将指令转换成要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合实现。指令转换器可以是在处理器上、处理器之外或部分在处理器上且部分在处理器之外。
[0487]
图30是对比根据本发明的实施例使用软件指令转换器来将源指令集的二进制指令转换成目标指令集的二进制指令的框图。在所阐释的实施例中,指令转换器是软件指令转换器,但替代地指令转换器可以用软件、固件、硬件或其各种组合实现。图30示出可以使用x86编译器3004来编译高级语言3002的程序以便生成x86二进制代码3006,x86二进制代码3006可以由带有至少一个x86指令集核心3016的处理器原生地执行(假设所编译的指令中的一些是以向量友好指令格式的)。带有至少一个x86指令集核心3016的处理器表示满足以下的任何处理器:通过兼容地执行或以另外方式处理(1)英特尔x86指令集核心的指令集的很大一部分或(2)目标是在带有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,该处理器可以执行与带有至少一个x86指令集核心的英特尔处理器基本相同的功能,以便取得与带有至少一个x86指令集核心的英特尔处理器基本相同的结果。x86编译器3004表示可操作为生成x86二进制代码3006(例如,目标代码)的编译器,x86二进制代码3006可以借助于或无需附加的联动装置处理在带有至少一个x86指令集核心3016的处理器上执行。类似地,图30示出可以使用替代的指令集编译器3008来编译高级语言3002的程序以便生成替代的指令集二进制代码3010,该替代的指令集二进制代码3010可以由不带有至少一个x86指令集核心3014的处理器(例如,带有执行加利福尼亚州桑尼维尔市mips technologies的mips指令集的核心和/或执行加利福利亚州桑尼维尔市的arm holdings的arm指令集的核心的处理器)原生地执行。指令转换器3012被用来将x86二进制代码3006转换成可以由不带有x86指令集核心3014的处理器原生地执行的代码。这种经转换的代码不可能与替代的指令集二进制代码3010相同,这是因为能够这样做的指令转换器是难以制作的;然而,经转换的代码将完成一般操作且由来自备选指令集的指令构成。因而,指令转换器3012表示通过模拟、仿真或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码3006的软件、固件、硬件或其组合。
[0488]
在此公开的向量友好指令格式的指令的某些操作可以由硬件组件执行,且可以用机器可执行指令实现,该机器可执行指令被用来引起或至少得到用执行操作的指令编程的电路或其他硬件组件。仅作为几个例子,电路可以包括通用或专用处理器或逻辑电路。操作也可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可以包括响应于机器指令或从机器指令导出的、存储指令所指定的结果操作数的一个或多个控制信号的特定的或具体的电路或其他逻辑。例如,在此公开的指令的实施例可以在图25-28的一个或多个系统中执行,且向量友好指令格式的指令的实施例可以被存储在要在系统中执行的程序代码中。另外,这些图的处理元件可以利用在此详述的详尽的流水线和/或架构(例如,有序和乱序架构)中的一种。例如,有序架构的解码单元可以解码指令、将经解码的指令传送给向量或标量单元等等。
[0489]
以上描述旨在阐释本发明的优选实施例。从上面的讨论上明显看出,尤其是在成长迅速且难以预见进一步的改进的这样的技术领域中,可以由本领域中的技术人员在不偏离在所附权利要求和它们的等效物的范围内的本发明的原理的前提下对本发明的排列和细节进行修改。例如,可以组合或进一步分割方法的一个或多个操作。
[0490]
备选实施例
[0491]
尽管已经描述了将原生地执行向量友好指令格式的实施例,但本发明的备选实施例可以通过在执行不同的指令集(例如,执行加利福尼亚州桑尼维尔市mips technologies的mips指令集的处理器,执行加利福利亚州桑尼维尔市的arm holdings的arm指令集的处理器)的处理器上运行的模拟层来执行向量友好指令格式。而且,尽管各图中的流程图示出由本发明的某些实施例执行的操作的具体次序,但应理解,这样的次序是示例性(例如,备选实施例可以以不同的次序执行操作、组合某些操作、重叠某些操作等等)。
[0492]
在上面的描述中,出于解释的目的,已经陈述了众多具体细节以便提供对本发明的实施例的透彻理解。然而,本领域中的技术人员将明显看出,无须这些具体细节中的一些就可以实践一个或多个其他实施例。提供具体的实施例不是为了限制本发明而是为了阐释本发明的实施例。本发明的范围不应由上面提供的特定示例确定而应仅由所附权利要求书确定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1