CN107924307A - 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令 - Google Patents

按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令 Download PDF

Info

Publication number
CN107924307A
CN107924307A CN201680048981.4A CN201680048981A CN107924307A CN 107924307 A CN107924307 A CN 107924307A CN 201680048981 A CN201680048981 A CN 201680048981A CN 107924307 A CN107924307 A CN 107924307A
Authority
CN
China
Prior art keywords
data element
result
instruction
source
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201680048981.4A
Other languages
English (en)
Other versions
CN107924307B (zh
Inventor
C·J·休斯
J·S·朴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN107924307A publication Critical patent/CN107924307A/zh
Application granted granted Critical
Publication of CN107924307B publication Critical patent/CN107924307B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

处理器包括解码单元,该解码单元用于对指令进行解码,该指令指示具有源数据元素的源紧缩数据操作数,并指示目的地存储位置。源数据元素中的每个源数据元素都具有源数据元素值和源数据元素位置。响应于该指令,执行单元存储结果紧缩数据操作数,该结果紧缩数据操作数具有各自都具有结果数据元素值和结果数据元素位置的结果数据元素。每个结果数据元素值为以下之一:(1)等于最接近源操作数的一端的、具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及(2)当没有源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。

Description

按索引分散至寄存器以及数据元素重布置处理器、方法、系统 和指令
背景
技术领域
本文中所述的实施例总体上涉及处理器。具体而言,本文中所述的实施例总体上涉及用于处理紧缩数据的处理器。
背景技术
许多处理器具有单指令多数据(SIMD)架构。在SIMD架构中,紧缩数据指令、向量指令或SIMD指令可对在寄存器或存储器位置内被紧缩为紧缩数据、向量数据或SIMD数据的多个数据元素进行操作。有代表性地,寄存器的多个位可在逻辑上被划分为数据元素的序列。例如,128位宽的紧缩数据寄存器可具有十六个8位数据元素、八个16位数据元素、四个32位数据元素或两个64位数据元素。数据元素中的每个数据元素可表示分开的单个数据片段(例如,像素颜色、复数的分量等),该分开的单个数据片段可被分别操作和/或独立于彼此被操作。处理器可具有并行执行硬件,其响应于紧缩数据指令以同时和/或并行地对多个数据元素操作。
附图说明
通过参考以下描述以及用于说明多个实施例的附图,可最佳地理解本发明。在附图中:
图1是处理器的实施例的框图。
图2是按索引聚集至寄存器操作的示例实施例的框图。
图3是可操作用于执行按索引分散至寄存器指令的实施例的处理器的实施例的框图。
图4是按索引分散至寄存器操作的示例实施例的框图。
图5是按索引分散至寄存器执行单元的详细的示例实施例的框图。
图6是执行按索引分散至寄存器指令的实施例的方法的实施例的流程框图。
图7是可操作用于执行数据重布置指令的实施例的处理器实施例的框图。
图8是数据元素重布置操作的第一示例实施例的框图。
图9是数据元素重布置执行单元的详细的示例实施例的框图。
图10是数据元素重布置操作的第二示例实施例的框图。
图11是执行按索引分散至寄存器例程的处理器中的方法的示例实施例的流程框图。
图12A-12C是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。
图13A-B是示出根据本发明的实施例的示例性专用向量友好指令格式和操作码字段的框图。
图14A-D是示出根据本发明的实施例的示例性专用向量友好指令格式及其多个字段的框图。
图15是寄存器架构的实施例的框图。
图16A是示出有序流水线的实施例以及寄存器重命名的乱序发布/执行流水线的实施例的框图。
图16B是处理器核的实施例的框图,该处理器核包括耦合到执行引擎单元的前端单元,并且前端单元和执行引擎单元两者都耦合到存储器单元。
图17A是单个处理器核以及它与管芯上互连网络的连接及其第二级(L2)高速缓存的本地子集的实施例的框图。
图17B是图17A的处理器核的部分的展开图的实施例的框图。
图18是可具有多于一个的核、可具有集成存储器控制器并且可具有集成图形器件的处理器的实施例的框图。
图19是计算机架构的第一实施例的框图。
图20是计算机架构的第二实施例的框图。
图21是计算机架构的第三实施例的框图。
图22是计算机架构的第四实施例的框图。
图23是根据本发明的实施例的使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文中所公开的是指令、用于执行这些指令的处理器、在处理或执行这些指令时由处理器执行的方法、包含用于处理或执行这些指令的一个或多个处理器的系统以及存储指令的机器可读介质。在以下描述中,阐述多个特定细节(例如,特定指令操作、用于实现指令的微架构、数据格式、处理器配置、操作序列等)。然而,在没有这些特定细节的情况下,也可实施多个实施例。在其他实例中,未详细示出公知的电路、结构和技术,以避免使对本说明书的理解模糊。
图1是处理器100的实施例的框图。在一些实施例中,该处理器可以是通用处理器(例如,台式计算机、膝上型计算机或其他计算机中所使用类型的通用微处理器或中央处理单元(CPU))。或者,该处理器可以是专用处理器。合适的专用处理器的示例包括但不仅限于,网络处理器、通信处理器、加密处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器)。
处理器具有指令集架构(ISA)。ISA表示处理器的架构中的与编程有关的部分,并且通常包括处理器的原生指令、架构寄存器、数据类型、寻址模式、存储器架构,等等。ISA与微架构不同,微架构一般表示被选择用于实现ISA的特定的处理器设计技术。处理器可具有各种复杂指令集计算(CISC)架构、精简指令集计算(RISC)架构、超长指令字(VLIW)架构、混合架构、其他类型的架构中的任一种,或者可具有不同架构的组合(例如,不同的核可具有不同的架构)。
ISA包括架构可见的寄存器(例如,架构寄存器组)110。架构寄存器在本文中可被简称为寄存器。除非另外指定或明确,否则在本文中使用短语“架构寄存器”、“寄存器组”和“寄存器”来指对软件和/或编程者可见的寄存器和/或由宏指令指定以标识操作数的寄存器。这些寄存器与给定微架构中的其他非架构或非架构可见的寄存器(例如,临时寄存器、重排序缓冲器、引退寄存器等)形成对照。寄存器一般表示管芯上处理器存储位置。如图所示,寄存器可包括可操作用于存储紧缩数据、向量数据或SIMD数据的紧缩数据寄存器112。在一些实施例中,寄存器可包括紧缩数据操作掩码寄存器114。任选的紧缩数据操作掩码寄存器将在下文中进一步讨论。
处理器还具有并且还支持指令集102。指令集可表示宏指令、汇编语言指令或处理器原生地能够执行的机器级指令。如图所示,处理器可具有解码单元116和一个或多个执行单元118,解码单元116可操作用于将指令集中的指令解码为微指令、微操作或其他经解码的指令或控制信号,一个或多个执行单元118可操作用于实施或执行经解码的指令或控制信号。
再参见图1,在一些实施例中,指令集可任选地包括至少一条按索引聚集至寄存器指令104。在本领域中有时也将按索引聚集至寄存器指令称为换序指令和/或混洗指令。按索引聚集至寄存器指令可以可操作以使用索引将源数据元素聚集到结果寄存器中。例如,在一些实施例中,按索引聚集至寄存器指令可指示具有数据元素的源紧缩数据操作数,可指示具有索引的源紧缩索引操作数,并且按索引聚集至寄存器指令当被执行时可利用索引来选择源紧缩数据操作数的数据元素,并将所选择的源数据元素存储到对应于操作数内的相同的相对位置中的索引的对应的结果数据元素。
在一些实施例中,指令集可任选地包括至少一条按索引分散至寄存器指令106。按索引分散至寄存器指令可以可操作用于使用索引将源数据元素分散到结果寄存器。例如,在一些实施例中,按索引分散至寄存器指令可指示具有数据元素的源紧缩数据操作数,可指示具有索引的源紧缩索引操作数,并且按索引分散至寄存器指令当被执行时可利用索引来选择结果紧缩数据操作数的结果数据元素,并将对应于操作数内的相同的相对位置中的索引的对应的源数据元素存储到所选择的结果数据元素。
如可以容易地看出的那样,按索引聚集至寄存器指令和按索引分散至寄存器指令能以不同方式来使用索引。在一些实施例中,指令集可任选地包括至少一条数据元素重布置指令108,其适用于将分散索引重布置为聚集索引和/或将聚集索引重布置为分散索引。例如,数据元素重布置指令可以可操作用于将按分散模式布置的源紧缩索引操作数的索引重布置为按聚集模式布置的结果紧缩索引操作数的索引。或者,数据元素重布置指令可以可操作用于将按聚集模式布置的源紧缩索引操作数的索引重布置为按分散模式布置的结果紧缩索引操作数的索引。将会理解,在不同的实施例中,指令集可包括少至指令104、106、108中的至少一条指令,或可包括此类指令中的两条或更多条指令(例如,相同类型和/或不同类型中的任一者),或可包括所有此类指令。
有利的是,指令104、106、108中的每一条指令单独地或组合地趋于帮助改善各种不同类型算法的性能。此外,包括这些指令的组合可能是有利的。例如,如果指令集包含按索引聚集至寄存器指令(例如,换序指令、混洗指令等),则将至少一条按索引分散至寄存器指令和/或至少一条分散索引至聚集索引重布置指令包括在指令集中可帮助补足和/或提供相对于按索引聚集至寄存器指令的对称性。相反,在指令集中不具有这些指令中的至少一条指令会趋于暴露不对称性或缺陷,该不对称性或缺陷会趋于使得某些算法向量化和/或以其他方式实现是昂贵的。
图2是示出可响应于按索引聚集至寄存器指令的实施例而执行的按索引聚集至寄存器操作220的示例实施例的框图。该操作可由本文中所公开的各种处理器中的任一处理器来执行。
指令可指定(例如,显式地指定)或以其他方式指示(例如,隐式地指示)具有多个紧缩数据元素的源紧缩数据操作数222。在示图中,当从右向左读时,数据元素被标记为数据元素A、B、C和D。不作为限制,数据元素A、B、C和D可表示整数、定点元素、浮点元素或其他数据类型。
在数据元素A、B、C和D中的每一个的上方示出的是数据元素位置标识符。在示图中,最低有效数据元素(即,数据元素A)在右边,而最高有效数据元素(即,数据元素D)在左边。具体地,数据元素A占据最低有效数据元素位置零(0),数据元素B占据次低有效数据元素位置一(1)、数据元素C占据次高有效数据元素位置二(2),数据元素D占据最高有效数据元素位置三(3)。
指令还可指定或以其他方式指示具有多个紧缩索引的源紧缩索引操作数224。在所示示例中,当从右向左读时,这些索引具有值2、1、0和2。这些值仅是示例。可以替代地使用值的其他组合。在一些实施例中,索引可表示整数值。在一些实施例中,索引能以聚集模式或布置来布置。如将在下文中进一步所解释,在一些实施例中,源紧缩索引操作数224可表示分散索引至聚集索引重布置指令的结果,但是本发明的范围不限于此。
在所示实施例中,仅具有四个数据元素并且仅具有四个索引。然而,在其他实施例中,可以任选地使用更多数据元素和/或更多索引。通常,每个源紧缩数据操作数中的数据元素或索引的数量可以等于源紧缩数据操作数的位的尺寸除以单个数据元素或索引的位的尺寸。在各种实施例中,源紧缩数据操作数中的每一个的尺寸或宽度可以是64位、128位、256位、512位或1024位,但是本发明的范围并不限于此。在各种实施例中,每一个数据元素或索引的尺寸或宽度可以是8位、16位、32位或64位,但是本发明的范围并不限于此。其他紧缩数据操作数尺寸、数据元素尺寸和索引尺寸也是合适的。在各种实施例中,在源紧缩数据操作数中的每一个中可具有至少四个、至少八个、至少十六个、至少三十二个、至少六十四个或至少一百二十八个数据元素或索引。
响应于按索引聚集指令和/或操作,具有经聚集的源数据元素的结果紧缩数据操作数226可(例如,由执行单元)生成并存储在目的地紧缩数据寄存器212中。目的地紧缩数据寄存器可由该指令指定或以其他方式指示。
在按索引聚集指令和/或操作的情况下,源紧缩索引操作数224的索引用于选择或聚集源紧缩数据操作数222的源数据元素,并将所选择或所聚集的源数据元素存储到结果紧缩数据操作数226的对应的结果数据元素。将索引与源紧缩数据操作数中的源数据元素连接的第一组箭头224示出索引被用于选择源紧缩数据操作数中的源数据元素位置。在一些实施例中,每个索引的值可表示数据元素位置标识符以标识源紧缩数据操作数中的给定的数据元素位置。例如,如箭头227所示,索引值“2”(即,对于最低有效索引和最高有效索引两者)选择、索引或以其他方式指示数据元素位置二(2)中的源数据元素C,索引值“1”选择、索引或以其他方式指示数据元素位置一(1)中的源数据元素B,索引值“0”选择、索引或以其他方式指示数据元素位置一(0)中的源数据元素A。在其他实施例中,具有更多的数据元素位置(例如,至少16个、32个、64个或128个),并且每个索引可选择数据元素位置中的任一个(例如,16个、32个、64个或128个中的任一个)。
将索引与结果紧缩数据操作数中的结果数据元素连接的第二组箭头228示出索引与操作数内在相同的相对位置中的结果数据元素彼此对应。这种对应可以是隐式或固有的,而不是显式地指定的。例如,最低有效索引可隐式地对应于最低有效结果数据元素,次低有效索引可隐式地对应于次低有效结果数据元素,次高有效索引可隐式地对应于次高有效结果数据元素,最高有效索引可隐式地对应于最高有效结果数据元素。
由索引选择或聚集的源数据元素可存储至对应于这些索引的结果数据元素。例如,由最低有效索引值“2”选择的源数据元素C可存储到对应的最低有效结果数据元素,由次低有效索引值“1”选择的源数据元素B可存储到对应的次低有效结果数据元素,由次高有效索引值“0”选择的源数据元素A可存储到对应的次高有效结果数据元素,由最高有效索引值“2”选择的源数据元素C可存储到对应的最高有效结果数据元素。
相应地,在按索引聚集至寄存器指令和/或操作中,索引用于选择或聚集源数据元素,并且利用索引将所选择或所聚集的源数据元素存储到相同的相对位置中隐式地对应的结果数据元素。如在云230处一般地所示,第i个位置的索引可选择或以其他方式指示将被存储在对应的第i个位置的结果数据元素中的源数据元素。
图3是可操作用于执行按索引分散至寄存器指令306的实施例的处理器300的实施例的框图。在实施例中,处理器300可以是图1中的处理器100,或可被包括在图1中的处理器100中。本文中针对处理器100所描述的组件、特征和特定的任选细节也任选地适用于处理器300。或者,处理器300可以是与处理器100类似或不同的处理器,或者可被包括在与处理器100类似或不同的处理器中。此外,处理器100可以是与处理器300类似或不同的处理器,或者可包括与处理器300类似或不同的处理器。
在操作期间,处理器300可接收按索引分散至寄存器指令306。例如,可通过总线或其他互连从存储器接收指令。指令可表示处理器的指令集的宏指令、汇编语言指令、机器代码指令或其他指令或控制信号。在一些实施例中,按索引分散至寄存器指令可显式地指定(例如,通过一个或多个字段或位组)或以其他方式(例如,隐式地指示)具有多个紧缩数据元素的源紧缩数据操作数332,可指定或以其他方式指示具有多个紧缩索引的源紧缩索引操作数334,并且可指定或以其他方式指示结果紧缩数据操作数336要被存储到其的目的地紧缩数据寄存器335。作为一个示例,指令可具有源和/或目的地操作数指定字段,用于指定用于源和/或目的地操作数的紧缩数据寄存器或其他存储位置。或者,这些操作数中的一个或多个可以任选地对于指令是隐式的(例如,对于指令的操作码是隐式的)。一方面,可以已从输入/输出设备(例如,网络接口、视频输入设备、无线接口、音频输入设备等)接收到源操作数的数据。
再次参见图3,处理器包括解码单元316。解码单元有时被称为解码器。解码单元可接收按索引分散至寄存器指令306并对其解码。解码单元可输出一个或多个相对较低级别的指令或控制信号(例如,一个或多个微指令、微操作、微代码进入点、经解码指令或控制信号,等等),这一个或多个相对较低级别的指令或控制信号反映、表示相对较高级别的按索引分散至寄存器指令和/或从相对较高级别的按索引分散至寄存器指令导出。在一些实施例中,解码单元可包括:一个或多个输入结构(例如,(多个)端口、(多个)互连、接口),用于接收按索引分散至寄存器指令;指令识别和解码逻辑,与一个或多个输入结构耦合,用于识别按索引分散至寄存器指令并对其解码;以及一个或多个输出结构((例如,(多个)端口、(多个)互连、接口)),与指令识别和解码逻辑耦合,用于输出较低级别的(多条)指令或(多个)控制信号。可使用各种不同机制来实现解码单元,包括但不限于,适用于实现解码单元的微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)和其他机制。
在一些实施例中,可以任选地使用指令仿真器、转换器、变形器、解释器或其他指令转换模块,而不是直接将按索引分散至寄存器指令提供给解码单元。各种类型的指令转换模块可在软件、硬件、固件、或其组合中实现。在一些实施例中,指令转换模块可位于处理器外部,例如,在分开的管芯上和/或在存储器中(例如,作为静态的、动态的或运行时仿真模块)。作为示例,指令转换模块可接收可以是第一指令集中的按索引分散至寄存器指令,并且可将该按索引分散至寄存器指令仿真、转换、变形、解释或以其他方式变换为可以是不同的第二指令集中的一个或多个对应的中间指令或控制信号。可将第二指令集中的这一个或多个中间指令或控制信号提供给解码单元(例如,解码单元316),该解码单元可将它们解码为可由处理器的原生硬件(例如,一个或多个执行单元)执行的一个或多个较低级别的指令或控制信号。
再次参照图3,处理器300还包括紧缩数据寄存器的集合310。这些紧缩数据寄存器中的每一个可表示可操作用于存储紧缩数据、向量数据或单指令多数据(SIMD)数据的管芯上存储位置。紧缩数据寄存器可表示架构可见或对软件和/或编程者可见的架构寄存器,并且/或者是由处理器的指令集中的指令指示以标识操作数的寄存器。这些架构寄存器与给定微架构中的其他非架构寄存器(例如,临时寄存器、重排序缓冲器、引退寄存器等)形成对照。可在不同的微架构中、以不同方式实现这些紧缩数据寄存器,并且它们不限于任何特定类型的设计。合适类型的寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器以及它们的组合。
如图所示,在一些实施例中,源紧缩数据操作数332可任选地被存储在第一紧缩数据寄存器中,源紧缩索引操作数334可任选地被存储在第二紧缩数据寄存器中,并且目的地紧缩数据寄存器335可以任选地是第三进一步不同的紧缩数据寄存器。或者,存储器位置或其他存储位置可以任选地用于源操作数中的一个或多个。此外,在一些实施例中,用于源操作数的紧缩数据寄存器可任选地被重新用作用于结果紧缩数据操作数的目的地。一方面,源/目的地寄存器可被显式地指定一次,并且可被隐式或隐含地理解为既用于源紧缩操作数,又用作用于存储结果紧缩数据操作数的目的地。
再次参见图3,执行单元318与解码单元316耦合,并与紧缩数据寄存器310耦合。执行单元可接收表示按索引分散至寄存器指令和/或从按索引分散至寄存器指令导出的一个或多个经解码或以其他方式转换的指令或控制信号。执行单元还可接收源紧缩数据操作数332和源紧缩索引操作数334。执行单元可操作地响应于按索引分散至寄存器指令和/或作为按索引分散至寄存器指令的结果(例如,响应于从该指令解码出的一个或多个指令或控制信号)而将结果紧缩数据操作数336存储在由该指令指示的目的地紧缩数据寄存器335中。结果紧缩数据操作数可包括多个结果数据元素(例如,至少四个、八个、十六个、三十二个、或任选地更多个)。
在一些实施例中,每个结果数据元素可具有源紧缩数据操作数的源数据元素中的、其对应的索引(例如,处于源紧缩索引操作数中的相同的相对位置中)指示结果紧缩数据操作数中的结果数据元素的数据元素位置的一个源数据元素的值。在一些实施例中,不是所有的源数据元素值都会被存储到结果紧缩数据操作数(例如,在重复的索引的情况下)。在一些实施例中,如果索引中无一索引指示给定的结果数据元素位置,则零值和合并值(例如,在该指令的执行之前初始地位于紧缩数据寄存器中的值)中的一个可任选地被存储在给定的结果数据元素位置中。在一些实施例中,结果可以是针对图4-图5所示和所述的那些(包括针对其提及的变体中的任一者)中的任一者,但是本发明的范围不限于此。
执行单元和/或处理器可包括专门或特定的逻辑(例如,晶体管、集成电路或潜在地与固件(例如,存储在非易失性存储器中的指令)组合的其他硬件和/或软件),该专门或特定的逻辑可操作用于执行按索引分散至寄存器指令和/或响应于按索引分散至寄存器指令和/或作为按索引分散至寄存器指令的结果(例如,响应于从按索引分散至寄存器指令解码出的一个或多个指令或控制信号)来存储结果。在一些实施例中,执行单元可包括:一个或多个输入结构(例如,(多个)端口、(多个)互连、接口),用于接收源操作数;电路或逻辑,与一个或多个输入结构耦合,用于接收并处理源操作数,并生成结果操作数;以及一个或多个输出结构(例如,(多个)端口、(多个)互连、接口),与电路或逻辑耦合,用于输出结果操作数。在一些实施例中,执行单元可包括针对图5所示和所述的电路或逻辑,这些电路或逻辑是合适的微架构布置的说明性示例,但是本发明的范围不限于此。
有利地,可任选地执行按索引分散至寄存器操作。作为示例,此类操作通常趋于对于排序、集合合并、稀疏线性代数、机器学习和类似算法是有用的,但是本文中公开的指令是可用于其他通用目的的通用指令。一方面,此类指令可帮助补足现有的按索引聚集至寄存器指令和/或微架构,并由此帮助提供对称性,该对称性趋于使一些算法更易于实现和/或向量化。用于执行按索引分散至寄存器操作的另一可能的方法是使用指令序列。然而,转而使用架构指令可提供硬件加速以实现比利用软件实现一般将可能实现的性能更好的性能。
为了避免使描述模糊,已示出和描述了相对简单的处理器300。然而,处理器可任选地包括其他处理器组件。例如,各种不同的实施例可包括针对图12-14中的任一图所示和所述的组件的各种不同的组合和配置。彼此交互的处理器的所有组件可彼此耦合以允许它们按计划操作。
图4是示出可响应于按索引分散至寄存器指令(例如,指令106或指令306)的实施例而执行的按索引分散至寄存器操作438的示例实施例的框图。该操作可由本文中所公开的各种处理器中的任一处理器来执行。
指令可指定(例如,显式地指定)或以其他方式指示(例如,隐式地指示)具有多个紧缩数据元素的源紧缩数据操作数432。在示图中,当从右向左读时,数据元素被标记为数据元素A、B、C和D。不作为限制,数据元素A、B、C和D可表示整数、定点元素、浮点元素或其他数据类型。在示图中,最低有效或最低阶位置示出在右边,而最高有效或最高阶位示出在左边。
指令还可指定或以其他方式指示具有多个紧缩索引的源紧缩索引操作数432。在所示示例中,当从右向左读时,这些索引具有值2、1、0和2。这些值仅是示例。可以替代地使用值的其他组合。在一些实施例中,索引可表示整数值。在一些实施例中,索引能以分散模式或布置来布置(例如,根据使用这些索引的算法或软件)。
在所示实施例中,仅具有四个数据元素并且仅具有四个索引。然而,在其他实施例中,可以任选地使用更多数据元素和/或更多索引。通常,每个源紧缩数据操作数中的数据元素或索引的数量可以等于源紧缩数据操作数的位的尺寸除以单个数据元素或索引的位的尺寸。在各种实施例中,源紧缩数据操作数中的每一个的尺寸或宽度可以是64位、128位、256位、512位或1024位,但是本发明的范围并不限于此。在各种实施例中,每一个数据元素或索引的尺寸或宽度可以是8位、16位、32位或64位,但是本发明的范围并不限于此。其他紧缩数据操作数尺寸、数据元素尺寸和索引尺寸也是合适的。在各种实施例中,在源紧缩数据操作数中的每一个中可具有至少四个、至少八个、至少十六个、至少三十二个、至少六十四个或至少一百二十八个数据元素或索引。
响应于按索引分散指令和/或操作,具有经分散的源数据元素的结果紧缩数据操作数436可(例如,由执行单元418)生成并存储在目的地紧缩数据寄存器212中。源紧缩数据和索引操作数可以是向执行单元的输入,并且该执行单元响应于指令/操作可将结果紧缩数据操作数输出至目的地紧缩数据寄存器,该目的地紧缩数据寄存器可由指令指定或以其他方式指示。
在按索引分散指令和/或操作的情况下,源紧缩索引操作数434的索引被用于选择结果紧缩数据操作数中的、源紧缩数据操作数的对应的源数据元素将被分散或存储之处的结果数据元素。将索引与源紧缩数据操作数中的源数据元素连接的第一组箭头439示出索引与操作数内在相同的相对位置中的源数据元素彼此对应。例如,最低有效(在这种情况下为最右边的)索引可隐式地对应于最低有效(在这种情况下为最右边的)源数据元素A,次低有效索引可隐式地对应于次低有效源数据元素B,次高有效索引可隐式地对应于次高有效源数据元素C,最高有效(在这种情况下为最左边的)索引可隐式地对应于最高有效(在这种情况下为最左边的)源数据元素D。这种对应可以是隐式或固有的,而不是显式地指定的。在一些实施例中,这种隐式的或固有的对应关系对于指令可以是固定的(例如,对于指令的操作码是固定的),而不是灵活地或由指令显式地指定的。具有代表性地,此类隐式或固有的对应关系可帮助避免需要生成并使用附加的显式控制。
将索引与结果紧缩数据操作数中的结果数据元素连接的第二组箭头440示出索引被用于选择结果紧缩数据操作数中的结果数据元素(例如,结果数据元素位置)。在一些实施例中,每个索引的值可表示数据元素位置标识符以标识结果紧缩数据操作数中的给定的数据元素位置。在示图中,最低有效结果数据元素在右边,而最高有效结果数据元素在左边。在结果数据元素中的每一个的上方所示的是数据元素位置标识符(例如,当从右向左读时为数据元素位置标识符0、1、2和3)。
在该示例中,如箭头440所示,最低有效(在这种情况下为最右边的)索引值“2”选择、索引或以其他方式指示数据元素位置二(2)处的结果数据元素,次低有效(在这种情况下为右二)的索引值“1”指示数据元素位置一(1)处的结果数据元素。继续而言,次高有效(在这种情况下为左二)索引值“0”指示数据元素位置零(0)处的结果数据元素,而最高有效(在这种情况下为最左边的)索引值“2”指示数据元素位置二(2)处的结果数据元素。
对应于索引(例如,处于与操作数内的索引相同的相对位置)的源数据元素可被发散或存储到由索引选择或指示的结果数据元素。例如,对应于最低有效(在这种情况下为最右边的)索引值“2”的源数据元素A可(除了在下文中进一步讨论的重复的索引的情况下)被存储到数据元素位置二(2)处的所选择的结果数据元素,对应于次低有效(在这种情况下为右二)索引值“1”的源数据元素B可被存储到数据元素位置一(1)处的所选择的结果数据元素,对应于次高有效(在这种情况下为左二)索引值“0”的源数据元素C可被存储到数据元素位置零(0)处的所选择的结果数据元素,对应于最高有效(在这种情况下为最左边的)索引值“2”的源数据元素D可被存储到数据元素位置二(2)处的所选择的结果数据元素。如图所示,当从右向左读时,结果紧缩数据操作数可存储数据元素C、B、D和*。
相应地,在按索引分散至寄存器指令和/或操作的情况下,索引被用于选择或标识结果数据元素(例如,结果数据元素位置),并且在操作数内的相同的相对位置中的隐式地对应的源数据元素将被存储到由索引指示的结果数据元素。如云442中一般地所示,在按索引分散至寄存器指令和/或操作的情况下,第i个位置的索引可选择或以其他方式指示将存储对应的第i个位置的源数据元素的结果数据元素。寄存器分散指令的索引可指定目的地紧缩数据寄存器中的何处将推入或分散对应的源数据元素。相应地,按索引分散至寄存器指令和/或操作与按索引聚集至寄存器指令和/或操作的区别在于,索引隐式地对应于源紧缩数据操作数而不是结果紧缩数据操作数,并且在于索引选择结果紧缩数据操作数而不是源紧缩数据操作数中的位置。
在一些实施例中,可能具有一组或多组重复的索引。每组的重复索引可具有相同值或至少指示相同的结果数据元素(例如,如果忽略索引中不用于结果数据元素选择的某些更高有效的位)。例如,如所示的示例实施例中所示,最低有效(在这种情况下为最右边的)索引和最高有效(在这种情况下为最左边的)索引两者都具有相同值“2”。由于灵活地对应于按索引分散至寄存器指令和/或操作中的结果数据元素的索引,如果存在具有相同值的重复的索引,则重复的索引中的每个索引可为它们对应的源数据元素指示相同的结果数据元素位置。例如,在所示实施例中,具有值“2”的这两个索引可选择数据元素位置二(2)处的同一结果数据元素来存储它们对应的源数据元素。然而,一般而言源数据元素中的仅一个数据元素可被存储到所指示的结果数据元素。在一些实施例中,一致的策略可用于决定将使用哪个重复的索引以存储到所指示的结果数据元素。例如,在一些实施例中,可任选地选择具有给定值的最高有效重复索引以将其对应的源数据元素写入由该给定值指示的所指示的结果数据元素。有利地,此类约定可类似于由其他指令采用的约定,并因此潜在地与采用此类指令的算法更兼容,其他指令例如,分散至存储器指令、向量冲突指令,等等。或者,如果需要的话,可任选地选择具有给定值的最低有效重复索引以将其对应的源数据元素写入由该给定值指示的所指示的结果数据元素。
此外,重复的索引的存在会趋于产生分散空缺或“空洞”,这些分散空缺或“空洞”可表示没有源数据元素将存储至其的结果数据元素。例如,假定输入元素和输出元素的数量匹配,则每个重复的索引会导致对应的分散空缺。在所示示例中,数据元素位置三(3)处的最高有效(在这种情况下为最左边的)结果数据元素具有星号(*)来指示此类分散空缺或空洞。如图所示,索引中无一索引具有值三(3),相应地,箭头440中无一箭头指向数据元素位置三(3)处的结果数据元素。换言之,索引中无一索引会尝试将源数据元素分散至此类分散空缺或空洞。在一些实施例中,按索引分散至寄存器指令可指示将被存储在此类分散空缺或空洞中的值的类型。例如,在一些实施例中,响应于执行按索引分散至寄存器指令,可任选地将此类分散空缺归零(例如,将结果数据元素的所有位清除为二进制零)。或者,在其他实施例中,响应于执行按索引分散至寄存器指令,可任选地将同一紧缩数据寄存器中的相同的数据元素位置中的现有值保持或保留在分散空缺的位置中。例如,在指令被执行之前最初处于紧缩数据寄存器中的数据元素的值可被合并到结果紧缩数据操作数中的分散空缺位置中。
构想了实现按索引分散至寄存器指令的不同方式。在一些实施例中,可由逻辑实现此类指令,该逻辑可操作用于(a)标识任何组的重复的索引中的每组重复的索引中的最高有效索引;(b)将所标识的最高有效索引的对应的源数据元素存储到由最高有效的重复索引标识的结果数据元素;以及(c)将任何非重复索引的对应的源数据元素存储到由那些非重复索引标识的结果数据元素;以及(d)将零或合并值存储到任何分散空缺。在不同的实施例中,这可以按不同的方式来完成。为了进一步说明某些概念,将结合图5来描述合适方式的详细的示例实施例,但是本发明的范围不限于此。
图5是适合用于实现按索引分散至寄存器指令的实施例的按索引分散至寄存器执行单元518的详细的示例实施例的框图。执行单元可包括用于接收源紧缩索引操作数534和源紧缩数据操作数532的输入端口、输入接口或其他(多个)结构。在该示例中,为了易于说明,这些源紧缩操作数中的每一个仅具有四个相应的索引或数据元素,但是在其他实施例中可任选地使用本文中别处描述的其他数量(例如,八个、十六个、三十二个、六十四个、一百二十八个,等等)的数据元素和索引。在所示实施例中,从右向左,这四个索引具有值2、1、0和2,但是这些仅是示例。
执行单元包括用于将四个索引中的每个索引提供给四个比较器C0、C1、C2、C3中的每个比较器的全交叉结构或其他合适的互连电路548。例如,四个索引中的每个索引可被提供给第一比较器C0,四个索引中的每个索引可被提供给第二比较器C1,以此类推。比较器中的每个比较器可以可操作地用于将索引中的每个索引与对应于那个比较器的不同的对应数据元素位置标识符进行比较。数据元素位置标识符的数量可以与结果数据元素的数量相同(例如,在这种情况下为四个)。如在示图中所标记,四个数据元素位置标识符可具有值0、1、2和3。如图所示,第一比较器(C0)可与对应的数据元素位置标识符值零(0)相对应,并且可将四个输入索引中的每个输入索引与该对应的数据元素位置标识符值零(0)进行比较,第二比较器(C1)可与对应的数据元素位置标识符值一(1)相对应,并且可将四个输入索引中的每个输入索引与该对应的数据元素位置标识符值一(1)进行比较,第三比较器(C2)可与对应的数据元素位置标识符值二(2)相对应,并且可将四个输入索引中的每个输入索引与该对应的数据元素位置标识符值二(2)进行比较,第四比较器(C4)可与对应的数据元素位置标识符值三(3)相对应,并且可将四个输入索引中的每个输入索引与该对应的数据元素位置标识符值三(3)进行比较。
在所示实施例中,比较器可以可操作用于比较索引,并且在重复的索引的情况下,用于对于每个结果数据元素位置仲裁或以其他方式标识其值匹配那个结果数据元素位置的最高有效索引。或者,在其他实施例中,如先前所描述,在重复的情况下,可任选地使用最低有效的匹配索引。在一些实施例中,这些比较可以任选地仅基于索引的最低有效位的子集而不是基于索引的所有位。总体而言,这可以帮助改善执行这些比较的性能和/或帮助降低用于执行这些比较的硬件的复杂度。例如,可以任选地使用每个索引的仅最低有效部分(log2VLEN位),其中,VLEN表示结果紧缩数据操作数中结果数据元素的数量(例如,4位的512位紧缩数据操作数和双字索引)。或者,如果需要,可以任选地比较索引的所有位。如果检测到匹配,则比较器中的每个比较器可以可操作用于输出第一信号的集合550中的不同的对应的第一信号以指示与对应的数据元素位置标识符匹配的最高有效索引的位置。
作为示例,第一比较器C0可将四个索引2、1、0和2中的每个索引与数据元素位置标识符值零(0)比较,并确定仅次高有效索引(即,处于索引位置2)具有匹配的索引值零(0)。第一比较器C0可响应性地输出第一信号550中的对应的第一信号以指示值2,值2是匹配的索引值零(0)处在源紧缩索引操作数中的位置。第二比较器C1还可将四个索引2、1、0和2中的每个索引与数据元素位置标识符值一(1)比较,并确定仅次低有效索引(即,处于索引位置1)具有匹配的索引值一(1)。第二比较器C1可响应性地输出第一信号550中对应的第一信号以指示值1。第三比较器C2还可将四个索引2、1、0和2中的每个索引与数据元素位置标识符值二(2)比较,确定最低有效索引(即,处于索引位置0)和最高有效索引(即,处于索引位置3)两者都具有匹配的索引值二(2),并选择这两个重复的索引中的最高有效的那个(即,处于索引位置3)。第三比较器C2可响应性地输出第一信号550中对应的第一信号以指示值3。第四比较器C3可将四个索引2、1、0和2中的每个索引与数据元素位置标识符值一(3)比较,并且确定索引中无一索引匹配该数据元素位置标识符。第四比较器C3可响应性地输出第一信号550中的对应的第一信号以指示无匹配和/或可忽略输出第一信号。
执行单元还包括四个无匹配检测单元N0、N1、N2、N3,它们各自对应于四个比较器C0-C3中的一个不同的比较器。每个无匹配检测单元可被耦合以从对应的比较器接收对应的第一信号输出,并且可以可操作用于判定该第一信号输出是否指示至少一个匹配索引被检测到。每个无匹配检测单元可以可操作用于输出第二信号的集合552中的对应的一个第二信号以指示是否由对应的比较器检测到至少一个匹配的索引。
作为示例,由于第一比较器C0检测到匹配的索引值,因此无匹配检测单元N0可输出第二信号552中的对应的一个第二信号以指示检测到匹配。类似地,由于第二比较器C1检测到匹配的索引值,因此无匹配检测单元N1可输出第二信号552中的对应的一个第二信号以指示检测到匹配。类似地,由于第三比较器C2检测到匹配的索引值,因此无匹配检测单元N2可输出第二信号552中的对应的一个第二信号以指示检测到匹配。相比之下,由于第四比较器C3未检测到匹配的索引值(例如,回想一下,索引中无一索引具有值三(3)),因此无匹配检测单元N3可输出第二信号552中的对应的一个第二信号以指示没有检测到匹配。
执行单元还可包括第一组四个多路复用器或其他选择器S0、S1、S2和S3,它们各自对应于四个结果数据元素中的一个不同的结果数据元素。源紧缩数据操作数532的四个源数据元素A、B、C和D可以是向全交叉结构或其他合适的互连电路的输入。互连电路被耦合以将四个源数据元素A-D中的每个源数据元素提供给四个选择器S0-S3中的每个选择器。例如,A-D中的每一个可被提供给第一选择器S0,A-D中的每一个可被提供给第二选择器S1,以此类推。
如图所示,四个选择器S0-S3中的每个选择器也被耦合以从四个比较器C0-C3中的一个不同的对应比较器接收第一信号550中的一个不同的对应第一信号。例如,S0可从C0接收第一信号,S1可从C1接收第一信号,以此类推。这些第一信号可表示去往选择器S0-S3的选择控制信号或输入,这些选择控制信号或输入可操作用于控制这些选择器,以选择和输出四个源数据元素中的、位于由第一信号指示的数据元素位置中的一个所指示的源数据元素。作为示例,由于来自第一比较器C0的第一信号550指示值2,因此第一选择器S0可被控制以选择并输出源紧缩数据操作数532中的数据元素位置二(2)中的数据元素C。类似地,由于来自第二比较器C1的第一信号550指示值1,因此第二选择器S1可被控制以选择并输出源紧缩数据操作数532中的数据元素位置一(1)中的数据元素B。类似地,由于来自第三比较器C2的第一信号550指示值3,因此第三选择器S2可被控制以选择并输出源紧缩数据操作数中的数据元素位置三(3)中的数据元素D。
执行单元还可包括第二组四个多路复用器或其他选择器M0、M1、M2和M3,它们各自都对应于第一组选择器S0-S3中的一个不同选择器和/或结果数据元素中的一个不同结果数据元素。第二组选择器M0-M3中的每个选择器都具有第一输入,该第一输入被耦合以从选择器S0-S3中的一个对应选择器接收被选择并被输出的源数据元素。例如,向选择器M0的第一输入可接收数据元素C,向选择器M1的第一输入可接收数据元素B,向选择器M2的第一输入可接收数据元素D,等等。第二组选择器M0-M3中的每个选择器还具有第二输入,该第二数据被耦合以接收零值。或者,在另一实施例中,在合并而不是归零的情况下,第二输入中的每个第二输入可任选地被耦合以接收用于存储结果紧缩数据操作数536的紧缩数据寄存器的对应的数据元素位置中的初始值。
如图所示,第二组选择器M0-M3中的每个选择器也被耦合以从四个无匹配检测器N0-N3中的一个不同的对应无匹配检测器接收第二信号552中的一个不同的对应第二信号。例如,M0可从N0接收第二信号552,M1可从N1接收第二信号552,M3可从N3接收第二信号552,等等。这些第二信号552可表示选择控制信号,这些选择控制信号可操作用于控制第二组选择器M0-M3中的每个选择器以选择对应的输入数据元素或输入零值(例如,在合并的情况下,或者是输入合并值),并将对应的输入数据元素或输入零值输出到对应的结果数据元素。例如,当第二信号指示检测到匹配的索引时,输入数据元素可被选择并被存储到结果紧缩数据元素。相比之下,当第二信号指示未检测到匹配的索引时,零值(或合并值)可被选择并被存储到结果紧缩数据元素。如图所示,由于由第一至第三比较器C0-C2中的每个比较器检测到匹配,因此数据元素位置0、1和2中的三个最低有效结果数据元素分别存储输入数据元素C、B、D的值。然而,由于第四比较器C3未检测到匹配,因此零值被存储到数据元素位置3中的最高有效结果数据元素。
一方面,第一组选择器S0-S3以及将源紧缩数据元素提供给第一组选择器S0-S3的互连可具有与可用于实现混洗、换序或其他按索引聚集至寄存器指令和/或操作的逻辑类似的逻辑。然而,去往第一组选择器的控制信号可通过比较(例如,比较器C0-C3和第一信号)来确定,而不是更直接地来自源紧缩聚集索引操作数中的聚集索引。此外,第二组选择器M0-M3可具有与另外用于增加掩蔽以实现经掩蔽的混洗、经掩蔽的换序或其他经掩蔽的按索引聚集至寄存器指令和/或操作的逻辑类似的逻辑。
将会理解,这仅是合适的执行单元的一个说明性示例。构想了所说明的执行单元的变体。例如,比较器C0-C3可被修改以并入与针对无匹配检测单元所描述的逻辑类似的逻辑,使得比较器C0-C3可生成并输出所描述的第一信号和第二信号两者。此外,第一组选择器和第二组选择器可任选地被组合为单组选择器,该单组选择器附加地接收零值(或合并值),并在输入源数据元素和零值(或合并值)之间进行选择。其他变体对本领域技术人员而言将是显而易见的,并且具有本公开的益处。本发明的范围不限于用于实现逻辑以实现按索引分散至寄存器指令和/或操作的任何已知方式。
也构想了其他方式。例如,一种替代方式可利用排序逻辑(例如,排序网络)来实现,该排序逻辑将源索引视为“密钥”,将索引位置视为“值”,并且可操作用于对密钥-值对排序,从而对索引排序。作为示例,考虑具有以下值的源索引:
{0,2,3,7,1,4,5,6}
索引位置标识符可与这些源索引相关联以提供索引:位置对,该索引:位置对可表示密钥:值对,如下所示:
{0:0,2:1,3:2,7:3,1:4,4:5,5:6,6:7}
此类密钥:值对可基于密钥(即,索引)来排序以产生:
{0:0,1:4,2:1,3:2,4:5,5:6,6:7,7:3}
随后,通过去除密钥(即,索引)可按相同的顺序提取并保持值(即,位置标识符)以获得重布置的索引,如下所示:
{0,4,1,2,5,6,7,3}
这种基于排序的实现方式可潜在地提供比图5中示出的方式中的总体比较次数更少的总体比较次数的优势,但是部分地由于进行比较的方式是相关的,不一定提供更短的等待时间。此外,此类基于排序的方式会对源索引中的空缺和重复造成更多约束。例如,如果源索引具有j个重复的i,则在i+1,…,i+j-1处可能需要有空缺。例如,{0,2,3,7,1,3,5,6}可表示有效输入,因为由于两个重复的索引“3”的存在,在“4”处存在空缺。这是有效的输入,因为假定重复被掩蔽,那么排序将产生{0,4,1,2,5,6,7,3},并且对这些输出索引执行换序指令正确地实现对输入索引的逆换序。然而,{0,2,3,7,1,3,4,6}会表示无效的输入,因为对于对应的排序输出{0,4,1,2,5,6,7,3}的换序,第六个输入将去往第五个数据元素位置而不是去往第四个数据元素位置(假定基于零索引)。
图6是执行按索引分散至寄存器指令的实施例的方法660的实施例的流程框图。在各种实施例中,该方法可由处理器、指令处理装置或其他数字逻辑器件执行和/或可在处理器、指令处理装置或其他数字逻辑器件内被执行。在一些实施例中,可由图1和/或图3中的处理器执行图6的方法和/或可在图1和/或图3中的处理器内执行图6的方法。在本文中针对图1和/或图3中的处理器所描述的组件、特征和特定的任选细节也任选地适用于方法660。或者,可由类似或不同的处理器或装置和/或在类似或不同的处理器或装置内执行方法660。此外,图1和/或图3中的处理器可执行与方法660相同、类似或不同的方法。
该方法包括:在框661处,接收按索引分散至寄存器指令。在各个方面,可在处理器或处理器的部分(例如,指令取出单元、解码单元、总线接口单元等)处接收该指令。在各个方面,可从处理器外和/或管芯外的源(例如,从存储器、互连等)或从处理器上和/或管芯上的源(例如,从指令高速缓存、指令队列等)接收该指令。该指令可指定或以其他方式指示具有多个源数据元素的源紧缩数据操作数,并且可指定或以其他方式指示具有多个索引的源紧缩索引操作数。在一些实施例中,索引中的每个索引都可对应于源数据元素的、在操作数内在相同的相对位置中的一个不同的源数据元素。该指令也可指定或以其他方式指示目的地紧缩数据寄存器。
在框662处,响应于按索引分散至寄存器指令和/或作为按索引分散至寄存器指令的结果,结果紧缩数据操作数可存储在目的地紧缩数据寄存器中。结果紧缩数据操作数可包括多个结果数据元素。在一些实施例中,每个结果数据元素可具有源数据元素中的、其对应的索引(例如,在源紧缩索引操作数中的相同的相对位置中)指示结果紧缩数据操作数中的结果数据元素的数据元素位置的一个源数据元素的值。
在一些实施例中,不是所有的源数据元素值都会被存储到结果紧缩数据操作数(例如,在重复的情况下)。在一些实施例中,在重复的情况下,每个结果数据元素可具有其对应的索引指示结果数据元素位置的最高有效(或替代地,最低有效)源数据元素的值。在一些实施例中,如果索引中无一索引指示给定的结果数据元素位置,则零值或合并值(例如,在该指令的执行之前初始地位于紧缩数据寄存器中的值)可任选地被存储在给定的结果数据元素位置中。在一些实施例中,结果可以是针对图4-图5所示和所述的那些(包括针对其提及的变体中的任一者)中的任一者,但是本发明的范围不限于此。
所示的方法涉及架构操作(例如,那些从软件角度可见的操作)。在其他实施例中,该方法可以任选地包括一个或多个微架构操作。作为示例,可取出指令,对指令解码,乱序地调度指令,可访问源操作数,执行单元可执行微架构操作以实现该指令,等等。在一些实施例中,用于实现该指令的微架构操作可任选地包括针对图4和/或图5所示或所述的那些操作中的任一操作,但是本发明的范围不限于此。
在一些实施例中,数据元素可表示常由从存储器聚集和/或向存储器分散指令使用的类型的存储器地址相关的索引。在此类情况下,可对此类存储器地址相关的索引的值施加限制。虽然从存储器聚集和/或向存储器分散指令可允许更大的范围,但是用于这些指令的存储器地址相关的索引可约束至较小的范围,从而例如不超出SIMD宽度和/或结果中的数据元素的数量。一方面,可仅使用存储器地址相关的索引的log2VLEN个位。另一方面,可任选地执行检查以判定存储器地址相关的索引是否出界,并且如果判定了存储器地址相关的索引出界,则用信号传递异常条件(例如,故障)。
图7是可操作用于执行数据重布置指令708的实施例的处理器700实施例的框图。在实施例中,处理器300可以是图1中的处理器100和/或图3中的处理器300,或可被包括在图1中的处理器100和/或图3中的处理器300中。本文中针对处理器100和/或300所描述的组件、特征和特定的任选细节任选地适用于处理器700。或者,处理器700可以是与处理器100和300类似或不同的处理器,或者可被包括在与处理器100和300类似或不同的处理器中。此外,处理器100和300可以是与处理器700类似或不同的处理器,或者可包括与处理器700类似或不同的处理器。
在操作期间,处理器700可接收数据重布置指令708。在一些实施例中,数据重布置指令可显式地指定(例如,通过一个或多个字段或位集合)或以其他方式指示(例如,隐式地指示)具有多个源紧缩数据元素(例如,至少四个、八个、十六个、三十二个或任选地更多个)的源紧缩数据操作数770。在一些实施例中,源数据元素可以是按分散模式布置的索引,但是本发明的范围不限于此。在其他实施例中,源数据元素可以是按聚集模式布置的索引,但是本发明的范围不限于此。数据重布置指令还可显式地指定或以其他方式指示目的地存储位置774,响应于指令被执行,结果紧缩数据操作数774将被存储在目的地存储器位置774处。作为一个示例,指令可具有源和/或目的地操作数指定字段,用于指定用于源和/或目的地操作数的紧缩数据寄存器或其他存储位置。或者,这些操作数中的一个或多个可以任选地对于指令是隐式的(例如,对于指令的操作码是隐式的)。作为一个特定示例,源/目的地存储位置可被显式地指定一次,并且可被隐式或隐含地理解为既用于源紧缩操作数,又用作用于存储结果紧缩数据操作数的目的地存储位置。
再次参照图7,处理器700还包括紧缩数据寄存器的集合710。紧缩数据寄存器710可任选地与先前描述的紧缩数据寄存器310类似或相同。如图所示,在一些实施例中,源紧缩数据操作数770可任选地被存储在紧缩数据寄存器的集合中(例如,在第一紧缩数据寄存器中),并且目的地存储位置774也可任选地在紧缩数据寄存器的集合中(例如,第一紧缩数据寄存器或不同的紧缩数据寄存器)。或者,存储器位置或其他存储位置可以任选地用于源和目的地操作数数中的一个或多个。
在一些实施例中,源紧缩数据操作数770的每个源数据元素可具有对应的源数据元素值,例如,用于指示数据元素位置的整数索引值、或另一数值。在一些实施例中,每个源数据元素也可具有对应的源数据元素位置。一方面,源数据元素位置可相对于源紧缩数据操作数的第一端(例如,最低有效端或最高有效端)。例如,最低有效源数据元素可具有最小编号的位置(例如,0),次低有效源数据元素可具有次小编号的位置(例如,1),以此类推。
再次参见图7,处理器包括解码单元716。解码单元可接收数据重布置指令708并对其解码。解码单元716可任选地与先前描述的解码单元316类似或相同。同样,如先前所提及,数据元素重布置指令可任选地由指令转换器转换为随后可由解码单元解码的一条或多条其他指令。
执行单元718与解码单元716耦合,并且与紧缩数据寄存器710耦合。执行单元718可任选地与先前描述的执行单元718类似或相同。该执行单元可接收表示数据重布置指令和/或从数据重布置指令导出的一个或多个经解码或以其他方式转换的指令或控制信号。执行单元还可接收源紧缩数据操作数770。执行单元可以可操作地响应于数据重布置指令和/或作为数据重布置指令的结果(例如,响应于一条或多条指令或从中解码的控制信号)以将结果紧缩数据操作数772存储在目的地存储位置774中。结果紧缩数据操作数可包括多个结果数据元素(例如,至少四个、八个、十六个、三十二个、或任选地更多个)。
在一些实施例中,结果数据元素中的每个结果数据元素都可具有结果数据元素值和相对于结果紧缩数据操作数的第一端(例如,最低有效端或最高有效端)的结果紧缩数据元素位置。在一些实施例中,相同的端(例如,最低有效端)可用于源紧缩数据操作数和结果紧缩数据操作数两者,作为相对数据元素位置的参考点。
在每个实施例中,只要至少一个源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值,每个结果数据元素就可具有结果数据元素值,该结果数据元素值等于源数据元素中的、最靠近源紧缩数据操作数的一端的、其源数据元素值等于那个结果数据元素的结果数据元素位置的源数据元素位置。在一些实施例中,所指的源紧缩数据操作数的一端可以是源紧缩数据操作数的最高有效端,或替代地,可以是源紧缩数据操作数的最低有效端。相反,在一些实施例中,当没有源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,每个结果数据元素可具有等于替代值的结果数据元素值。
合适的替代值的一个示例是零值。合适的替代值的另一示例是合并值(例如,恰在数据元素重布置指令的执行之前存储在目的地存储位置中的对应的数据元素位置中的值)。合适的替代值的又一示例是负值(例如,任何所需的负整数值)。合适的替代值的进一步的示例为大值(例如,大于将用作索引的值和/或大于源紧缩数据操作数中的数据元素的数量的值)。或者,各种其他类型的值可任选地用作替代值。在一些实施例中,相对于以按索引分散至寄存器模式布置的源紧缩数据操作数的索引,结果数据元素可以是以按索引聚集至寄存器模式布置的索引,但是本发明的范围不限于此。在其他实施例中,相对于以按索引聚集至寄存器模式布置的源紧缩数据操作数的索引,结果数据元素可以是以按索引分散至寄存器模式布置的索引,但是本发明的范围不限于此。在一些实施例中,结果紧缩数据操作数可以是针对图8-图10所示和所述的那些(包括针对其提及的变体中的任一者)中的任一者,但是本发明的范围不限于此。
图8是示出可响应于分散索引至聚集索引重布置指令(例如,指令108和/或708)的实施例而执行的分散索引至聚集索引重布置操作876的示例实施例的框图。该操作可由本文中公开的各种处理器(例如,处理器100和/或700)中的任一处理器执行。
该指令可指定(例如,显式地指定)或以其他方式指示(例如,隐式地指示)具有多个源数据元素的源紧缩数据操作数870。源数据元素中的每个源数据元素都具有源数据元素值和相对于源紧缩数据操作数的端部的源数据元素位置。在示图中,最低有效或最低阶位置示出在右边,而最高有效或最高阶位示出在左边。在所示示例中,当从右向左(例如,最低有效位置至最高有效位置)读时,源数据元素值为2、1、0和2。在所示示例中,从右向左(例如,相对于最低有效端),源数据元素位置为0、1、2和3。不作为限制,源数据元素可表示整数、定点元素、浮点元素或其他数据类型。在一些实施例中,源数据元素值可表示整数索引(例如,对于按索引分散操作),但是本发明的范围不限于此。
在所示实施例中,仅具有四个源数据元素。然而,在其他实施例中,可任选地使用更多源数据元素。通常,源紧缩数据操作数中的源数据元素的数量可以等于源紧缩数据操作数的位的尺寸除以单个数据元素的位的尺寸。在各种实施例中,源紧缩数据操作数的尺寸或宽度可以是64位、128位、256位、512位或1024位,但是本发明的范围并不限于此。在各种实施例中,每一个数据元素的尺寸或宽度可以是8位、16位、32位或64位,但是本发明的范围并不限于此。其他紧缩数据操作数尺寸和数据元素尺寸也是合适的。在各种实施例中,在源紧缩数据操作数中可具有至少四个、至少八个、至少十六个、至少三十二个、至少六十四个或至少一百二十八个数据元素。
响应于该指令和/或操作,可(例如,通过执行单元818)生成结果紧缩数据操作数872并将其存储在目的地存储位置中。源紧缩数据操作数可以是(例如,从紧缩数据寄存器)向执行单元的输入,并且执行单元响应于该指令/操作可生成结果紧缩数据操作数并将该结果紧缩数据操作数存储到目的地存储位置(例如,紧缩数据寄存器)。结果紧缩数据操作数可具有多个结果数据元素(例如,与源紧缩数据操作数的数据元素的数量相同的数据元素)。在该说明性示例中,结果紧缩数据操作数仅具有四个结果数据元素。
在一些实施例中,结果数据元素中的每个结果数据元素可具有结果数据元素值和相对于结果紧缩数据操作数的端部的结果数据元素位置。在示图中,最低有效或最低阶位置示出在右边,而最高有效或最高阶位示出在左边。在所示示例中,当从右向左(例如,最低有效位置至最高有效位置)读时,结果数据元素值为2、1、3和*,其中,星号(*)可表示替代值。在所示示例中,从右向左(例如,相对于最低有效端),结果数据元素位置为0、1、2和3。不作为限制,源数据元素可表示整数、定点元素、浮点元素或其他数据类型。在一些实施例中,源数据元素值可表示整数索引(例如,对于按索引聚集操作),但是本发明的范围不限于此。
在每个实施例中,只要至少一个源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值,每个结果数据元素就可具有结果数据元素值,该结果数据元素值等于源数据元素中的、最靠近源紧缩数据操作数的一端的、其源数据元素值等于那个结果数据元素的结果数据元素位置的源数据元素位置。例如,第一箭头879示出源数据元素位置二(2)处的次高有效源数据元素(即,从右边起第三个)具有源数据元素值零(0),该源数据元素值零(0)匹配(例如,等于)最低有效结果数据元素的结果数据元素位置零(0)。相应地,如由第二箭头880所示,最低有效结果数据元素可具有结果数据元素值二(2),该结果数据元素值二(2)等于次高有效源数据元素的源数据元素位置二(2)。作为另一示例,第三箭头881示出源数据元素位置三(3)处的最高有效源数据元素具有源数据元素值二(2),该源数据元素值二(2)匹配(例如,等于)次高有效结果数据元素(即,从右边起第三个)的结果数据元素位置二(2)。相应地,如由第四箭头882所示,次高有效结果数据元素可具有结果数据元素值三(3),该结果数据元素值三(3)等于最高有效源数据元素的源数据元素位置三(3)。
在一些实施例中,可以有具有完全相同或重复的源数据元素值的一组或多组源数据元素值。例如,如所示的示例实施例中所示,最低有效(在这种情况下为最右边的)源数据元素和最高有效(在这种情况下为最左边的)源数据元素两者都具有源数据元素值二(2)。然而,仅一个值会被存储到结果数据元素位置二(2)中的结果数据元素。在一些实施例中,为了决定应当是哪个值,可遵循约定。例如,可选择最接近源紧缩数据操作数的一端的源数据元素。例如,如所示示例中所示,可选择最接近源紧缩数据操作数的最高有效端的源数据元素。此类约定可类似于由其他指令采用的约定,并因此潜在地与采用此类指令的算法更兼容,但这不是必需的,其他指令诸如例如,分散至存储器指令、向量冲突指令,等等。如由在次高有效结果数据元素中覆盖值零(0)的“X”所示,在该示例中,数据元素位置(0)不被存储到次高有效结果数据元素。相反,在该实施例中,最接近源紧缩数据操作数的最高有效端的源数据元素的源数据元素位置被选择,因此,最高有效数据元素的源数据元素位置而不是最低有效数据元素被使用。或者,如果需要,可任选地选择最接近源紧缩数据操作数的最低有效端的源数据元素。
此外,重复的源数据元素值的存在会趋于产生空缺或“空洞”,这些空缺或“空洞”可表示没有源数据元素值等于其的结果数据元素位置。例如,假定源元素的数量与结果元素的数量匹配,则每个重复的源数据元素值可趋于导致对应的结果数据元素空缺。在所示示例中,数据元素位置三(3)处的最高有效(在这种情况下为最左边的)结果数据元素具有星号(*)来指示此类空缺或空洞。如图所示,源数据元素中无一源数据元素具有源数据元素值三(3),或者换言之,2、1、0或2中无一等于3。在一些实施例中,替代值可被存储在此类空缺或空洞中的每个空缺或空洞中。先前结合图7所述的替代值的类型总体上是适用的。
仍参照图8,在一些实施例中,响应于该指令和/或操作,可(例如,通过执行单元818)生成任选的结果掩码操作数878并将其存储在目的地存储位置中。在一些实施例中,目的地存储位置可以是掩码寄存器的架构集(例如,紧缩数据操作掩码寄存器114、本文中别处公开的k掩码寄存器,等等)。或者,可任选地使用通用寄存器、紧缩数据寄存器或另一存储位置。结果掩码操作数可具有多个掩码元素(例如,与结果紧缩数据操作数中的数据元素的数量相同的掩码元素)。在所示示例中,结果掩码操作数具有四个掩码元素。
在一些实施例中,掩码操作数可表示可由后续的经掩蔽的紧缩数据指令指示以执行经掩蔽的紧缩数据操作的紧缩数据操作掩码操作数。在本文中也将掩码操作掩码简称为操作掩码、预测掩码或掩码。该掩码可表示预测操作数或条件控制操作数,这些操作数可用于对是否将执行对应操作和/或是否将存储对应结果进行预测、有条件控制或掩蔽。在一些实施例中,能以每个数据元素的粒度进行掩蔽或预测,使得可单独地预测或有条件控制对不同对的对应数据元素的操作,并且/或者可独立于其他数据元素来预测或有条件控制对不同对的对应数据元素的操作。掩码可包括多个掩码元素、预测元素或条件控制元素。一方面,掩码元素可被包括在与对应的源数据元素和/或对应的结果数据元素的一对一对应关系中。如图所示,在一些实施例中,每个掩码元素可以是单个掩码位。或者,掩码元素中的每个掩码元素可以是具有与结果数据元素的尺寸相同或不同的尺寸的数据元素。在其他实施例中,掩码元素中的每个掩码元素可以是数据元素的单个位(例如,最高有效位或最低有效位)。
在一些实施例中,每个掩码位或其他掩码元素的值可操作用于控制是否将执行对应的操作和/或是否将存储对应的结果数据元素。每个掩码位可具有第一值以允许执行操作并允许将对应的结果数据元素存储在目的地中,或可具有第二个不同值以不允许执行操作和/或不允许对应的结果数据元素被存储在目的地中。根据一个可能的约定,如示图中所示,被清除为二进制“零”(即,0)的掩码位可表示被掩蔽的操作,该被掩蔽的操作将不被执行和/或将不生成结果元素,而设置为二进制“一”(即,1)的掩码位可表示未被掩蔽的操作,该未被掩蔽的操作将被执行以生成结果元素。相反的约定也是可能的。
在一些实施例中,当至少一个源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,处于与那个结果数据元素相同的相对位置中的对应的掩码元素可以不被掩蔽(例如,在示图中,具有值一)。相反,当没有源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,(例如,处于与那个结果数据元素相同的相对位置中的)对应的掩码元素可被掩蔽(例如,在示图中,具有值零)。换言之,对应于具有替换值的结果数据元素的每个掩码元素可被掩蔽。
为了进一步说明某些概念,对图8的讨论涉及分散索引到聚集索引的转换。然而,相同的总体性方式也可用于将聚集索引转换为分散索引。相应地,一方面,此类数据元素重布置指令和/或操作可用于将分散索引重布置为聚集索引和/或将聚集索引重布置为分散索引。
图9是适用于实现数据元素重布置指令(例如,分散索引至聚集索引重布置指令)的实施例的数据元素重布置执行单元918的详细的示例实施例的框图。执行单元918可与执行单元518类似,并且可具有类似的特征。为了避免使描述模糊,将主要描述不同和/或附加的特性,而不重复所有任选类似的特征。
执行单元可接收源紧缩数据操作数970。在该示例中,为了易于说明,源紧缩操作数仅具有四个数据元素,但是在其他实施例中可任选地使用本文中别处描述的其他数量(例如,八个、十六个、三十二个、六十四个、一百二十八个,等等)的数据元素。在所示实施例中,从右向左,这四个索引具有值2、1、0和2,但是这些仅是示例。
执行单元可包括与先前针对执行单元518所描述的逻辑类似的逻辑以生成第一组信号950(例如,其可与第一组信号550类似)和第二组信号952(例如,其可与第二组信号552类似)。例如,执行单元918可包括全输入交叉结构、比较器、无匹配检测单元等。第一组信号950中的每个信号可具有可用于对于结果紧缩数据操作数972中的不同的对应结果数据元素生成结果数据元素值的值或指示。第二组信号952中的每个信号可具有可用于生成结果掩码操作数978的不同的对应掩码元素的掩码值的值或指示。
图10是示出可响应于分散索引至聚集索引重布置指令(例如,指令108和/或708)的实施例而执行的分散索引至聚集索引重布置操作1076的示例实施例的框图。该操作可由本文中公开的各种处理器(例如,处理器100和/或700)中的任一处理器执行。操作1076与先前针对图8所描述的操作876类似,并且可具有类似的特性和变体。为了避免使描述模糊,将主要描述操作1076的不同和/或附加的特性,而不重复所有任选的类似特性和变体。
如先前所描述,该指令可指定(例如,显式地指定)或以其他方式指示(例如,隐式地指示)源紧缩数据操作数1070,并且响应于该指令/操作,可生成结果紧缩数据操作数1072。然而,在操作1076的实施例中,不生成结果掩码操作数。相反,在该实施例中,当没有源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,该结果数据元素可具有作为替代值或空缺值的值,该值可与不具有此类替代值或空缺值的所有其他结果数据元素区分开。例如,在一些实施例中,每个此类替代值或空缺值可以是负数,而所有其他结果数据元素可具有正数。作为另一示例,在一些实施例中,每个此类替代值或空缺值可以是大数(例如,大于将用于聚集索引或分散索引的数),而所有其他结果数据元素可具有适用于聚集索引或分散索引的较小的尺寸量。在其他实施例中,可任选地使用能够与从源操作数重布置为结果操作数的数据元素的非替代值区分开的某个其他预定值。作为示例,在使用索引来控制按索引聚集至寄存器操作之前,软件可在测试中将此类值用为独特值。
图11是示出执行按索引分散至寄存器例程的处理器中的方法1180的示例实施例的流程框图。在框1181处,可接收分散索引至聚集索引重布置指令。该指令可指示第一紧缩数据寄存器,该第一紧缩数据寄存器具有带有按分散模式布置的索引的源紧缩索引操作数。该指令还可将第二紧缩数据寄存器指示为目的地操作数。在一些实施例中,该指令可任选地将掩码寄存器指示为目的地操作数。
在框1182处,响应于分散索引至聚集索引重布置指令,可将结果紧缩索引操作数存储在第二紧缩数据寄存器中。在一些实施例中,结果紧缩索引操作数可具有按聚集模式布置的索引。在一些实施例中,响应于分散索引至聚集索引重布置指令,可任选地将结果掩码操作数存储在掩码寄存器中。在一些实施例中,结果紧缩索引操作数可指示空缺(例如,具有用于空缺的被掩蔽的值)。
在框1183处,可接收按索引聚集至寄存器指令。该按索引聚集至寄存器指令可将第三紧缩数据寄存器指示为源紧缩数据操作数,并且可将第二紧缩数据寄存器指示为具有按聚集模式布置的索引的源紧缩索引操作数。在一些实施例中,按索引聚集至寄存器指令可任选地将掩码寄存器指示为源掩码操作数。按索引聚集至寄存器指令还可将第四紧缩数据寄存器指示为目的地操作数。
在框1184处,响应于按索引聚集至寄存器指令,可将结果紧缩数据操作数存储在第四紧缩数据寄存器中。结果紧缩数据操作数可具有使用来自第二紧缩数据寄存器的索引、从第三紧缩数据寄存器聚集的数据元素。在一些实施例中,按索引聚集至寄存器指令可任选地是经掩蔽的或预测的按索引聚集至寄存器指令,并且可使用来自第二紧缩数据寄存器的、任选地受制于由任选的源掩码操作数进行的掩蔽或预测的索引而从第三紧缩数据寄存器聚集的数据元素。
有利地,分散索引至聚集索引重布置指令可允许将索引重布置为适用于按索引聚集至寄存器指令的格式(例如,使得可充分利用现有的指令和/或微架构实现以执行按索引分散至寄存器操作)。为了易于描述,方法1180被描述为使用不同的寄存器,但是将理解,可将同一寄存器用于所描述的操作数中的多个操作数。
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置)以指定将要执行的操作(操作码)以及将对其执行该操作的操作数,等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有指令格式字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的位的位置,因为更少的字段被包括)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,ISA的每一条指令使用给定的指令格式来表达(并且如果经定义,则按照该指令格式的指令模板中的给定指令模板),并包括用于指定操作和操作数的字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式,该特定的操作码和指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该ADD指令在指令流中出现将使得在选择特定操作数的操作数字段中具有特定的内容。已发布和/或出版了被称为高级向量扩展(AVX)(AVX1和AVX2)并使用向量扩展(VEX)编码方案的SIMD扩展集(例如,参见2011年10月的《64和IA-32架构软件开发者手册》(“64and IA-32Architectures Software Developers Manual”);并且参见2011年6月的《高级向量扩展编程参考》(“Advanced Vector Extensions ProgrammingReference))。”
示例性指令格式
本文中所描述的(多条)指令的实施例可以不同的格式体现。另外,在下文中详述示例性系统、架构、以及流水线。(多条)指令的实施例可在此类系统、架构、以及流水线上执行,但是不限于详述的系统、架构、以及流水线。
VEX指令格式
VEX编码允许指令具有多于两个的操作数,并且允许SIMD向量寄存器比128位长。VEX前缀的使用提供了三个操作数(或者更多)句法。例如,先前的两操作数指令执行改写源操作数的操作(诸如A=A+B)。VEX前缀的使用使操作数执行非破坏性操作,诸如A=B+C。
图12A示出示例性AVX指令格式,包括VEX前缀1202、实操作码字段1230、MoD R/M字节1240、SIB字节1250、位移字段1262以及IMM81272。图12B示出来自图12A的哪些字段构成完整操作码字段1274和基础操作字段1242。图12C示出来自图12A的哪些字段构成寄存器索引字段1244。
VEX前缀(字节0-2)1202以三字节形式进行编码。第一字节是格式字段1240(VEX字节0,位[7:0]),该格式字段1240包含明确的C4字节值(用于区分C4指令格式的唯一值)。第二-第三字节(VEX字节1-2)包括提供专用能力的多个位字段。具体地,REX字段1205(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)进行编码,由此可通过增加VEX.R、VEX.X以及VEX.B来形成Rrrr、Xxxx以及Bbbb。操作码映射字段1215(VEX字节1,位[4:0]–mmmmm)包括对隐含的前导操作码字节进行编码的内容。W字段1264(VEX字节2,位[7]–W)由记号VEX.W表示,并且提供取决于该指令而不同的功能。VEX.vvvv 1220(VEX字节2,位[6:3]-vvvv)的作用可包括如下:1)VEX.vvvv编码第一源寄存器操作数且对具有两个或更多个源操作数的指令有效,第一源寄存器操作数以反转(1补码)形式被指定;2)VEX.vvvv编码目的地寄存器操作数,目的地寄存器操作数针对特定向量位移以1补码的形式被指定;或者3)VEX.vvvv不编码任何操作数,保留该字段,并且应当包含1211b。如果VEX.L 1268尺寸字段(VEX字节2,位[2]-L)=0,则它指示128位向量;如果VEX.L=1,则它指示256位向量。前缀编码字段1225(VEX字节2,位[1:0]-pp)提供了用于基础操作字段的附加位。
实操作码字段1230(字节3)还被称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段1240(字节4)包括MOD字段1242(位[7-6])、Reg字段1244(位[5-3])、以及R/M字段1246(位[2-0])。Reg字段1244的作用可包括如下:对目的地寄存器操作数或源寄存器操作数(Rrrr中的rrr)进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段1246的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)-比例字段1250(字节5)的内容包括用于存储器地址生成的SS1252(位[7-6])。先前已经针对寄存器索引Xxxx和Bbbb参考了SIB.xxx 1254(位[5-3])和SIB.bbb 1256(位[2-0])的内容。
位移字段1262和立即数字段(IMM8)1272包含地址数据。
通用向量友好指令格式
向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量运算两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量运算。
图13A-13B是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图13A是示出根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图13B是示出根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式1300定义A类和B类指令模板,两者包括无存储器访问1305的指令模板和存储器访问1320的指令模板。在向量友好指令格式的上下文中的术语“通用”指不束缚于任何专用指令集的指令格式。
尽管将描述其中向量友好指令格式支持以下情况的本发明的实施例,即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字节)数据元素宽度)。
图13A中的A类指令模板包括:1)在无存储器访问1305的指令模板内,示出无存储器访问的完全舍入控制型操作1310的指令模板、以及无存储器访问的数据变换型操作1315的指令模板;以及2)在存储器访问1320的指令模板内,示出存储器访问的时效性1325的指令模板和存储器访问的非时效性1330的指令模板。图13B中的B类指令模板包括:1)在无存储器访问1305的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作1312的指令模板以及无存储器访问的写掩码控制的vsize型操作1317的指令模板;以及2)在存储器访问1320的指令模板内,示出存储器访问的写掩码控制1327的指令模板。
通用向量友好指令格式1300包括以下列出的按照在图13A-13B中示出的顺序的如下字段。
格式字段1340-该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
基础操作字段1342-其内容区分不同的基础操作。
寄存器索引字段1344-其内容直接或者通过地址生成来指定源或目的地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)个寄存器组选择N个寄存器。尽管在一个实施例中N可高达三个源和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持高达两个源,其中这些源中的一个源还用作目的地,可支持高达三个源,其中这些源中的一个源还用作目的地,可支持高达两个源和一个目的地)。
修饰符(modifier)字段1346-其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问1305的指令模板与存储器访问1320的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段1350-其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字段被分成类字段1368、α字段1352、以及β字段1354。扩充操作字段1350允许在单一指令而非2、3或4个指令中执行多组共同的操作。
比例字段1360-其内容允许用于存储器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的内容的按比例缩放。
位移字段1362A-其内容用作存储器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。
位移因数字段1362B(注意,位移字段1362A直接在位移因数字段1362B上的并置指示使用一个或另一个)-其内容用作地址生成的一部分;它指定通过存储器访问的尺寸(N)按比例缩放的位移因数,其中N是存储器访问中的字节数量(例如,用于使用2比例*索引+基址+按比例缩放的位移的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总尺寸(N)以生成在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段1374(稍后在本文中描述)和数据操纵字段1354C确定。位移字段1362A和位移因数字段1362B可以不用于无存储器访问1305的指令模板和/或不同的实施例可实现两者中的仅一个或不实现两者中的任一个,在这个意义上位移字段1362A和位移因数字段1362B是任选的。
数据元素宽度字段1364-其内容区分使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令,在其他实施例中只用于一些指令)。如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上该字段是任选的。
写掩码字段1370-其内容在每一数据元素位置的基础上控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码操作,而B类指令模板支持合并写掩码操作和归零写掩码操作两者。当合并时,向量掩码允许在执行任何操作期间保护目的地中的任何元素集免于更新(由基础操作和扩充操作指定);在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行任何操作期间使目的地中的任何元素集归零(由基础操作和扩充操作指定);在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功能的子集是控制执行的操作的向量长度的能力(即,从第一个到最后一个要修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段1370允许部分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段1370的内容选择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此写掩码字段1370的内容间接地标识了要执行的掩码操作)的本发明的实施例,但是替代实施例相反或另外允许掩码写字段1370的内容直接地指定要执行的掩码操作。
立即数字段1372-其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上该字段是任选的。
类字段1368-其内容在不同类的指令之间进行区分。参考图13A-B,该字段的内容在A类和B类指令之间进行选择。在图13A-B中,圆角方形用于指示专用值存在于字段中(例如,在图13A-B中分别用于类字段1368的A类1368A和B类1368B)。
A类指令模板
在A类非存储器访问1305的指令模板的情况下,α字段1352被解释为其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作1310和无存储器访问的数据变换型操作1315的指令模板分别指定舍入1352A.1和数据变换1352A.2)的RS字段1352A,而β字段1354区分要执行指定类型的操作中的哪一种。在无存储器访问1305指令模板中,比例字段1360、位移字段1362A以及位移比例字段1362B不存在。
无存储器访问的指令模板-完全舍入控制型操作
在无存储器访问的完全舍入控制型操作1310的指令模板中,β字段1354被解释为其(多个)内容提供静态舍入的舍入控制字段1354A。尽管在本发明的所述实施例中舍入控制字段1354A包括抑制所有浮点异常(SAE)字段1356和舍入操作控制字段1358,但是替代实施例可支持、可将这些概念两者都编码成相同的字段或者仅具有这些概念/字段中的一个或另一个(例如,可仅有舍入操作控制字段1358)。
SAE字段1356-其内容区分是否停用异常事件报告;当SAE字段1356的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志且不唤起任何浮点异常处理程序。
舍入操作控制字段1358-其内容区分执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段1358允许在每一指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1350的内容优先于该寄存器值。
无存储器访问的指令模板-数据变换型操作
在无存储器访问的数据变换型操作1315的指令模板中,β字段1354被解释为数据变换字段1354B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
在A类存储器访问1320的指令模板的情况下,α字段1352被解释为驱逐提示字段1352B,其内容区分要使用驱逐提示中的哪一个(在图13A中,对于存储器访问时效性1325的指令模板和存储器访问非时效性1330的指令模板分别指定时效性的1352B.1和非时效性的1352B.2),而β字段1354被解释为数据操纵字段1354C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换、以及目的地的向下转换)。存储器访问1320的指令模板包括比例字段1360、以及任选的位移字段1362A或位移比例字段1362B。
向量存储器指令使用转换支持来执行来自存储器的向量加载并将向量存储到存储器。如同寻常的向量指令,向量存储器指令以数据元素式的方式与存储器来回传输数据,其中实际传输的元素由选为写掩码的向量掩码的内容规定。
存储器访问的指令模板-时效性的
时效性的数据是可能足够快地重新使用以从高速缓存受益的数据。然而,这是提示,且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
存储器访问的指令模板-非时效性的
非时效性的数据是不可能足够快地重新使用以从第一级高速缓存中的高速缓存受益且应当被给予驱逐优先级的数据。然而,这是提示,且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段1352被解释为写掩码控制(Z)字段1352C,其内容区分由写掩码字段1370控制的写掩码操作应当是合并还是归零。
在B类非存储器访问1305的指令模板的情况下,β字段1354的一部分被解释为RL字段1357A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的写掩码控制部分舍入控制类型操作1312的指令模板和无存储器访问的写掩码控制VSIZE型操作1317的指令模板分别指定舍入1357A.1和向量长度(VSIZE)1357A.2),而β字段1354的其余部分区分要执行指定类型的操作中的哪一种。在无存储器访问1305指令模板中,比例字段1360、位移字段1362A以及位移比例字段1362B不存在。
在无存储器访问的写掩码控制的部分舍入控制型操作1310的指令模板中,β字段1354的其余部分被解释为舍入操作字段1359A,并且停用异常事件报告(给定指令不报告任何种类的浮点异常标志且不唤起任何浮点异常处理程序)。
舍入操作控制字段1359A-正如舍入操作控制字段1358,其内容区分执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段1359A允许在每一指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1350的内容优先于该寄存器值。
在无存储器访问的写掩码控制VSIZE型操作1317的指令模板中,β字段1354的其余部分被解释为向量长度字段1359B,其内容区分要执行多个数据向量长度中的哪一个(例如,128字节、256字节、或512字节)。
在B类存储器访问1320的指令模板的情况下,β字段1354的一部分被解释为广播字段1357B,其内容区分是否要执行广播型数据操纵操作,而β字段1354的其余部分被解释为向量长度字段1359B。存储器访问1320的指令模板包括比例字段1360、以及任选的位移字段1362A或位移比例字段1362B。
针对通用向量友好指令格式1300,示出完整操作码字段1374包括格式字段1340、基础操作字段1342以及数据元素宽度字段1364。尽管示出了其中完整操作码字段1374包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段1374包括少于所有的这些字段。完整操作码字段1374提供操作码(opcode)。
扩充操作字段1350、数据元素宽度字段1364以及写掩码字段1370允许在每一指令的基础上以通用向量友好指令格式指定这些特征。
写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类、或者可支持两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可仅支持A类,并且旨在用于两者的核可支持两者(当然,具有来自两类的模板和指令的一些混合、但是并非来自两类的所有模板和指令的核在本发明的范围内)。同样,单一处理器可包括多个核,所有核支持相同的类或者其中不同的核支持不同的类。举例而言,在具有单独的图形和通用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核。当然,在本发明的不同实施例中,来自一类的特征也可在其他类中实现。可使以高级语言撰写的程序成为(例如,及时编译或者统计编译)各种不同的可执行形式,包括:1)仅具有用于执行的目标处理器支持的类的指令的形式;或者2)具有使用所有类的指令的不同组合而编写的替代例程且具有选择这些例程以基于由当前正在执行代码的处理器支持的指令而执行的控制流代码的形式。
示例性专用向量友好指令格式
图14是示出根据本发明的实施例的示例性专用向量友好指令格式的框图。图14示出专用向量友好指令格式1400,其指定位置、尺寸、解释和字段的次序、以及那些字段中的一些字段的值,在这个意义上向量友好指令格式1400是专用的。专用向量友好指令格式1400可用于扩展x86指令集,并且由此一些字段类似于在现有x86指令集及其扩展(例如,AVX)中使用的那些字段或与之相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段、以及立即数字段一致。示出来自图13的字段,来自图14的字段映射到来自图13的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式1300的上下文中参考专用向量友好指令格式1400描述了本发明的实施例,但是本发明不限于专用向量友好指令格式1400,除非另有声明。例如,通用向量友好指令格式1300构想各种字段的各种可能的尺寸,而专用向量友好指令格式1400被示为具有特定尺寸的字段。作为具体示例,尽管在专用向量友好指令格式1400中数据元素宽度字段1364被示为一位字段,但是本发明不限于此(即,通用向量友好指令格式1300构想数据元素宽度字段1364的其他尺寸)。
通用向量友好指令格式1300包括以下列出的按照图14A中示出的顺序的如下字段。
EVEX前缀(字节0-3)1402-以四字节形式进行编码。
格式字段1340(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段1340,并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
REX字段1405(EVEX字节1,位[7-5])-由EVEX.R位字段(EVEX字节1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)以及(1357BEX字节1,位[5]–B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1211B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx、以及bbb)进行编码,由此可通过增加EVEX.R、EVEX.X以及EVEX.B来形成Rrrr、Xxxx以及Bbbb。
REX’字段1310-这是REX’字段1310的第一部分,并且是用于对扩展的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。
操作码映射字段1415(EVEX字节1,位[3:0]–mmmm)–其内容对隐含的前导操作码字节(0F、0F 38、或0F 3)进行编码。
数据元素宽度字段1364(EVEX字节2,位[7]–W)-由记号EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
EVEX.vvvv 1420(EVEX字节2,位[6:3]-vvvv)-EVEX.vvvv的作用可包括如下:1)EVEX.vvvv编码第一源寄存器操作数且对具有两个或更多个源操作数的指令有效,第一源寄存器操作数以反转(1补码)的形式被指定;2)EVEX.vvvv编码目的地寄存器操作数,目的地寄存器操作数针对特定向量位移以1补码的形式被指定;或者3)EVEX.vvvv不编码任何操作数,保留该字段,并且应当包含1211b。由此,EVEX.vvvv字段1420对以反转(1补码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将指定符尺寸扩展到32个寄存器。
EVEX.U 1368类字段(EVEX字节2,位[2]-U)-如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1425(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前缀编码,并且由此不需要扩展。
α字段1352(EVEX字节3,位[7]–EH,也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α示出)-如先前所述,该字段是针对上下文的。
β字段1354(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ示出)-如先前所述,该字段是针对上下文的。
REX’字段1310-这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写掩码字段1370(EVEX字节3,位[2:0]-kkk)-其内容指定写掩码寄存器中的寄存器索引,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这可以各种方式实现,包括使用硬连线到所有的写掩码或者旁路掩码硬件的硬件来实现)。
实操作码字段1430(字节4)也称为操作码字节。操作码的一部分在该字段中指定。
MOD R/M字段1440(字节5)包括MOD字段1442、Reg字段1444、以及R/M字段1446。如先前所述的,MOD字段1442的内容将存储器访问和非存储器访问操作区分开。Reg字段1444的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段1446的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)-如先前所述的,比例字段1350的内容用于存储器地址生成。SIB.xxx 1454和SIB.bbb 1456-先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段1362A(字节7-10)-当MOD字段1442包含10时,字节7-10是位移字段1362A,并且它与传统32位位移(disp32)一样地工作,并且以字节粒度工作。
位移因数字段1362B(字节7)-当MOD字段1442包含01时,字节7是位移因数字段1362B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,它以字节粒度工作。由于disp8是符号扩展的,因此它仅能在-128和137字节偏移量之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段1362B是disp8的重新解释;当使用位移因数字段1362B时,通过将位移因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。这种压缩位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移量的冗余低阶位不需要被编码。换句话说,位移因数字段1362B替代传统x86指令集8位位移。由此,位移因数字段1362B以与x86指令集8位位移相同的方式(因此在ModRM/SIB编码规则中没有变化)进行编码,唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度中没有变化,而仅在通过硬件对位移值的解释中有变化(这需要按存储器操作数的尺寸按比例缩放位移量以获得字节式地址偏移量)。
立即数字段1372如先前所述地操作。
完整操作码字段
图14B是示出根据本发明的实施例的构成完整操作码字段1374的具有专用向量友好指令格式1400的字段的框图。具体地,完整操作码字段1374包括格式字段1340、基础操作字段1342、以及数据元素宽度(W)字段1364。基础操作字段1342包括前缀编码字段1425、操作码映射字段1415以及实操作码字段1430。
寄存器索引字段
图14C是示出根据本发明的一个实施例的构成寄存器索引字段1344的具有专用向量友好指令格式1400的字段的框图。具体地,寄存器索引字段1344包括REX字段1405、REX’字段1410、MODR/M.reg字段1444、MODR/M.r/m字段1446、VVVV字段1420、xxx字段1454以及bbb字段1456。
扩充操作字段
图14D是示出根据本发明的一个实施例的构成扩充操作字段1350的具有专用向量友好指令格式1400的字段的框图。当类(U)字段1368包含0时,它表明EVEX.U0(A类1368A);当它包含1时,它表明EVEX.U1(B类1368B)。当U=0且MOD字段1442包含11(表明无存储器访问操作)时,α字段1352(EVEX字节3,位[7]–EH)被解释为rs字段1352A。当rs字段1352A包含1(舍入1352A.1)时,β字段1354(EVEX字节3,位[6:4]–SSS)被解释为舍入控制字段1354A。舍入控制字段1354A包括一位SAE字段1356和两位舍入操作字段1358。当rs字段1352A包含0(数据变换1352A.2)时,β字段1354(EVEX字节3,位[6:4]–SSS)被解释为三位数据变换字段1354B。当U=0且MOD字段1442包含00、01或10(表明存储器访问操作)时,α字段1352(EVEX字节3,位[7]–EH)被解释为驱逐提示(EH)字段1352B且β字段1354(EVEX字节3,位[6:4]–SSS)被解释为三位数据操纵字段1354C。
当U=1时,α字段1352(EVEX字节3,位[7]–EH)被解释为写掩码控制(Z)字段1352C。当U=1且MOD字段1442包含11(表明无存储器访问操作)时,β字段1354的一部分(EVEX字节3,位[4]–S0)被解释为RL字段1357A;当它包含1(舍入1357A.1)时,β字段1354的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为舍入操作字段1359A,而当RL字段1357A包含0(VSIZE1357.A2)时,β字段1354的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段1359B(EVEX字节3,位[6-5]–L1-0)。当U=1且MOD字段1442包含00、01或10(表明存储器访问操作)时,β字段1354(EVEX字节3,位[6:4]–SSS)被解释为向量长度字段1359B(EVEX字节3,位[6-5]–L1-0)和广播字段1357B(EVEX字节3,位[4]–B)。
示例性寄存器架构
图15是根据本发明的一个实施例的寄存器架构1500的框图。在所示出的实施例中,有32个512位宽的向量寄存器1510;这些寄存器被引用为zmm0到zmm31。较低的16zmm寄存器的较低阶256个位覆盖在寄存器ymm0-16上。较低的16zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。专用向量友好指令格式1400对这些覆盖的寄存器组操作,如在以下表格中所示的。
换句话说,向量长度字段1359B在最大长度与一个或多个其他较短长度之间进行选择,其中每一这种较短长度是前一长度的一半,并且不具有向量长度字段1359B的指令模板在最大向量长度上操作。此外,在一个实施例中,专用向量友好指令格式1400的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于本实施例,较高阶数据元素位置保持与在指令之前相同或者归零。
写掩码寄存器1515-在所示的实施例中,存在8个写掩码寄存器(k0至k7),每一写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器1515的尺寸是16位。如先前所述的,在本发明的一个实施例中,向量掩码寄存器k0无法用作写掩码;当正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地停用该指令的写掩码操作。
通用寄存器1525——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用来寻址存储器操作数。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器组(x87栈)1545,在其上面重叠了MMX紧缩整数平坦寄存器组1550——在所示出的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点运算的八元素栈;而使用MMX寄存器来对64位紧缩整数数据执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保存操作数。
本发明的替代实施例可以使用较宽的或较窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器组和寄存器。
示例性核架构、处理器和计算机架构
处理器核可以用出于不同目的的不同方式在不同的处理器中实现。例如,这样的核的实现可以包括:1)旨在用于通用计算的通用有序核;2)预期用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核的CPU;以及2)包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,这样的协处理器有时被称为诸如集成图形和/或科学(吞吐量)逻辑等专用逻辑,或被称为专用核);以及4)可以将所描述的CPU(有时被称为应用核或应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上的芯片上系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图16A是示出根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图16B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图16A-B中的实线框示出了有序流水线和有序核,而任选增加的虚线框示出了寄存器重命名的、乱序发布/执行流水线和核。给定有序方面是乱序方面的子集的情况下,将描述乱序方面。
在图16A中,处理器流水线1600包括取出级1602、长度解码级1604、解码级1606、分配级1608、重命名级1610、调度(也被称为分派或发布)级1612、寄存器读取/存储器读取级1614、执行级1616、写回/存储器写入级1618、异常处理级1622、提交级1624。
图16B示出处理器核1690,包括耦合至执行引擎单元1650的前端单元1630,该前端单元和执行引擎单元两者均耦合至存储器单元1670。核1690可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。作为又一选项,核1690可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、或图形核等等。
前端单元1630包括耦合到指令高速缓存单元1634的分支预测单元1632,该指令高速缓存单元耦合到指令转换后备缓冲器(TLB)1636,该指令转换后备缓冲器耦合到指令取出单元1638,指令取出单元耦合到解码单元1640。解码单元1640(或解码器)可解码指令,并生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1640可使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1690包括(例如,在解码单元1640中或否则在前端单元1630内的)用于存储某些宏指令的微代码的微代码ROM或其他介质。解码单元1640耦合至执行引擎单元1650中的重命名/分配器单元1652。
执行引擎单元1650包括耦合到引退单元1654和一个或多个调度器单元的集合1656的重命名/分配器单元1652。(多个)调度器单元1656表示任意数量的不同调度器,包括预留站、中央指令窗口等。(多个)调度器单元1656耦合到(多个)物理寄存器组单元1658。(多个)物理寄存器组单元1658中的每一个表示一个或多个物理寄存器组,其中不同的物理寄存器组保存一个或多个不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针是将要执行的下一个指令的地址)等等。在一个实施例中,(多个)物理寄存器组单元1658包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。(多个)物理寄存器组单元1658被引退单元1654所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用(多个)重排序缓冲器和(多个)引退寄存器组、使用(多个)未来文件(future file)、(多个)历史缓冲器、(多个)引退寄存器组、使用寄存器映射和寄存器池等等)。引退单元1654和(多个)物理寄存器组单元1658耦合至(多个)执行群集1660。(多个)执行群集1660包括一个或多个执行单元的集合1662以及一个或多个存储器访问单元的集合1664。执行单元1662可执行多种操作(例如,移位、加法、减法、乘法)并可在多种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。(多个)调度器单元1656、(多个)物理寄存器组单元1658和(多个)执行群集1660被示为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整型流水线、标量浮点/紧缩整型/紧缩浮点/向量整型/向量浮点流水线,和/或各自具有其自己的(多个)调度器单元、物理寄存器组单元和/或执行群集的存储器访问流水线——以及在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有(多个)存储器访问单元1664的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为乱序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元的集合1664耦合到存储器单元1670,该存储器单元包括耦合到数据高速缓存单元1674的数据TLB单元1672,其中数据高速缓存单元耦合到第二级(L2)高速缓存单元1676。在一个示例性实施例中,存储器访问单元1664可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元1670中的数据TLB单元1672。指令高速缓存单元1634还耦合到存储器单元1670中的第二级(L2)高速缓存单元1676。L2高速缓存单元1676耦合至一个或多个其他级别的高速缓存,并最终耦合至主存储器。
作为示例,示例性的寄存器重命名乱序发布/执行核架构可以如下所述地实现流水线1600:1)指令取出1638执行取出和长度解码级1602和1604;2)解码单元1640执行解码级1606;3)重命名/分配器单元1652执行分配级1608和重命名级1610;4)(多个)调度器单元1656执行调度级1612;5)(多个)物理寄存器组单元1658和存储器单元1670执行寄存器读取/存储器读取级1614;执行群集1660执行执行级1616;6)存储器单元1670和(多个)物理寄存器组单元1658执行写回/存储器写入级1618;7)各单元可牵涉到异常处理级1622;以及8)引退单元1654和(多个)物理寄存器组单元1658执行提交级1624。
核1690可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON等任选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核1690包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许许多多媒体应用所使用的操作利用紧缩数据来执行。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所示出的处理器的实施例还包括分开的指令和数据高速缓存单元1634/1674以及共享L2高速缓存单元1676,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图17A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核)。根据应用,这些逻辑块通过高带宽的互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑通信。
图17A是根据本发明的各实施例的单个处理器核以及它与管芯上互连网络1702的连接及其第二级(L2)高速缓存的本地子集1704的框图。在一个实施例中,指令解码器1700支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1706允许对进入标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1708和向量单元1710使用分开的寄存器集合(分别为标量寄存器1712和向量寄存器1714),并且在这些寄存器之间转移的数据被写入到存储器并随后从第一级(L1)高速缓存1706读回,但是本发明的替代实施例可以使用不同的方法(例如使用单个寄存器集合或包括允许数据在这两个寄存器组之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1704是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存1704的本地子集的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集1704中,并且可以与其他处理器核访问其自己的本地L2高速缓存子集并行地被快速访问。被处理器核写入的数据被存储在其自己的L2高速缓存子集1704中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图17B是根据本发明的各实施例的图17A中的处理器核的一部分的展开图。图17B包括L1高速缓存1704的L1数据高速缓存1706A部分,以及关于向量单元1710和向量寄存器1714的更多细节。具体地说,向量单元1710是16宽向量处理单元(VPU)(见16宽ALU 1728),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1720支持对寄存器输入的混合、通过数值转换单元1722A-B支持数值转换、并通过复制单元1724支持对存储器输入的复制。写掩码寄存器1726允许断言所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图18是根据本发明的各实施例可能具有超过一个核、可能具有集成存储器控制器、以及可能具有集成图形器件的处理器1800的框图。图18中的实线框示出具有单个核1802A、系统代理1810、一个或多个总线控制器单元的集合1816的处理器1800,而虚线框的任选附加示出具有多个核1802A-N、系统代理单元1810中的一个或多个集成存储器控制器单元的集合1814以及专用逻辑1808的替代处理器1800。
因此,处理器1800的不同实现可包括:1)CPU,其中专用逻辑1808是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1802A-N是一个或多个通用核(例如,通用的有序核、通用的乱序核、这两者的组合);2)协处理器,其中核1802A-N是旨在主要用于图形和/或科学(吞吐量)的多个专用核;以及3)协处理器,其中核1802A-N是多个通用有序核。因此,处理器1800可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器1800可以是一个或多个基板的一部分,和/或使用多种工艺技术(诸如,BiCMOS、CMOS、或NMOS)中的任意技术被实现在一个或多个基板上。
存储器层级包括核内的一个或多个高速缓存级、一个或多个共享高速缓存单元的集合1806、以及耦合至集成存储器控制器单元的集合1814的外部存储器(未示出)。共享高速缓存单元的集合1806可包括一个或多个中级高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上的组合。尽管在一个实施例中,基于环的互连单元1812将集成图形逻辑1808、共享高速缓存单元的集合1806以及系统代理单元1810/(多个)集成存储器控制器单元1814互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,可以维护一个或多个高速缓存单元1806和核1802A-N之间的一致性(coherency)。
在一些实施例中,一个或多个核1802A-N能够实现多线程。系统代理1810包括协调和操作核1802A-N的那些组件。系统代理单元1810可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核1802A-N以及集成图形逻辑1808的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1802A-N在架构指令集方面可以是同构的或异构的;即,这些核1802A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图19-21是示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其他执行逻辑的多个系统和电子设备一般都是合适的。
现在参考图19,所示出的是根据本发明一个实施例的系统1900的框图。系统1900可以包括一个或多个处理器1910、1915,这些处理器耦合到控制器中枢1920。在一个实施例中,控制器中枢1920包括图形存储器控制器中枢(GMCH)1990和输入/输出中枢(IOH)1950(其可以在分开的芯片上);GMCH 1990包括存储器和图形控制器,存储器1940和协处理器1945耦合到该存储器和图形控制器;IOH 1950将输入/输出(I/O)设备1960耦合到GMCH1990。或者,存储器和图形控制器中的一个或两者可以被集成在处理器内(如本文中所描述的),存储器1940和协处理器1945直接耦合到处理器1910以及控制器中枢1920,控制器中枢1920与IOH 1950处于单个芯片中。
附加的处理器1915的任选性在图19中通过虚线来表示。每一处理器1910、1915可包括本文中描述的处理核中的一个或多个,并且可以是处理器1800的某一版本。
存储器1940可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1920经由诸如前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1995与处理器1910、1915进行通信。
在一个实施例中,协处理器1945是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1920可以包括集成图形加速器。
在物理资源1910、1915之间可以存在包括架构、微架构、热、和功耗特征等的一系列品质度量方面的各种差异。
在一个实施例中,处理器1910执行控制一般类型的数据处理操作的指令。协处理器指令可嵌入在这些指令中。处理器1910将这些协处理器指令识别为应当由附连的协处理器1945执行的类型。因此,处理器1910在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1945。(多个)协处理器1945接受并执行所接收的协处理器指令。
现在参考图20,所示为根据本发明的一实施例的更具体的第一示例性系统2000的框图。如图20所示,多处理器系统2000是点对点互连系统,且包括经由点对点互连2050耦合的第一处理器2070和第二处理器2080。处理器2070和2080中的每一个都可以是处理器1800的某一版本。在本发明的一个实施例中,处理器2070和2080分别是处理器1910和1915,而协处理器2038是协处理器1945。在另一实施例中,处理器2070和2080分别是处理器1910和协处理器1945。
处理器2070和2080被示为分别包括集成存储器控制器(IMC)单元2072和2082。处理器2070还包括作为其总线控制器单元的一部分的点对点(P-P)接口2076和2078;类似地,第二处理器2080包括P-P接口2086和2088。处理器2070、2080可以经由使用点对点(P-P)接口电路2078、2088的P-P接口2050来交换信息。如图20所示,IMC 2072和2082将处理器耦合到相应的存储器,即存储器2032和存储器2034,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器2070、2080可各自经由使用点对点接口电路2076、2094、2086、2098的各个P-P接口2052、2054与芯片组2090交换信息。芯片组2090可以任选地经由高性能接口2039与协处理器2038交换信息。在一个实施例中,协处理器2038是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器的外部但经由P-P互连与这些处理器连接,从而如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。
芯片组2090可以经由接口2096耦合至第一总线2016。在一个实施例中,第一总线2016可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图20所示,各种I/O设备2014可连同总线桥2018一起耦合到第一总线2016,总线桥2018将第一总线2016耦合到第二总线2020。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器2015耦合到第一总线2016。在一个实施例中,第二总线2020可以是低引脚计数(LPC)总线。各种设备可以被耦合至第二总线2020,在一个实施例中这些设备包括例如键盘/鼠标2022、通信设备2027以及诸如可包括指令/代码和数据2030的盘驱动器或其他大容量存储设备的存储单元2028。此外,音频I/O2024可以被耦合至第二总线2020。注意,其他架构是可能的。例如,代替图20的点对点架构,系统可以实现多分支总线或其他这类架构。
现在参考图21,所示为根据本发明的实施例的更具体的第二示例性系统2100的框图。图20和图21中的相同部件用相同附图标记表示,并从图21中省去了图20中的某些方面,以避免使图21的其他方面变得模糊。
图21示出处理器2070、2080可分别包括集成存储器和I/O控制逻辑(“CL”)2072和2082。因此,CL 2072、2082包括集成存储器控制器单元并包括I/O控制逻辑。图21示出不仅存储器2032、2034耦合至CL 2072、2082,而且I/O设备2114也耦合至控制逻辑2072、2082。传统I/O设备2115被耦合至芯片组2090。
现在参照图22,所示出的是根据本发明一个实施例的SoC 2200的框图。在图18中,相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的任选特征。在图22中,(多个)互连单元2202被耦合至:应用处理器2210,该应用处理器包括一个或多个核的集合212A-N以及(多个)共享高速缓存单元1806;系统代理单元1810;(多个)总线控制器单元1816;(多个)集成存储器控制器单元1814;一组或一个或多个协处理器2220,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2230;直接存储器存取(DMA)单元2232;以及用于耦合至一个或多个外部显示器的显示单元2240。在一个实施例中,(多个)协处理器2220包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如图20中示出的代码2030)应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非暂态的有形安排,其包括存储介质,诸如:硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的各实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式将指令转换成将由核来处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图23是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图23示出可使用x86编译器2304来编译利用高级语言2302的程序,以生成可由具有至少一个x86指令集核的处理器2316原生执行的x86二进制代码2306。具有至少一个x86指令集核的处理器2316表示任何处理器,这些处理器能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他程序的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器2304表示用于生成x86二进制代码2306(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器2316上执行。类似地,图23示出可以使用替代的指令集编译器2308来编译利用高级语言2302的程序,以生成可以由不具有至少一个x86指令集核的处理器2314(例如具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代指令集二进制代码2310。指令转换器2312被用来将x86二进制代码2306转换成可以由不具有x86指令集核的处理器2314原生执行的代码。该转换后的代码不大可能与替代性指令集二进制代码2310相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作并由来自替代指令集的指令构成。因此,指令转换器2312通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2306的软件、固件、硬件或其组合。
也可以任选地将针对图4-5中任意一个所描述的组件、特征和细节应用于图1、3和6中的任意一个。也可以任选地将针对图8-10中任意一个所描述的组件、特征和细节应用于图7。此外,针对任一装置所描述的组件、特征、以及细节还可任选地应用于在实施例中可由这种装置和/或使用这种装置执行的任一方法中。可将本文所述的处理器中的任意一个包括在本文所公开的计算机系统中的任意一个中。在一些实施例中,计算机系统可包括动态随机存取存储器(DRAM)。或者,计算机系统可包括不需要被刷新的易失性存储器类型或闪存存储器。本文中所公开的指令可利用本文中所示的、具有本文中示出的微架构中的任一微架构的、在本文中示出的系统中的任一系统上的处理器中的任一处理器来执行。本文中公开的指令可具有本文中示出的指令格式的特征中的任一特征。
在说明书和权利要求中,可能使用了术语“耦合的”和/或“连接的”及其派生词。这些术语不旨在互为同义词。相反,在多个实施例中,“连接的”可以用于指示两个或更多元件彼此直接物理和/或电接触。“耦合的”可意味着两个或更多个元件彼此直接物理和/或电接触。然而,“耦合的”也可意味着两个或更多个元件并未彼此直接接触,但是仍然彼此协作或彼此作用。例如,可以通过一个或多个中间组件来将执行单元与寄存器和/或解码单元耦合。在附图中,箭头用于示出连接和耦合。
可能已使用了术语“和/或”。如本文中所使用的那样,术语“和/或”意思是一个或另一个或两者(例如,A和/或B意思是:A或B,或者A和B两者)。
在以上描述中,为了提供对实施例的透彻理解,已阐述了特定的细节。然而,可以在没有这些特定细节中的一些的情况下来实践其他实施例。本发明的范围不是由以上所提供的具体示例来确定的,而仅由所附权利要求确定。在其他实例中,已经以框图形式和/或没有细节的形式示出了公知的电路、结构、设备和操作,以避免使对说明书的理解变得模糊。在认为合适的地方,已在诸附图之间重复了附图标记或附图标记的结尾部分以指示可能任选地具有类似或相同特性的对应或类似的元件,除非另外指定或是显而易见的。
某些操作可由硬件组件执行,或者能以机器可执行或电路可执行指令来具体化,这些机器可执行指令或电路可执行指令可用于使得和/或者导致机器、电路、或硬件组件(例如,处理器、处理器的部分、电路等)利用执行这些操作的指令来编程。这些操作还可任选地由硬件和软件的组合执行。处理器、机器、电路或硬件可包括专用或特定电路或其他逻辑(例如,可能与固件和/或软件组合的硬件),该专用或特定电路或其他逻辑用于执行和/或处理指令,并且响应于该指令而存储结果。
一些实施例包括制品(例如,计算机程序产品),所述制品包括机器可读介质。该介质可包括以机器可读形式提供(例如,存储)信息的机制。机器可读介质可提供或在其上存储有指令或指令序列,如果和/或当由机器执行所述指令或指令序列时,所述指令或指令序列可用于使所述机器执行和/或导致所述机器执行本文中所公开的一种或多种操作、方法或技术。
在一些实施例中,机器可读介质可包括非暂态机器可读存储介质。例如,非暂态机器可读存储介质可包括,软盘、光存储介质、光盘、光学数据存储设备、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储设备、非暂态存储器、或非暂态数据存储设备等。非暂态机器可读存储介质不由暂态传播的信号组成。在一些实施例中,存储介质可包括:包含固态物质的有形介质。
合适机器的示例包括但不限于,通用处理器、专用处理器、数字逻辑电路、集成电路等。合适的机器的另一些示例包括,包含处理器、数字逻辑电路或集成电路的计算机系统或其他电子设备。此类计算机系统或电子设备的示例包括但不限于,台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络设备(例如,路由器和交换机)、移动互联网设备(MID)、媒体播放器、智能电视、上网机、机顶盒和视频游戏控制器。
例如,贯穿本说明书对“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”的引用指示特定特征可被包括在本发明的实施中,但是不一定需要这样。类似地,在该描述中,为了使本公开流畅并辅助对各个发明性方面的理解,有时将各种特征一起归组在单个实施例、附图或对它们的描述中。然而,不应当将该公开方法解释为反映本发明需要比每项权利要求中所明确记载的更多特征的意图。相反,如所附权利要求所反映,发明性方面在于少于单个的公开实施例的所有特征。因此,将遵循具体实施方式的各项权利要求明确地结合进该具体实施方式,每一项权利要求独立地作为本发明单独的实施例而存在。
示例实施例
以下示例涉及进一步的实施例。这些示例中的细节可用于一个或多个实施例中的任何地方。
示例1是一种处理器,该处理器包括解码单元,该解码单元用于对数据元素重布置指令进行解码。该指令用于指示将具有多个源数据元素的源紧缩数据操作数,并用于指示目的地存储位置。多个源数据元素中的每个源数据元素都将具有源数据元素值和相对于源紧缩数据操作数的最低有效端的源数据元素位置。执行单元耦合至解码单元。响应于该指令,该执行单元用于将结果紧缩数据操作数存储在目的地存储位置中。该结果紧缩数据操作数将具有多个结果数据元素,每个结果数据元素都将具有结果数据元素值和相对于该结果紧缩数据操作数的最低有效端的结果数据元素位置。每个结果数据元素的结果数据元素值将为以下之一:(1)等于最接近源紧缩数据操作数的一端的、将具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及(2)当没有源数据元素将具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。
示例2包括示例1的处理器,其中,源紧缩数据操作数将具有多组重复的源数据元素值。对于每一组重复的源数据元素值,结果紧缩数据操作数用于存储重复的源数据元素值中的仅最高有效的源数据数据元素值的源数据元素位置。
示例3包括示例1的处理器,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,其中,源紧缩数据操作数的所述一端包括该源紧缩数据操作数的最高有效端。
示例4包括示例1的处理器,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,其中,源紧缩数据操作数的所述一端包括该源紧缩数据操作数的最低有效端。
示例5包括示例1的处理器,其中,执行单元响应于指令,用于存储结果掩码操作数,该结果掩码操作数将具有各自都将对应于结果数据元素中的一个不同结果数据元素的多个掩码元素。
示例6包括示例5的处理器,其中,执行单元响应于指令,用于存储结果掩码操作数,在该结果掩码操作数中:(1)将对应于将等于源数据元素位置的结果数据元素值的每个掩码元素将具有第一值;并且(2)将对应于将具有替代值的结果数据元素值的每个掩码元素将具有不同的第二值。
示例7包括示例5的处理器,其中,每个掩码元素将仅包括单个位。
示例8包括示例5的处理器,其中,执行单元响应于指令,用于将结果掩码操作数存储在掩码寄存器中。指令集中包括数据元素重布置指令的多条其他指令用于用于指定用于预测操作数的掩码寄存器,该预测操作数用于预测紧缩数据操作。
示例9包括示例1的处理器,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,该结果紧缩数据操作数将具有至少一个结果数据元素,该至少一个结果数据元素将具有将为替代值的结果数据元素值。该替代值将是负数。不是替代值的其他结果数据元素值中无一将是负数。
示例10包括示例1的处理器,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,该结果紧缩数据操作数将具有至少一个结果数据元素,该至少一个结果数据元素将具有将为替代值的结果数据元素值,并且其中,该替代值将包括零值。
示例11包括示例1的处理器,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,该结果紧缩数据操作数将具有将为替代值的结果数据元素值。该替代值将包括恰在指令的执行之前被存储在目的地存储位置中的对应位置中的数据元素的值。
示例12包括示例1-11中的任一项的处理器,其中,执行单元响应于指令用于存储结果紧缩数据操作数,该结果紧缩数据操作数将具有至少八个结果数据元素,该至少八个结果数据元素包括将具有作为结果数据元素值的替代值的至少一个结果数据元素。
示例13包括示例1-11中的任一项的处理器,其中,源数据元素中的每个源数据元素都包括整数索引。每个索引在每个源数据元素的最低有效字节的最低阶的位子集中被表示。
示例14包括示例1-11中的任一项的处理器,其中,解码单元还用于对按索引聚集至寄存器指令进行解码,但是该解码单元不能够用于对按索引分散至寄存器指令进行解码。
示例15包括示例1-11中的任一项的处理器,其中,源紧缩数据操作数将具有按分散模式布置的源数据元素,并且其中,结果紧缩数据操作数将具有按聚集模式布置的结果数据元素。
示例16是一种处理器中的方法,该方法包括:接收数据元素重布置指令。该指令指示具有多个源数据元素的源紧缩数据操作数,并指示目的地存储位置。源数据元素中的每个源数据元素都具有源数据元素值和相对于源紧缩数据操作数的最低有效端的源数据元素位置。该方法还包括:响应于指令,将结果紧缩数据操作数存储在目的地存储位置中。该结果紧缩数据操作数具有多个结果数据元素,每个结果数据元素都具有结果数据元素值和相对于该结果紧缩数据操作数的最低有效端的结果数据元素位置。每个结果数据元素的结果数据元素值将为以下之一:(1)等于最接近源紧缩数据操作数的一端的、具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及(2)当没有源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。
示例17包括示例16的方法,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,其中,源紧缩数据操作数的所述一端包括该源紧缩数据操作数的最高有效端。
示例18包括示例16的方法,其中,执行单元响应于指令,用于存储结果掩码操作数,该结果掩码操作数将具有各自都将对应于结果数据元素中的一个不同结果数据元素的多个掩码元素。
示例19包括示例18的方法,其中,执行单元响应于指令,用于存储结果掩码操作数,在该结果掩码操作数中:(1)将对应于将等于源数据元素位置的结果数据元素值的每个掩码元素将具有第一值;并且(2)将对应于将具有替代值的结果数据元素值的每个掩码元素将具有不同的第二值。
示例20包括示例16的方法,其中,执行单元响应于指令,用于存储结果紧缩数据操作数,该结果紧缩数据操作数将具有至少八个结果数据元素,该至少八个结果数据元素包括将具有作为结果数据元素值的替代值的至少一个结果数据元素。源数据元素中的每个源数据元素都包括整数索引,并且每个索引在每个源数据元素的最低有效字节的最低阶的位子集中被表示。
示例21包括示例16的方法,进一步包括:执行按索引聚集至寄存器指令,该按索引聚集至寄存器指令将数据元素重布置指令的结果紧缩数据操作数指示为源紧缩数据操作数。
示例22是一种计算机系统,其包括互连以及与该互连耦合的处理器。该处理器用于接收数据元素重布置指令。该指令用于指示将具有多个源数据元素的源紧缩数据操作数,并用于指示目的地存储位置。多个源数据元素中的每个源数据元素都将具有源数据元素值和相对于源紧缩数据操作数的最低有效端的源数据元素位置。响应于该指令,该处理器用于将结果紧缩数据操作数存储在目的地存储位置中。该结果紧缩数据操作数将具有多个结果数据元素,每个结果数据元素都将具有结果数据元素值和相对于该结果紧缩数据操作数的最低有效端的结果数据元素位置。每个结果数据元素的结果数据元素值将为以下之一:(1)等于最接近源紧缩数据操作数的一端的、将具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及(2)当没有源数据元素将具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。该计算机系统还包括与该互连耦合的动态随机存取存储器(DRAM)。该DRAM存储一组指令,该组指令包括按索引聚集至寄存器指令,该按索引聚集至寄存器指令用于将数据元素重布置指令的结果紧缩数据操作数指示为源紧缩数据操作数。
示例23包括示例22的计算机系统,其中,处理器响应于指令,用于存储结果紧缩数据操作数,其中,源紧缩数据操作数的所述一端包括该源紧缩数据操作数的最高有效端。
示例24是一种制品,其包括非暂态机器可读存储介质。该非暂态机器可读存储数据元素重布置指令。该数据元素重布置指令用于指示将具有多个源数据元素的源紧缩数据操作数,并用于指示目的地存储位置。多个源数据元素中的每个源数据元素都将具有源数据元素值和相对于源紧缩数据操作数的最低有效端的源数据元素位置。该数据元素重布置指令如由机器执行,用于使该机器执行操作,这些操作包括:将结果紧缩数据操作数存储在目的地存储位置中。该结果紧缩数据操作数将具有多个结果数据元素,每个结果数据元素都将具有结果数据元素值和相对于该结果紧缩数据操作数的最低有效端的结果数据元素位置。每个结果数据元素的结果数据元素值将为以下之一:(1)等于最接近源紧缩数据操作数的一端的、将具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及(2)当没有源数据元素将具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。
示例25包括示例24的制品,其中,该数据元素重布置指令如由机器执行,用于使该机器执行操作,这些操作包括:将掩码操作数存储在掩码寄存器中,其中,该掩码操作数将具有用于该结果紧缩数据操作数的每个结果数据元素的单个掩码位。
示例26包括示例1-11中任一项的处理器,进一步包括:任选的分支预测单元:用于预测分支;以及任选的指令预取单元,与该分支预测单元耦合,该指令预取单元用于预取指令,这些指令包括数据元素重布置指令(或按索引分散至寄存器指令)。该处理器还可任选地包括:任选的第一级(L1)指令高速缓存,与指令预取单元耦合,该L1指令高速缓存用于存储指令;任选的L1数据高速缓存,用于存储数据;以及任选的第二级(L2)高速缓存,用于存储数据和指令。该处理器还可任选地包括指令取出单元,与解码单元、L2指令高速缓存和L2高速缓存耦合,该指令取出单元用于:取出数据元素重布置指令(或按索引分散至寄存器指令),在一些情况下,从L1指令高速缓存和L2高速缓存中的一者中取出数据元素重布置指令(或按索引分散至寄存器指令);以及将该数据元素重布置指令(或按索引分散至寄存器指令)提供给解码单元。该处理器还可任选地包括:寄存器重命名单元,用于对寄存器重命名;任选的调度器,用于调度已从数据元素重布置指令(或按索引分散至寄存器指令)解码出以供执行的一个或多个操作;以及任选的提交单元,用于提交数据元素重布置指令(或按索引分散至寄存器指令)的执行结果。
示例27包括一种片上系统,该片上系统包括:至少一个互连;示例1-16中的任一项的处理器,与该至少一个互连耦合;任选的图形处理单元(GPU),与该至少一个互连耦合;任选的数字信号处理器(DSP),与该至少一个互连耦合;任选的显示控制器,与该至少一个互连耦合;任选的存储器控制器,与该至少一个互连耦合;任选的无线调制解调器,与该至少一个互连耦合;任选的图像信号处理器,与该至少一个互连耦合;任选的兼容通用串行总线(USB)3.0的控制器,与该至少一个互连耦合;任选的兼容蓝牙4.1的控制器,与该至少一个互连耦合;以及任选的无线收发机控制器,与该至少一个互连耦合。
示例28是可操作用于执行如示例16-21中的任一项的方法的处理器或其他装置。
示例29包括处理器或其他设备,其包括用于执行示例16-21中的任一项的方法的装置。
示例30是一种制品,其包括任选地非暂态机器可读介质,该非暂态机器可读介质任选地存储或以其他方式提供指令,如果和/或当由处理器、计算机系统、电子设备或其他机器执行该指令时,该指令可操作用于使该机器执行示例16-21中任一项的方法。
示例31是基本上如本文中所述的处理器或其他装置。
示例32是可操作用于执行基本上如本文中所述的任何方法的处理器或其他装置。
示例33是用于执行(例如,具有用于执行的组件或可操作用于执行)如本文中所述的任何数据元素重布置(或按索引分散至寄存器)指令的处理器或其他装置。
示例34是计算机系统或其他电子设备,其包括处理器,该处理器具有解码单元,该解码单元用于对第一指令集中的指令进行解码。该处理器还具有一个或多个执行单元。该电子设备还包括与该处理器耦合的存储设备。该存储设备可操作用于存储数据元素重布置指令(或按索引分散至寄存器指令),该存储数据元素重布置指令(或按索引分散至寄存器指令)是第二指令集中的指令。该存储设备还用于存储用于将数据元素重布置指令(或按索引分散至寄存器指令)转换为第一指令集中的一条或多条指令的指令。第一指令集中的这一条或多条指令当由处理器执行时,将使该处理器存储将由数据元素重布置指令(或按索引分散至寄存器指令)存储的结果。
示例35是一种处理器,该处理器包括多个紧缩数据寄存器和解码单元,该解码单元用于对按索引分散至寄存器指令进行解码。该按索引分散至寄存器指令用于指示将具有多个源数据元素的源紧缩数据操作数,用于指示将具有多个索引的源紧缩索引操作数,并且将用于指示目的地紧缩数据寄存器。索引中的每个索引将对应于相同的相对位置中的源数据元素中的一个不同源数据元素。执行单元与多个紧缩数据寄存器耦合,并与解码单元耦合。该执行单元响应于该按索引分散至寄存器指令,用于将结果紧缩数据操作数存储在目的地紧缩数据寄存器中。结果紧缩数据操作数将包括多个结果数据元素。每个结果数据元素将具有源数据元素中的、其对应的索引将指示结果紧缩数据操作数中的结果数据元素的数据元素位置的一个源数据元素的值。

Claims (25)

1.一种处理器,包括:
解码单元,用于对数据元素重布置指令解码,所述指令用于指示将具有多个源数据元素的源紧缩数据操作数并用于指示目的地存储位置,所述多个源数据元素中的每个源数据元素都将具有源数据元素值和相对于所述源紧缩数据操作数的最低有效端的源数据元素位置;以及
执行单元,与所述解码单元耦合,所述执行单元响应于所述指令,用于将结果紧缩数据操作数存储在所述目的地存储位置中,所述结果紧缩数据操作数将具有多个结果数据元素,每个结果数据元素都将具有结果数据元素值和相对于所述结果紧缩数据操作数的最低有效端的结果数据元素位置,其中,每个结果数据元素的结果数据元素值将是以下之一:
等于最接近所述源紧缩数据操作数的一端的、将具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及
当没有源数据元素将具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。
2.如权利要求1所述的处理器,其中,所述源紧缩数据操作数将具有多组重复的源数据元素值,并且其中,对于每一组重复的源数据元素值,所述结果紧缩数据操作数用于存储重复的源数据元素值中的仅最高有效的源数据数据元素值的源数据元素位置。
3.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令,用于存储所述结果紧缩数据操作数,其中,所述源紧缩数据操作数的所述一端包括所述源紧缩数据操作数的最高有效端。
4.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令,用于存储所述结果紧缩数据操作数,其中,所述源紧缩数据操作数的所述一端包括所述源紧缩数据操作数的最低有效端。
5.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令,用于存储结果掩码操作数,所述结果掩码操作数将具有各自都将对应于结果数据元素中的一个不同结果数据元素的多个掩码元素。
6.如权利要求5所述的处理器,其中,所述执行单元响应于所述指令,用于存储所述结果掩码操作数,在所述结果掩码操作数中:
将对应于将等于源数据元素位置的结果数据元素值的每个掩码元素将具有第一值;并且
将对应于将具有替代值的结果数据元素值的每个掩码元素将具有不同的第二值。
7.如权利要求5所述的处理器,其中,每个掩码元素将仅包括单个位。
8.如权利要求5所述的处理器,其中,所述执行单元响应于所述指令,用于将所述结果掩码操作数存储在掩码寄存器中,并且其中,包括所述数据元素重布置指令的指令集中的多条其他指令用于指定用于预测操作数的掩码寄存器,所述预测操作数用于预测紧缩数据操作。
9.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令,用于存储所述结果紧缩数据操作数,所述结果紧缩数据操作数将具有至少一个结果数据元素,所述至少一个结果数据元素将具有将为替代值的结果数据元素值,其中,所述替代值将为负数,并且其中,不是替代值的其他结果数据元素值中无一将为负数。
10.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令,用于存储所述结果紧缩数据操作数,所述结果紧缩数据操作数将具有至少一个结果数据元素,所述至少一个结果数据元素将具有将为替代值的结果数据元素值,并且其中,所述替代值将包括零值。
11.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令,将存储所述结果紧缩数据操作数,所述结果紧缩数据操作数将具有将为替代值的结果数据元素值,并且其中,所述替代值将包括恰在所述指令的执行之前被存储在所述目的地存储位置中的对应位置中的数据元素的值。
12.如权利要求1-11中的任一项所述的处理器,其中,所述执行单元响应于所述指令用于存储所述结果紧缩数据操作数,所述结果紧缩数据操作数将具有至少四个结果数据元素,所述至少四个结果数据元素包括将具有作为结果数据元素值的所述替代值的至少一个结果数据元素。
13.如权利要求1-11中的任一项所述的处理器,其中,所述源数据元素中的每个源数据元素都包括整数索引,并且其中,每个索引在每个源数据元素的最低有效字节的最低阶的位子集中被表示。
14.如权利要求1-11中的任一项所述的处理器,其中所述解码单元还用于对按索引聚集至寄存器指令进行解码,但是所述解码单元不能够用于对按索引分散至寄存器指令进行解码。
15.如权利要求1-11中的任一项所述的处理器,其中,所述源紧缩数据操作数将具有按分散模式布置的所述源数据元素,并且其中,所述结果紧缩数据操作数将具有按聚集模式布置的所述结果数据元素。
16.一种处理器中的方法,包括:
接收数据元素重布置指令,所述指令指示具有多个源数据元素的源紧缩数据操作数并指示目的地存储位置,所述多个源数据元素中的每个源数据元素都具有源数据元素值和相对于所述源紧缩数据操作数的最低有效端的源数据元素位置;以及
响应于所述指令,将结果紧缩数据操作数存储在所述目的地存储位置中,所述结果紧缩数据操作数具有多个结果数据元素,每个结果数据元素都具有结果数据元素值和相对于所述结果紧缩数据操作数的最低有效端的结果数据元素位置,其中,每个结果数据元素的结果数据元素值为以下之一:
等于最接近所述源紧缩数据操作数的一端的、具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及
当没有源数据元素具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值。
17.如权利要求16所述的方法,其中,执行单元响应于所述指令,用于存储所述结果紧缩数据操作数,其中,所述源紧缩数据操作数的所述一端包括所述源紧缩数据操作数的最高有效端。
18.如权利要求16所述的方法,其中,执行单元响应于所述指令,用于存储结果掩码操作数,所述结果掩码操作数将具有各自都将对应于结果数据元素中的一个不同结果数据元素的多个掩码元素。
19.如权利要求18所述的方法,其中,执行单元响应于所述指令,用于存储所述结果掩码操作数,在所述结果掩码操作数中:
将对应于将等于源数据元素位置的结果数据元素值的每个掩码元素将具有第一值;并且
将对应于将具有替代值的结果数据元素值的每个掩码元素将具有不同的第二值。
20.如权利要求16所述的方法,其中,执行单元响应于所述指令用于存储所述结果紧缩数据操作数,所述结果紧缩数据操作数将具有至少四个结果数据元素,所述至少四个结果数据元素包括将具有作为结果数据元素值的所述替代值的至少一个结果数据元素,并且其中,所述源数据元素中的每个源数据元素都包括整数索引,并且其中,每个索引在每个源数据元素的最低有效字节的最低阶的位子集中被表示。
21.一种计算机系统,包括:
互连;
处理器,与所述互连耦合,所述处理器用于:接收数据元素重布置指令,所述指令用于指示将具有多个源数据元素的源紧缩数据操作数并用于指示目的地存储位置,所述多个源数据元素中的每个源数据元素都将具有源数据元素值和相对于所述源紧缩数据操作数的最低有效端的源数据元素位置;以及响应于所述指令,将结果紧缩数据操作数存储在所述目的地存储位置中,所述结果紧缩数据操作数将具有多个结果数据元素,每个结果数据元素都将具有结果数据元素值和相对于所述结果紧缩数据操作数的最低有效端的结果数据元素位置,其中,每个结果数据元素的结果数据元素值为以下之一:
等于最接近所述源紧缩数据操作数的一端的、将具有等于结果数据元素的结果数据元素位置的源数据元素位置的源数据元素值的源数据元素的源数据元素位置;以及
当没有源数据元素将具有等于结果数据元素的结果数据元素位置的源数据元素值时,为替代值;以及
动态随机存取存储器(DRAM),与所述互连耦合,所述DRAM存储一组指令,所述一组指令包括按索引聚集至寄存器指令,所述按索引聚集至寄存器指令用于将所述数据元素重布置指令的所述结果紧缩数据操作数指示为源紧缩数据操作数。
22.如权利要求21所述的计算机系统,其中,所述处理器响应于所述指令,用于存储所述结果紧缩数据操作数,其中,所述源紧缩数据操作数的所述一端包括所述源紧缩数据操作数的最高有效端。
23.一种设备,包括用于执行如权利要求16-20中的任一项所述的方法的装置。
24.一种制品,包括存储指令的机器可读介质,所述指令如果由机器执行可操作用于使所述机器执行如权利要求16-20中的任一项所述的方法。
25.一种电子设备,包括:互连;如权利要求1-11中的任一项所述的处理器,与所述互连耦合;以及动态随机存取存储器(DRAM),与所述互连耦合。
CN201680048981.4A 2015-09-25 2016-08-08 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令 Active CN107924307B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/865,696 US10503502B2 (en) 2015-09-25 2015-09-25 Data element rearrangement, processors, methods, systems, and instructions
US14/865,696 2015-09-25
PCT/US2016/045989 WO2017052812A1 (en) 2015-09-25 2016-08-08 Scatter by indices to register, and data element rearrangement, processors, methods, systems, and instructions

Publications (2)

Publication Number Publication Date
CN107924307A true CN107924307A (zh) 2018-04-17
CN107924307B CN107924307B (zh) 2022-06-17

Family

ID=58387259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680048981.4A Active CN107924307B (zh) 2015-09-25 2016-08-08 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令

Country Status (5)

Country Link
US (2) US10503502B2 (zh)
CN (1) CN107924307B (zh)
DE (1) DE112016004348T5 (zh)
TW (1) TWI706322B (zh)
WO (1) WO2017052812A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
JP6222285B1 (ja) * 2016-06-01 2017-11-01 富士電機株式会社 データ処理装置、データ処理方法及びプログラム
US10459843B2 (en) 2016-12-30 2019-10-29 Texas Instruments Incorporated Streaming engine with separately selectable element and group duplication
KR102584031B1 (ko) * 2017-02-23 2023-10-04 에이알엠 리미티드 데이터 처리장치에서의 요소 바이 벡터 연산
US10782918B2 (en) * 2018-09-06 2020-09-22 Advanced Micro Devices, Inc. Near-memory data-dependent gather and packing
CN111078282B (zh) * 2018-10-19 2020-12-22 安徽寒武纪信息科技有限公司 运算方法、装置及相关产品
US10862465B1 (en) * 2019-09-02 2020-12-08 Quantum Machines Quantum controller architecture
US11328209B1 (en) 2021-06-02 2022-05-10 SambaNova Systems, Inc. Dual cycle tensor dropout in a neural network
US11256987B1 (en) * 2021-06-02 2022-02-22 SambaNova Systems, Inc. Memory efficient dropout, with reordering of dropout mask elements

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1174353A (zh) * 1996-08-19 1998-02-25 三星电子株式会社 采用多个向量寄存器组的单指令多数据处理方法及其装置
US6088782A (en) * 1997-07-10 2000-07-11 Motorola Inc. Method and apparatus for moving data in a parallel processor using source and destination vector registers
US20020091910A1 (en) * 1996-10-10 2002-07-11 Sun Microsystems, Inc. Visual instruction set for CPU with integrated graphics functions
US20120144089A1 (en) * 2007-12-31 2012-06-07 Hall Jonathan C Scatter/gather accessing multiple cache lines in a single cache port
US20130283019A1 (en) * 2011-12-22 2013-10-24 Elmoustapha Ould-Ahmed-Vall Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US20140019715A1 (en) * 2011-12-23 2014-01-16 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register
CN103562855A (zh) * 2011-04-01 2014-02-05 英特尔公司 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法
US20140095779A1 (en) * 2012-09-28 2014-04-03 Andrew T. Forsyth Processing memory access instructions that have duplicate memory indices
CN104011673A (zh) * 2011-12-30 2014-08-27 英特尔公司 向量频率压缩指令
CN104025040A (zh) * 2011-12-23 2014-09-03 英特尔公司 用于混洗浮点或整数值的装置和方法
CN104040484A (zh) * 2011-12-28 2014-09-10 英特尔公司 浮点缩放处理器、方法、系统和指令
CN104049954A (zh) * 2013-03-14 2014-09-17 英特尔公司 多数据元素与多数据元素比较处理器、方法、系统和指令
CN104137059A (zh) * 2011-12-23 2014-11-05 英特尔公司 多寄存器分散指令

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6018628A (en) * 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US20040236920A1 (en) 2003-05-20 2004-11-25 Sheaffer Gad S. Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data (SIMD) operation
EP1622009A1 (en) 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US8074026B2 (en) 2006-05-10 2011-12-06 Intel Corporation Scatter-gather intelligent memory architecture for unstructured streaming data on multiprocessor systems
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US8230172B2 (en) 2009-12-03 2012-07-24 Intel Corporation Gather and scatter operations in multi-level memory hierarchy
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
DE112011105664T5 (de) * 2011-09-26 2014-08-21 Intel Corporation Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität
WO2013095563A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions
WO2013095672A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register gather instruction
EP2798464B8 (en) * 2011-12-30 2019-12-11 Intel Corporation Packed rotate processors, methods, systems, and instructions
CN104303142B (zh) 2012-06-02 2019-03-08 英特尔公司 使用索引阵列和有限状态机的分散
US9785436B2 (en) 2012-09-28 2017-10-10 Intel Corporation Apparatus and method for efficient gather and scatter operations
CN107562444B (zh) 2012-12-26 2020-12-18 英特尔公司 合并相邻的聚集/分散操作
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1174353A (zh) * 1996-08-19 1998-02-25 三星电子株式会社 采用多个向量寄存器组的单指令多数据处理方法及其装置
US20020091910A1 (en) * 1996-10-10 2002-07-11 Sun Microsystems, Inc. Visual instruction set for CPU with integrated graphics functions
US6088782A (en) * 1997-07-10 2000-07-11 Motorola Inc. Method and apparatus for moving data in a parallel processor using source and destination vector registers
US20120144089A1 (en) * 2007-12-31 2012-06-07 Hall Jonathan C Scatter/gather accessing multiple cache lines in a single cache port
CN103562855A (zh) * 2011-04-01 2014-02-05 英特尔公司 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法
US20130283019A1 (en) * 2011-12-22 2013-10-24 Elmoustapha Ould-Ahmed-Vall Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US20140019715A1 (en) * 2011-12-23 2014-01-16 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register
CN104025040A (zh) * 2011-12-23 2014-09-03 英特尔公司 用于混洗浮点或整数值的装置和方法
CN104137059A (zh) * 2011-12-23 2014-11-05 英特尔公司 多寄存器分散指令
CN104040484A (zh) * 2011-12-28 2014-09-10 英特尔公司 浮点缩放处理器、方法、系统和指令
CN104011673A (zh) * 2011-12-30 2014-08-27 英特尔公司 向量频率压缩指令
US20140095779A1 (en) * 2012-09-28 2014-04-03 Andrew T. Forsyth Processing memory access instructions that have duplicate memory indices
CN104049954A (zh) * 2013-03-14 2014-09-17 英特尔公司 多数据元素与多数据元素比较处理器、方法、系统和指令

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ALEXANDER A.STEPANOV: ""SIMD-based decoding of posting lists"", 《CLKM"11:PROCEEDINGS OF THE 20TH ACM INTERNATIONAL CONFERENCE ON INFORMATION AND KNOWLEDGE MANAGER》 *
陈向: ""SIMD数据置换操作的自动生成和优化"", 《计算机科学》 *

Also Published As

Publication number Publication date
TW201729072A (zh) 2017-08-16
US20170090921A1 (en) 2017-03-30
WO2017052812A1 (en) 2017-03-30
US11941394B2 (en) 2024-03-26
DE112016004348T5 (de) 2018-06-21
CN107924307B (zh) 2022-06-17
US20200117451A1 (en) 2020-04-16
US10503502B2 (en) 2019-12-10
TWI706322B (zh) 2020-10-01

Similar Documents

Publication Publication Date Title
CN104951401B (zh) 排序加速处理器、方法、系统和指令
CN105278917B (zh) 无局部性提示的向量存储器访问处理器、方法、设备、制品和电子设备
CN104756068B (zh) 合并相邻的聚集/分散操作
CN104126168B (zh) 打包数据重新安排控制索引前体生成处理器、方法、系统及指令
CN104049943B (zh) 有限范围向量存储器访问指令、处理器、方法和系统
CN104094218B (zh) 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法
CN104049953B (zh) 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品
CN104137060B (zh) 高速缓存协处理单元
CN107924307A (zh) 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令
CN104137059B (zh) 多寄存器分散指令
CN104011645B (zh) 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和含有指令的介质
CN107924308A (zh) 数据元素比较处理器、方法、系统和指令
CN104049954B (zh) 多数据元素与多数据元素比较处理器、方法、系统和指令
CN104126167B (zh) 用于从通用寄存器向向量寄存器进行广播的装置和方法
CN109791487A (zh) 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令
CN109992304A (zh) 用于加载片寄存器对的系统和方法
CN108292224A (zh) 用于聚合收集和跨步的系统、设备和方法
CN109313549A (zh) 用于向量的元素排序的装置、方法和系统
CN104350461B (zh) 具有不同的读和写掩码的多元素指令
CN107003846A (zh) 用于向量索引加载和存储的方法和装置
CN104011616B (zh) 改进置换指令的装置和方法
CN110321157A (zh) 用于具有可变精度输入操作数的融合乘-加操作的指令
CN106605206A (zh) 位组交织处理器、方法、系统及指令
CN108268244A (zh) 用于算术递归的系统、装置和方法
CN109643234A (zh) 用于合并数据元素并生成索引更新的处理器、方法、系统和指令

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant