首页> 中国专利> 多数据元素与多数据元素比较处理器、方法、系统和指令

多数据元素与多数据元素比较处理器、方法、系统和指令

摘要

本发明公开了一种多数据元素与多数据元素比较处理器、方法、系统和指令。装置包括打包数据寄存器和执行单元。指令指示包括第一打包数据元素的第一源打包数据、包括第二打包数据元素的第二源打包数据、以及目的地存储位置。响应于该指令,执行单元将包括打包结果数据元素的打包数据结果存储在目的地存储位置中。每一结果数据元素对应于第二源打包数据的数据元素中的不同的一个数据元素。每一结果数据元素包括多位比较掩码,该多位比较掩码包括不同的比较掩码位,用于与第二源打包数据的对应数据元素相比较的第一源打包数据的每一不同的对应数据元素。

著录项

  • 公开/公告号CN104049954A

    专利类型发明专利

  • 公开/公告日2014-09-17

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201410095614.2

  • 发明设计人 S·J·阔;

    申请日2014-03-14

  • 分类号G06F9/38;

  • 代理机构上海专利商标事务所有限公司;

  • 代理人张东梅

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 01:10:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-04-13

    授权

    授权

  • 2014-10-22

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20140314

    实质审查的生效

  • 2014-09-17

    公开

    公开

说明书

背景技术

技术领域

本文中所描述的实施例一般涉及处理器。具体而言,本文中所描述的实施例一 般涉及响应于指令比较多个数据元素与多个其他数据元素的处理器。

背景信息

许多处理器具有单指令多数据(SIMD)架构。在SIMD架构中,打包数据指 令、矢量指令或者SIMD指令可同时或并行地对多个数据元素或者多对数据元素进 行操作。处理器可具有并行执行硬件,该并行执行硬件响应于打包数据指令以同时 或并行地执行多个操作。

多个数据元素可在一个寄存器或存储器位置内被打包为打包数据或矢量数据。 在打包数据中,寄存器或者其他存储位置的位可逻辑地分成数据元素序列。例如, 256位宽打包数据寄存器可具有四个64位宽数据元素、八个32位数据元素、十六个 16位数据元素等。每一数据元素可表示单一独立的一段数据(例如,像素颜色 等),该段数据可单独地操作和/或与其他数据独立地操作。

打包数据元素的比较是常用且普遍的操作,该操作以许多不同的方式使用。用 于执行打包数据元素、矢量数据元素或SIMD数据元素的比较的各种矢量、打包数 据或者SIMD指令在本领域中是已知的。例如,在因特尔架构(IA)方面的 MMXTM技术包括各种打包比较指令。最近,IntelStreaming SIMD Extensions4.2 (SSE4.2)引入了若干字符串和文本处理指令。

附图说明

可通过参考以下描述以及用于示出实施例的附图最佳地理解本发明。在附图 中:

图1是具有指令集的处理器的一个实施例的方框图,该指令集包括一个或多个 多数据元素与多数据元素的比较指令。

图2是具有执行单元的指令处理装置的一个实施例的方框图,该执行单元可操 作用于执行多数据元素与多数据元素的比较指令的一个实施例。

图3是一种处理多数据元素与多数据元素的比较指令的一个实施例的方法的一 个实施例的方框流程图。

图4是示出具有合适打包数据格式的示例实施例的方框图。

图5是示出可响应于指令的一个实施例而执行的操作的一个实施例的方框图。

图6是示出可响应于指令的一个实施例对具有16位宽字元素的128位宽打包 源执行的操作的示例实施例的方框图。

图7是示出可响应于指令的一个实施例对具有8位字节元素的128位宽打包源 执行的操作的示例实施例的方框图。

图8是示出可响应于可操作用于选择比较掩码子集以在打包数据结果中报告的 指令的一个实施例而执行的操作的示例实施例的方框图。

图9是适于实施例的微架构细节的方框图。

图10是一组合适的打包数据寄存器的示例实施例的方框图。

图11A示出示例性AVX指令格式,包括VEX前缀、实操作码字段、MoD R/M字节、SIB字节、位移字段以及IMM8。

图11B示出来自图11A的哪些字段构成完整操作码字段和基础操作字段。

图11C示出来自图11A的哪些字段构成寄存器索引字段。

图12A是示出根据本发明的实施例的通用矢量友好指令格式及其A类指令模 板的方框图。

图12B是示出根据本发明的实施例的通用矢量友好指令格式及其B类指令模板 的方框图。

图13A是示出根据本发明的实施例的示例性专用矢量友好指令格式的方框图。

图13B是示出根据本发明的实施例的构成完整操作码字段的具有专用矢量友好 指令格式的字段的方框图。

图13C是示出根据本发明的实施例的构成寄存器索引字段的具有专用矢量友好 指令格式的字段的方框图。

图13D是示出根据本发明的实施例的构成扩充(augmentation)操作字段的具 有专用矢量友好指令格式的字段的方框图。

图14是根据本发明的一个实施例的寄存器架构的方框图。

图15A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命 名的无序发布/执行流水线两者的方框图。

图15B是示出根据本发明的实施例的有序架构核的示例性实施例以及包括在处 理器中的示例性寄存器重命名的无序发布/执行架构核两者的方框图。

图16A是根据本发明的实施例的连接到管芯上(on-die)互联网络且具有第二 级(L2)高速缓存的本地子集的单一处理器核的方框图。

图16B是根据本发明的实施例的图16A中的处理器核的一部分的展开图。

图17是根据本发明的实施例的可具有一个以上核、可具有集成存储器控制 器、并且可具有集成图形的处理器的方框图。

图18示出根据本发明的实施例的系统的方框图。

图19示出根据本发明的实施例的第一更具体的示例性系统的方框图。

图20示出根据本发明的实施例的第二更具体的示例性系统的方框图。

图21示出根据本发明的实施例的片上系统(SoC)的方框图。

图22是根据本发明的实施例的对比使用软件指令转换器将源指令集中的二进 制指令转换成目标指令集中的二进制指令的方框图。

实施例的详细描述

在以下描述中,阐述了大量具体细节(例如,专用指令操作、打包数据格式、 掩码类型、指示操作数的方式、处理器配置、微架构细节、操作顺序等)。然而, 在没有这些具体细节的情况下,可实践实施例。在其他实例中,在细节方面未示出 公知电路、结构和技术,以避免混淆对该描述的理解。

在本文中公开了各种多数据元素与多数据元素的比较指令、执行这些指令的处 理器、由处理器在处理或执行这些指令时执行的方法、以及结合一个或多个处理器 以处理或执行这些指令的系统。图1是具有指令集102的处理器100的一个实施例 的方框图,该指令集102包括一个或多个多数据元素与多数据元素的比较指令 103。在一些实施例中,处理器可以是通用处理器(例如,具有在台式、膝上型等计 算机中使用的类型的通用微处理器)。替换地,处理器可以是专用处理器。合适的 专用处理器的示例包括但不限于,网络处理器、通信处理器、加密处理器、图形处 理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微 控制器),仅列举数例。处理器可以是各种复杂指令集计算(CISC)处理器、各种 精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、上述处理器 的各种混合、或者完全其他类型的处理器中的任一个。

处理器具有指令集架构(ISA)101。ISA表示与编程相关的处理器的架构的一 部分,并且通常包括处理器的本机指令、架构寄存器、数据类型、寻址模式、存储 器架构等。ISA与微架构不同,微架构通常表示选择用于实现ISA的特定处理器设 计技术。

ISA包括架构可视的寄存器(例如,架构寄存器文件)107。架构寄存器还可 在本文中被简称为寄存器。短语“架构寄存器”、“寄存器文件”以及“寄存器” 在本文中用于表示对软件和/或编程器和/或通用宏指令指定来标识操作数的寄存器而 言可视的寄存器,除非另外或明显指定。这些寄存器与给定微架构(例如,由指令 使用的临时寄存器、重排序缓冲器、退役(retirement)寄存器等)中的其他非架构 或非架构可视的寄存器形成对比。寄存器通常表示管芯上的处理器存储位置。所示 的寄存器包括可操作用于存储打包数据、矢量数据或者SIMD数据的打包数据寄存 器108。架构寄存器还可包括通用寄存器109,在一些实施例中,这些通用寄存器 109任选地由多元素与多元素的比较指令指示以提供源操作数(例如,指示数据元 素子集以提供指示包括在目的地中的比较结果的偏移量等)。

所示的ISA包括指令集102。与微指令或微操作(例如,由解码宏指令得到的 那些)不同,指令集的指令表示宏指令(例如,提供给处理器以供执行的汇编语言 或机器级指令)。指令集包括一个或多个多数据元素与多数据元素的比较指令 103。在下文中将进一步公开多数据元素与多数据元素的比较指令的各种不同实施 例。在一些实施例,指令103可包括一个或多个所有数据元素与所有数据元素的比 较指令104。在一些实施例,指令103可包括一个或多个指定子集与所有子集、或 者指定子集与指定子集的比较指令105。在一些实施例,指令103可包括可操作用 于选择(例如,指示偏移量以选择)要存储在目的地中的比较的一部分的一个或多 个多元素与多元素的比较指令。

处理器还包括执行逻辑110。执行逻辑可操作用于执行或处理指令集的指令 (例如,多数据元素与多数据元素的比较指令103)。在一些实施例中,执行逻辑 可包括特定逻辑(例如,可能与固件组合的特定电路或硬件)以执行这些指令。

图2是具有执行单元210的指令处理装置200的一个实施例的框图,该执行单 元210可操作用于执行多数据元素与多数据元素的比较指令203的一个实施例。在 一些实施例中,指令处理装置可以是处理器和/或可被包括在处理器中。例如,在一 些实施例中,指令处理装置可以是图1的处理器,或者可被包括在图1的处理器 中。替换地,指令处理装置可被包括在类似或不同的处理器中。此外,图1的处理 器可包括类似或不同的指令处理装置。

装置200可接收多数据元素与多数据元素的比较指令203。例如,可从指令提 取单元、指令队列等接收该指令。多数据元素与多数据元素的比较指令可表示机器 代码指令、汇编语言指令、宏指令、或者该装置的ISA的控制信号。多数据元素与 多数据元素的比较指令可明确地指定(例如,通过一个或多个字段或者位集)或者 以其他方式指定(例如,隐含地指示)第一源打包数据213(例如,在第一源打包 数据寄存器212中),可指定或者以其他方式指定第二源打包数据215(例如,在 第二源打包数据寄存器214中),并且可指定或者以其他方式指定(例如,隐含地 指示)将存储打包数据结果217的目的地存储位置216。

所示的指令处理装置包括指令解码单元或解码器211。解码器可接收和解码相 对较高级的机器代码或汇编语言指令或宏指令,并且输出一个或多个相对较低级的 微指令、微操作、微代码入口点、或者反映、表示和/或源自较高级指令的其他相对 较低级的指令或控制信号。一个或多个较低级指令或控制信号可通过一个或多个较 低级(例如,电路级或硬件级)操作来实现较高级指令。可使用各种不同的机构来 实现解码器,这些机构包括但不限于,微代码只读存储器(ROM)、查找表、硬件 实现、可编程逻辑阵列(PLA)、以及用于实现在本领域中已知的解码器的其他机 构。

在其他实施例中,可使用指令仿真器、翻译器、变形器(morpher)、解释 器、或者其他指令转换逻辑。各种不同类型的指令转换逻辑在本领域中是已知的, 并且可在软件、硬件、固件、或者其组合中实现。指令转换逻辑可接收指令,并且 仿真、翻译、变形、解释、或者以其他方式将指令转换成一个或多个对应的导出指 令或控制信号。在其他实施例中,可使用指令转换逻辑和解码器两者。例如,该装 置可具有将接收到的机器代码指令转换成一个或多个中间指令的指令转换逻辑、以 及将一个或多个中间指令解码成可由该装置的本机硬件(例如执行单元)执行的一 个或多个较低级指令或控制信号的解码器。指令转换逻辑的部分或全部可位于指令 处理装置外部,诸如举例而言在单独的管芯上和/或在存储器中。

装置200还包括一组打包数据寄存器208。每一打包数据寄存器可表示可操作 用于存储打包数据、矢量数据、或SIMD数据的管芯上的存储位置。在一些实施例 中,第一源打包数据213可被存储在第一源打包数据寄存器212中,第二源打包数 据215可被存储在第二源打包数据寄存器214中,并且打包数据结果217可被存储 在可以是第三打包数据寄存器的目的地存储位置216中。替换地,存储器位置或者 其他存储位置可用作这些位置中的一个或多个。打包数据寄存器可使用公知技术在 不同的微架构中以不同的方式实现,并且不限于任何特定类型的电路。各种不同类 型的寄存器是合适的。合适类型的寄存器的示例包括但不限于,专用物理寄存器、 使用寄存器重命名的动态分配的物理寄存器、以及其组合。

再次参考图2,执行单元210与解码器211和打包数据寄存器208耦合。作为 示例,执行单元可包括算术逻辑单元、执行算术和逻辑运算的数字电路、逻辑单 元、包括用于比较数据元素的比较逻辑的执行单元或功能单元等。执行单元可接收 一个或多个经解码的或者以其他方式转换的指令或控制信号,这些指令或控制信号 表示和/或源自多数据元素与多数据元素的比较指令203。该指令可指定或者以其他 方式指示包括多个第一打包数据元素的第一源打包数据213(例如,指定或者以其 他方式指示第一打包数据寄存器212),指定或者以其他方式指示包括多个第二打 包数据元素的第二源打包数据215(例如,指定或者以其他方式指示第二打包数据 寄存器214),并且指定或者以其他方式指示目的地存储位置216。

响应于和/或由于多数据元素与多数据元素的比较指令203,执行单元可操作用 于将存储打包数据结果217存储在目的地存储位置216中。执行单元和/或指令处理 装置可包括专用或特定逻辑(例如,电路或者可能与固件和/或软件组合的其他硬 件),该逻辑可操作用于执行多数据元素与多数据元素的比较指令203并且响应于 该指令(例如,响应于从该指令解码或者以其他方式得到的一个或多个指令或控制 信号)存储结果217。

打包数据结果217可包括多个打包结果数据元素。在一些实施例中,每一打包 结果数据元素可具有多位比较掩码。例如,在一些实施例中,每一打包结果数据元 素可对应于第二源打包数据215的打包数据元素中的不同的一个打包数据元素。在 一些实施例中,每一打包结果数据元素可包括多位比较掩码,该多位比较掩码指示 第一源打包数据的多个打包数据元素与对应于打包结果数据元素的第二源的打包数 据元素的比较结果。在一些实施例中,每一打包结果数据元素可包括多位比较掩 码,该多位比较掩码对应于且指示第二源打包数据215的对应打包数据元素的比较 结果。在一些实施例中,每一多位比较掩码可包括不同的比较掩码位,用于将与第 二源打包数据215的关联/对应打包数据元素相比较的第一源打包数据213的每一不 同的对应打包数据元素。在一些实施例中,每一比较掩码位可指示对应比较的结 果。在一些实施例中,每一掩码指示在第一源打包数据中发生匹配的位置处与来自 第二源打包数据的对应数据元素有多少匹配。

在一些实施例中,给定打包结果数据元素中的多位比较掩码可指示第一源打包 数据213的哪一个打包数据元素等于与给定打包结果数据元素相对应的第二源打包 数据215的打包数据元素。在一些实施例中,比较可用于等同性,并且每一比较掩 码位可具有指示比较的数据元素相等的第一二进制值(例如,根据一种可能的协定 被设为二进制1)、或者具有指示比较的数据元素不相等的第二二进制值(例如, 被清除为二进制0)。在其他实施例中,可任选地使用其他比较(例如,大于、小 于等)。

在一些实施例中,打包数据结果可指示第一源打包数据的所有数据元素与第二 源打包数据的所有数据元素的比较结果。在其他实施例中,打包数据结果可指示源 打包数据中的一个的仅数据元素子集与源打包数据中的另一个的所有数据元素或仅 数据元素子集的比较结果。在一些实施例中,该指令可指定或者以其他方式指示要 比较的一个或多个子集。例如,在一些实施例中,该指令可任选地明确地指定或隐 含地指示例如通用寄存器209的隐含寄存器中的第一子集218、以及任选地例如通 用寄存器209的隐含寄存器中的第二子集219,以用于限制第一和/或第二源打包数 据的仅子集的比较。

为了避免混淆描述,已示出和描述了相对简单的指令处理装置200。在其他实 施例中,该装置可任选地包括在处理器中找到的其他公知组件。这些组件的示例包 括但不限于,分支预测单元、指令提取单元、指令和数据的高速缓存、指令和数据 的翻译后备缓冲器(translation lookaside buffer)、预提取缓冲器、微指令队列、微 指令定序器、寄存器重命名单元、指令调度单元、总线接口单元、第二或更高级高 速缓存、退役单元、包括在处理器中的其他组件、以及上述的各种组合。实际上, 处理器中的组件有大量不同的组合和配置,并且实施例不限于任何特定的组合或配 置。实施例可被包括在具有多个核的处理器、逻辑处理器或者执行引擎中,其中至 少一个具有可操作用于执行本文中所公开的指令的一个实施例的执行逻辑。

图3是一种处理多数据元素与多数据元素的比较指令的一个实施例的方法325 的一个实施例的方框流程图。在各种实施例中,该方法由通用、专用处理器、或者 其他指令处理装置或数字逻辑设备执行。在一些实施例中,图3的操作和/或方法可 由图1的处理器和/或图2的装置执行,和/或在图1的处理器和/或图2的装置内执 行。本文中所描述的用于图1-2的处理器和装置的组件、特征、以及具体的任选细 节还任选地应用于图3的操作和/或方法。替换地,图3的操作和/或方法可由类似的 或完全不同的处理器或装置执行,和/或在类似的或完全不同的处理器或装置内执 行。此外,图1的处理器和/或图2的装置可执行与图3相同、相似或者完全不同的 操作和/或方法。

在方框326,该方法包括接收多数据元素与多数据元素的比较指令。在各个方 面,该指令可在处理器、指令处理装置或者其一部分(例如,指令提取单元、解码 器、指令转换器等)处接收。在各个方面,该指令可从管芯外的源(例如,从主存 储器、盘、或互连)或者从管芯上的源(例如,从指令高速缓存)接收。多元素与 多元素的比较指令可指定或者以其他方式指示具有多个第一打包数据元素的第一源 打包数据、以及具有多个第二打包数据元素的第二源打包数据、以及目的地存储位 置。

在方框327,响应于和/或由于多数据元素与多数据元素的比较指令,可将包括 多个打包结果数据元素的打包数据结果存储在目的地存储位置中。代表性地,执行 单元、指令处理装置或者通用或专用处理器可执行由该指令指定的操作并且存储打 包数据结果。在一些实施例中,每一打包结果数据元素可对应于第二源打包数据的 打包数据元素中的不同的一个打包数据元素。在一些实施例中,每一打包结果数据 元素可包括多位比较掩码。在一些实施例中,每一多位比较掩码可包括不同的掩码 位,用于与对应于打包结果数据元素的第二源的打包数据元素相比较的第一源打包 数据的每一不同的对应打包数据元素。在一些实施例中,每一掩码位可指示对应比 较的结果。以上结合图2提及的其他任选细节还可任选地被包括在可任选地处理相 同指令和/或任选地在相同装置内执行的方法中。

所示方法涉及架构可视操作(例如,从软件角度可视的操作)。在其他实施例 中,该方法可任选地包括一个或多个微架构操作。作为示例,可提取、解码、可能 无序地调度该指令,可存取源操作数,可启用执行逻辑以执行微架构操作从而实现 该指令,执行逻辑可执行微架构操作,可任选地将结果重新排序回到程序次序等。 构想执行该操作的不同微架构方式。例如,在一些实施例中,可任选地执行比较掩 码位零扩展操作、打包左移逻辑操作以及逻辑或操作,诸如将结合图9描述的那 些。在其他实施例中,这些微架构操作中的任一个可任选地增加到图3的方法,但 是该方法还可通过其他不同的微架构操作来实现。

图4是示出具有合适打包数据格式的若干示例实施例的方框图。128位打包字 节格式428是128位宽,并且包括从最低有效到最高有效位位置的示图中所标记的 十六个8位宽字节数据元素,如B1-B16。256位打包字格式429是256位宽,并且 包括从最低有效到最高有效位位置的示图中所标记的十六个16位宽字数据元素,如 W1-W16。256位格式被示为分成两段以适合页面,但是在一些实施例中,完整的格 式可被包括在单一物理寄存器或逻辑寄存器中。这些格式只是数个说明性示例。

其他打包数据结果也是合适的。例如,其他合适的128位打包数据格式包括 128位打包16位字格式和128位打包32位双字格式。其他合适的256位打包数据格 式包括256位打包8位字节格式和256位打包32位双字格式。比128位少的打包数 据格式也是合适的,诸如64位宽打包数据8位字节格式。比256位多的打包数据格 式也是合适的,诸如512位宽或者更宽的8位字节、16位字、或32位双字格式。通 常,打包数据操作数中的打包数据元素的数量等于打包数据操作数的位的大小除以 打包数据元素的位的大小。

图5是示出多数据元素与多数据元素的比较操作539的一个实施例的方框图, 该比较操作539可响应于多数据元素与多数据元素的比较指令的一个实施例而执 行。该指令可指定或者以其他方式指示包括N个打包数据元素540-1至540-N的第 一集合的第一源打包数据513,并且可指定或者以其他方式指示包括N个打包数据 元素541-1至541-N的第二集合的第二源打包数据515。在所示的示例中,在第一源 打包数据513中,第一最低有效数据元素540-1存储表示值A的数据,第二数据元 素540-2存储表示值B的数据,第三数据元素540-3存储表示值C的数据,并且第 N个最高有效数据元素540-N存储表示值B的数据。在所示的示例中,在第二源打 包数据515中,第一最低有效数据元素541-1存储表示值B的数据,第二数据元素 541-2存储表示值A的数据,第三数据元素541-3存储表示值B的数据,并且第N 个最高有效数据元素541-N存储表示值A的数据。

数字N可等于源打包数据的位的大小除以打包数据元素的位的大小。通常,数 字N可以是常常从约4到约64的数量级的范围内的、或者甚至更大的整数。N的特 定示例包括但不限于,4、8、16、32、以及64。在各种实施例中,源打包数据的宽 度可以是64位、128位、256位、512位或者甚至更宽,但是本发明的范围不限于仅 仅这些宽度。在各种实施例中,打包数据元素的宽度可以是8位字节、16位字、或 32位双字,但是本发明的范围不限于仅仅这些宽度。通常,在该指令用于字符串和/ 或文本片段比较的实施例中,数据元素的宽度通常可以是8位字节或16位字,因为 大多数感兴趣的字母数字值可以8位字节或至少以16位字表示,但是如果需要(例 如,为了与其他操作兼容以避免格式转换,为了效率等),则可使用更宽的格式 (例如,32位双字格式)。在一些实施例中,第一和第二源打包数据中的数据元素 可以是带符号或无符号的整数。

响应于该指令,处理器或者其他装置可操作用于生成打包数据结果517并将其 存储在由该指令指定或者以其他方式指示的目的地存储位置516中。在一些实施例 中,该指令可使处理器或者其他装置生成所有数据元素与所有数据元素的比较掩码 542作为中间结果。所有数据元素与所有数据元素的比较掩码542可包括在第一源 打包数据的N个数据元素中的每一个/全部与第二源打包数据的N个数据元素中的 每一个/全部之间执行的NxN个比较的NxN个比较结果。即,可执行所有元素与所 有元素的比较。

在一些实施例中,该掩码中的每一比较结果可指示被比较数据元素是否相等的 比较结果,并且每一比较结果可以是单独的一位,该位可具有指示被比较数据元素 相等的第一二进制值(例如,被设为二进制1或逻辑真),或者具有被比较数据元 素不相等的第二二进制值(例如,被清除为二进制0或逻辑假)。其他协定也是可 能的。如所示的,在用于比较第一源打包数据513的第一数据元素540-1(表示值 “A”)与第二源打包数据515的第一数据元素541-1(表示值“B”)的所有数据 元素与所有数据元素的比较掩码的右上角示出二进制0,因为这些值不相等。相 反,在用于比较第一源打包数据513的第一数据元素540-1(表示值“A”)与第二 源打包数据515的第二数据元素541-2(表示值“A”)的所有数据元素与所有数据 元素的比较掩码的该位置左边的一个位置处示出二进制1,因为这些值相等。沿着 对角线如一组圆形对角线匹配值序列所示,匹配值序列在所有数据元素与所有数据 元素的比较掩码中表现为二进制1。所有数据元素与所有数据元素的比较掩码是任 选地在一些实施例中生成的微架构方面,但是无需在其他实施例中生成。相反,可 在没有中间结果的情况下生成和存储目的地中的结果。

再次参考图5,在一些实施例中,要存储在目的地存储位置516中的打包数据 结果517可包括N个N位比较掩码的集合。例如,打包数据结果可包括N个打包结 果数据元素544-1至544-N的集合。在一些实施例中,N个打包结果数据元素544-1 至544-N中的每一个可与对应相关位置中的第二源打包数据515的N个打包数据元 素541-1至541-N中的一个相对应。例如,第一打包结果数据元素544-1可对应于第 二源的第一打包数据元素541-1,第三打包结果数据元素544-3可对应于第二源的第 三打包数据元素541-3,以此类推。在一些实施例中,N个打包结果数据元素544中 的每一个可具有N位比较掩码。在一些实施例中,每一N位比较掩码可对应于且指 示第二源打包数据515的对应打包数据元素541的比较结果。在一些实施例中,每 一N位比较掩码可包括不同的比较掩码位,用于将与第二源打包数据515的关联/对 应打包数据元素相比较的第一源打包数据513的N个不同的对应打包数据元素中的 每一个。

在一些实施例中,每一比较掩码位可指示相应比较的结果(例如,如果被比较 值相等则为二进制1,或者如果他们不相等则为二进制0)。例如,N位比较掩码的 位k可表示用于比较第一源打包数据的第k个数据元素与整个N位比较掩码对应的 第二源打包数据的数据元素的比较结果。至少在概念上,每一掩码位可表示从所有 数据元素与所有数据元素的比较掩码542的单独一列起的掩码位序列。例如,第一 结果打包数据元素544-1包括值(从右到左)“0、1、0、…1”,这些值可指示第 二源515的第一数据元素541-1(对应于N位掩码)中的值“B”不等于第一源的第 一数据元素540-1中的值“A”,等于第一源的第二数据元素540-2中的值“B”, 不等于第一源的第三数据元素540-3中的值“C”,并且等于第一源的第N个数据 元素540-N中的值“B”。在一些实施例中,每一掩码指示在第一源打包数据中发 生匹配的位置处与来自第二源打包数据的对应数据元素有多少匹配。

图6是示出可响应于指令的实施例对具有16位宽字元素的128位宽打包源执 行的比较操作639的示例实施例的方框图。该指令可指定或者以其他方式指示包括 八个打包16位字数据元素640-1至640-8的第一集合的第一源128位宽打包数据 613,并且可指定或者以其他方式指示包括八个打包16位字数据元素641-1至641-8 的第二集合的第二源128位宽打包数据615。

在一些实施例中,该指令可任选地指定或者以其他方式指示任选的第三源647 (例如,隐含的通用寄存器)以指示要比较第一源打包数据的多少数据元素(例 如,子集)和/或任选的第四源648(例如,隐含的通用寄存器)以指示要比较第二 源打包数据的多少数据元素(例如,子集)。替换地,该指令的一个或多个立即数 (immediate)可用于提供该信息。在所示的示例中,第三源647提供了仅比较第一 源打包数据的八个数据元素中的最低有效的五个,并且第四源648提供了要比较第 二源打包数据的所有八个数据元素,但是这只是一个说明性示例。

响应于该指令,处理器或者其他装置可操作用于生成打包数据结果617并将其 存储在由该指令指定或者以其他方式指示的目的地存储位置616中。在一个或多个 子集由第三源647和/或第四源648指示的一些实施例中,该指令可使处理器或者其 他装置生成所有有效数据元素与所有有效数据元素的比较掩码642作为中间结果。 所有有效数据元素与所有有效数据元素的比较掩码642可包括根据第三和第四源中 的值而执行的比较子集的比较结果。在该特定示例中,生成四十个比较结果(即, 8x5)。在一些实施例中,可迫使不被执行比较的比较掩码位(例如,第一源的最高 有效的三个数据元素的比较掩码位)为预定值,例如迫使其为二进制0,如在示图 中由“F0”所示的。

在一些实施例中,要存储在目的地存储位置616中的打包数据结果617可包括 八个8位比较掩码的集合。例如,打包数据结果可包括八个打包结果数据元素644-1 至644-N的集合。在一些实施例中,这些八个打包结果数据元素641中的每一个可 对应于在对应的相对位置中第二源打包数据615的八个打包数据元素641中的一 个。在一些实施例中,八个打包结果数据元素644中的每一个可具有8位比较掩 码。在一些实施例中,每一8位比较掩码可对应于且指示第二源打包数据615的对 应打包数据元素641的比较结果。在一些实施例中,每一8位比较掩码可包括不同 的比较掩码位,用于与第二源打包数据615的关联/对应打包数据元素相比较的(例 如,根据第三源中的值)第一源打包数据613的八个不同的对应打包数据元素中的 每一有效打包数据元素。可迫使8位中的其他位为(例如,F0)多位。如上,至少 在概念上,每一8位掩码可表示来自掩码642的单独一列的掩码位序列。

图7是示出可响应于指令的一个实施例对具有8位字节元素的128位宽打包源 执行的比较操作739的示例实施例的方框图。该指令可指定或者以其他方式指示包 括十六个打包8位字节数据元素740-1至740-16的第一集合的第一源128位宽打包 数据713,并且可指定或者以其他方式指示包括十六个打包8位字节数据元素741-1 至741-16的第二集合的第二源128位宽打包数据715。

在一些实施例中,该指令可任选地指定或者以其他方式指示任选的第三源747 (例如,隐含的通用寄存器)以指示要比较第一源打包数据的多少数据元素(例 如,子集),和/或该指令可任选地指定或者以其他方式指示任选的第四源748(例 如,隐含的通用寄存器)以指示要比较第二源打包数据的多少数据元素(例如,子 集)。在所示的示例中,第三源747提供了只要比较第一源打包数据的十六个数据 元素中的最低有效的十四个,并且第四源748提供了只要比较第二源打包数据的十 六个数据元素中的最低有效的十五个,但是这只是一个说明性示例。在其他实施例 中,任选地还可使用最高有效或者中间范围。这些值可以不同的方式指定,诸如数 字、位置、索引、中间范围等。

响应于该指令,处理器或者其他装置可操作用于生成打包数据结果717并将其 存储在由该指令指定或者以其他方式指示的目的地存储位置716中。在一个或多个 子集由第三源747和/或第四源748指示的一些实施例中,该指令可使处理器或者其 他装置生成所有有效数据元素与所有有效数据元素的比较掩码742作为中间结果。 这可与先前描述的类似或者不同。

在一些实施例中,打包数据结果717可包括十六个16位比较掩码的集合。例 如,打包数据结果可包括十六个打包结果数据元素744-1至744-16的集合。在一些 实施例中,目的地存储位置可表示256位寄存器或者其他存储位置,这是第一和第 二源打包数据中的每一个的两倍宽。在一些实施例中,可使用隐含的目的地寄存 器。在其他实施例中,可例如使用因特尔架构矢量扩展(VEX)编码方案来指定目 的地寄存器。作为另一选项,可任选地使用两个128位寄存器或者其他存储位置。 在一些实施例中,这些十六个打包结果数据元素744中的每一个可对应于对应的相 关位置中第二源打包数据715的十六个打包数据元素741中的一个。在一些实施例 中,十六个打包结果数据元素744中的每一个可具有16位比较掩码。在一些实施例 中,每一16位比较掩码可对应于且指示第二源打包数据715的对应打包数据元素 741的比较结果。在一些实施例中,每一16位比较掩码可包括不同的比较掩码位, 用于与第二源打包数据715(例如,根据第四源中的值)的关联/对应打包数据元素 中的每一有效打包数据元素相比较的(例如,根据第三源中的值)第一源打包数据 713的十六个不同的对应打包数据元素中的每一有效打包数据元素。可迫使16位中 的其他位为(例如,F0)多位。

构想另外的其他实施例。例如,在一些实施例中,第一源打包数据可具有八个 8位打包数据元素,第二源打包数据可具有八个8位打包数据元素,并且打包数据 结果可具有八个8位打包结果数据元素。在另外的其他实施例中,第一源打包数据 可具有三十二个8位打包数据元素,第二源打包数据可具有三十二个8位打包数据 元素,并且打包数据结果可具有三十二个32位打包结果数据元素。即,在一些实施 例中,在目的地中可具有与每一源操作数中的源数据元素一样多的掩码,并且每一 掩码可具有与每一源操作数中的源数据元素一样多的位。

在一方面,以下伪码可表示图7的指令的操作。在该伪码中,EAX和EDX分 别是用于指示第一和第二源的子集的隐含的通用寄存器。

图8是示出比较操作839的示例实施例的方框图,响应于其中指令可操作用于 指定或者指示偏移量850以选择比较掩码子集而在打包数据结果818中报告的该指 令的一个实施例,该比较操作839可对具有8位字节元素的128位宽打包源进行操 作。该操作类似于针对图7示出和描述的操作,并且针对图7描述的操作细节和方 面可任选地与图8的实施例一起使用。为了避免混淆描述,将描述不同或附加的方 面,不再重复任选的类似处。

如在图7中,第一和第二源中的每一个是128位宽,并且各自包括十六个8位 字节数据元素。这些操作数的所有数据元素与所有数据元素的比较将产生256位的 比较位(即,16x16)。在一方面,这可被排列为十六个16位比较掩码,如在本文 中其他地方所述的。

在一些实施例中,例如为了使用128位寄存器或者其他存储位置而非256位寄 存器或者其他存储位置,该指令可任选地指定或者以其他方式指示任选的偏移量 850。在一些实施例中,该偏移量可由源操作数(例如,经由隐含寄存器)、或者该 指令的立即数等指定。在一些实施例中,该偏移量可选择整个所有数据元素与所有 数据元素的比较结果的子集或一部分在结果打包数据中报告。在一些实施例中,该 偏移量可指示起点。例如,它可指示包括在打包数据结果中的第一比较掩码。如所 示示例、实施例显示的,该偏移量可指示值2以指定跳过最初两个比较掩码且在结 果中不报告它们。如所示的,基于该偏移量2,打包数据结果818可存储十六个可 能的16位比较掩码的第三个744-3至第十个744-10。在一些实施例中,第三16位 比较掩码744-3可对应于第二源的第三打包数据元素741-3,并且第十16位比较掩 码744-10可对应于第二源的第十打包数据元素741-10。在一些实施例中,目的地是 隐含寄存器,但是这不是必需的。

图9是示出可任选地用于实现实施例的微架构方法的一个实施例的方框图。示 出执行逻辑910的一部分。执行逻辑包括所有有效元素与所有有效元素的比较逻辑 960。所有有效元素与所有有效元素的比较逻辑可操作用于比较所有有效元素与所有 其他有效元素。这些比较可并行、串行、或者部分并行和部分串行地进行。这些比 较中的每一个可使用例如类似于用于在打包比较指令中执行的比较的基本常规的比 较逻辑来进行。所有有效元素与所有有效元素的比较逻辑可生成所有有效元素与所 有有效元素的比较掩码942。作为示例,掩码942的一部分可表示图6的掩码642的 最右边两列。所有有效元素与所有有效元素的比较逻辑还可表示所有有效元素与所 有有效元素的比较掩码生成逻辑的一个实施例。

执行逻辑还包括与比较逻辑960耦合的掩码位零扩展逻辑962。掩码位零扩展 逻辑可操作用于零扩展所有有效元素与所有有效元素的比较掩码942的单独一位比 较结果中的每一个。如所示的,在最终生成8位掩码的情况下,在一些实施例,可 在更高有效的7位中的每一位中填充零。现在,来自掩码942的单独一位的掩码位 占据最低有效位,而所有更重要的位变成零。

执行逻辑还包括与掩码位零扩展逻辑962耦合的左移逻辑掩码位对准逻辑 964。左移逻辑掩码位对准逻辑可操作用于逻辑地左移零扩展掩码位。如所示的,在 一些实施例中,零扩展掩码位可逻辑地左移不同的位移量以有助于实现对准。具体 而言,第一行可逻辑地左移7位,第二行可逻辑地左移6位,第三行可逻辑地左移 5位,第四行可逻辑地左移4位,第五行可逻辑地左移3位,以此类推。经移位的元 素可在最低有效端上针对移出的所有位零扩展。这有助于实现结果掩码的掩码位的 对准。

执行逻辑还包括与左移逻辑掩码位对准逻辑964耦合的列或逻辑966。列或逻 辑可操作用于对来自对准逻辑964的一列逻辑左移和对准的元素进行逻辑或。该列 或操作可将来自该列内的不同行中的每一行的所有单个掩码位组合到在这种情况下 作为8位掩码的单个结果数据元素中的其现在对准的位置中。该操作有效地将原始 比较掩码942的列中的设定掩码位“转置”成不同的比较结果掩码数据元素。

应当理解这只是合适微架构的一个说明性示例。其他实施例可使用其他操作来 实现类似的数据处理或重新排列。例如,可任选地执行矩阵转置型操作,或者可将 位只路由到期望位置。

本文中所公开的指令是通用比较指令。本领域技术人员将设计这些指令用于各 种各样的目的/算法的各种用途。在一些实施例中,本文中所公开的指令可用于帮助 加速对两种文本图案的子图案关系的标识。

有利地,与在本领域中已知的其他指令相比,至少在特定实例中,本文中所公 开的指令的实施例对子图案检测可能相对更有用。为了进一步示出,考虑一示例可 以是有帮助的。考虑以上针对图6示出和描述的实施例。在本实施例中,对于该数 据,存在:(1)在位置1的具有长度3的一个前缀匹配;(2)在位置5的具有长 度3的一个中缀匹配;(3)在位置7的具有长度1的一个前缀匹配;以及(4)具 有长度1的附加非前缀匹配。如果由SSE4.2指令PCMPESTRM处理相同数据,则 可检测到较少匹配。例如,PCMPESTRM可能只检测在位置7的具有长度1的一个 前缀匹配。为了使PCMPESTM能够检测(1)的子图案,src2可能需要位移一且重 新加载到寄存器中,并且执行另一PCMESTRM指令。为了使PCMPESTM能够检 测(2)的子图案,src1可能需要位移一个字节且重新加载,并且执行另一 PCMESTRM指令。更一般地,对于m字节的针以及寄存器中的n字节的干草堆 (haystack)(其中m<n),PCMPESTRM可仅检测到:(1)在位置1至n-m-1 的m字节匹配;(2)在位置n-m至n-1的分别具有长度m-1、…、1的子前缀匹 配。相反,在本文中示出和描述的各种实施例能够检测更多组合,并且在一些实施 例中能够检测所有可能的组合。由此,本文中所公开的指令的实施例可有助于增加 在本领域中已知的各种不同的图案和/或子图案检测算法的速度和效率。在一些实施 例中,本文中所公开的指令可用于比较分子和/或生物序列。这些序列的示例包括但 不限于,DNA序列、RNA序列、蛋白序列、氨基酸序列、核苷酸序列等。蛋白 质、DNA、RNA以及其他这种排序一般趋于作为计算密集型任务。这种序列常常涉 及针对目标或参考DNA/RNA/蛋白序列/氨基酸或核苷酸的片段/氨基酸或核苷酸的 关键字的搜索基因序列数据库或文库。针对数据库中的数百万已知序列的基因片段/ 关键字的对准通常始于发现输入图案与存档序列之间的空间关系。具有给定大小的 输入图案通常被视为字母的子图案集合。字母的子图案可表示“针”。这些字母可 被包括在具有本文中所公开的指令的第一源打包数据中。在指令的不同实例中,数 据库/文库的不同部分可被包括在第二源打包数据操作数中。

文库或数据库可表示搜索的“干草堆”,作为算法的一部分以试图在干草堆中 定位针。该指令的不同实例可使用相同的针和干草堆的不同部分,直至试图找到针 搜索了整个干草堆。基于输入与每一存档序列的匹配和非匹配的子图案,评估给定 空间对准关系的对准分数。序列对准工具可使用比较结果作为评估DNA/RNA以及 其他氨基酸序列的大家庭之间的功能、结构和演变的一部分。在一方面,对准工具 可评估从仅数个字母的子图案开始的对准分数。双嵌套循环可以特定粒度(诸如字 节粒度)覆盖二维搜索空间。有利地,本文中所公开的指令可有助于显著地加速这 种搜索/排序。例如,当前认为与图7类似的指令可有助于使嵌套循环结构减少 16x16的数量级,并且与图8类似的指令可有助于使嵌套循环结构减少16x8的数量 级。

本文中所公开的指令可具有包括操作码或opcode的指令格式。操作码可表示 可操作用于标识指令和/或要执行的操作的多个位或者一个或多个字段。该指令格式 还可包括一个或多个源指定符和目的地指定符。作为示例,这些指定符中的每一个 可包括多个位或者一个或多个字段以指定寄存器的地址、存储器位置或者其他存储 位置。在其他实施例中,代替明确的指定符,源或目的地相反对于指令是隐含的。 在其他实施例中,相反可通过指令的立即数来指定在源寄存器或者其他源存储位置 中指定的信息。

图10是一组合适的打包数据寄存器1008的示例实施例的方框图。所示打包数 据寄存器包括三十二个512位打包数据或矢量寄存器。这些三十二个512位寄存器 被标记为ZMM0至ZMM31。在所示实施例中,这些寄存器中的较低十六个的较低 阶256位(即,ZMM0-ZMM15)被混叠或者覆盖在相应256位打包数据或矢量寄存 器(标记为YMM0-YMM15)上,但是这不是必需的。同样,在所示实施例中, YMM0-YMM15的较低阶128位被混叠或者覆盖在相应128位打包数据或矢量寄存 器(标记为XMM0-XMM1)上,但是这也不是必需的。512位寄存器ZMM0至 ZMM31可操作用于保持512位打包数据、256位打包数据或者128位打包数据。 256位寄存器YMM0-YMM15可操作用于保持256位打包数据或者128位打包数 据。128位寄存器XMM0-XMM1可操作用于保持128位打包数据。每一寄存器可用 于存储打包浮点数据或打包整数数据。支持不同数据元素大小,包括至少8位字节 数据、16位字数据、32位双字或单精度浮点数据、以及64位四倍字或双精度浮点 数据。打包数据寄存器的替换实施例可包括不同数量的寄存器、不同大小的寄存 器,并且可以或者可以不将较大寄存器混叠在较小寄存器上。

指令集包括一种或多种指令格式。给定指令格式定义各个字段(位的数量、位 的位置)以指定要执行的操作(操作码)以及对其要执行该操作的操作码等。通过 指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的 指令模板可被定义为具有指令格式的字段(所包括的字段通常在相同的阶中,但是 至少一些字段具有不同的位位置,因为包括更少的字段)的不同子集,和/或被定义 为具有不同解释的给定字段。由此,ISA的每一指令使用给定指令格式(并且如果 定义,则在该指令格式的指令模板的给定一个中)来表达,并且包括用于指定操作 和操作码的字段。例如,示例性ADD指令具有专用操作码以及包括指定该操作码 的操作码字段和选择操作数的操作数字段(源1/目的地以及源2)的指令格式,并 且该ADD指令在指令流中的出现将具有选择专用操作数的操作数字段中的专用内 容。已经发布和/或公布了涉及高级矢量扩展(AVX)(AVX1和AVX2)且使用矢 量扩展(VEX)编码方案的SIMD扩展集(例如,参见2011年10月的Intel64和 IA-32架构软件开发手册,并且参见2011年6月的Intel高级矢量扩展编程参 考)。

示例性指令格式

本文中所描述的指令的实施例可以不同的格式体现。另外,在下文中详述示例 性系统、架构、以及流水线。指令的实施例可在这些系统、架构、以及流水线上执 行,但是不限于详述的系统、架构、以及流水线。

VEX指令格式

VEX编码允许指令具有两个以上操作数,并且允许SIMD矢量寄存器比128位 长。VEX前缀的使用提供了三个操作数(或者更多)句法。例如,先前的两个操作 数指令执行改写源操作数的操作(诸如A=A+B)。VEX前缀的使用使操作数执 行非破坏性操作,诸如A=B+C。

图11A示出示例性AVX指令格式,包括VEX前缀1102、实操作码字段 1130、MoD R/M字节1140、SIB字节1150、位移字段1162以及IMM81172。图 11B示出来自图11A的哪些字段构成完整操作码字段1174和基础操作字段1142。 图11C示出来自图11A的哪些字段构成寄存器索引字段1144。

VEX前缀(字节0-2)以三字节形式进行编码。第一字节是格式字段1140 (VEX字节0,位[7:0]),该格式字段1140包含明确的C4字节值(用于区分C4 指令格式的唯一值)。第二-第三字节(VEX字节1-2)包括提供专用能力的大量位 字段。具体地,REX字段1105(VEX字节1,位[7-5])由VEX.R位字段(VEX字 节1,位[7]–R)、VEX.X位字段(VEX字节1,位[6]–X)以及VEX.B位字段 (VEX字节1,位[5]–B)组成。这些指令的其他字段对如在本领域中已知的寄存器 索引的较低三位(rrr、xxx以及bbb)进行编码,由此Rrrr、Xxxx以及Bbbb可通过 增加VEX.R、VEX.X以及VEX.B来形成。操作码映射字段1115(VEX字节1,位 [4:0]–mmmmm)包括对隐含的领先操作码字节进行编码的内容。W字段1164 (VEX字节2,位[7]–W)由记号VEX.W表示,并且取决于该指令提供了不同的功 能。VEX.vvvv1120(VEX字节2,位[6:3]–vvvv)的作用可包括如下:1)VEX.vvvv 对以颠倒(1(多个)补码)的形式指定第一源寄存器操作数进行编码,且对具有两 个或两个以上源操作数的指令有效;2)VEX.vvvv针对特定矢量位移对以1(多个) 补码的形式指定的目的地寄存器操作数进行编码;或者3)VEX.vvvv不对任何操作 数进行编码,保留该字段,并且应当包含1111b。如果VEX.L1168大小的字段 (VEX字节2,位[2]–L)=0,则它指示128位矢量;如果VEX.L=1,则它指示 256位矢量。前缀编码字段1125(VEX字节2,位[1:0]–pp)提供了用于基础操作字 段的附加位。

实操作码字段1130(字节3)还被称为操作码字节。操作码的一部分在该字段 中指定。

MOD R/M字段1140(字节4)包括MOD字段1142(位[7-6])、Reg字段 1144(位[5-3])、以及R/M字段1146(位[2-0])。Reg字段1144的作用可包括如 下:对目的地寄存器操作数或源寄存器操作数(Rfff中的rrr)进行编码;或者被视 为操作码扩展且不用于对任何指令操作数进行编码。R/M字段1146的作用可包括如 下:对参考存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄 存器操作数进行编码。

缩放索引基址(SIB)-缩放字段1150(字节5)的内容包括用于存储器地址 生成的SS1152(位[7-6])。先前已经针对寄存器索引Xxxx和Bbbb参考了SIB.xxx 1154(位[5-3])和SIB.bbb1156(位[2-0])的内容。

位移字段1162和立即数字段(IMM8)1172包含地址数据。

通用矢量友好指令格式

矢量友好指令格式是适于矢量指令(例如,存在专用于矢量操作的特定字段) 的指令格式。尽管描述了其中通过矢量友好指令格式支持矢量和标量运算两者的实 施例,但是替换实施例只通过矢量友好指令格式使用矢量运算。

图12A-12B是示出根据本发明的实施例的通用矢量友好指令格式及其指令模板 的方框图。图12A是示出根据本发明的实施例的通用矢量友好指令格式及其A类指 令模板的方框图,而图12B是示出根据本发明的实施例的通用矢量友好指令格式及其 B类指令模板的方框图。具体地,针对通用矢量友好指令格式1120定义A类和B类 指令模板,两者包括无存储器存取1205的指令模板和存储器存取1220的指令模 板。在矢量友好指令格式的上下文中的术语“通用”指不绑定到任何专用指令集的 指令格式。

尽管将描述其中矢量友好指令格式支持以下: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字节)数据元素宽度(或大小)的本发明的实施例,但是替换实施例可支持更 大、更小、和/或不同的矢量操作数大小(例如,256字节矢量操作数)与更大、更 小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。

图12A中的A类指令模板包括:1)在无存储器存取1205的指令模板内,示出 无存储器存取的全部取整(round)控制型操作1210的指令模板、以及无存储器存 取的数据变换型操作1215的指令模板;以及2)在存储器存取1220的指令模板内, 示出存储器存取的时间1225的指令模板和存储器存取的非时间1230的指令模板。 图12B中的B类指令模板包括:1)在无存储器存取1205的指令模板内,示出无存储 器存取的写掩码控制的部分取整控制型操作1212的指令模板以及无存储器存取的写 掩码控制的vsize型操作1217的指令模板;以及2)在存储器存取1220的指令模板 内,示出存储器存取的写掩码控制1227的指令模板。

通用矢量友好指令格式1200包括以下列出以在图12A-12B中示出顺序的如下 字段。

格式字段1240-该字段中的特定值(指令格式标识符值)唯一地标识矢量友好 指令格式,并且由此标识指令在指令流中以矢量友好指令格式出现。由此,该字段 在无需只有通用矢量友好指令格式的指令集的意义上是任选的。

基础操作字段1242-其内容区分不同的基础操作。

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

修饰符(modifier)字段1246-其内容将以指定存储器存取的通用矢量指令格 式出现的指令与不指定存储器存取的通用矢量指令格式出现的指令区分开;即在无 存储器存取1205的指令模板与存储器存取1220的指令模板之间。存储器存取操作 读取和/或写入到存储器等级(在一些情况下,使用寄存器中的值来指定源和/或目的 地地址),而非存储器存取操作不这样(例如,源和/或目的地是寄存器)。尽管在 一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是 替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。

扩充操作字段1250-其内容区分除基础操作以外要执行各种不同操作中的哪一 个操作。该字段是上下文专用的。在本发明的一个实施例中,该字段被分成类字段 1268、α字段1252、以及β字段1254。扩充操作字段1250允许在单一指令而非2、 3或4个指令中执行多组共同的操作。

缩放字段1260-其内容允许用于存储器地址生成(例如,用于使用2倍缩放* 索引+基址的地址生成)的索引字段的内容的缩放。

位移字段1262A-其内容用作存储器地址生成的一部分(例如,用于使用2倍 缩放*索引+基址+位移的地址生成)。

位移因数字段1262B(注意,位移字段1262A直接在位移因数字段1262B上的 并置指示使用一个或另一个)-其内容用作地址生成的一部分,它指定由存储器存 取的大小(N)缩放的位移因数,其中N是存储器存取中的字节数量(例如,用于 使用2倍缩放*索引+基址+缩放的位移的地址生成)。忽略冗余的低阶位,并且因 此位移因数字段的内容乘以存储器操作数总大小以生成在计算有效地址中使用的最 终位移。N的值由处理器硬件在运行时基于完整操作码字段1274(稍候在本文中描 述)和数据操纵字段1254C确定。位移字段1262A和位移因数字段1262B在它们不 用于无存储器存取1205的指令模板和/或不同的实施例可实现两者中的仅一个或均 未实现的意义上是任选的。

数据元素宽度字段1264-其内容区分使用大量数据元素宽度中的哪一个(在一 些实施例中用于所有指令,在其他实施例中只用于一些指令)。该字段在如果支持 仅一个数据元素宽度和/或使用操作码的某一方面支持数据元素宽度则不需要的意义 上是任选的。

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

立即数字段1272-其内容允许对立即数的规范。该字段在实现不支持立即数的 通用矢量友好格式中不存在且在不使用立即数的指令中不存在的意义上是任选的。

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

A类指令模板

在A类非存储器存取1205的指令模板的情况下,α字段1252被解释为其内容 区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器存取的取整型操作 1210和无存储器存取的数据变换型操作1215的指令模板分别指定取整1252A.1和数 据变换1252A.2)的RS字段1252A,而β字段1254区分要执行指定类型的操作中 的哪一种。在无存储器存取1205的指令模板中,缩放字段1260、位移字段 1262A、以及位移缩放字段1262B不存在。

无存储器存取的指令模板-全部取整控制型操作

在无存储器存取的全部取整控制型操作1210的指令模板中,β字段1254被解 释为其内容提供静态取整的取整控制字段1254A。尽管在本发明的所述实施例中取 整控制字段1254A包括抑制所有浮点异常(SAE)字段1256和取整操作控制字段 1258,但是替换实施例可支持、可将这些概念两者都编码成相同的字段或者只有这 些概念/字段中的一个或另一个(例如,可只有取整操作控制字段1258)。

SAE字段1256-其内容区分是否停用异常事件报告;当SAE字段1256的内容 指示启用抑制时,给定指令不报告任何种类的浮点异常标志且不提起任何浮点异常 处理器。

取整操作控制字段1258-其内容区分执行一组取整操作中的哪一个(例如,向 上取整、向下取整、向零取整、以及就近取整)。由此,取整操作控制字段1258允 许在每一指令的基础上改变取整模式。在其中处理器包括用于指定取整模式的控制 寄存器的本发明的一个实施例中,取整操作控制字段1250的内容覆盖该寄存器值。

无存储器清除的指令模板-数据变换型操作

在无存储器存取的数据变换型操作1215的指令模板中,β字段1254被解释为 数据变换字段1254B,其内容区分要执行大量数据变换中的哪一个(例如,无数据 变换、拌和、广播)的。

在A类存储器存取1220的指令模板的情况下,α字段1252被解释为驱逐提示 字段1252B,其内容区分要使用驱逐提示中的哪一个(在图12A中,为存储器存取 时间1225指令模版和存储器存取非时间1230的指令模版分别指定时间1252B.1和 非时间1252B.2)、而β字段1254被解释为数据操纵字段1254C,其内容区分要执 行大量数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广 播、源的向上转换、以及目的地的向下转换)。存储器存取1220的指令模版包括缩 放字段1260、以及任选的位移字段1262A或位移缩放字段1262B。

矢量存储器指令使用转换支持来执行来自存储器的矢量负载并将矢量存储到存 储器。如同有规律的矢量指令,矢量存储器指令以数据元素式的方式与存储器来回 传输数据,其中实际传输的元素由选为写掩码的矢量掩码的内容阐述。

存储器存取的指令模版-时间

时间数据是可能很快地重新使用足以从高速缓存受益的数据。然而,这是提示 且不同的处理器可以不同的方式实现它,包括完全忽略该提示。

存储器存取的指令模版-非时间

非时间数据是不可能很快地重新使用足以从第一级高速缓存中的高速缓存受益 且应当给予驱逐优先级的数据。然而,这是提示且不同的处理器可以不同的方式实 现它,包括完全忽略该提示。

B类指令模板

在B类指令模板的情况下,α字段1252被解释为写掩码控制(Z)字段 1252C,其内容区分由写掩码字段1270控制的写掩码应当是合并还是归零。

在B类非存储器存取1205的指令模板的情况下,β字段1254的一部分被解释 为RL字段1257A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对 无存储器存取的写掩码控制部分取整控制类型操作1212的指令模版和无存储器存取 的写掩码控制VSIZE型操作1217的指令模板分别指定取整1257A.1和矢量长度 (VSIZE)1257A.2),而β字段1254的其余部分区分要执行指定类型的操作中的 哪一种。在无存储器存取1205指令模板中,缩放字段1260、位移字段1262A以及 位移缩放字段1262B不存在。

在无存储器存取的写掩码控制的部分取整控制型操作1210的指令模版中,β字 段1254的其余部分被解释为取整操作字段1259A,并且停用异常事件报告(给定指 令不报告任何种类的浮点异常标志且不提起任何浮点异常处理器)。

取整操作控制字段1259A-只作为取整操作控制字段1258,其内容区分执行一 组取整操作中的哪一个(例如,向上取整、向下取整、向零取整、以及就近取 整)。由此,取整操作控制字段1259A允许在每一指令的基础上改变取整模式。在 其中处理器包括用于指定取整模式的控制寄存器的本发明的一个实施例中,取整操 作控制字段1250的内容覆盖该寄存器值。

在无存储器存取的写掩码控制VSIZE型操作1217的指令模版中,β字段1254 的其余部分被解释为矢量长度字段1259B,其内容区分要执行大量数据矢量长度中 的哪一个(例如,128字节、256字节、或512字节)。

在B类存储器存取1220的指令模版的情况下,β字段1254的一部分被解释为 广播字段1257B,其内容区分是否要执行广播型数据操纵操作,而β字段1254的其 余部分被解释为矢量长度字段1259B。存储器存取1220的指令模版包括缩放字段 1260、以及任选的位移字段1262A或位移缩放字段1262B。

针对通用矢量友好指令格式1200,示出完整操作码字段1274,包括格式字段 1240、基础操作字段1242以及数据元素宽度字段1264。尽管示出了其中完整操作 码字段1274包括所有这些字段的一个实施例,但是完整操作码字段1274包括在不 支持所有这些字段的实施例中的少于所有的这些字段。完整操作码字段1274提供操 作码(opcode)。

扩充操作字段1250、数据元素宽度字段1264以及写掩码字段1270允许这些特 征在每一指令的基础上以通用矢量友好指令格式指定。

写掩码字段和数据元素宽度字段的组合创建各种类型的指令,其中这些指令允 许基于不同的数据元素宽度应用该掩码。

在A类和B类内找到的各种指令模版在不同的情形下是有益的。在本发明的 一些实施例中,不同处理器或者处理器内的不同核可只有支持仅A类、仅B类、或 者可支持两类。举例而言,期望用于通用计算的高性能通用无序核可只支持B类, 期望主要用于图形和/或科学(吞吐量)计算的核可只支持A类,并且期望用于两者 的核可支持两者(当然,具有来自两类的模版和指令的一些混合的核,但是并非来 自两类的所有模版和指令都在本发明的权限内)。同样,单一处理器可包括多个 核,所有核支持相同的类或者其中不同的核支持不同的类。举例而言,在具有分离 的图形和通用核的处理器中,图形核中的期望主要用于图形和/或科学计算的一个核 可只支持A类,而通用核中的一个或多个可以是和期望用于通用计算的支持B类的 无序执行和寄存器重命名的高性能通用核。没有分离的图形核的另一处理器可包括 支持A类和B类两者的一个或多个通用有序或无序核。当然,在本发明的不同实施 例中,来自一类的特征还可在其他类中实现。以高级语言撰写的程序可被输入(例 如,仅仅按时间编译或者统计编译)到各种不同的可执行形式,包括:1)只有用于 执行的目标处理器支持的类的指令的形式;或者2)具有使用所有类的指令的不同组 合而撰写的替换例程且具有选择这些例程以基于由当前正在执行代码的处理器支持 的指令而执行的控制流代码的形式。

示例性专用矢量友好指令格式

图13A是示出根据本发明的实施例的示例性专用矢量友好指令格式的方框图。 图13A示出在其指定位置、大小、解释和字段的次序、以及那些字段中的一些字段 的值的意义上是专用的专用矢量友好指令格式1300。专用矢量友好指令格式1300 可用于扩展x86指令集,并且由此一些字段类似于在现有x86指令集及其扩展(例 如,AVX)中使用的那些字段或与之相同。该格式保持与具有扩展的现有x86指令 集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段、以 及立即数字段一致。示出来自图13A的字段映射到的来自图12的字段。

应当理解,虽然出于说明的目的在通用矢量友好指令格式1200的上下文中, 本发明的实施例参考专用矢量友好指令格式1300进行了描述,但是本发明不限于专 用矢量友好指令格式1300,声明的地方除外。例如,通用矢量友好指令格式1200 构想各种字段的各种可能的大小,而专用矢量友好指令格式1300被示为具有专用大 小的字段。作为具体示例,尽管在专用矢量友好指令格式1300中数据元素宽度字段 1264被示为一位字段,但是本发明不限于此(即,通用矢量友好指令格式1200构 想数据元素宽度字段1264的其他大小)。

通用矢量友好指令格式1200包括以下列出以在图13A中示出的顺序的如下字 段。

EVEX前缀(字节0-3)1302-以四字节形式进行编码。

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

第二-第四字节(EVEX字节1-3)包括提供专用能力的大量位字段。

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

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

操作码映射字段1315(EVEX字节1,位[3:0]–mmmm)–其内容对隐含的领先 操作码字节(0F、0F38、或0F3)进行编码。

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

EVEX.vvvv1320(EVEX字节2,位[6:3]–vvvv)-EVEX.vvvv的作用可包括 如下:1)EVEX.vvvv对以颠倒((多个)1补码)的形式指定的第一源寄存器操作 数进行编码且对具有两个或两个以上源操作数的指令有效;2)EVEX.vvvv针对特定 矢量位移对以(多个)1补码的形式指定的目的地寄存器操作数进行编码;或者3) EVEX.vvvv不对任何操作数进行编码,保留该字段,并且应当包含1111b。由此, EVEX.vvvv字段1320对以颠倒((多个)1补码)的形式存储的第一源寄存器指定 符的4个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将指定符 大小扩展到32个寄存器。

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

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

α字段1252(EVEX字节3,位[7]–EH,也称为EVEX.EH、EVEX.rs、 EVEX.RL、EVEX.写掩码控制、以及EVEX.N,还被示为具有α)-如先前所述 的,该字段是上下文专用的。

β字段1254(EVEX字节3,位[6:4]–SSS,也称为EVEX.s2-0、EVEX.r2-0、 EVEX.rr1、EVEX.LL0、EVEX.LLB,还被示为具有βββ)-如先前所述的,该字段 是内容专用的。

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

写掩码字段1270(EVEX字节3,位[2:0]–kkk)-其内容指定写掩码寄存器中 的寄存器索引,如先前所述的。在本发明的一个实施例中,专用值EVEX.kkk=000 具有隐含着没有写掩码用于特定指令(这可以各种方式(包括使用硬连线到所有的 写掩码或者旁路掩码硬件的硬件)实现)的特别行为。

实操作码字段1330(字节4)还被称为操作码字节。操作码的一部分在该字段 中指定。

MOD R/M字段1340(字节5)包括MOD字段1342、Reg字段1344、以及 R/M字段1346。如先前所述的,MOD字段1342的内容在存储器存取和非存储器存 取的操作之间进行区分。Reg字段1344的作用可被归结为两种情形:对目的地寄存 器操作数或源寄存器操作数进行编码;或者被视为操作码扩展且不用于对任何指令 操作数进行编码。R/M字段1346的作用可包括如下:对参考存储器地址的指令操作 数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。

缩放索引基址(SIB)字节(字节6)-如先前所述的,缩放字段1250的内容 用于存储器地址生成。SIB.xxx1354和SIB.bbb1356-先前已经针对寄存器索引 Xxxx和Bbbb参考了这些字段的内容。

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

位移因数字段1262B(字节7)-当MOD字段1342包含01时,字节7是位 移因数字段1262B。该字段的位置与传统x86指令集8位位移(disp8)的位置相 同,它以字节粒度工作。由于disp8是符号扩展的,因此它可只在-128和127字节偏 移量之间寻址,在64字节的高速缓存线的方面,disp8使用可被设为仅四个真正有 用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然 而,disp32需要4个字节。与disp8和disp32对比,位移因数字段1262B是disp8的 重新解释;当使用位移因数字段1262B时,实际位移通过位移因数字段的内容乘以 存储器操作数存取的大小(N)确定。该类型的位移被称为disp8*N。这减小了平均 指令长度(用于位移但具有大得多的范围的单一字节)。这种压缩位移基于有效位 移是存储器存取的粒度的倍数的假设,并且由此地址偏移量的冗余低阶位不需要被 编码。换句话说,位移因数字段1262B替代传统x86指令集8位位移。由此,位移 因数字段1262B以与x86指令集8位位移相同的方式(因此在ModRM/SIB编码规 则中没有变化)进行编码,唯一的不同在于,disp8超载至disp8*N。换句话说,在 编码规则中没有变化,或者只在通过硬件对位移值的解释中有编码长度(这需要使 位移缩放存储器操作数的大小以获得字节式地址偏移量)。

立即数字段1272如先前所述地操作。

完整操作码字段

图13B是示出根据本发明的实施例的构成完整操作码字段1274的具有专用矢 量友好指令格式1300的字段的方框图。具体地,完整操作码字段1274包括格式字 段1240、基础操作字段1242、以及数据元素宽度(W)字段1264。基础操作字段 1242包括前缀编码字段1325、操作码映射字段1315以及实操作码字段1330。

寄存器索引字段

图13C是示出根据本发明的一个实施例的构成寄存器索引字段1244的具有专 用矢量友好指令格式1300的字段的方框图。具体地,寄存器索引字段1244包括 REX字段1305、REX’字段1310、MODR/M.reg字段1344、MODR/M.r/m字段 1346、VVVV字段1320、xxx字段1354以及bbb字段1356。

扩充操作字段

图13D是示出根据本发明的一个实施例的构成扩充操作字段1250的具有专用 矢量友好指令格式1300的字段的方框图。当类(U)字段1268包含0时,它表达 EVEX.U0(A类1268A);当它包含1时,它表达EVEX.U1(B类1268B)。当 U=0且MOD字段1342包含11(表达无存储器存取操作)时,α字段1252(EVEX 字节3,位[7]–EH)被解释为rs字段1252A。当rs字段1252A包含1(取整 1252A.1)时,β字段1254(EVEX字节3,位[6:4]–SSS)被解释为取整控制字段 1254A。取整控制字段1254A包括一位SAE字段1256和两位取整操作字段1258。 当rs字段1252A包含0(数据变换1252A.2)时,β字段1254(EVEX字节3,位 [6:4]–SSS)被解释为三位数据变换字段1254B。当U=0且MOD字段1342包含 00、01或10(表达存储器存取操作)时,α字段1252(EVEX字节3,位[7]–EH) 被解释为驱逐提示(EH)字段1252B且β字段1254(EVEX字节3,位[6:4]–SSS) 被解释为三位数据操纵字段1254C。

当U=1时,α字段1252(EVEX字节3,位[7]–EH)被解释为写掩码控制 (Z)字段1252C。当U=1且MOD字段1342包含11(表达无存储器存取操作) 时,β字段1254的一部分(EVEX字节3,位[4]–S0)被解释为RL字段1257A;当 它包含1(取整1257A.1)时,β字段1254的其余部分(EVEX字节3,位bit[6-5]– S2-1)被解释为取整操作字段1259A,而当RL字段1257A包含0(VSIZE 1257.A2)时,β字段1254的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为矢量 长度字段1259B(EVEX字节3,位[6-5]–L1-0)。当U=1且MOD字段1342包含 00、01或10(表达存储器存取操作)时,β字段1254(EVEX字节3,位[6:4]– SSS)被解释为矢量长度字段1259B(EVEX字节3,位[6-5]–L1-0)和广播字段 1257B(EVEX字节3,位[4]–B)。

示例性寄存器架构

图14是根据本发明的一个实施例的寄存器架构1400的方框图。在所示的实施 例中,存在512位宽的32个矢量寄存器1410,这些寄存器被参考为zmm0至 zmm31。较低16个zmm寄存器的较低阶256位覆盖在寄存器ymm0-16上。较低16 个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)覆盖在寄存器 xmm0-15上。专用矢量友好指令格式1300对这些覆盖的寄存器文件操作,如在以下 表格中所示的。

换句话说,矢量长度字段1259B在最大长度与一个或多个其他较短长度之间进 行选择,其中每一这种较短长度是前一长度的一半,并且没有矢量长度字段1259B 的指令模版对最大矢量长度操作。此外,在一个实施例中,专用矢量友好指令格式 1300的B类指令模版对打包或标量单/双精度浮点数据以及打包或标量整数数据操 作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作; 取决于本实施例,较高阶数据元素位置保持与在指令之前相同或者归零。

写掩码寄存器1415-在所示的实施例中,存在8个写掩码寄存器(k0至 k7),每一写掩码寄存器的大小是64位。在替换实施例中,写掩码寄存器1415的 大小是16位。如先前所述的,在本发明的一个实施例中,矢量掩码寄存器k0无法 用作写掩码;当正常可指示k0的编码用作写掩码时,它选择硬连线的写掩码 0xFFFF,从而有效地停用该指令的写掩码。

通用机床电器1425-在所示的实施例中,存在与现有x86寻址模式一起使用以 对存储器操作数寻址的十六个64位通用寄存器。通过名称RAX、RBX、RCX、 RDX、RBP、RSI、RDI、RSP、以及R8至R15来引用这些寄存器。

混叠MMX打包整数平坦寄存器文件1450的标量浮点栈寄存器文件(x87栈) 1445-在所示的实施例中,x87栈是用于使用x87指令集扩展对32/64/80位浮点数 据执行标量浮点操作的8元素栈;而MMX寄存器用于对64位打包整数数据执行操 作、以及保留操作数用于在MMX和XMM寄存器之间执行的一些操作。

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

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

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

示例性核架构

有序和无序核方框图

图15A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命 名的无序发布/执行流水线两者的方框图。图15B是示出根据本发明的实施例的有序 架构核的示例性实施例以及包括在处理器中的示例性寄存器重命名的无序发布/执行 架构核两者的方框图。图15A-B中的实线框示出有序流水线和有序核,而任选增加 的虚线框示出寄存器重命名的无序发布/执行流水线和核。假设有序方面是无序方面 的子集,将描述无序方面。

在图15A中,处理器流水线1500包括提取级1502、长度解码级1504、解码级 1506、分配级1508、重命名级1510、调度(也称为分派或发布)级1512、寄存器 读取/存储器读取级1514、执行级1516、回写/存储器撰写级1518、异常处理级 1522、以及提交级1524。

图15B示出处理器核1590,该核1590包括耦合到执行引擎单元1550的前端 单元1530,并且两者耦合到存储器单元1570。核1590可以是精简指令集计算 (RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或者混合或 替换核类型。作为另一选项,核1590可以是专用核,诸如举例而言,网络或通信 核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。

前端单元1530包括耦合到指令高速缓存单元1534的分支预测单元1532,该指 令高速缓存单元1534耦合到指令翻译后备缓冲器(TLB)1536,该指令TLB1536 耦合到指令提取单元1538,该指令提取单元1538耦合到解码单元1540。解码单元 1540(或解码器)可对指令进行解码,并且生成一个或多个微操作、微代码输入 点、微指令、其他指令、或者从原始指令解码、或以其他方式反映原始指令、或从 原始指令派生的其他控制信号作为输出。解码单元1540可使用各种不同的机构来实 现。合适机构的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列 (PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1590包括微代码 ROM或者存储用于特定宏指令的微代码(例如,在解码单元1540中或者在前端单 元1530内)的其他介质。解码单元1540耦合到执行引擎单元1550中的重命名/分 配器单元1552。

执行引擎单元1550包括耦合到退役单元1554的重命名/分配器单元1552、以 及一组一个或多个调度器单元1556。调度器单元1556表示任意数量的不同调度 器,包括保留站、中央指令窗口等。调度器单元1556耦合到物理寄存器文件单元 1558。每一物理寄存器文件单元1558表示一个或多个物理寄存器文件,其中不同的 物理寄存器文件存储一种或多种不同的数据类型,诸如标量整数、标量浮点、打包 整数、打包浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一指令的地 址的指令指针)等。在一个实施例中,物理寄存器文件单元1558包括矢量寄存器单 元、写掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可提供架构矢量寄 存器,矢量掩码寄存器以及通用寄存器。物理寄存器文件单元1558与退役单元 1554重叠,以示出其中可实现寄存器重命名和无序执行(例如,使用重排序缓冲器 和回退寄存器文件;使用未来文件、历史缓冲器、以及退役寄存器文件;使用寄存 器映射和寄存器池等)的各种方式。回退单元1554和物理寄存器文件单元1558耦 合到执行集群1560。执行集群1560包括一组一个或多个执行单元1562以及一组一 个或多个存储器存取单元1564。执行单元1562可执行各种操作(例如,位移、加 法、减法、乘法),并且对各种类型的数据(例如,标量浮点、打包整数、打包浮 点、矢量整数、矢量浮点)执行。尽管一些实施例可包括专属于专用功能或功能集 的大量执行单元,但是其他实施例可包括全部都执行所有功能的仅一个执行单元或 者多个执行单元。调度器单元1556、物理寄存器文件单元1558、以及执行集群 1560被示为可能是多个单元,因为特定实施例为特定类型的数据/操作创建分离的流 水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/矢量整数/矢量浮点流 水线、和/或各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群的存 储器存取流水线-并且在单独的寄存器存取流水线的情况下,实现其中仅该流水线 的执行集群具有存储器存取单元1564的特定实施例)。还应当理解,在使用分离的 流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行,而其他流水线 可以是有序的。

一组存储器存取单元1564耦合到存储器单元1570,该存储器单元1570包括耦 合到数据高速缓存单元1574的数据TLB单元1572,该数据高速缓存单元1574耦合 到第二级(L2)高速缓存单元1576。在一个示例性实施例中,存储器存取单元1564 可包括负载单元、存储地址单元、以及存储数据单元,这些单元中的每一个耦合到 存储器单元1570中的数据TLB单元1572。指令高速缓存单元1534还耦合到存储器 单元1570中的第二级(L2)高速缓存单元1576。L2高速缓存单元1576耦合到一种 或多种其他级别的高速缓存,并且最终耦合到主存储器。

作为示例,示例性寄存器重命名、无序发布/执行核架构可如下地实现流水线 1500:1)指令提取1538执行提取和长度解码级1502和1504;2)解码单元1540执行 解码级1506;3)重命名/分配器单元1552执行分配级1508和重命名级1510;4)调度 器单元1556执行调度级1512;5)物理寄存器文件单元1558和存储器单元1570执行 寄存器读取/存储器读取级1514;执行集群1560执行执行级1516;6)存储器单元 1570和物理寄存器文件单元1558执行回写/存储器撰写级1518;7)各个单元可在异 常处理级1522中涉及;以及8)退役单元1554和物理寄存器文件单元1558执行提交 级1524。

核1590可支持一个或多个指令集(例如,x86指令集(具有已经使用较新版本 增加的一些扩展)、加利福尼亚州森尼维耳市MIPS Technologies的MIPS指令集、 加利福尼亚州森尼维耳市的ARM holding的ARM指令集(具有诸如NEON之类的 任选的附加扩展)),包括本文中所描述的指令。在一个实施例中,核1590包括逻 辑以支持打包数据指令集扩展(例如,AVX1、AVX2),由此允许许多多介质应用 所使用的操作使用打包数据来执行。

应当理解,该核可支持多线程(执行两组或两组以上的平行操作或线程),并 且可以包括分时多线程、同时多线程(其中单一物理核为每一线程提供物理核是同 时多线程的逻辑核)、或者其组合(例如,分时提取和解码以及此后诸如在IntelHyperthreading技术中的同时多线程)的各种方式这样做。

尽管在无序执行的上下文中描述了寄存器重命名,但是应当理解寄存器重命名 可在有序架构中使用。尽管处理器的所示实施例还包括单独的指令和数据高速缓存 单元1534/1574以及共享的L2高速缓存单元1576,但是替换实施例可具有用于指令 和数据两者的单一内部高速缓存,诸如举例而言,第一级(L1)内部高速缓存、或 多级内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和外部高速缓存 的组合,该外部高速缓存在核和/或处理器外部。替换地,所有高速缓存可在核和/或 处理器外部。

专用示例性有序核架构

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

图16A是根据本发明的实施例的连接到片上互联网络1602且具有第二级 (L2)高速缓存1604的本地子集的单一处理器核的方框图。在一个实施例中,指令 解码器1600支持具有打包数据指令集扩展的x86指令集。L1高速缓存1606允许对 高速缓存存储器进行低延迟存取标量和矢量单元。尽管在一个实施例中(为了简化 设计)标量单元1608和矢量单元1610使用分离的寄存器集合(分别是标量寄存器 1612和矢量寄存器1614)并且在两者之间传输的数据被写入存储器且随后读取回到 第一级(L1)高速缓存1606或从L1高速缓存1606中读取,但是本发明的替换实施 例可使用不同的方法(例如,使用单一寄存器集合或者包括允许数据在不写入和读 回的情况下在两个寄存器文件之间传输的通信路径)。

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

图16B是根据本发明的实施例的图16A中的处理器核的一部分的展开图。图 16B包括L1高速缓存1604的L1数据高速缓存1606A部分、以及关于矢量单元 1610和矢量寄存器1614的更多细节。具体地,矢量单元1610是16宽矢量处理单元 (VPU)(参见16宽ALU1628),该矢量处理单元执行整数、单精度浮动和双精 度浮动的指令中的一个或多个。VPU支持使用拌和单元1620拌和寄存器输入、使 用数字转换单元1622A-B数字转换、以及使用存储器输入上的复制单元1624复 制。写掩码寄存器1626允许断定所得矢量撰写。

具有集成存储器控制器和图形的处理器

图17是根据本发明的实施例的可具有一个以上核、可具有集成存储器控制 器、并且可具有集成图形的处理器1700的方框图。图17中的实线框示出具有单一 核1702A、系统代理1710、一组一个或多个总线控制器单元1716的处理器1700, 而任选增加的虚线框示出具有多个核1702A-N、系统代理单元1710中的一组一个或 多个集成存储器控制器单元1714、以及专用逻辑1708的替换处理器1700。

由此,处理器1700的不同实现可包括:1)具有作为集成图形和/或科学(吞吐 量)逻辑(该逻辑可包括一个或多个核)的专用逻辑1708、以及作为一个或多个通 用核(例如,通用有序核、通用无序核、两者的组合)的核1702A-N的CPU;2)具 有作为期望主要用于图形和/或科学(吞吐量)的大量专用核的核1702A-N的协处理 器;以及3)具有作为大量通用有序核的核1702A-N的协处理器。由此,处理器1700 可以是通用处理器、协处理器、或专用处理器,诸如举例而言,网络或通信处理 器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核 (MIC)协处理器(包括30个或30个以上的核)、嵌入式处理器等。处理器可在 一个或多个芯片上实现。处理器1700可以是一个或多个基板的一部分,和/或在一 个或多个基板上使用大量处理技术(诸如举例而言,BiCMOS、CMOS、或 NMOS)中的任一种技术实现。

存储器等级(hierarchy)包括核内的一级或多级高速缓存、一组或者一个或多 个共享高速缓存单元1706、以及耦合到一组集成存储器控制器单元1714的外部存 储器(未示出)。一组共享高速缓存单元1706可包括一个或多个中级高速缓存(诸 如第二级(L2)、第三级(L3)、第四级(L4))或其他级高速缓存、最后一级高 速缓存(LLC)、和/或其组合。尽管在一个实施例中,基于环形的互连单元1712 使集成图形逻辑1708、一组共享高速缓存单元1706、以及系统代理单元1710/集成 存储器控制器单元1714互连,但是替换实施例可使用任意数量的公知技术来互连这 些单元。在一个实施例中,在一个或多个高速缓存单元1706与核1702A-N之间维 持一致性。

在一些实施例中,核1702A-H中的一个或多个核能够多线程。系统代理1710 包括协调的那些组件和操作核1702A-N。系统代理单元1710可包括例如功率控制单 元(PCU)和显示单元。PCU可以是或者包括调整核1702A-N的功率状态必需的的 逻辑和组件、以及集成图形逻辑1708。显示单元用于驱动一个或多个外部连接的显 示器。

核1702A-N在架构指令集方面可以是同质的或者异质的,即核1702A-N中的 两个或两个以上核能够执行相同的指令集,而其他核可以能够只执行该指令集的子 集或者不同的指令集。

示例性计算机架构

图18-21是示例性计算机架构的方块图。在本领域中已知的用于膝上型个人计 算机、台式个人计算机、手持个人计算机(PC)、个人数字助理、工程工作站、服 务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、 图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手 持设备、以及各种其他电子设备的其他系统设计和配置也是合适的。一般而言,能 够结合本文中公开的处理器和/或其他执行逻辑的各种各样系统或电子设备通常是合 适的。

现在参考图18,示出了根据本发明的一个实施例的系统1800的方框图。系统 1800可包括一个或多个处理器1810、1815,这些处理器耦合到控制器中枢1820。 在一个实施例中,控制器中枢1820包括图形存储器控制器中枢(GMCH)1890和 输入/输出中枢(IOH)1850(它们可在分离的芯片上);GMCH1890包括耦合到存 储器1840和协处理器1845的存储器和图形控制器;IOH1850使输入/输出(I/O) 设备1860耦合到GMCH1890。替换地,存储器和图形控制器中的一个或两个在处 理器(如本文中所描述的)内集成,存储器1840和协处理器1845直接耦合到处理 器1810、以及单一芯片中的具有IOH1850的控制器中枢1820。

附加处理器1815的任选本质在图18中用虚线指示。每一处理器1810、1815 可包括本文中所描述的处理核中的一个或多个,并且可以是一些版本的处理器 1700。

存储器1840可以是例如动态随机存取存储器(DRAM)、相变存储器 (PCM)或者两者的组合。对于至少一个实施例,控制器中枢1820经由诸如前侧总 线(FSB)之类的多点总线(multi-drop bus)、诸如快速通道互连(QPI)之类的点 对点接口、或者类似的连接与处理器1810、1815进行通信。

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

在包括架构、微架构、热、功耗特性等的优点度量的范围方面,在物理资源 1810之间可存在各种差异。

在一个实施例中,处理器1810执行控制具有通用类型的数据处理操作的指 令。协处理器指令可被嵌入这些指令内。处理器1810识别如具有应当由附连的协处 理器1845执行的类型的这些协处理器指令。因此,处理器1810在协处理器总线或 者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协 处理器1845。协处理器1845接受和执行接收到的协处理器指令。

现在参考图19,示出了根据本发明的一个实施例的第一更专用的示例性系统 1900的方框图。如图19所示,多处理器系统1900是点对点互连系统,并且包括经 由点对点互连1950耦合的第一处理器1970和第二处理器1980。处理器1970和 1980中的每一个可以是一些版本的处理器1700。在本发明的一个实施例中,处理器 1970和1980分别是处理器1810和1815,而协处理器1938是协处理器1845。在另 一实施例中,处理器1970和1980分别是处理器1810和协处理器1845。

处理器1970和1980分别被示为包括集成存储器控制器(IMC)单元1972和 1982。处理器1970还包括点对点(P-P)接口1976和1978作为其总线控制器单元 的一部分;类似地,第二处理器1980包括P-P接口1986和1988。处理器1970、 1980可使用P-P接口电路1978、1988经由点对点(P-P)接口1950交换信息。如图 19所示,IMC1972和1982使处理器耦合到相应的存储器,即存储器1932和存储器 1934,这些存储器可以是在本地附连到各个处理器的主存储器的部分。

处理器1970、1980可各自使用点对点接口电路1976、1994、1986、1998经由 各个P-P接口1952、1954与芯片组1990交换信息。芯片组1990可任选地经由高性 能接口1939与协处理器1938交换信息。在一个实施例中,协处理器1938是专用处 理器,诸如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、 GPGPU、嵌入式处理器等。

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

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

如图19所示,各种I/O设备1914可与总线桥1918一起耦合到第一总线 1916,该总线桥1918使第一总线1916耦合到第二总线1920。在一个实施例中,诸 如协处理器、高吞吐量MIC处理器、GPGPU的加速器(诸如举例而言,图形加速 器或数字信号处理(DSP)单元)、现场可编程门阵列、或者任何其他处理器之类 的一个或多个附加处理器1915耦合到第一总线1916。在一个实施例中,第二总线 1920可以是低引脚数(LPC)总线。各种设备可耦合到第二总线1920,包括例如键 盘和/或鼠标1922、通讯设备1927、以及存储单元1928,诸如在一个实施例中可包 括指令/代码和数据1930的盘驱动或者其他大容量存储设备。此外,音频I/O1924 可耦合到第二总线1920。注意,其他架构是可能的。例如,代替图19的点对点架 构,系统可实现多点总线或者其他此类架构。

现在参考图20,示出了根据本发明的一个实施例的第二更专用的示例性系统 2000的方框图。图19和20中的相似元件具有相似的附图标记,并且图19的特定方 面已经从图20中省略以避免混淆图20的其他方面。

图20示出处理器1970、1980可分别包括集成存储器和I/O控制逻辑 (“CL”)1972和1982。由此,CL1972、1982包括集成存储器控制器单元并且包 括I/O控制逻辑。图20示出不仅存储器1932、1934耦合到CL1972、1982,而且 I/O设备2014也耦合到控制逻辑1972、1982。传统I/O设备2015耦合到芯片组 1990。

现在参考图21,示出了根据本发明的一个实施例的SoC2100的方框图。图17 中的类似元件具有相似的附图标记。同样,虚线框是更多高级SoC上的任选的特 征。在图21中,互连单元2102耦合到:包括一组一个或多个核202A-N和共享高 速缓存单元1706的应用处理器2110;系统代理单元1710;总线控制器单元1716; 集成存储器控制器单元1714;可包括集成图形逻辑、图形处理器、音频处理器以及 视频处理器的一组或者一个或多个协处理器2120;静态随机存取存储器(SRAM) 单元2130;直接存储器存取(DMA)单元2132;以及用于耦合到一个或多个外部 显示器的显示单元2140。在一个实施例中,协处理器2120包括专用处理器,诸如 举例而言,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入 式处理器等。

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

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

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

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

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

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

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

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

图22是根据本发明的实施例的对比使用软件指令转换器将源指令集中的二进 制指令转换成目的地指令集中的二进制指令的方框图。在所示的实施例中,指令转 换器是软件指令转换器,但是替换的指令转换器可以软件、固件、硬件、或者其各 种组合实现。图22示出以高级语言2202的程序可使用x86编译器2204进行编译以 生成x86二进制代码2206,该x86二进制代码2206可由具有至少一个x86指令集核 2216的处理器在本机上执行。具有至少一个x86指令集核2216的处理器表示可通过 兼容地执行或者以其他方式处理(1)因特尔x86指令集核的指令集的实质部分或者 (2)以在具有至少一个x86指令集核的因特尔处理器上运行为目标的对象代码版本 的应用或其他软件来执行与具有至少一个x86指令集核的因特尔处理器基本相同的 功能以实现与具有至少一个x86指令集核的因特尔处理器基本相同的结果的任何处 理器。x86编译器2204表示可操作用于生成在具有或者没有附加链接处理的情况下 可在具有至少一个x86指令集核2216的处理器上执行的x86二进制代码2206(例 如,对象代码)的编译器。类似地,图22示出以高级语言2202的程序可使用替换 指令集编译器2208进行编译,以生成可由不具有至少一个x86指令集核2214的处 理器(例如,具有执行加利福尼亚州森尼维耳市MIPS Technologies的MIPS指令集 和/或执行加利福尼亚州森尼维耳市ARM Holdings的ARM指令集的核的处理器) 在本机上执行的替换指令集二进制代码2210。指令转换器2212用于将x86二进制 代码2206转换成可由不具有x86指令集核2214的处理器在本机上执行的代码。该 经转换的代码不可能与替换指令集二进制代码2210相同,因为难以制作能够这样做 的指令转换器;然而,经转换的代码将完成一般操作并且由来自替换指令集的指令 构成。由此,指令转换器2212表示通过仿真、模拟、或者任何其他处理允许不具有 x86指令集处理器或核的处理器或者其他电子设备执行x86二进制代码2206的软 件、固件、硬件、或者其组合。

针对图4-9中的任一图所描述的组件、特征以及细节还可任选地用于图1-3中 的任一图中。图4的格式可由本文中所公开的任一指令或任一实施例使用。图10的 寄存器可由本文中所公开的任一指令或任一实施例使用。此外,本文中针对任一装 置所描述的组件、特征以及细节还可任选地用于本文中所描述的在实施例中可由这 种装置和/或使用这种装置执行的任一方法中。

示例实施例

以下示例涉及进一步的实施例。这些示例中的特性可用于一个或多个实施例中 的任何地方。

示例1是一种处理指令的装置。该装置包括多个打包数据寄存器。该装置还包 括与打包数据寄存器耦合的执行单元,响应于指示包括多个第一打包数据元素的第 一源打包数据、包括多个第二打包数据元素的第二源打包数据、以及目的地存储位 置的多元素与多元素的比较指令,该执行单元可操作用于将包括多个打包结果数据 元素的打包数据结果存储在目的地存储位置中。每一结果数据元素对应于第二源打 包数据的数据元素中的不同一个数据元素,每一结果数据元素包括多位比较掩码, 多位比较掩码包括不同的比较掩码位,用于与对应于结果数据元素的第二源打包数 据的数据元素相比较的第一源打包数据的每一不同的对应数据元素,每一比较掩码 指示对应比较的结果。

示例2包括示例1的主题,并且任选地其中响应于该指令,执行单元存储打包 数据结果,该打包数据结果指示第一源打包数据的所有数据元素与第二源打包数据 的所有数据元素的比较结果。

示例3包括示例1的主题,并且任选地其中响应于该指令,执行单元将多位比 较掩码存储在给定打包结果数据元素中,用于指示第一源打包数据的打包数据元素 中的哪些等于与给定打包结果数据元素相对应的第二源的打包数据元素。

示例4包括示例1-3中的任一个的主题,并且任选地其中第一源打包数据具有 N个打包数据元素且第二源打包数据具有N个打包数据元素,并且其中响应于该指 令,执行单元存储包括N个N位打包结果数据元素的打包数据结果。

示例5包括示例4的主题,并且任选地其中第一源打包数据具有八个8位打包 数据元素且第二源打包数据具有八个8位打包数据元素,并且其中响应于该指令, 执行单元存储包括八个8位打包结果数据元素的打包数据结果。

示例6包括示例4的主题,并且任选地其中第一源打包数据具有十六个8位打 包数据元素且第二源打包数据具有十六个8位打包数据元素,并且其中响应于该指 令,执行单元存储包括十六个16位打包结果数据元素的打包数据结果。

示例7包括示例4的主题,并且任选地其中第一源打包数据具有三十二个8位 打包数据元素且第二源打包数据具有三十二个8位打包数据元素,并且其中响应于 该指令,执行单元存储包括三十二个32位打包结果数据元素的打包数据结果。

示例8包括示例1-3中的任一个的主题,并且其中第一源打包数据具有N个打 包数据元素且第二源打包数据具有N个打包数据元素,其中该指令指示偏移量,其 中响应于该指令,执行单元存储包括N/2个N位打包结果数据元素的打包数据结 果,并且其中N/2个N位打包结果数据元素中的最低有效的一个N位打包结果数据 元素对应于由偏移量指示的第二源的打包数据元素。

示例9包括示例1-3中的任一个的主题,并且任选地其中响应于该指令,执行 单元存储包括多位比较掩码的打包结果数据元素,其中每一掩码位具有二进制值1 和二进制值0,二进制值1指示第一源打包数据的对应打包数据元素等于与打包结 果数据元素相对应的第二源的打包数据元素,二进制值0指示第一源打包数据的对 应打包数据元素不等于与打包结果数据元素相对应的第二源的打包数据元素。

示例10包括示例1-3中的任一个的主题,并且任选地其中响应于该指令,执行 单元存储多位比较掩码,这些多位比较掩码指示第一和第二源打包数据中的一个的 仅数据元素子集与第一和第二源打包数据中的另一个的数据元素的比较结果。

示例11包括示例1-3中的任一个的主题,并且任选地其中该指令指示进行比较 的第一和第二源打包数据中的一个的数据元素子集。

示例12包括示例1-3中的任一个的主题,并且任选地其中该指令隐含地指示目 的地存储位置。

示例13是一种处理指令的方法。该方法包括:接收多元素与多元素的比较指 令,该多元素与多元素的比较指令指示具有多个第一打包数据元素的第一源打包数 据、以及具有多个第二打包数据元素的第二源打包数据、以及目的地存储位置。该 方法还包括:响应于多元素与多元素的比较指令,将包括多个打包结果数据元素的 打包数据结果存储在目的地存储位置中。每一打包结果数据元素对应于第二源打包 数据的打包数据元素中的不同的一个打包数据元素,每一打包结果数据元素包括多 位比较掩码,该多位比较掩码包括不同的掩码位,用于与对应于打包结果数据元素 的第二源的打包数据元素相比较的第一源打包数据的每一不同的对应打包数据元 素,以指示比较结果。

示例14包括示例13的主题,并且任选地其中存储包括:存储指示第一源打包 数据的所有数据元素与第二源打包数据的所有数据元素比较的结果的打包数据结 果。

示例15包括示例13的主题,并且任选地其中接收包括:接收指示具有N个打 包数据元素的第一源打包数据以及具有N个打包数据元素的第二源打包数据的指 令;并且其中存储包括:存储包括N个N位打包结果数据元素的打包数据结果。

示例16包括示例15的主题,并且任选地其中接收包括:接收指示具有十六个 8位打包数据元素的第一源打包数据以及具有十六个8位打包数据元素的第二源打 包数据的指令;并且其中存储包括:存储包括十六个16位打包结果数据元素的打包 数据结果。

示例17包括示例13的主题,并且任选地其中接收包括:接收指示具有N个打 包数据元素的第一源打包数据、指示具有N个打包数据元素的第二源打包数据、且 指示偏移量的指令;并且其中存储包括:存储包括N/2个N位打包结果数据元素的 打包数据结果,N/2个N位打包结果数据元素中的最低有效的一个N位打包结果数 据元素对应于由偏移量指示的第二源的打包数据元素。

示例18包括示例13中的任一个的主题,并且任选地其中接收包括:接收指示 具有N个打包数据元素的第一源打包数据、指示具有N个打包数据元素的第二源打 包数据、且指示偏移量的指令;并且其中存储包括:存储包括N/2个N位打包结果 数据元素的打包数据结果,N/2个N位打包结果数据元素中的最低有效的一个N位 打包结果数据元素对应于由偏移量指示的第二源的打包数据元素。

示例19包括示例13中的任一个的主题,并且任选地其中接收包括:接收指示 第一源打包数据且指示第二源打包数据的指令,该第一源打包数据表示第一生物序 列,该第二源打包数据表示第二生物序列。

示例20是一种处理指令的装置。该系统包括互连。该系统还包括与互连耦合 的处理器。该系统还包括与互连耦合的动态随机存取存储器(DRAM),该DRAM 存储多元素与多元素的比较指令,该指令指示包括多个第一打包数据元素的第一源 打包数据、包括多个第二打包数据元素的第二源打包数据、以及目的地存储位置。 该指令如果由处理器执行则可操作用于使处理器执行操作,这些操作包括将包括多 个打包结果数据元素的打包数据结果存储在目的地存储位置中,每一打包结果数据 元素对应于第二源打包数据的打包数据元素中的不同的一个打包数据元素。每一打 包结果数据元素包括多位比较掩码,该多位比较掩码指示第一源打包数据的多个打 包数据元素与对应于打包结果数据元素的第二源的打包数据元素的比较结果。

示例21包括示例20的主题,并且任选地其中该指令如果由处理器执行则可操 作用于使处理器存储打包数据结果,该打包数据结果指示第一源打包数据的所有打 包数据元素与第二源打包数据的所有数据元素的比较结果。

示例22包括示例20-21中的任一个的主题,并且任选地其中该指令指示具有N 个打包数据元素的第一源打包数据以及具有N个打包数据元素的第二源打包数据, 并且其中该指令如果由处理器执行则可操作用于使处理器存储包括N个N位打包结 果数据元素的打包数据结果。

示例23是一种提供指令的制品。该制品包括存储指令的非瞬态机器可读存储 介质。该制品还包括该指令,该指令指示具有多个第一打包数据元素的第一源打包 数据、具有多个第二打包数据元素的第二源打包数据、以及目的地存储位置,并且 该指令如果由机器执行则可操作用于使机器执行操作,这些操作包括:将包括多个 打包结果数据元素的打包数据结果存储在目的地存储位置中,每一打包结果数据元 素对应于第二源打包数据的打包数据元素中的不同的一个打包数据元素,每一打包 结果数据元素包括多位比较掩码,每一多位比较掩码指示第一源打包数据的多个打 包数据元素与对应于具有多位比较掩码的打包结果数据元素的第二源的打包数据元 素的比较结果。

示例24包括示例23的主题,并且任选地其中该指令指示具有N个打包数据元 素的第一源打包数据以及具有N个打包数据元素的第二源打包数据,并且其中该指 令如果由机器执行则可操作用于使机器存储包括N个N位打包结果数据元素的打包 数据结果。

示例25包括示例23-24的主题,并且任选地其中非瞬态机器可读存储介质包括 非易失性存储器、DRAM、以及CD-ROM中的一个,并且其中该指令如果由机器执 行可则操作用于使机器存储指示第一源打包数据的所有打包数据元素中哪些等于第 二源打包数据的所有数据元素中的哪些的打包数据结果。

示例26包括一种执行示例13-19中的任一个的方法的装置。

示例27包括一种用于执行示例13-19中的任一个的方法的装置。

示例28包括一种用于执行示例13-19中的任一个的方法的装置,该装置包括解 码手段和执行手段。

示例29包括存储指令的机器可读存储介质,该指令如果由机器执行则使机器 执行示例13-19中的任一个的方法。

示例30包括一种执行基本如本文中所描述的方法的装置。

示例31包括一种执行基本如本文中所描述的指令的装置。

示例32包括一种包括用于执行基本如本文中所描述的方法的手段的装置。

在该描述和权利要求中,使用了术语“耦合”和/或“连接”、及其派生词。 应当理解,这些术语不旨在作为彼此的同义词。相反,在特定实施例中,“连接” 可用于指示两个或两个以上元件彼此直接物理或电接触。“耦合”可意味着两个或 两个以上元件直接物理或电接触。然而,“耦合”还可意味着两个或两个以上元件 彼此不直接接触,但是仍然彼此协同操作或交互。例如,执行单元可通过一个或多 个中间组件与寄存器或解码器耦合。在附图中,箭头用于示出连接和耦合。

在该描述和权利要求中,可使用了术语“逻辑”。如本文中所使用的,逻辑可 包括硬件、固件、软件或者其各种组合。逻辑的示例包括集成电路、专用集成电 路、模拟电路、数字电路、编程逻辑设备、包括指令的存储器设备等。在一些实施 例中,硬件逻辑可包括可能与其他电路组件一起的晶体管和/或门。

在以上描述中,为了提供对实施例的透彻理解阐述了具体的细节。然而,在没 有这些具体细节中的部分的情况下,可实践其他实施例。本发明的范围不是由所提 供的具体示例确定,而是仅由所附权利要求确定。在附图中显示且在说明书中描述 的关系的所有等效关系都被涵盖在实施例内。在其他实例中,以方块图的形式或者 在没有细节的情况下,示出了公知电路、结构、设备、以及操作,以避免混淆对该 描述的理解。在示出和描述了多个组件的一些情况下,它们可被一起集成到单一组 件中。在示出和描述了单一组件的一些情况下,该单一组件可被分成两个或两个以 上组件。

描述了各种操作和方法。在流程图中以相对基础的形式描述了这些方法中的一 些方法,但是操作可被任选地增加到这些方法和/或从这些方法移除。另外,尽管流 程图示出根据示例实施例的操作的特定次序,但是特定次序是示例性的。替换实施 例可任选地以不同的次序执行操作,组合特定操作,重叠特定操作等。

特定操作可由硬件组件执行,或者可以机器可执行或电路可执行指令体现,这 些操作可用于使得和/或者导致机器、电路、或硬件组件(例如,处理器、处理器的 一部分、电路等)通过执行操作的指令来编程。这些操作还可任选地由硬件和软件 的组合执行。处理器、机器、电路、或硬件可包括可操作用于执行和/或处理指令且 响应于该指令存储结果的专用或特定电路或者其他逻辑(例如,可能与固件和/或软 件组合的硬件)。

一些实施例包括制品(例如,计算机程序产品),该制品包括机器可读介质。 该介质可包括以可由机器读取的形式提供(例如,存储)信息的机构。机器可读介 质可提供指令或指令顺序或者在其上存储了指令或者令顺序,该指令如果由机器执 行和/或在由机器执行时可操作用于使机器执行和/或导致机器执行本文中所公开的一 种或多种操作、方法、或技术。机器可读介质可提供(例如,存储)本文中所公开 的指令的一个或多个实施例。

在一些实施例中,机器可读介质可包括有形和/或非瞬态机器可读存储介质。 例如,有形和/或非瞬态机器可读存储介质可包括软盘、光学存储介质、光盘、光学 数据存储设备、CD-ROM、磁盘、磁电-光盘、只读存储器(ROM)、可编程ROM (PROM)、可擦除和可编程ROM(EPROM)、电可擦除和可编程ROM (EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM (DRAM)、闪存、相变存储器、相变数据存储设备、非易失性存储器、非易失性 数据存储设备、非瞬态存储器、非瞬态数据存储设备等。非瞬态机器可读存储介质 不由瞬态传播信号组成。在另一实施例中,机器可读介质可包括瞬态机器可读通信 介质,例如电、光、声、或者其他形式的传播信号,诸如载波、红外信号、数字信 号等。

合适的机器的示例包括但不限于,通用处理器、专用处理器、指令处理装置、 数字逻辑电路、集成电路等。合适的机器的其他示例包括计算设备、以及结合这些 处理器、指令处理装置、数字逻辑电路、或集成电路的其他电子设备。这些技术设 备和电子设备的示例包括但不限于,台式计算机、膝上型计算机、笔记本计算机、 平板计算机、上网本、智能电话、蜂窝电话、服务器、网络设备(例如,路由器和 交换机)、移动因特网设备(MID)、媒体播放器、智能电视、上网机、机顶盒、 以及视频游戏控制器。

例如,贯穿本说明书对“一个实施例”、“实施例”、“一个或多个实施 例”、“一些实施例”的引用指示特定特征可被包括在本发明的实践中,但是不一 定需要这样。类似地,在该描述中,出于流线型化本公开和辅助对各个发明性方面 的理解的目的,各种特征有时被一起归组在单一实施例、附图、及其描述中。然 而,公开的该方法不被解释为反映本发明需要多于在每一权利要求中明确叙述的特 征的意图。相反,如所附权利要求反映的,发明性方面在于少于单一公开的实施例 的所有特征。因此,该详细描述之后的权利要求由此被明确地结合到该详细描述 中,其中,每一权利要求本身代表本发明的单独实施例。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号