在大寄存器空间中利用累加的向量乘法

文档序号:6534133阅读:174来源:国知局
在大寄存器空间中利用累加的向量乘法
【专利摘要】描述了一种装置,该装置具有指令执行流水线,指令执行流水线具有用于支持向量相乘相加指令的向量功能单元。该向量相乘相加指令将两个向量的相应K位元素相乘并且在X位累加器中将它们相应的乘积中的每一个的一部分与另一个相应的输入操作数累加,其中X大于K。
【专利说明】在大寄存器空间中利用累加的向量乘法 【背景技术】 【技术领域】
[0001] 本发明一般地涉及计算科学,更具体地涉及用于在大寄存器空间中利用累加的向 量乘法的装置和方法。
[000引【背景技术】
[0003] 图1示出了在半导体芯片上用逻辑电路实现的处理核100的高级图。该处理核包 括流水线101。该流水线由各自被设计成在完全执行程序代码指令所需的多步骤过程中执 行特定步骤的多个级组成。该些级通常至少包括:1)指令取出和解码;2)数据取出;3)执 行;4)写回。执行级对由在先前级(例如在上述步骤1))中所取出和解码的指令所标识并 在另一先前级(例如在上述步骤2))中被取出的数据执行由在先前级(例如在上述步骤 1))中取出和解码的指令所标识的特定操作。被操作的数据通常是从(通用)寄存器存储 空间102中取出的。在该操作完成时所创建的新数据通常也被"写回"寄存器存储空间(例 如在上述级4))。
[0004] 与执行级相关联的逻辑电路通常由多个"执行单元"或"功能单元"103_1至103_ N构成,该些单元各自被设计成执行其自身的唯一操作子集(例如,第一功能单元执行整数 数学操作,第二功能单元执行浮点指令,第H功能单元执行从高速缓存/存储器的加载操 作和/或到高速缓存/存储器的存储操作等等)。由所有该些功能单元执行的所有操作的 集合与处理核100所支持的"指令集"相对应。
[0005] 计算机科学领域中广泛认可两种类型的处理器架构;"标量"和"向量"。标量处理 器被设计成执行对单个数据集进行操作的指令,而向量处理器被设计成执行对多个数据集 进行操作的指令。图2A和2B呈现了展示标量处理器与向量处理器之间的基本差异的比较 示例。
[0006] 图2A示出标量AND (与)指令的示例,其中单个操作数集A和B -起进行"与"运 算W产生奇异(或"标量")结果C(即,AB = Od相反,图2B示出向量AND指令的示例,其 中两个操作数集A/B和D/E并行地分别一起进行"与"运算W同时产生向量结果C和F(即, A. AND. B = C W及D. AND. E =巧。根据术语学,"向量"是具有多个"元素"的数据元素。例 女口,向量V = Q,R,S,T,U具有五个不同的元素;Q、R、S、T和U。示例性向量V的"尺寸"是 5 (因为它具有5个元素)。
[0007] 图1还示出向量寄存器空间104的存在,该向量寄存器空间104不同于通用寄存 器空间102。具体而言,通用寄存器空间102标准地用于存储标量值。该样,当各执行单元中 的任一个执行标量操作时,它们标准地使用从通用寄存器存储空间102调用的操作数(并 将结果写回通用寄存器存储空间102)。相反,当各执行单元中的任一个执行向量操作时,它 们标准地使用从向量寄存器空间107调用的操作数(并将结果写回向量寄存器空间107)。 可类似地分配存储器的不同区域W存储标量值和向量值。
[0008] 还应注意,存在位于功能单元103_1到103_N的相应输入处的掩码逻辑104_1到 104_N,W及位于功能单元1〇3_1到103_N的相应输出处的掩码逻辑105_1到105_N。在各 种实现中,实际上仅实现该些层中的一个层一不过该并非严格要求。对于采用掩码的任 何指令,输入掩码逻辑1〇4_1到104_N和/或输出掩码逻辑105_1到105_N可用于控制哪些 元素被该向量指令有效地操作。在此,从掩码寄存器空间106读取掩码向量(例如与从向 量寄存器存储空间107读取的输入数据向量一起),并将该掩码向量呈现给掩码逻辑104、 105层中的至少一层。
[0009] 在执行向量程序代码的过程中,每一向量指令无需要求全数据字。例如,一些指令 的输入向量可能仅仅是8个元素,其他指令的输入向量可能是16个元素,其他指令的输入 向量可能是32个元素,等等。因此,掩码层104/105用于标识完整向量数据字中的应用于 特定指令的一组元素,W在多个指令之间实现不同的向量尺寸。通常,对于每一向量指令, 掩码寄存器空间106中所保持的特定掩码模式被该指令调出,从掩码寄存器空间中被取出 并且被提供给掩码层104/105中的任一者或两者,启用"针对该特定向量操作的正确元 素集合。
[0010] 图3示出在基础10系统内的标准"教科书"乘法过程。如在图3中看到的,被乘 数301中的每个数字与乘数302中每个数字相乘W形成部分乘积的数组303。每个部分乘 积与其相应的乘数数字的位置对齐。对齐的部分积项相加在一起W产生乘法结果304。
[0011] 注意,存在进位项305。不仅在部分乘积项相加而产生最终结果时,而且作为确定 每个部分乘积项本身的一部分,产生进位项305_1至305_5。例如,在部分乘积相加期间产 生进位项305_1,但是进位项305_2至305_4中的每一个是在确定特定的部分乘积时生成 的。
[0012] 为了执行乘法操作,嵌入在半导体芯片上的处理核本质上执行与上面讨论的乘法 过程类似的数学操作。具体地,生成部分乘积项,并且部分乘积项相加W产生最后结果。然 而,在向量指令的情况下,进位项可能存在问题。
[0013] 例如,需要识别并考虑任何生成进位项的任何"特定逻辑电路"可能变得尺寸很 大,因为对于处理器支持的每个最大向量尺寸元素,可能需要该样的逻辑电路。处理器的非 向量"整数"执行逻辑可被设计成使用特殊"标记"和对应的标记电路W处理进位项。然而, 由于整数操作本质上是标量操作,因此仅需要实现该种电路的一个实例。
[0014] 因此,支持整数和向量指令的处理器的常见处理器设计点是为整数指令而非向量 指令设计特殊的标记电路(或至少标记电路的受限版本用于向量指令)。在没有标记电路 及其对进位项的相应支持的情况下,处理器的向量指令执行逻辑的设计者面临通过一些其 它技术解决他们的向量乘法指令执行逻辑中的进位项的困难。
[0015] 附图简述
[0016] 本发明是通过示例说明的,而不仅局限于各个附图的图示,在附图中,类似的参考 标号表示类似的元件,其中:
[0017] 图1 (现有技术)示出指令处理流水线;
[001引图(现有技术)2a和化涉及向量处理;
[0019] 图3(现有技术)示出教科书乘法的示例;
[0020] 图4a示出通过在大于乘数和被乘数数字尺寸的寄存器空间中累加相加的值来解 决进位项的过程。
[0021] 图4b示出图4a的过程的示例;
[0022] 图4c示出用于与图4b进行对比的教科书乘法的示例;
[0023] 图4d示出可执行图4b的示例性方法的指令序列;
[0024] 图4e示出用于将结果乘法的基础系统转换成被乘数和乘数的原始基础系统的示 例性过程;
[002引 图5a示出用于VMULTA孤LO指令的执行单元逻辑电路的实施例;
[0026] 图化示出用于VMULTA孤HI指令的执行单元逻辑电路的实施例;
[0027] 图5c示出整数乘数的设计再次用于VMULTA孤LO和VMULTA孤HI指令;
[0028] 图6A例示了示例性AVX指令格式;
[0029] 图6B示出来自图6A的哪些字段构成完整操作码字段和基础操作字段;
[0030] 图6C示出来自图6A的哪些字段构成寄存器索引字段;
[0031] 图7A-7B是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的 框图;
[003引图8A-8D是示出根据本发明的实施例的示例性专用向量友好指令格式的框图。
[0033] 图9是根据本发明的一个实施例的寄存器架构的框图;
[0034] 图IOA是示出根据本发明的实施例的示例性有序流水线W及示例性寄存器重命 名的无序发布/执行流水线两者的框图;
[0035] 图IOB是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例 性实施例和示例性的寄存器重命名的无序发布/执行架构核的框图;
[0036] 图IlA-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑 块之一(包括相同类型和/或不同类型的其他核);
[0037] 图12是根据本发明的实施例的可具有超过一个的核、可具有集成的存储器控制 器、并且可具有集成图形的处理器的框图;
[003引图13是根据本发明的实施例的示例性系统的框图;
[0039] 图14是根据本发明的实施例的第一更具体的示例性系统的框图;
[0040] 图15是根据本发明的实施例的第二更具体的示例性系统的框图;
[0041] 图16是根据本发明的实施例的SoC的框图;
[0042] 图17是根据本发明的实施例的对比使用软件指令变换器将源指令集中的二进制 指令变换成目标指令集中的二进制指令的框图。
[0043] 详细描述
[0044] 本说明书公开了通过在宽度比部分乘积项中表达的数字大的寄存器中累加相加 的部分乘积项来执行向量乘法的技术。因为和被写入到较大的寄存器,所W在传统实现中 产生需要利用特定进位逻辑处理的"进位项"的超过数字尺寸的任何求和结果自然地扩展 到附加的寄存器空间。如此,对于向量乘法操作,不需要实现通常用于整数操作的诸如标记 逻辑和标记处理逻辑之类的特定进位逻辑。可在具有能完全消耗寄存器尺寸的数字尺寸的 基础系统中表达向量乘法技术的原始被乘数和乘数操作数。如此,可在乘法操作之前进行 将输入操作数从其原始较高的基础系统转换成由较小数字表征的较低基础系统的转换过 程。随后可将乘法的结果转换会原始基础系统。
[0045] 图4a描述用于执行乘法的过程,该过程通过使部分乘积项的和强制累加在比能 得到和序列的最大数字数量大的寄存器尺寸中。因为寄存器尺寸大于求和结果的尺寸,所 W寄存器内有"空间"存储来自加法的任何进位。
[0046] 参照图4a,在乘法之前执行转换过程,401,W将被乘数和乘数有效地转换成较低 的基础系统,W便产生比将存储由他们确定和的寄存器尺寸小的数字。
[0047] 然后确定部分乘积项,其相应的数字对齐并相加成结果,其中保持结果中的每个 数字的寄存器尺寸大于给定被乘数和乘数的相应尺寸的情况下可能的最大数字尺寸,402。 由于结果中数字的尺寸可扩展超过源自最初转换401的数字的尺寸,所W可将部分乘积之 和的最后结果有效地表达在与转换过程401将乘数和被乘数转换到的特定基础系统不同 的基础系统中。
[0048] 更具体地,可利用基值表达结果,该基值在乘数和被乘数的原始形式和经转换形 式的相应基值之间。例如,如果乘数和被乘数最初被表达为基数(radix)64(即264或64位 数字)且转换过程401将乘数和被乘数转换成基数52 (即252或52位数字),则乘法402 的结果可被表达为基数m(即2m或m位数字),其中64〉m乂2。
[0049] 如此,执行另一个转换过程403, W将乘法结果转换成在最初转换过程401之前原 始表达被乘数和乘数的基础系统。
[0050] 图4b示出W上刚刚参考图4a讨论的过程的示例。图4b的特定示例进一步被W 下更详细讨论的图4c和4d所支持。图4b至4d的特定示例涉及一种系统,其中被乘数和 乘数最初被表达为基数64形式且在最初的转换401中被转换成基数52形式。本领域的技 术人员显而易见的是本文的教示可扩展到任何基础系统。
[0051] 参考图4b,被乘数404_1和乘数405_1各自最初可利用相应的向量表示,其中该向 量的每个元素对应于乘数或被乘数的不同64位数字。
[0052] 再次作为示例,转换过程406然后转换乘数和被乘数,使得她们各自利用52位数 字404_2和405_2来表示。在该种情况下,作为转换过程的一部分,乘数和被乘数中的任一 个或两者的数字的数量(即,向量尺寸)可增加(尽管在转换过程的任一侧上数值不变)。 例如,如图4b所观察到的,最初的被乘数404_1被表达为H元素向量,且最初的乘数405_1 被表达为二元素向量。观察到转换过程406将被乘数404_1转换成四元素向量404_2,且将 乘数405_1转换成H元素向量405_2。
[0053] 此处,注意经转换的操作数404_2、405_2的每个数字描述左侧字段0 (例如,左侧 字段407)。该代表性特征旨在描述从原始操作数404_1、405_1中的64位数字至经转换的操 作数404_2、405_2中的52位数字。值得注意的是,用于包含经转换的操作数404_2、405_2 的物理硬件仍"足够宽保持64位数字。因此,每个经转换的52位数字在左侧附加有12 个零的字段。换句话说,经转换的向量404_2、405_2的每个元素是包含52位数字(在其左 侧附加12个打包零)的64位元素。
[0054] 然后,将W其新的"52位数字格式"表示的被乘数和乘数404_2、405_2进行相乘 408。在图4b的示例中,因为两个52位数字的乘法可产生104位结果,且下层硬件仅支持 64位向量元素尺寸,因此将两种不同的向量指令类型(VPMULADDL0和VPMULADDHI)用于单 独提供部分乘积项的"较低阶"的52位和部分乘积项的"较高阶"的52位。
[00巧]该里,参考图4c,图4c示出经转换的被乘数404_2和乘数405_2的部分乘积的标 准教科书形式。注意,部分乘积项考虑两个52位数字的乘法能得到104位数字的事实。因 此,例如,a' O和b' O数字420的部分乘积消耗两个向量元素位置420_1、420_2,( "HI"和 "LO")每个位置支持52位和12个左侧打包零。
[0056] 因此,第一类型的指令(VPMULA孤LO)用于确定部分乘积项420的较低的向量元素 420_1,且第二类型的指令(VPMULADDHI)用于确定部分乘积的较高的向量元素420_2。本 质上,VPMULADDL0返回104位结果a' OX b' 0的较低52位,且VPMULADDHI返回104位结果 a' OX b' 0的较高52位。可设计其它实施例,其中通过指令计算和累加的乘法的较高和较低 部分是除上半部分和下半部分W外的某些东西。
[0057] 返回图4b,注意部分乘积项的单个数字被重新安排,W利用VPMULADD指令的向量 操作和"打包"操作数W便消耗较少的总指令。尽管如此,当与图4c的教科书相比时,贯穿 特定数字(向量元素)位置的和是正确的。例如,图4b的和421_1将与图4c的和421_2 相同的部分乘积数字相加。
[005引为了利用VPMULADD指令的向量操作,注意,可在VPMULADD指令执行之前执行广播 指令,W便产生其操作数中的一个。图4d示出图4b的示例性乘法的指令级表示。此处,利 用指令430执行64位数字被乘数和乘数操作数404_1、405_1至52位数字操作数404_2、 405_2的转换406。由于本领域的普通技术人员易于实现将数字从一个基础系统转换到另 一个的数学执行,所W在本讨论中没有提供特定指令的示例。
[0059] 在转换后,将新格式化的52位数字操作数404_2、405_2存储在向量寄存器Rl (其 存储被乘数501_2)中和向量寄存器R2(其存储乘数502_2)中。还形成一向量并将其存储 在R3中,该向量的尺寸至少等于乘法结果的最大尺寸且其元素均为0。此处,迭代计数i被 设为i = 0作为初始条件。然后执行第一广播指令(VBR0ADCAST),其在R2 (即b' 0)中提取 乘数的最低阶元素,并在被乘数404_2的向量尺寸上复制它。在该种情况下,被乘数404_2 具有四个元素。因此,第一 VBR0ADCAST指令431在R4中返回具有b'O的四个复本作为其 四个最低阶向量元素位置的向量。
[0060] 随后分别执行VPMULADDL0指令432和VPMULADDHI指令434,其中每个指令接受 Rl、R3和R4的内容作为其输入操作数。在图4d的特定实施例中,VPMULA孤LO和VPMULA孤HI 指令是"相乘累加(multiply accumulate)"指令。因此,指令不仅执行向量乘法,而且执行 向量加法。图5a示出VPMULADDL0执行单元的逻辑设计的实施例,且图化示出VPMULADDHI 执行单元的逻辑设计的实施例。
[0061] 每个执行单元包括乘法器和加法器的阵列,其中阵列内的每个个体乘法器和加法 器能够从两个输入向量的相同位置元素操作,但每个乘法器和加法器从不同的向量元素位 置操作。为了简化,图5a和化仅示出一个向量元素位置的乘法器501和相应加法器502。
[0062] 如图5a所观察到的,用于保持给予乘法器501的每个输入操作数的寄存器空间的 尺寸是X位(例如,64位)。然而,该些位中的最大值K(例如,52位)位由乘法器在执行 乘法时使用,其中K<X。注意,用于保持每个输入操作数的寄存器空间可用于保持除当前描 述的向量操作W外的向量操作的其它向量的元素,其中寄存器空间的最大宽度X(例如,64 位)可用于输入操作数数据。该些其它向量操作可由除图5a和图化的执行逻辑电路W外 的执行逻辑电路来执行。可在其中实现图5a和图化的执行逻辑电路的执行单元W外的流 水线的执行单元内实现用于执行其它向量操作的执行逻辑电路。因此,其它执行逻辑/执 行单元支持具有比图5a和化的逻辑电路所使用的输入操作数的基础系统高的基础系统中 表达的输入操作数的向量操作。
[0063] 乘法的真实结果的最大尺寸是L = 2K位。如图5a所观察到的,用于特定向量元 素位置的VPMULADDL0指令的执行逻辑提取乘法结果的较低Q (例如,52位)位并将该些位 馈送至加法器的一个输入。第H输入操作数相应地被提供给加法器的第二输入。该里,第 H输入向量操作数对应于第H输入向量操作数的相应元素。
[0064] 在图5a和化的特定实施例中,由加法器502执行的加法操作的结果被存储"回" 提供第H (加法)输入操作数的相同寄存器中。因此,在该特定实施例中,VPMULA孤LO和 VPMULADDHI指令具有一种指令格式,其支持输入操作数"源"寄存器和结果"目的地"寄存 器两者作为同一寄存器的定义。
[0065] VPMULADDHI指令的执行类似于VPMULADDL0指令的执行,但乘法结果的较高Q位被 馈送到乘法器的相应加法器。
[0066] 返回图4d,VPMULADDL0指令432的最初执行在R3中提供保持在R4中的b' 0与 a'3至a'0的乘法的较低52位。
[0067] 因此,参考图4b,部分乘积项440的集合可被看作W下中的任一个;i) VPMULA孤LO 指令432的相应乘法器的输出或ii)在最初的VPMULADDL0指令432的执行完成之后R3的 内容。R3的内容正式表示在图4b的数据结构441中。如在W下的讨论中更清楚地,R3相 当于在乘法序列的过程中收集部分乘积项的部分和的累加器。
[0068] 参照图4山然后将R4的内容向左移位433 -个向量元素位置W设置VPMULADDHI 指令的输入操作数的正确对齐。然后在434执行VPMULADDHI指令。图4b的数据结构442 示出在最初的VPMULADDHI指令434的执行过程中乘法器输出结果。
[0069] VPMULADDHI指令434的加法操作将R3的内容(即,先前的VPMULADDL0指令432 的结果)相加,并将加法的结果存储"回"R3。因此,参考图4b的数据结构441,R3现在保 持;i)在最低阶元素444中的部分乘积项443 ;ii)在第二至最低阶元素447中的部分乘积 项445和446的和;iii)在元素450中的部分乘积项448和449的和;iv)在元素453中的 部分乘积项451和452的和。
[0070] 然后对于每个接下来的i,重复图4d的指令431至434的指令模式,直到乘法完成 (在i = 3迭代完成后)。随着每次迭代的每次完成(即,每个VPMULADDHI指令的完成), 在R3中累加求和的对齐部分乘积。
[0071] 注意,在R3内的求和和相应累加期间,R3的元素中的任一个的数字尺寸可能超过 52位。因为在该示例中利用支持64位元素尺寸的向量的硬件实现R3,因此在R3的每个元 素中有足够的空间容纳数字尺寸的扩展。
[0072] 最后,因为R3中累加的值的数字尺寸在乘法完成后已经扩展到大于52的值,所W 在乘法完成后R3中表示的基础系统可能不再是基数52。因此,执行从R3的结果基础系统 向原始基数64的转换435。
[0073] 图4e示出用于将乘法结果转换成被乘数和乘数的原始基础系统的流程的示例。 根据图4e的过程,假设被乘数和乘数的原始基础系统是基数M系统(即,2M或M个数字)。 在W上参考图4b和4d讨论的示例中,M = 64。根据图4e的过程,标识乘法结果中的数字 的最大数字尺寸,460。在实施例中,该通过标识乘法结果中的所有数字的最高有效位"1"的 位位置来执行。如图4所观察到的,最大数字尺寸被保持为变量K。因此,例如,如果图4b 和4d的示例的乘法结果中的数字中的最高有效位位于第55位位置,则K = 55。
[0074] 变量TEMP被设置为值0,作为初始条件461。将TEMP的值加到乘法结果中的下一 最低阶数字的值(对于最初迭代,其对应于乘法结果中的最低阶数字),462。TEMP的值然 后被除W 2M,且余数保持在变量V中,463。V的值被保留/识别为原始(2M)基础系统的下 一最低阶数字(对于最初的迭代,它再次对应于乘法结果中的最低阶数字),464。然后,再 次计算TEMP的值作为TEMP/(2M),465,并且对于乘法结果中的每个接下来的数字迭代地重 复该过程,直到已经处理乘法结果中的每个数字。
[00巧]参考图5a和化,需要指出;所描述的源目的地(SourceDest)、源1和源2寄存器 中的任一个可W是;i)处理核的向量寄存器空间中的寄存器;ii)向执行单元预先设定操 作数的指令流水线的操作数获取级内的寄存器;或iii)执行单元的"前端"处的寄存器(例 女口,其从指令执行流水线的指令获取级接收输入操作数)。
[0076] 图5c示出图5a和化的执行单元的乘法器501的设计可与处理核的指令执行流 水线550的整数(与向量不同)执行单元内的乘法器的设计基本相同,否则等同于该设计。 在该里,如本领域所已知的,可按浮点格式执行整数处理。根据一种常见的方法,浮点格式 的尾数是53位。因此,为了支持整数浮点乘法操作,在指令执行流水线550中存在整数执 行单元551,该整数执行单元禪合到整数寄存器空间552或W其他方式接收来自整数寄存 器空间552的操作数并且包含53位乘53位乘法器553。
[0077] 在一实施例中,整数乘法器553的相同(或基本相同)设计被"移植"和"重新用 在"支持W上详细讨论的改进的向量乘法的执行单元554、555中。因此,相同/基本相同的 乘法器设计的多个实例不仅有效地禪合到指令执行流水线550的整数寄存器空间552,而 且禪合于指令执行流水线550的向量寄存器空间556。具体地,注意;整数乘法器支持的数 字尺寸可大于或等于与向量乘法的被乘数和乘数的数字从其原始基础系统表达向下转换 到的较低基础系统对应的位数。
[0078] 预期所附的技术和方法在嵌入在加密过程中时尤其有用,该加密过程包括公钥加 密过程,诸如RSA、DSA、GF (P)、GF (p*q)、GF (n))、GF (P)上的ECC或DH密钥交换过程。
[0079] VPMULADDHI和VPMULADDL0指令的指令格式能W各种方式实现。本质上, VPMULADDHI和VPMULADDL0指令中的每一个可被视为将K位元素相乘但W X位元素累加K 位元素的结果乘积的向量指令,其中X〉K。在各实施例中,可按指令格式指定X和K。例如, 可在指令格式的任何操作码信息和/或指令格式的立即数操作数信息中有效地指定X和 K ( W及HI或LO乘积部分是否被累加)。W下的讨论涉及一些特定的向量指令格式实施例。 该里,X和K( W及HI或LO部分是否被累加)可有效地编码成W下讨论的任何适当的信息 字段,包括但不限于任何操作码和/或立即数操作数信息。
[0080] 图6A示出示例性AVX指令格式,包括VEX前缀602、实操作码字段630、MoD R/M字 节640、SIB字节650、位移字段662 W及IMM8672。图她示出来自图6A的哪些字段构成完 整操作码字段674和基础操作字段642。图6C示出来自图6A的哪些字段构成寄存器索引 字段644。
[0081] VEX前缀(字节0-2)602 WH字节形式进行编码。第一字节是格式字段640 (VEX 字节0,位[7:0]),该格式字段640包含明确的C4字节值(用于区分C4指令格式的唯一 值)。第二-第H字节(VEX字节1-2)包括提供专用能力的多个位字段。具体地,REX字段 605 (VEX字节I,位[7-5])由VEX. R位字段(VEX字节I,位[7] - R)、VEX. X位字段(VEX字 节1,位[6]-幻W及VEX. B位字段(VEX字节1,位[引-B)组成。该些指令的其他字段对 如在本领域中已知的寄存器索引的较低H个位(rrr、XXX W及化b)进行编码,由此可通过 增加VEX. R、VEX. X W及VEX. B来形成化rr、Xxxx W及化化。操作码映射字段615 (VEX字节 1,位[4:0] -mmmmm)包括对隐含的前导操作码字节进行编码的内容。W字段664(VEX字节 2,位[7] -W)由记号VEX. W表示,并且提供取决于该指令而不同的功能。VEX. VVVV 620 (VEX 字节2,位[6:3]-vvvv)的作用可包括如下;I) VEX. VVVV编码第一源寄存器操作数且对具有 两个或两个W上源操作数的指令有效,第一源寄存器操作数W反转(1补码)形式被指定; 2) VEX. VVVV编码目的地寄存器操作数,目的地寄存器操作数针对特定向量位移W 1补码的 形式被指定;或者3) VEX. VVVV不编码任何操作数,保留该字段,并且应当包含111化。如果 VEX. L 668尺寸字段(VEX字节2,位[2]-L) = 0,则它指示128位向量;如果VEX. L= 1,则 它指示256位向量。前缀编码字段625 (VEX字节2,位[1:0]-PP)提供了用于基础操作字段 的附加位。
[0082] 实操作码字段630 (字节3)还被称为操作码字节。操作码的一部分在该字段中指 定。
[0083] MOD R/M 字段 640 (字节 4)包括 MOD 字段 642 (位[7-6] )、Reg 字段 644 (位[5-3])、 W及R/M字段646 (位巧-0])。Reg字段644的作用可包括如下;对目的地寄存器操作数或 源寄存器操作数巧rrr中的rrr)进行编码;或者被视为操作码扩展且不用于对任何指令操 作数进行编码。R/M字段646的作用可包括如下;对引用存储器地址的指令操作数进行编 码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
[0084] 比例、索引、基址(SIB)-比例字段650(字节5)的内容包括用于存储器地址生 成的SS652(位[7-6])。先前已经针对寄存器索引Xxxx和化化参考了 SIB. XXX 654(位 [5-3])和SIB.化b 656(位巧-0])的内容。
[0085] 位移字段662和立即数字段(IMM8) 672包含地址数据。
[0086] 通用向量友好指令格式
[0087] 向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的 指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量运算两者的实施例,但 是替代实施例仅使用通过向量友好指令格式的向量运算。
[0088] 图7A-7B是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的 框图。图7A是示出根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框 图;而图7B是示出根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框 图。具体地,针对通用向量友好指令格式700定义A类和B类指令模板,两者包括无存储器 访问705的指令模板和存储器访问720的指令模板。在向量友好指令格式的上下文中的术 语"通用"指不束缚于任何专用指令集的指令格式。
[0089] 尽管将描述其中向量友好指令格式支持64字节向量操作数长度(或尺寸)与32 位(4字节)或64位巧字节)数据元素宽度(或尺寸)(并且由此,64字节向量由16双字 尺寸的元素或者替代地8四字尺寸的元素组成)、64字节向量操作数长度(或尺寸)与16 位(2字节)或8位(1字节)数据元素宽度(或尺寸)、32字节向量操作数长度(或尺寸) 与32位(4字节)、64位巧字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺 寸)、W及16字节向量操作数长度(或尺寸)与32位(4字节)、64位巧字节)、16位(2 字节)、或8位(1字节)数据元素宽度(或尺寸)的本发明的实施例,但是替代实施例可支 持更大、更小、和/或不同的向量操作数尺寸(例如,256字节向量操作数)与更大、更小或 不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
[0090] 图7A中的A类指令模板包括;1)在无存储器访问705的指令模板内,示出无存储 器访问的完全舍入控制型操作710的指令模板、W及无存储器访问的数据变换型操作715 的指令模板;W及2)在存储器访问720的指令模板内,示出存储器访问的时效性725的指 令模板和存储器访问的非时效性730的指令模板。图7B中的B类指令模板包括;1)在无存 储器访问705的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作712 的指令模板W及无存储器访问的写掩码控制的VSize型操作717的指令模板;W及2)在存 储器访问720的指令模板内,示出存储器访问的写掩码控制727的指令模板。
[0091] 通用向量友好指令格式700包括W下列出的按照在图7A-7B中示出的顺序的如下 子段。
[009引结合W上图4a、4b、4c、4d和5a、5b、5c的讨论,在实施例中,参考下文在图7A-B和 8中提供的格式细节,可利用非存储器访问指令类型705或存储器访问指令类型720。可在 W下描述的寄存器地址字段744中标识读取掩码、输入向量操作数和目的地的地址。在另 一个实施例中,在写掩码字段770中指定写掩码。
[0093] 格式字段740 -该字段中的特定值(指令格式标识符值)唯一地标识向量友好指 令格式,并且由此标识指令在指令流中W向量友好指令格式出现。由此,该字段对于仅具有 通用向量友好指令格式的指令集是不需要的,在该个意义上该字段是任选的。
[0094] 基础操作字段742 -其内容区分不同的基础操作。
[0095] 寄存器索引字段744-其内容直接或者通过地址生成来指定源或目的地操作数在 寄存器中或者在存储器中的位置。该些字段包括足够数量的位W从PxQ(例如,32x512、 16xl28、32xl024、64xl024)个寄存器组选择N个寄存器。尽管在一个实施例中N可高达H个 源和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如, 可支持高达两个源,其中该些源中的一个源还用作目的地,可支持高达H个源,其中该些源 中的一个源还用作目的地,可支持高达两个源和一个目的地)。
[0096] 修饰符(modifier)字段746 -其内容将指定存储器访问的W通用向量指令格式出 现的指令与不指定存储器访问的W通用向量指令格式出现的指令区分开;即在无存储器访 问705的指令模板与存储器访问720的指令模板之间进行区分。存储器访问操作读取和/ 或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而 非存储器访问操作不该样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字 段还在H种不同的方式之间选择W执行存储器地址计算,但是替代实施例可支持更多、更 少或不同的方式来执行存储器地址计算。
[0097] 扩充操作字段750 -其内容区分除基础操作W外还要执行各种不同操作中的哪 一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字段被分成类字段768、 a字段752、W及目字段754。扩充操作字段750允许在单一指令而非2、3或4个指令中 执行多组共同的操作。
[0098] 比例字段760 -其内容允许用于存储器地址生成(例如,用于使用索引+ 基址的地址生成)的索引字段的内容的按比例缩放。
[0099] 位移字段762A -其内容用作存储器地址生成的一部分(例如,用于使用2 索 引+基址+位移的地址生成)。
[0100] 位移因数字段762B (注意,位移字段762A直接在位移因数字段762B上的并置指 示使用一个或另一个)一其内容用作地址生成的一部分,它指定通过存储器访问的尺寸 (脚按比例缩放的位移因数,其中N是存储器访问中的字节数量(例如,用于使用索 弓I +基址+按比例缩放的位移的地址生成)。忽略兀余的低阶位,并且因此将位移因数字段 的内容乘W存储器操作数总尺寸(脚W生成在计算有效地址中使用的最终位移。N的值由 处理器硬件在运行时基于完整操作码字段774 (稍后在本文中描述)和数据操纵字段754C 确定。位移字段762A和位移因数字段762B可W不用于无存储器访问705的指令模板和/ 或不同的实施例可实现两者中的仅一个或不实现两者中的任一个,在该个意义上位移字段 762A和位移因数字段762B是任选的。
[0101] 数据元素宽度字段764 -其内容区分使用多个数据元素宽度中的哪一个(在一些 实施例中用于所有指令,在其他实施例中只用于一些指令)。如果支持仅一个数据元素宽度 和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在该个意义上 该字段是任选的。
[0102] 写掩码字段770 -其内容在每一数据元素位置的基础上控制目的地向量操作数 中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码 操作,而B类指令模板支持合并写掩码操作和归零写掩码操作两者。当合并时,向量掩码允 许在执行任何操作期间保护目的地中的任何元素集免于更新(由基础操作和扩充操作指 定);在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当 归零时,向量掩码允许在执行任何操作期间使目的地中的任何元素集归零(由基础操作和 扩充操作指定);在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功 能的子集是控制执行的操作的向量长度的能力(即,从第一个到最后一个要修改的元素的 跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段770允许部分向量操作, 该包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段770的内容选择了多个写掩 码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此写掩码字段770的内容 间接地标识了要执行的掩码操作)的本发明的实施例,但是替代实施例相反或另外允许掩 码写字段770的内容直接地指定要执行的掩码操作。
[0103] 立即数字段772 -其内容允许对立即数的指定。该字段在实现不支持立即数的通 用向量友好格式中不存在且在不使用立即数的指令中不存在,在该个意义上该字段是任选 的。
[0104] 类字段768 -其内容在不同类的指令之间进行区分。参考图7A-B,该字段的内容 在A类和B类指令之间进行选择。在图7A-B中,圆角方形用于指示专用值存在于字段中 (例如,在图7A-B中分别用于类字段768的A类768A和B类768B)。
[0105] A类指令模板
[0106] 在A类非存储器访问705的指令模板的情况下,a字段752被解释为其内容区分 要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作710和无存 储器访问的数据变换型操作715的指令模板分别指定舍入752A. 1和数据变换752A. 2)的 RS字段752A,而目字段754区分要执行指定类型的操作中的哪一种。在无存储器访问705 指令模板中,比例字段760、位移字段762A W及位移比例字段762B不存在。
[0107] 无存储器访问的指令模板一完全舍入控制型操作
[010引在无存储器访问的完全舍入控制型操作710的指令模板中,目字段754被解释为 其内容提供静态舍入的舍入控制字段754A。尽管在本发明的所述实施例中舍入控制字段 754A包括抑制所有浮点异常(SA巧字段756和舍入操作控制字段758,但是替代实施例可 支持、可将该些概念两者都编码成相同的字段或者仅具有该些概念/字段中的一个或另一 个(例如,可仅有舍入操作控制字段758)。
[0109] SAE字段756 -其内容区分是否停用异常事件报告;当SAE字段756的内容指示 启用抑制时,给定指令不报告任何种类的浮点异常标志且不唤起任何浮点异常处理程序。
[0110] 舍入操作控制字段758 -其内容区分执行一组舍入操作中的哪一个(例如,向上 舍入、向下舍入、向零舍入、W及就近舍入)。由此,舍入操作控制字段758允许在每一指令 的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一 个实施例中,舍入操作控制字段750的内容优先于该寄存器值。
[0111] 无存储器访问的指令模板一数据变换型操作
[0112] 在无存储器访问的数据变换型操作715的指令模板中,目字段754被解释为数据 变换字段754B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广 播)。
[0113] 在A类存储器访问720的指令模板的情况下,a字段752被解释为驱逐提示字段 752B,其内容区分要使用驱逐提示中的哪一个(在图7A中,对于存储器访问时效性725的 指令模板和存储器访问非时效性730的指令模板分别指定时效性的752B. 1和非时效性的 752B. 2),而目字段754被解释为数据操纵字段754C,其内容区分要执行多个数据操纵操作 (也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换、W及目的地的 向下转换)。存储器访问720的指令模板包括比例字段760、W及任选的位移字段762A或 位移比例字段762B。
[0114] 向量存储器指令使用转换支持来执行来自存储器的向量加载并将向量存储到存 储器。如同寻常的向量指令,向量存储器指令W数据元素式的方式与存储器来回传输数据, 其中实际传输的元素由选为写掩码的向量掩码的内容规定。
[0115] 存储器访问的指令模板一时效性的
[0116] 时效性的数据是可能足够快地重新使用W从高速缓存受益的数据。然而,该是提 示,且不同的处理器可W不同的方式实现它,包括完全忽略该提示。
[0117] 存储器访问的指令模板一非时效性的
[0118] 非时效性的数据是不可能足够快地重新使用W从第一级高速缓存中的高速缓存 受益且应当被给予驱逐优先级的数据。然而,该是提示,且不同的处理器可W不同的方式实 现它,包括完全忽略该提示。
[0119] B类指令模板
[0120] 在B类指令模板的情况下,a字段752被解释为写掩码控制狂)字段752C,其内 容区分由写掩码字段770控制的写掩码操作应当是合并还是归零。
[0121] 在B类非存储器访问705的指令模板的情况下,目字段754的一部分被解释为化 字段757A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的 写掩码控制部分舍入控制类型操作712的指令模板和无存储器访问的写掩码控制VSIZE型 操作717的指令模板分别指定舍入757A. 1和向量长度(VSIZE)757A. 2),而目字段754的 其余部分区分要执行指定类型的操作中的哪一种。在无存储器访问705指令模板中,比例 字段760、位移字段762A W及位移比例字段762B不存在。
[0122] 在无存储器访问的写掩码控制的部分舍入控制型操作710的指令模板中,目字段 754的其余部分被解释为舍入操作字段759A,并且停用异常事件报告(给定指令不报告任 何种类的浮点异常标志且不唤起任何浮点异常处理程序)。
[0123] 舍入操作控制字段759A -只作为舍入操作控制字段758,其内容区分执行一组舍 入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、W及就近舍入)。由此,舍入操作 控制字段759A允许在每一指令的基础上改变舍入模式。在其中处理器包括用于指定舍入 模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段750的内容优先于该寄存 器值。
[0124] 在无存储器访问的写掩码控制VSIZE型操作717的指令模板中,目字段754的其 余部分被解释为向量长度字段759B,其内容区分要执行多个数据向量长度中的哪一个(例 如,128字节、256字节、或512字节)。
[0125] 在B类存储器访问720的指令模板的情况下,目字段754的一部分被解释为广播 字段757B,其内容区分是否要执行广播型数据操纵操作,而目字段754的其余部分被解释 为向量长度字段759B。存储器访问720的指令模板包括比例字段760、W及任选的位移字 段762A或位移比例字段762B。
[0126] 针对通用向量友好指令格式700,示出完整操作码字段774包括格式字段740、基 础操作字段742 W及数据元素宽度字段764。尽管示出了其中完整操作码字段774包括所 有该些字段的一个实施例,但是在不支持所有该些字段的实施例中,完整操作码字段774 包括少于所有的该些字段。完整操作码字段774提供操作码(opcode)。
[0127] 扩充操作字段750、数据元素宽度字段764 W及写掩码字段770允许在每一指令的 基础上W通用向量友好指令格式指定该些特征。
[012引写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为该些指令允许 基于不同的数据元素宽度应用该掩码。
[0129] 在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些 实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类、或者可支持两类。举 例而言,旨在用于通用计算的高性能通用无序核可仅支持B类,旨在主要用于图形和/或科 学(吞吐量)计算的核可仅支持A类,并且旨在用于两者的核可支持两者(当然,具有来自 两类的模板和指令的一些混合、但是并非来自两类的所有模板和指令的核在本发明的范围 内)。同样,单一处理器可包括多个核,所有核支持相同的类或者其中不同的核支持不同的 类。举例而言,在具有单独的图形和通用核的处理器中,图形核中的旨在主要用于图形和/ 或科学计算的一个核可仅支持A类,而通用核中的一个或多个可W是具有旨在用于通用计 算的仅支持B类的无序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一 处理器可包括既支持A类又支持B类的一个或多个通用有序或无序核。当然,在本发明的不 同实施例中,来自一类的特征也可在其他类中实现。可使W高级语言撰写的程序成为(例 女口,及时编译或者统计编译)各种不同的可执行形式,包括:1)仅具有用于执行的目标处理 器支持的类的指令的形式;或者2)具有使用所有类的指令的不同组合而编写的替代例程 且具有选择该些例程W基于由当前正在执行代码的处理器支持的指令而执行的控制流代 码的形式。
[0130] 示例性专用向量友好指令格式
[0131] 图8是示出根据本发明的实施例的示例性专用向量友好指令格式的框图。图8示 出专用向量友好指令格式800,其指定位置、尺寸、解释和字段的次序、W及那些字段中的一 些字段的值,在该个意义上向量友好指令格式800是专用的。专用向量友好指令格式800可 用于扩展X86指令集,并且由此一些字段类似于在现有X86指令集及其扩展(例如,AV幻中 使用的那些字段或与之相同。该格式保持与具有扩展的现有X86指令集的前缀编码字段、 实操作码字节字段、MOD R/M字段、SIB字段、位移字段、W及立即数字段一致。示出来自图 7的字段,来自图8的字段映射到来自图7的字段。
[0132] 应当理解,虽然出于说明的目的在通用向量友好指令格式700的上下文中参考专 用向量友好指令格式800描述了本发明的实施例,但是本发明不限于专用向量友好指令格 式800,除非另有声明。例如,通用向量友好指令格式700构想各种字段的各种可能的尺寸, 而专用向量友好指令格式800被示为具有特定尺寸的字段。作为具体示例,尽管在专用向 量友好指令格式800中数据元素宽度字段764被示为一位字段,但是本发明不限于此(即, 通用向量友好指令格式700构想数据元素宽度字段764的其他尺寸)。
[0133] 通用向量友好指令格式700包括W下列出的按照图8A中示出的顺序的如下字段。
[0134] EVEX前缀(字节0-3)802 -W四字节形式进行编码。
[0135] 格式字段740 (EVEX字节0,位[7:0])-第一字节巧VEX字节0)是格式字段740, 并且它包含0x62 (在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
[0136] 第二一第四字节巧VEX字节1-3)包括提供专用能力的多个位字段。
[0137] REX字段805 (EVEX字节1,位[7-5])_由EVEX. R位字段巧VEX字节1,位[7]-时、 EVEX. X位字段巧VEX字节1,位[6]-幻W及(757BEX字节1,位[引-B)组成。EVEX. R、 EVEX. X和EVEX. B位字段提供与对应VEX位字段相同的功能,并且使用1补码的形式进行编 码,即ZMMO被编码为1111B,ZMM15被编码为0000B。该些指令的其他字段对如在本领域中 已知的寄存器索引的较低H个位(rrr、XXX、W及化b)进行编码,由此可通过增加EVEX. R、 EVEX. X W及EVEX. B来形成化rr、Xxxx W及化化。
[0138] REX'字段710-该是REX'字段710的第一部分,并且是用于对扩展的32个寄存器 集合的较高16个或较低16个寄存器进行编码的EVEX. R'位字段巧VEX字节1,位[4] - R')。 在本发明的一个实施例中,该位与W下指示的其他位一起W位反转的格式存储W (在公知 x86的32位模式下)与实操作码字节是62的BOUND指令进行区分,但是在MOD R/M字段 (在下文中描述)中不接受MOD字段中的值11 ;本发明的替代实施例不W反转的格式存储 该指示的位W及其他指示的位。值1用于对较低16个寄存器进行编码。换句话说,通过组 合EVEX. R'、EVEX. R、W及来自其他字段的其他RRR来形成R'化rr。
[0139] 操作码映射字段815(EVEX字节1,位巧:0] -mmmm)-其内容对隐含的前导操作码 字节(0F、0F 38、或OF 3)进行编码。
[0140] 数据元素宽度字段764 (EVEX字节2,位[7] -W)-由记号EVEX. W表示。EVEX. W 用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
[0141] EVEX. VVVV 820 巧VEX字节 2,位[6:3]-vvvv) -EVEX. VVVV 的作用可包括如下;1) EVEX. VVVV编码第一源寄存器操作数且对具有两个或两个W上源操作数的指令有效,第一 源寄存器操作数W反转(1补码)的形式被指定;2化VEX. VVVV编码目的地寄存器操作数, 目的地寄存器操作数针对特定向量位移W 1补码的形式被指定;或者3化VEX. VVVV不编码 任何操作数,保留该字段,并且应当包含imb。由此,EVEX. VVVV字段820对W反转(1补 码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同 的EVEX位字段用于将指定符尺寸扩展到32个寄存器。
[0142] EVEX. U 768类字段巧VEX字节2,位巧]-U)-如果EVEX. U = 0,则它指示A类或 EVEX. UO ;如果 EVEX. U = 1,则它指示 B 类或 EVEX. Ul。
[0143] 前缀编码字段825(EVEX字节2,位[l:0]-pp)-提供了用于基础操作字段的附加 位。除了对W EVEX前缀格式的传统SSE指令提供支持W外,该也具有压缩SIMD前缀的益 处巧VEX前缀只需要2位,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支 持使用W传统格式和W EVEX前缀格式的SIMD前缀化細、F2H、F3H)的传统SSE指令,将该 些传统SIMD前缀编码成SIMD前缀编码字段;并且在运行时在提供给解码器的PLA之前被 扩展成传统SIMD前缀(因此PLA可执行传统和EVEX格式的该些传统指令,而无需修改)。 虽然较新的指令可将EVEX前缀编码字段的内容直接作为操作码扩展,但是为了一致性,特 定实施例W类似的方式扩展,但允许由该些传统SIMD前缀指定不同的含义。替代实施例可 重新设计PLA W支持2位SIMD前缀编码,并且由此不需要扩展。
[0144] a 字段 752 (EVEX 字节 3,位[7]-邸,也称为 EVEX.邸、EVEX. rs、EVEX.化、EVEX. 写掩码控制、W及EVEX. N ;也W a示出)一如先前所述,该字段是针对上下文的。
[0145] 目字段 754巧VEX 字节 3,位[6:4]-SSS,也称为 EVEX. S2_。、EVEX. r2-。、EVEX. rrl、 EVEX.化0、EVEX.LLB ;也W目目目示出)一如先前所述,该字段是针对上下文的。
[0146] REX'字段710-该是REX'字段的其余部分,并且是可用于对扩展的32个寄存器集 合的较高16个或较低16个寄存器进行编码的EVEX. r位字段巧VEX字节3,位[3] - V')。 该位W位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合 EVEX. V,、EVEX. VVVV 来形成 V,VVVV。
[0147] 写掩码字段770(EVEX字节3,位巧:0]-化k)-其内容指定写掩码寄存器中的寄存 器索引,如先前所述。在本发明的一个实施例中,特定值EVEX.化k = 000具有暗示没有写 掩码用于特定指令的特殊行为(该可W各种方式实现,包括使用硬连线到所有的写掩码或 者旁路掩码硬件的硬件来实现)。
[014引实操作码字段830 (字节4)还被称为操作码字节。操作码的一部分在该字段中被 指定。
[0149] MOD R/M 字段 840 (字节 5)包括 MOD 字段 842、Reg 字段 844、W及 R/M 字段 846。 如先前所述的,MOD字段842的内容将存储器访问和非存储器访问操作区分开。Reg字段 844的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或 者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段846的作用可包括如 下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操 作数进行编码。
[0150] 比例、索引、基址(SIB)字节(字节6)-如先前所述的,比例字段750的内容用于 存储器地址生成。SIB. XXX 854和SIB.化b 856 -先前已经针对寄存器索引Xxxx和化化 提及了该些字段的内容。
[0151] 位移字段762A (字节7-10)-当MOD字段842包含10时,字节7-10是位移字段 762A,并且它与传统32位位移(disp32) -样地工作,并且W字节粒度工作。
[0152] 位移因数字段762B (字节7)-当MOD字段842包含01时,字节7是位移因数字 段762B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,它W字节粒度工 作。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移量之间寻址;在64字节 高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由 于常常需要更大的范围,所W使用disp32 ;然而,disp32需要4个字节。与disp8和disp32 对比,位移因数字段762B是disp8的重新解释;当使用位移因数字段762B时,通过将位移 因数字段的内容乘W存储器操作数访问的尺寸(脚来确定实际位移。该类型的位移被称为 disp8*N。该减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。该种压缩 位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移量的兀余低阶位 不需要被编码。换句话说,位移因数字段762B替代传统x86指令集8位位移。由此,位移 因数字段762B W与x86指令集8位位移相同的方式(因此在ModRM/SIB编码规则中没有 变化)进行编码,唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码 长度中没有变化,而仅在通过硬件对位移值的解释中有变化(该需要按存储器操作数的尺 寸按比例缩放位移量W获得字节式地址偏移量)。
[0153] 立即数字段772如先前所述地操作。
[0154] 完整操作码字段
[0155] 图8B是示出根据本发明的实施例的构成完整操作码字段774的具有专用向量友 好指令格式800的字段的框图。具体地,完整操作码字段774包括格式字段740、基础操作 字段742、W及数据元素宽度(W)字段764。基础操作字段742包括前缀编码字段825、操作 码映射字段815 W及实操作码字段830。
[0156] 寄存器索引字段
[0157] 图8C是示出根据本发明的一个实施例的构成寄存器索引字段744的具有专用向 量友好指令格式800的字段的框图。具体地,寄存器索引字段744包括REX字段805、REX' 字段 810、M0DR/M. reg 字段 844、M0DR/M. r/m 字段 846、VVVV 字段 820、XXX 字段 854 W及 柿b字段856。
[015引扩充操作字段
[0159] 图8D是示出根据本发明的一个实施例的构成扩充操作字段750的具有专用向量 友好指令格式800的字段的框图。当类扣)字段768包含0时,它表明EVEX. UO (A类768A); 当它包含1时,它表明EVEX. Ul炬类768B)。当U = 0且MOD字段842包含11 (表明无存储 器访问操作)时,a字段752 (EVEX字节3,位[7] - EH)被解释为rs字段752A。当rs字 段752A包含1 (舍入752A. 1)时,目字段754 (EVEX字节3,位[6:4] - SS巧被解释为舍入 控制字段754A。舍入控制字段754A包括一位SAE字段756和两位舍入操作字段758。当 rs字段752A包含0 (数据变换752A. 2)时,目字段754 (EVEX字节3,位[6:4] - SSS)被解 释为H位数据变换字段754B。当U = 0且M孤字段842包含00、01或10 (表明存储器访问 操作)时,a字段752巧VEX字节3,位[7] - EH)被解释为驱逐提示巧H)字段752B且目 字段754 (EVEX字节3,位[6:4] -SS巧被解释为H位数据操纵字段754C。
[0160] 当U = 1时,a字段752巧VEX字节3,位[7] - EH)被解释为写掩码控制狂)字段 752C。当U = 1且MOD字段842包含11 (表明无存储器访问操作)时,目字段754的一部 分巧VEX字节3,位[4] - S。)被解释为化字段757A ;当它包含1 (舍入757A. 1)时,目字 段754的其余部分巧VEX字节3,位[6-引-S2_i)被解释为舍入操作字段759A,而当化字段 757A包含0(VSIZE 757.A2)时,目字段754的其余部分巧VEX字节3,位[6-5]-S2_i)被解 释为向量长度字段759B巧VEX字节3,位[6-引-Li_。)。当U = 1且MOD字段842包含00、 Ol或10 (表明存储器访问操作)时,目字段754(EVEX字节3,位[6:4] -SS巧被解释为向 量长度字段759B巧VEX字节3,位[6-引-Li_。)和广播字段757B巧VEX字节3,位[4] - B)。
[0161] 示例性寄存器架构
[0162] 图9是根据本发明的一个实施例的寄存器架构900的框图。在所示出的实施例中, 有32个512位宽的向量寄存器910 ;该些寄存器被引用为zmmO到zmm31。较低的16zmm寄 存器的较低阶256个位覆盖在寄存器ymmO-16上。较低的16zmm寄存器的较低阶128个位 (ymm寄存器的较低阶128个位)覆盖在寄存器xmmO-15上。专用向量友好指令格式800对 该些覆盖的寄存器组操作,如在W下表格中所示的。
[0163]
【权利要求】
1. 一种装置,包括: 指令执行流水线,具有用于支持向量相乘相加指令的向量功能单元,所述向量相乘相 加指令将两个向量的相应K位元素相乘并且在X位累加器中将它们相应的乘积中的每一个 的一部分与另一个相应的输入操作数累加,其中X大于K。
2. 如权利要求1所述的装置,其特征在于,在向量相乘指令的指令格式中指定X和K。
3. 如权利要求1所述的装置,其特征在于,所述向量功能单元包括用于将所述相应的K 位元素相乘的相应乘法器实例,每个所述乘法器实例与所述流水线的另一个执行单元内的 整数浮点乘法器基本相同。
4. 如权利要求1所述的装置,其特征在于,所述相应的输入操作数由所述X位累加器提 供。
5. 如权利要求1所述的装置,其特征在于,K = 52且X = 64。
6. 如权利要求1所述的装置,其特征在于,X是所述流水线处理的向量元素的标称位宽 度。
7. 如权利要求6所述的装置,其特征在于,所述执行流水线耦合到提供用于由X位元素 构成的向量的向量寄存器空间。
8. 如权利要求7所述的装置,其特征在于,利用所述寄存器之一实现所述累加器。
9. 如权利要求1所述的装置,其特征在于,所述部分是一半。
10. 如权利要求1所述的装置,其特征在于,所述指令执行流水线支持第二向量相乘相 加指令,所述第二向量相乘相加指令将两个向量的相应K位元素相乘并且在X位累加器中 将与它们相应的乘积中的每一个的所述部分不同的部分与另一个相应的输入操作数累加, 其中X大于K。
11. 一种方法,包括: 从第一和第二寄存器接收被乘数操作数和乘数操作数,所述乘数操作数和所述被乘数 操作数分别是第一向量和第二向量的元素,并且提交用于向量处理指令,所述寄存器比所 述被乘数操作数和所述乘数操作数的最大允许尺寸宽; 将所述被乘数操作数和所述乘数操作数相乘以产生乘法结果; 使用所述第一和第二寄存器来提供用于另一个向量处理指令的操作数,其中所述操作 数中的至少一个比所述最大允许尺寸宽。
12. 如权利要求11所述的方法,其特征在于,所述另一个操作数是先前的相乘和累加 操作的结果。
13. 如权利要求11所述的方法,其特征在于,所述方法还包括将所述乘法结果的一部 分与另一个操作数累加。
14. 如权利要求13所述的方法,其特征在于,所述累加产生比所述最大允许尺寸大的 数字尺寸。
15. 如权利要求13所述的方法,其特征在于,所述部分是所述乘法结果的上半部。
16. 如权利要求13所述的方法,其特征在于,所述部分是所述乘法结果的下半部。
17. -种计算系统,包括: 包括指令执行流水线的处理核,所述指令执行流水线包括: i)第一向量执行单元,所述第一向量执行单元执行向量乘法,所述第一向量执行单元 被耦合以接收向量操作,所述向量执行单元具有乘法器,所述乘法器在执行特定向量元素 位置的所述向量乘法时提供有效数字的最大数量,其中所述有效数字的最大数量的一半小 于为所述指令执行流水线处理的向量的元素提供的寄存器空间的量; i i)第一整数执行单元,所述第一整数执行单元具有第二乘法器,所述第二乘法器具 有至少与所述乘法器基本相同的设计。
18. 如权利要求17所述的计算系统,其特征在于,所述第一向量执行单元还包括用于 选择有效数字的最大数量的下半部的逻辑。
19. 如权利要求17所述的计算系统,其特征在于,所述第一向量执行单元还包括用于 选择有效数字的最大数量的上半部的逻辑。
20. 如权利要求17所述的计算系统,其特征在于,所述第一向量执行单元还包括加法 器,所述加法器用于将所述乘法器的输出与提供给所述第一向量执行单元的除所述向量乘 法的所述被乘数和乘数之外的操作数相加。
【文档编号】G06F12/00GK104350492SQ201380028466
【公开日】2015年2月11日 申请日期:2013年6月24日 优先权日:2012年6月29日
【发明者】S·格伦, V·克拉斯诺夫, R·凡伦天, Z·斯波伯, A·格雷德斯廷, S·卢巴诺维奇 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1