CN107273095A - 用于对齐寄存器的系统、装置和方法 - Google Patents

用于对齐寄存器的系统、装置和方法 Download PDF

Info

Publication number
CN107273095A
CN107273095A CN201710458693.2A CN201710458693A CN107273095A CN 107273095 A CN107273095 A CN 107273095A CN 201710458693 A CN201710458693 A CN 201710458693A CN 107273095 A CN107273095 A CN 107273095A
Authority
CN
China
Prior art keywords
data element
instruction
data
write mask
concatenation
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
CN201710458693.2A
Other languages
English (en)
Other versions
CN107273095B (zh
Inventor
J·C·圣阿德里安
R·E·桑斯
M·B·吉尔卡尔
L·K·吴
D·R·布拉德福德
V·W·李
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 CN107273095A publication Critical patent/CN107273095A/zh
Application granted granted Critical
Publication of CN107273095B publication Critical patent/CN107273095B/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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/30018Bit or string instructions
    • 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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

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)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Abstract

说明了用于在计算机处理器中执行对齐指令的系统、装置和方法的实施例。在一些实施例中,对齐指令的执行使得两个串接源的数据元素的选择性存储存储在目的地中。

Description

用于对齐寄存器的系统、装置和方法
本申请是2012年03月29日提交的申请号为201280026790.X的同名专利申请的分案申请。
技术领域
本发明的领域一般涉及计算机处理器体系结构,尤其涉及当被执行时引起特定结果的指令。
背景技术
随着处理器的单指令多数据(SIMD)宽度增加,应用程序开发者(和编译器)越来越难以充分使用SIMD硬件,因为数据元素不会自然地与全矢量的大小对齐并且通常产生高速缓冲存储行分裂,其中存储器参考位于高速缓冲存储器层级的两个不同行上。常规地,处理高速缓冲存储行分裂涉及到:检测高速缓冲存储行分裂状态,进行两次不同的TLB查找,进行两次高速缓冲存储行存取,以及因此使用两个独立的存储器端口,和/或使用专用逻辑在来自存储器途中合并来自两个连续高速缓冲存储行的数据片。
附图说明
在附图中通过举例的方式而不是限制的方式阐述了本发明,其中相似的附图标记表示相似的元件,并且其中:
图1描绘了ALIGN(对齐)指令的示例性执行。
图2描绘了ALIGN指令的示例性执行。
图3描绘了ALIGN指令的示例性执行。
图4示出了通过在处理器中执行对齐指令而对齐来自两个源的数据以及将该对齐存储到目的地位置的方法的实施例。
图5示出了用于处理对齐指令的方法的实施例。
图6示出了用于处理对齐指令的方法的实施例。
图7示出了用于处理伪码的对齐指令的方法的实施例。
图8A是示出根据本发明的实施例的一般矢量友好指令格式及其A类指令模板的框图。
图8B是示出根据本发明的实施例的一般矢量友好指令格式及其B类指令模板的框图。
图9A-C示出了根据本发明的实施例的示例性的特定矢量友好指令格式。
图10是根据本发明的一个实施例的寄存器体系结构的框图。
图11A是根据本发明的实施例的单CPU核心连同其与片上互连网络的连接以及其2级(L2)高速缓冲存储器的本地子集的框图。
图11B是根据本发明的实施例的图11A中的CPU核心的部分的分解视图。
图12是示出根据本发明的实施例的示例性的无序体系结构的框图。
图13是依照本发明的一个实施例的系统的框图。
图14是依照本发明的实施例的第二系统的框图。
图15是依照本发明的实施例的第三系统的框图。
图16是依照本发明的实施例的SoC的框图。
图17是根据本发明的实施例的具有集成的存储器控制器和图形的单核处理器和多核处理器的框图。
图18是根据本发明的实施例的对照将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图。
具体实施方式
在下面的说明中,阐述了多方面具体细节。然而,应当理解的是,本发明的实施例可在不具有这些具体细节的情况下实现。在其它实例中,为了不使得本说明的理解不清晰,未详细示出公知的电路、结构和技术。
说明书中提到“一个实施例”、“实施例”、“示例性实施例”等表示所描述的实施例可包括特定的特征、结构或特点,但是每个实施例可不必包括该特定的特征、结构或特点。而且,这种术语不一定指的是同一实施例。此外,当结合实施例描述特定的特征、结构或特点时,假设结合其它实施例来实现这样的特征、结构或特点在本领域技术人员的知识范围内,无论是否做出明确说明。
如之前详述的,数据元素的传统对齐要求多次处理,得到一些不期望的结果。例如,在一些情形下,用户经由特定记忆术指定可能的不对齐行为(诸如执行类似于VMOVUPS的指令),导致因假设高速缓冲存储行分裂总是将要生成而引起的更缓慢的执行。在其它情形下,硬件在运行时间检测高速缓冲存储器不对齐,导致额外的性能惩罚。
对齐
下文中详细说明了矢量对齐(VALIGN)指令的实施例,以及可用于执行这样的指令的系统、体系结构、指令格式等的实施例。当被执行时,矢量对齐指令使处理器串接指令的第一和第二源操作数的数据元素,基于指令的偏移(立即数)值将来自该串接数据的数据元素向右移位,并且将移位后的串接数据的一个或多个元素存储到目的地矢量寄存器中。在一些实施例中,待存储在目的地矢量寄存器中的移位后的串接数据的元素是通过写屏蔽寄存器的对应位确定的。第一和第二源均可是寄存器、存储器单元或其组合。在一些实施例中,当源为存储器单元时,其数据在串接之前被加载到寄存器中。
该指令的示例为“VALIGND zmm1{k1},zmm2,zmm3/m512,offset”,其中zmm1、zmm2、zmm3是矢量寄存器(诸如128、256、512位寄存器),m512是存储在寄存器或立即数中的512位存储器操作数,k1是写屏蔽操作数(诸如类似于之前所详细说明的16位寄存器),并且offset是立即数(例如,8位立即数),其指示在源的数据元素串接之后数据元素的32位元素的对齐,如下文详述的。从存储器取回的无论什么都是起始于存储器地址的集合连续位并且可以是多个尺寸(128位、256位、512位等)中的一个,这取决于目的地寄存器的尺寸,该尺寸通常与目的地寄存器的尺寸相同。在一些实施例中,写屏蔽也具有不同的尺寸(8位、32位等)。另外,在一些实施例中,指令并不使用写屏蔽的全部位(例如,仅使用最低有效的八位)。当然,VALIGND是指令的操作码。通常,在指令中明确地定义每个操作数。可以在指令的“前缀”中定义数据元素的尺寸,诸如通过使用类似于之前所描述的“W”的数据粒度位的指示。在大多数实施例中,W将指示每个数据元素是32位或64位的。如果数据元素的尺寸是32位,并且源的尺寸是512位,则每个源中存在十六(16)个数据元素。
图1描绘了ALIGN指令的示例性执行。在该示例中,存在两个源,每个源具有16个数据元素。在大多数情况下,这些源中的一个是寄存器(对于该示例,源1 101被处理为512位寄存器,诸如具有16个32位数据元素的ZMM寄存器,然而,可以使用其它的数据元素和寄存器尺寸,诸如XMM和YMM寄存器以及16或64位数据元素)。另一个源103是寄存器或存储器单元(在该示例中,源2为另一个源)。如果第二源是存储器单元,则在大多数实施例中其在源的任何混合之前被置于临时寄存器中。另外,存储器单元的数据元素可在置于临时寄存器中之前经过数据变换。数据103包括从A至P的十六个数据元素,并且数据103包括从Q至AF的十六个数据元素。
如图所示,来自寄存器101和103的数据与第一数据寄存器101的最低有效数据元素串接105,A为串接数据105的最低有效数据元素。第二数据寄存器103的最低有效数据元素Q紧跟着第一数据寄存器101的最高有效数据元素。串接数据元素105移位(对齐)三(指令的立即数值),这留下了来自原始源的数据元素D至AF。当然,还可使用大端法(big-endian)方式,并且数据元素将向左移位相应的立即数值。
该经移位和串接的数据的最低有效数据元素(D至S)被写入到指令的目的地寄存器中,直到在目的地寄存器中不存在更多的数据元素槽。在其它实施例中,最高有效数据元素被写入目的地寄存器107中。该写入可并行地或串行地完成。如图所示,十六个最低有效数据元素被写入目的地寄存器中,因其仅具有存储该尺寸的十六个数据元素的空间。
图2示出了相同的源数据和移位,但是使用屏蔽寄存器201的内容来确定经串接和移位的数据105中的哪些最低有效数据元素应当被写入目的地寄存器中。在一些实施例中,该屏蔽寄存器是上文详述的“k”屏蔽寄存器(k1-k7)。屏蔽寄存器显示为0x878B。对于掩码的存储值“1”的每个位置,来自经串接和移位的数据105的相应数据元素被写入目的地寄存器的相应位置上。例如,因为掩码的位置“0”为“1”,则经移位和串接的数据元素中的相应数据元素位置“0”的值D被存储到目的地寄存器的“0”位置上。对于掩码的存储值“0”的每个位置,目的地寄存器的相应数据元素不会被覆写。例如,在位置“2”上,掩码为“0”,因此目的地仍为DC,而不是被值F覆写。尽管“1”被显示为指示特定的数据元素位置应当被写入目的地寄存器中并且“0”指示不进行该写入,但是在其它实施例中使用相反的约定。另外,在一些实施例中,写入最高有效数据元素,而不是最低有效数据元素。
图3示出了相同的源数据和移位,但是使用屏蔽寄存器的内容来确定经串接和移位的数据105中的哪些最低有效数据元素应当被写入目的地寄存器中。在该实例中,不使用全部的屏蔽位。这可能发生于例如具有64位数据元素和512位寄存器的一些实施例中。
图4示出了通过在处理器中执行对齐指令而对齐来自两个源的数据且将该对齐存储到目的地位置上的方法的实施例。在401中,接收具有目的地操作数、第一和第二源操作数、偏移(立即数)值和掩码操作数的对齐指令。目的地操作数和源操作数具有相同的尺寸。在一些实施例中,目的地操作数和源操作数的尺寸均为512位。然而,在其它实施例中,目的地操作数和源操作数可具有不相同的尺寸,诸如128位或256位。典型地,目的地操作数和第一源操作数均为寄存器,诸如上述矢量寄存器(XMM、YMM或ZMM)中的一个。第二源操作数可以是寄存器或存储器操作数。在一些实施例中,偏移是8位立即数。所接收到的掩码可以是前述“k”写屏蔽中的一个,或在一些实施例中,其可以是不同的寄存器或存储器单元。
在403中对对齐指令进行解码。根据指令的格式,可在该阶段对各数据进行解释,诸如,是否将要进行数据变换、写入和检索哪些寄存器、利用存储器源操作数以及可能的偏移(如果包括的话)存取哪个存储器地址,等等。
在405中对源操作数值进行取回/读取。如果两个源均为寄存器,则对那些寄存器进行读取。如果源操作数中的一个或两个为存储器操作数,则取回与该操作数相关联的数据元素。在一些实施例中,来自存储器的数据元素被存储到临时寄存器中。
如果将要进行任何数据元素变换(诸如向上转换、广播、混合(swizzle)等),可以在407中进行。例如,来自存储器的16位数据元素可被向上转换成32位数据元素,或者数据元素可从一种模式混合成另一种模式(例如,从XYZW XYZW XYZW…XYZW混合成XXXXXXXXYYYYYYYY ZZZZZZZZ WWWWWWWW)。
在409中执行对齐指令。该指令的执行使得第一和第二源操作数的数据元素串接,基于偏移将来自该串接数据的这些数据元素向右移位。在一些实施例中,第一源操作数数据元素是串接数据元素中的最低有效数据元素。在411中,经移位的串接数据中的一些数据元素可根据写屏蔽寄存器的相应位而被存储到目的地矢量寄存器中。尽管单独地示出了409和411,但在一些实施例中,它们可以作为指令执行的一部分一起执行。
尽管上文在一种类型的执行环境中进行了阐述说明,但是易于修改以适应其它环境,诸如所详述的有序环境和无序环境。
图5示出了用于处理对齐指令的方法的实施例。在该实施例中,假设之前已经执行了操作401-407中的一些(如果不是全部),然而,为了避免使下文给出的细节不清晰,未示出这些操作。例如,未示出取出和解码,也没有示出操作数(源和写屏蔽)取回。
在501中,串接第一和第二源的数据元素以形成待操作的较大“矢量”。例如,来自两个源寄存器的数据被串接以使第一源的数据元素为较低有效位并且使第二源的数据元素为最高有效位,如图1和图2中所示。在一些实施例中,该较大的矢量为1024位。显然,较大的矢量的该尺寸取决于源的尺寸。
在503中,第一和第二源的串接数据向右移位由指令的立即数值定义的数据元素的量。
可以在505中确定是否使用写屏蔽。这是任选的,取决于基础硬件体系结构的实现。例如,如果使用类似于上文详述的k0的写屏蔽寄存器,则将不使用掩码。尽管k0是当其包括在指令中时可被写入的寄存器,但是这表示不进行屏蔽(换言之,在所有的位位置上基本上为值“1”)。当然,在其它体系结构中,可以用作任何其它所期望的寄存器。
如果使用写屏蔽,则对于写屏蔽中的每个位位置,在507中确定该位位置是否指示第一和第二源的经移位的串接数据的相应元素将被存储在目的地寄存器的相应位置上。在一些实施例中,串行地执行该确定和/或可能的稍后在511中的存储,也就是说,对于第一位位置(即,k1[0])做出确定,然后对顺序位位置进行评估。在其它实施例中,并行地执行该确定和/或可能的稍后在511中的存储,也就是说,同时对于所有的位位置(即,k1[0]-k1[15])做出确定。另外,待评估的位位置的数量根据数据元素尺寸而变化。例如,在具有32位数据元素的512位实现中,对于该确定评估掩码的十六个(16)位。在具有64位数据元素的512位实现中,仅对掩码的八个(8)位进行评估。在该实例中,典型地对最低有效的八个(8)位进行评估,但是可以使用其它的约定。
当掩码的位位置指示什么都不应写入到目的地寄存器的相应数据元素位置上时,在509中什么都不写入到目的地寄存器中。当掩码的位位置指示经移位的串接数据的相应数据应当写入到目的地寄存器的相应数据元素位置时,则在511中其被写入到目的地寄存器的相应数据元素位置上。这种存储装置的示例显示在图2中。如果不使用掩码,则在511中将经移位的串接数据的全部相应数据元素均存储在目的地寄存器的相应数据元素位置。这种存储装置的示例显示在图1中。
一旦掩码的最后一个位位置被视为已评估,或者可被写的目的地中的全部数据元素位置已被评估,则方法结束。
图6示出了用于处理对齐指令的方法的实施例。在该实施例中,假设之前已经执行了操作401-407中的一些(如果不是全部),然而,为了避免使下文给出的细节不清晰,没有示出这些操作。例如,未示出取出和解码,也没有示出操作数(源和写屏蔽)取回。
在601中将第一和第二源的数据元素串接以形成待操作的较大“矢量”。例如,来自两个源寄存器的数据被串接以使第一源的数据元素为较低有效位并且使第二源的数据元素为最高有效,如图1和图2所示。在一些实施例中,该较大的矢量为1024位。显然,较大矢量的该尺寸取决于源的尺寸。
在603中,第一和第二源的串接数据向右移位由指令的立即数值定义的数据元素的量。
还可以确定是否使用写屏蔽(未示出)。这是任选的,取决于如之前详述的基础硬件体系结构的实现。如果不使用掩码,则在605或607中不进行任何校验。
对于写屏蔽中的第一位位置,在605中确定该位位置是否指示第一和第二源的经移位的串接数据的相应元素将被存储在目的地寄存器的相应位置上。如果掩码的第一位位置指示什么都不应写入到目的地寄存器的相应数据元素位置上,则在609中什么都不写入到目的地寄存器中。如果掩码的第一位位置指示经移位的串接数据的相应数据应被写入到目的地寄存器的相应数据元素位置上,则在611中其被写入到目的地寄存器的相应数据元素位置上。在图2中示出了这种存储的示例。
在613中,确定评估的写屏蔽位置是否为写屏蔽中的最后一个或者目的地的全部数据元素位置是否已经被填满。如果为真,则操作结束。当例如数据元素尺寸为64位、目的地为512位并且写屏蔽具有16位时,可能发生后者的情况。在该实例中,仅需要写屏蔽中的8位。
如果不为真,则在615中写屏蔽中的下一个位位置将被评估以确定其值。而且,在607等中评估位位置。一旦掩码的最后一个位位置被视为已评估,或者可以写入的目的地中的全部数据元素位置已被评估,则方法结束。
图7示出了处理伪码的对齐指令的方法的实施例。
程序典型地以顺序方式存取存储器。例如,在位于地址@处的第一个512位矢量处存取参考(a),在位于地址@+64个字节的第二个512位矢量处存取参考(b),并且在位于地址@+128个字节的第一个512位矢量处存取参考(c)。在该方案中,参考(a)被定位成跨越高速缓冲存储行A和B,参考(b)被定位成跨越高速缓冲存储行B和C,并且参考(c)被定位成跨越高速缓冲存储行C和D。利用规律的负荷,高速缓冲存储行B和C将被存取两次,并且整个高速缓冲存储行存取次数将为6(3×2)。
一般而言,高速缓冲存储行端口是比寄存器端口更精确的资源。上文讨论的对齐指令的实施例对寄存器执行数据对齐,而不是对高速缓冲存储行执行对齐,因此,这种指令提供了性能增益。利用对齐指令,高速缓冲存储行数据在寄存器中被对齐,并且通常仅有在每个矢量参考中取出的一个新的高速缓冲存储行,而不是存取每一个高速缓冲存储行两次,仅读取一次并且同时与高速缓冲存储器存取对齐,平衡每个周期中一个矢量的吞吐量,而仍使用仅一个单存储器端口。
上文所描述和具体实施的指令的实施例可以下文详述的“一般矢量友好指令格式”来具体实施。在其它实施例中,不使用这样的格式,而使用另一种指令格式,然而,以下对写屏蔽寄存器、各种数据变换(混合、广播等)、寻址等的描述通常适用于上文的指令的实施例的描述。另外,下文详述了示例性的系统、体系结构和管线。上文的指令的实施例可在这样的系统、体系结构和管线上执行,但是不限于所详述的那些。
矢量友好指令格式是适合于矢量指令的指令格式(例如,存在专用于矢量运算的一些字段)。尽管描述了通过矢量友好指令格式支持矢量运算和标量运算的实施例,但是可选的实施例仅使用矢量友好指令格式的矢量运算。
示例性的一般矢量友好指令格式-图8A-B
图8A-B为示出根据本发明的实施例的一般矢量友好指令格式及其指令模板的框图。图8A为示出根据本发明的实施例的一般矢量友好指令格式及其A类指令模板的框图;而图8B为示出根据本发明的实施例的一般矢量友好指令格式及其B类指令模板的框图。具体地,为一般矢量友好指令格式800限定A类和B类指令模板,两者均包括无储器存取805指令模板和存储器存取820指令模板。在矢量友好指令格式的背景下术语“一般”是指不与任何具体指令集相关联的指令格式。尽管描述了矢量友好指令格式的指令在源自于寄存器(无存储器存取805指令模板)或寄存器/存储器(存储器存取820指令模板)的矢量上操作的实施例,但本发明的替代实施例可支持这些中的仅一种。而且,尽管描述了存在加载且存储矢量指令格式的指令的本发明的实施例,但可选的实施例代替地或另外地具有将矢量移入和移出寄存器(例如,从存储器到寄存器,从寄存器到存储器,在寄存器之间)的不同指令格式的指令。此外,尽管描述了支持两类指令模板的本发明的实施例,但是替代的实施例可以仅支持这些中的一个或多于两个。
尽管描述了矢量友好指令格式支持以下的本发明的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或尺寸)的64字节矢量操作数长度(或尺寸)(并且因此,64字节矢量由16个双倍字尺寸的元素或可替代的8个四倍字尺寸的元素构成);具有16位(2字节)或8位(1字节)数据元素宽度(或尺寸)的64字节矢量操作数长度(或尺寸);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或尺寸)的32字节矢量操作数长度(或尺寸);以及具有32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸)的16字节矢量操作数长度(或尺寸);但是可选的实施例可以支持具有更多、更少、或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同的矢量操作数尺寸(例如,856字节矢量操作数)。
图8A中的A类指令模板包括:1)在无存储器存取805指令模板内,示出了无存储器存取、全取整控制型操作810指令模板以及无存储器存取、数据变换型操作815指令模板;以及2)在存储器存取820指令模板内,示出了存储器存取、临时825指令模板和存储器存取、非临时830指令模板。图8B中的B类指令模板包括:1)在无存储器存取805指令模板内,示出了无存储器存取、写屏蔽控制、部分取整控制型操作812指令模板和无存储器存取、写屏蔽控制、vsize型操作817指令模板;以及2)在存储器存取820指令模板内,示出了存储器存取、写屏蔽控制827指令模板。
格式
一般矢量友好指令格式800包括在图8A-B中所示出的次序列于下面的下列字段。
格式字段840—在该字段中的具体值(指令格式标识符值)唯一地标识矢量友好指令格式,并且因此唯一地表示指令流中的矢量友好指令格式的指令的出现。因此,格式字段840的内容将第一指令格式的指令的出现与其它指令格式的指令的出现区分开,从而允许将矢量友好指令格式引入具有其它指令格式的指令集中。因此,从该字段无需用于仅具有一般矢量友好指令格式的指令集的意义上讲,该字段是任选的。
基础操作字段842—其内容将不同的基础操作区分开。如本文稍后描述的,基础操作字段842可包括操作码字段和/或作为操作码字段的部分。
寄存器索引字段844—其内容直接地或者通过地址生成来指定源和目的地操作数的位置,如它们在寄存器或存储器中。这些包括从P×Q(例如,32×1012)寄存器文件中选择N个寄存器的足量的位。尽管在一个实施例中N可多达三个源和一个目的地寄存器,但是替代的实施例可支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个还充当目的地;可以支持多达三个源,其中这些源中的一个还充当目的地;可以支持多达两个源和一个目的地)。尽管在一个实施例中P=32,但是替代实施例可以支持更多或更少的寄存器(例如,16)。尽管在一个实施例中Q=1012位,但替代实施例可以支持更多或更少的位(例如,128、1024)。
修饰符字段846—其内容将指定存储器存取的一般矢量指令格式的指令的出现与不指定存储器存取的一般矢量指令格式的那些指令的出现区分开;也就是说,区分无存储器存取805指令模板和存储器存取820指令模板。存储器存取操作对存储器层级进行读和/或写(在一些情况下,利用寄存器中的值来指定源和/或目的地地址),而无存储器存取操作不这样(例如,源和目的地均为寄存器)。尽管在一个实施例中该字段还在三种不同方式之间选择以执行存储器地址计算,但是替代的实施例可以支持更多、更少或不同的方式来执行存储器地址计算。
扩增操作字段850—其内容对除了基础操作之外执行多种不同操作中的哪一个进行区分。该字段是上下文特定的。在本发明的一个实施例中,该字段被分成类字段868、α(alpha)字段852和β(beta)字段854。扩增操作字段允许在单个指令而不是2个、3个或4个指令中执行共同组的操作。下文是使用扩增字段850来减少所需指令数量的指令的一些示例(其术语稍后将在下文中进行更详细的说明)。
其中,[rax]是用于地址生成的基址指针,并且其中{}表示数据操纵字段所指定的转换操作(下文将进行更加详细的说明)。
标度字段860—其内容允许对索引字段的内容进行缩放以用于存储器地址生成(例如,用于使用2标度*索引+基址的地址生成)。
位移字段862A—其内容用作存储器地址生成的部分(例如,用于使用2标度*索引+基址+位移的地址生成)。
位移因子字段862B(注意,位移字段862A直接并置在位移因子字段862B之上表示使用一个或另一个)—其内容用作地址生成的部分;其指定要按存储器存取的尺寸(N)缩放的位移因子,其中N为存储器存取中的字节数量(例如,用于使用2标度*索引+基址+所缩放的位移的地址生成)。冗余低阶位被忽略,并且因此,位移因子字段的内容乘以存储器操作数的总尺寸(N),从而生成待用于计算有效地址的最终位移。N的值是通过处理器硬件在运行时间基于全操作码字段874(下文稍后说明)和如下文稍后说明的数据操纵字段854C来确定的。从不用于无存储器存取805指令模板和/或不同的实施例可仅实现两个中的一个或不实现任一个的意义上讲,位移字段862A和位移因子字段862B是任选的。
数据元素宽度字段864—其内容对将使用多个数据元素宽度中的哪一个进行区分(在一些实施例中,对于所有指令;在其它实施例中,仅对于指令中的一些指令)。从如果仅支持一个数据元素宽度和/或利用操作码的某方面来支持数据元素宽度则不需要该字段的意义上讲,该字段是任选的。
写屏蔽字段870—其内容基于每个数据元素位置来控制目的地矢量操作数中的数据元素位置是否反映基础操作和扩增操作的结果。A类指令模板支持合并-写屏蔽,而B类指令模板支持合并-写屏蔽以及归零-写屏蔽两者。当合并时,矢量掩码允许目的地中的任何元素集合被保护以免在任何操作(由基础操作和扩增操作指定的)执行期间更新;在另一实施例中,保留相应屏蔽位具有0的目的地的每个元素的旧值。相反,当归零时,矢量掩码允许目的地中的任何元素集合在任何操作(由基础操作和扩增操作指定的)执行期间被归零;在一个实施例中,当相应的屏蔽位具有0值时,目的地的元素被设定为0。该功能的子集是控制所执行的操作的矢量长度(即,所修改的元素从第一个到最后一个的跨度)的能力;然而,被修改的元素不必是连续的。因此,写屏蔽字段870允许部分矢量操作,包括加载、存储、算术运算、逻辑等。而且,该屏蔽能够用于故障抑制(即,通过屏蔽目的地的数据元素位置来防止接收可能/将要引起故障的任何操作的结果,例如,假设存储器中的矢量跨过了页面边界并且第一页面而不是第二页面将导致页面故障,如果通过写屏蔽来屏蔽位于第一页面中的矢量的全部数据元素,则能够忽略该页面故障)。此外,写屏蔽允许包含某些类型的条件语句的“矢量化循环”。尽管描述了其中写屏蔽字段870的内容选择包含待使用的写屏蔽的多个写屏蔽寄存器中的一个(并且因此,写屏蔽字段870的内容间接地标识了待执行的该屏蔽)的本发明的实施例,但是替代的实施例代替地或者另外允许写屏蔽字段870的内容直接指定待执行的屏蔽。此外,归零允许当在如下情况下时的性能提高:1)在目的地操作数不也是源的指令(还称为非三元指令)上使用寄存器重命名,因为在寄存器重命名管线阶段中,目的地不再是隐式源(来自当前目的地寄存器的数据元素无需复制到重命名后的目的地寄存器,或者连同操作一起以某种方式携载,因为不是操作结果的任何数据元素(任何被屏蔽的数据元素)将被归零);以及2)在写回阶段中,因为零正在被写入。
立即数字段872—其内容允许立即数的具体说明。从其不存在于不支持立即数的一般矢量友好格式的实现中并且其不存在于不使用立即数的指令中的意义上讲,该字段是任选的。
指令模板类选择
类字段868—其内容区分不同类的指令。参考图8A-B,该字段的内容在A类和B类指令之间进行选择。在图8A-B中,圆角方形用于表示具体值存在于字段中(例如,分别在图8A-B中的类字段868的A类868A和B类868B)。
A类的无存储器存取指令模板
在A类的无存储器存取805指令模板的情况下,α字段852被解释为RS字段852A,其内容区分待执行不同扩增操作类型中的哪一个(例如,对于无存储器存取、取整型操作810和无存储器存取、数据变换型操作815指令模板,分别指定取整852A.1和数据变换852A.2);而β字段854区分待执行指定类型中的哪些。在图8中,圆角方框用于指示存在特定值(例如,修饰符字段846中的无存储器存取846A;用于α字段852/rs字段852A的取整852A.1和数据变换852A.2)。在无存储器存取805指令模板中,不存在标度字段860、位移字段862A和位移标度字段862B。
无存储器存取指令模板-全取整控制型操作
在无存储器存取全取整控制型操作810指令模板中,β字段854被解释为取整控制字段854A,其内容提供了静态取整。尽管在本发明的所述实施例中,取整控制字段854A包括抑制全部浮点异常(SAE)字段856和取整操作控制字段858,可选的实施例可以支持这些构思,并且可以将这些构思编码成相同的字段或者仅具有这些构思/字段中的一个或另一个(例如,可以仅具有取整操作控制字段858)。
SAE字段856—其内容对是否禁用异常事件报告进行区分;当SAE字段856的内容指示启用抑制时,既定的指令不对任何类型的浮点异常标记进行报告并且不唤起任何浮点异常处理程序。
取整操作控制字段858—其内容对执行一组取整操作中的哪一个进行区分(例如,上取整、下取整、向零取整和就近取整)。因此,取整操作控制字段858允许基于每个指令来改变取整模式,并且因此当需要时尤其有用。在处理器包括用于指定取整模式的控制寄存器的本发明的一个实施例中,取整操作控制字段850的内容覆盖该寄存器值(能够选择取整模式,而不必在这样的控制寄存器上执行保存-修改-恢复是有益的)。
无存储器存取指令模板-数据变换型操作
在无存储器存取数据变换型操作815指令模板中,β字段854被解释为数据变换字段854B,其内容对待执行多个数据变换中的哪一个进行区分(例如,无数据变换、混合、广播)。
A类的存储器存取指令模板
在A类的存储器存取820指令模板的情况下,α字段852被解释为驱逐(eviction)暗示字段852B,其内容对将待使用哪一个驱逐暗示进行区分(在图8A中,分别为存储器存取、临时825指令模板和存储器存取、非临时830指令模板指定临时852B.1和非临时852B.2),而β字段854被解释为数据操纵字段854C,其内容对待执行多个数据操纵操作(也称为基元)中的哪一个进行区分(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器存取820指令模板包括标度字段860,并且任选地包括位移字段862A或位移标度字段862B。
矢量存储器指令通过转换支持来执行来自存储器的矢量加载以及到存储器的矢量存储。如同常规的矢量指令,矢量存储器指令以逐数据元素(element-wise)的方式传递数据至存储器/从存储器传递数据,通过被选为写屏蔽的矢量掩码的内容来规定实际上传递的元素。在图8A中,圆角方形用于表示在字段中存在特定值(例如,用于修饰符字段846的存储器存取846B;用于α字段852/驱逐暗示字段852B的临时852B.1和非临时852B.2)。
存储器存取指示模板-临时
临时数据是可能足够迅速地被重新使用以受益于高速缓冲存储的数据。然而,这是暗示,并且不同的处理器可以不同的方式来实现,包括完全忽略暗示。
存储器存取指令模板-非临时
非临时数据是不太可能足够迅速地被重新使用而受益于1级高速缓冲存储器的高速缓存并且应当给予驱逐的优选级的数据。然而,这是暗示,并且不同的处理器可以不同的方式来实现,包括完全忽略暗示。
B类的指令模板
在B类的指令模板的情况下,α字段852被解释为写屏蔽控制(Z)字段852C,其内容对写屏蔽字段870所控制的写屏蔽是否应当合并或归零进行区分。
B类的无存储器存取指令模板
在B类的无存储器存取805指令模板的情况下,β字段854的部分被解释为RL字段857A,其内容对待执行不同扩增操作类型中的哪一种进行区分(例如,分别为无存储器存取、写屏蔽控制、部分取整控制型操作812指令模板和无存储器存取、写屏蔽控制、矢量长度(VSIZE)型操作817指令模板指定取整857A.1和VSIZE 857A.2),而β字段854的其余部分对待执行指定类型的哪些操作进行区分。在图8B中,圆角方框用于指示存在特定值(例如,修饰符字段846中的无存储器存取846A;用于RL字段857A的取整857A.1和VSIZE 857A.2)。在无存储器存取805指令模板中,不存在标度字段860、位移字段862A和位移标度字段862B。
无存储器存取指令模板—写屏蔽控制、部分取整控制型操作
在无存储器存取、写屏蔽控制、部分取整控制型操作810指令模板中,β字段854的其余部分被解释为取整操作字段859A,并且异常事件报告被禁用(既定指令不报告任何类型的浮点异常标记并且不唤起任何浮点异常处理程序)。
取整操作控制字段859A-恰如取整操作控制字段858一样,其内容对执行一组取整操作中的哪一个进行区分(例如,上取整、下取整、向零取整和就近取整)。因此,取整操作控制字段859A允许在每个指令的基础上改变取整模式,并且因此在需要时尤其有用。在处理器包括用于指定取整模式的控制寄存器的本发明的一个实施例中,取整操作控制字段850的内容覆盖该寄存器值(能够选择取整模式,而不必在这样的控制寄存器上执行保存-修改-恢复是有益的)。
无存储器存取指令模板—写屏蔽控制、VSIZE型操作
在无存储器存取、写屏蔽控制、VSIZE型操作817指令模板中,β字段854的其余部分被解释为矢量长度字段859B,其内容对待执行多个数据矢量长度中的哪一个进行区分(例如,128、856、或1012字节)。
B类的存储器存取指令模板
在A类的存储器存取820指令模板的情况下,β字段854的部分被解释为广播字段857B,其内容对是否执行广播型数据操纵操作进行区分,而β字段854的其余部分被解释为矢量长度字段859B。存储器存取820指令模板包括标度字段860,且任选的包括位移字段862A或位移标度字段862B。
关于字段的附加注释
关于一般矢量友好指令格式800,示出了全操作码字段874,其包括格式字段840、基础操作字段842和数据元素宽度字段864。尽管示出了全操作码字段874包括所有这些字段的一个实施例,但是在不支持其全部的实施例中全操作码字段874不包括全部这些字段。全操作码字段874提供了操作代码。
扩增操作字段850、数据元素宽度字段864和写屏蔽字段870允许在每指令基础上以一般矢量友好指令格式来指定这些特征。
写屏蔽字段和数据元素宽度字段的组合形成了类型确定的(typed)指令,因为它们允许基于不同的数据元素宽度来应用掩码。
指令格式要求相对少量的位,因为其基于其它字段的内容而为不同目的重新使用不同的字段。例如,一个视点在于,修饰符字段的内容在图8A-B上的无存储器存取805指令模板和图8A-B上的存储器存取8250指令模板之间进行选择;而类字段868的内容在图8A的指令模板810/815和图8B的指令模板812/817之间的那些无存储器存取805指令模板内进行选择;而类字段868的内容在图8A的指令模板825/830和图8B的827之间的那些存储器存取820指令模板内进行选择。从另一视点看,类字段868的内容在图8A和图8B的各自的A类和B类指令模板之间进行选择;而修饰符字段的内容在图8A的指令模板805和820之间的那些A类指令模板内进行选择;而修饰符字段的内容在图8B的指令模板805和820之间的那些B类指令模板内进行选择。在类字段的内容表示A类指令模板的情况下,修饰符字段846的内容选择α字段852(在rs字段852A和EH字段852B之间)的解释。通过有关的方式,修饰符字段846和类字段868的内容选择是否将α字段解释为rs字段852A、EH字段852B或写屏蔽控制(Z)字段852C。在类字段和修饰符字段表示A类无存储器存取操作的情况下,扩增字段的β字段的解释基于rs字段的内容而改变;而在类字段和修饰符字段表示B类无存储器存取操作的情况下,β字段的解释取决于RL字段的内容。在类字段和修饰符字段表示A类存储器存取操作的情况下,扩增字段的β字段的解释基于基础操作字段的内容而改变;而在类字段和修饰符字段表示B类存储器存取操作的情况下,扩增字段的β字段的广播字段857B的解释基于基础操作字段的内容而改变。因此,基础操作字段、修饰符字段和扩增操作字段的组合允许指定甚至更加多样的扩增操作。
在A类和B类内发现的各种指令模板在不同情形下是有益的。当由于性能原因而期望归零-写屏蔽或较小矢量长度时,A类是有用的。例如,当使用重命名时,归零允许避免虚假相关性,因为我们不再需要与目的地人为地合并;作为另一示例,当用矢量掩码来仿真较短的矢量尺寸时,矢量长度控制使得存储-加载转送问题变得容易。当期望如下情形时B类是有用的:1)在使用取整模式控制的同时,允许浮点异常(即,当SAE字段的内容指示无时);2)能够使用向上转换、混合、交换和/或向下转换;3)在图形数据类型上操作。例如,向上转换、混合、交换、向下转换和图形数据类型减少了当用不同格式的源工作时所要求的指令数量;作为另一示例,允许异常的能力提供了定向的取整模式的完全IEEE符合。
示例性的特定矢量友好指令格式
图9A-C示出了根据本发明的实施例的示例性的特定矢量友好指令格式。图9A-C示出了特定矢量友好指令格式900,其在它指定字段的位置、尺寸、解释和顺序以及用于那些字段中的一些字段的值的意义上是特定的。特定矢量友好指令格式900可用于扩展x86指令集,并且因此一些字段与现有的x86指令集及其扩展(例如,AVX)中使用的那些字段相似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MODR/M字段、SIB字段、位移字段和立即数字段一致。图示了图9A-C的字段映射到图8A-B中的字段。
应当理解的是,尽管为了说明的目的在一般矢量友好指令格式800的背景下参照特定矢量友好指令格式900对本发明的实施例进行了说明,但本发明不限于特定矢量友好指令格式900,除了被主张的场合之外。例如,一般矢量友好指令格式800构思了用于各种字段的各种可能的尺寸,而特定矢量友好指令格式900被显示为具有特定尺寸的字段。通过具体示例,尽管数据元素宽度字段864被图示为特定矢量友好指令格式900的一位字段,但本发明不受此限制(即,一般矢量友好指令格式800构思了数据元素宽度字段864的其它尺寸)。
格式-图9A-C
一般矢量友好指令格式800包括按图9A-C中所示的次序列于下文的下列字段。
EVEX前缀(字节0-3)
EVEX前缀902-以四字节形式进行编码。
格式字段840(EVEX字节0,位[7:0])—第一字节(EVEX字节0)为格式字段840,并且其包含0x62(在本发明的一个实施例中用于区分矢量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段905(EVEX字节1,位[7-5])—由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和857BEX字节1,位[5]-B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供了与相应的VEX位字段相同的功能,并且利用1s补码形式进行编码,即,ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其它字段对寄存器索引的较低三位进行编码,这是本领域公知的(rrr、xxx和bbb),以使Rrrr、Xxxx、和Bbbb可通过添加EVEX.R、EVEX.X和EVEX.B来形成。
REX字段910—其为REX字段910的第一部分,并且是用于对扩增的32寄存器集的较高16或较低16进行编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在本发明的一个实施例中,该位连同如下文所示出的其它位一起以位反转格式存储以与BOUND指令区分开(以公知的x86 32位模式),其真实操作码字节为62,但是在MOD R/M字段(下面描述)中不接受MOD字段中的值11;本发明的可替代实施例不以反转格式来存储该位以及其它示于下文的位。值1用于对较低16个寄存器进行编码。换言之,R’Rrrr是通过将EVEX.R’、EVEX.R和来自其它字段的其它RRR组合而形成的。
操作码映射字段915(EVEX字节1,位[3:0]-mmmm)—其内容对隐含的前置操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段864(EVEX字节2,位[7]-W)—由记号EVEX.W表示。EVEX.W用于限定数据类型的粒度(尺寸)(32位数据元素或64位数据元素)。
EVEX.vvvv 920(EVEX字节2,位[6:3]-vvvv)—EVEX.vvvv的作用可包括下列:1)EVEX.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码,并且对于具有2个或更多个源操作数的指令有效;2)EVEX.vvvv对以用于一定矢量移位的1s补码形式指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,字段被保留并且应当包含1111b。因此,EVEX.vvvv字段920对以反转(1s补码)形式存储的第一源寄存器说明符的4个低阶位进行编码。根据指令,额外的不同EVEX位字段用于将说明符尺寸扩展至32个寄存器。
EVEX.U 868类字段(EVEX字节2,位[2]-U)—如果EVEX.U=0,则其表示A类或EVEX.U0;如果EVEX.U=1,则其表示B类或EVEX.U1。
前缀编码字段925(EVEX字节2,位[1:0]-pp)—为基础操作字段提供了附加位。除了为EVEX前缀格式的传统SSE指令提供支持之外,这还具有压缩SIMD前缀的益处(不是需要字节来表达SIMD前缀,EVEX前缀仅需要2个位)。在一个实施例中,为了支持使用传统格式和EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在提供给解码器的PLA之前在运行时间被扩展成传统SIMD前缀(因此,PLA能够执行这些传统指令的传统和EVEX格式,而无需进行修改)。尽管较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,一些实施例以相似方式扩展以确保一致性,但是允许由这些传统SIMD前缀指定不同的含义。可选的实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
α字段852(EVEX字节3,位[7]-EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写屏蔽控制、以及EVEX.N;还可由α表示)—如之前所述,该字段是上下文特定的。本文稍后将提供进一步的描述。
β字段854(EVEX字节3,位[6:4]-SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;还由可由βββ表示)—如之前所述,该字段是上下文特定的。本文稍后将提供进一步的描述。
REX’字段910—这是REX’字段的其余部分并且是EVEX.V’位字段(EVEX字节3,位[3]-V’),其可用于对扩展的32寄存器集的较高16或较低16进行编码。该位以位反转格式存储。值1用于对较低16个寄存器进行编码。换言之,V’VVVV是通过将EVEX.V’、EVEX.vvvv组合而形成的。
写屏蔽字段870(EVEX字节3,位[2:0]-kkk)—其内容指定写屏蔽寄存器中的寄存器的索引,如之前所描述的。在本发明的一个实施例中,特定值EVEX.kkk=000具有特殊行为,其暗示没有写屏蔽用于特定指令(这可多种方式来实现,包括使用硬连线到全1的写屏蔽或绕过屏蔽硬件的硬件)。
真实操作码字段930(字节4)
这还称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段940(字节5)
修饰符字段846(MODR/M.MOD,位[7-6]-MOD字段942)—如之前所述,MOD字段942的内容在存储器存取操作和无存储器存取操作之间进行区分。本文稍后将对该字段进行进一步说明。
MODR/M.reg字段944,位[5-3]—ModR/M.reg字段的作用能够被概述为如下两种情况:ModR/M.reg对目的地寄存器操作数或源寄存器操作数进行编码,或者ModR/M.reg被处理为操作码扩展且不用于对任何指令操作数进行编码。
MODR/M.r/m字段946,位[2-0]—ModR/M.r/m字段的作用可包括下述情况:ModR/M.r/m对参考存储器地址的指令操作数进行编码,或者ModR/M.r/m对目的地寄存器操作数或源寄存器操作数进行编码。
标度、索引、基础(SIB)字节(字节6)
标度字段860(SIB.SS,位[7-6]—如之前所述,标度字段860的内容用于存储器地址生成。本文稍后将对该字段进行进一步说明。
SIB.xxx 954(位[5-3]和SIB.bbb 956(位[2-0])—之前关于寄存器索引Xxxx和Bbbb提到了这些字段的内容。
位移字节(字节7或字节7-10)
位移字段862A(字节7-10)—当MOD字段942包含10时,字节7-10是位移字段862A,并且其作用与传统32位位移(disp32)相同并且按字节粒度工作。
位移因子字段862B(字节7)—当MOD字段942包含01时,字节7是位移因子字段862B。该字段的位置与按字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。因为disp8是符号扩展的,所以其仅能够在-128和127字节偏移之间进行寻址;按照64字节高速缓冲存储行,disp8使用能够被设定为仅四个实际可用的值-128、-64、0和64的8个位;因为通常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32相反,位移因子字段862B是disp8的重新解释;当使用位移因子字段862B时,实际的位移由位移因子字段的内容乘以存储器操作数存取的尺寸(N)来确定。这种类型的位移被称为disp8*N。这减少了平均指令长度(所使用的单个字节用于位移,但是具有更大的范围)。这种压缩位移基于如下假设:有效位移是存储器存取的粒度的倍数,并且因此,无需对地址偏移的冗余低阶位进行编码。换言之,位移因子字段862B替代传统x86指令集8位位移。因此,位移因子字段862B以与x86指令集8位位移相同的方式进行编码(因此,ModRM/SIB编码规则不变),仅除了disp8被过载为disp8*N。换言之,编码规则或编码长度无变化,而仅仅是硬件对位移值的解释发生了变化(这需要按照存储器操作数的尺寸缩放位移以获得逐字节地址偏移)。
立即数
立即数字段872如之前所描述的那样操作。
示例性的寄存器体系结构-图10
图10为根据本发明的一个实施例的寄存器体系结构1000的框图。寄存器体系结构的寄存器文件和寄存器列于下面:
矢量寄存器文件1010—在图示的实施例中,存在1012位宽的32个矢量寄存器;这些寄存器被称为zmm0至zmm31。较低16个zmm寄存器的较低阶的856位叠加在寄存器ymm0-16之上。较低16个zmm寄存器的较低阶的128位(ymm寄存器的较低阶的128位)叠加在寄存器xmm0-15之上。特定矢量友好指令格式900如下表中所图示的那样在这些叠加的寄存器文件上操作。
换言之,矢量长度字段859B在最大长度和一个或多个其它较短长度之间选择,其中每个这样的较短长度为前一长度的一半;并且不具有矢量长度字段859B的指令模板在最大矢量长度上操作。此外,在一个实施例中,特定矢量友好指令格式900的B类指令模板在封包的或标量单/双精度浮点数据和封包的或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置保持与它们在该指令之前相同或者根据实施例进行归零。
写屏蔽寄存器1015—在图示的实施例中,存在8个写屏蔽寄存器(k0至k7),每个的尺寸为64位。如之前所述,在本发明的一个实施例中,矢量屏蔽寄存器k0不能用作写屏蔽;当通常表示k0的编码用于写屏蔽时,其选择0xFFFF的硬接线写屏蔽,有效地对该指令禁用写屏蔽。
多媒体扩展控制状态寄存器(MXCSR)1020—在图示的实施例中,该32位寄存器提供了在浮点运算中使用的状态位和控制位。
通用寄存器1025—在图示的实施例中,存在十六个64位通用寄存器,其连同现有的x86寻址模式一起用于对存储器操作数进行寻址。这些寄存器按名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15进行参考。
扩展标记(EFLAGS)寄存器1030—在图示的实施例中,该32位寄存器用于记录许多指令的结果。
浮点控制字(FCW)寄存器1035和浮点状态字(FSW)寄存器1040—在图示的实施例中,这些寄存器由x87指令集扩展使用来在FCW情况下设定取整模式、异常掩码和标记,并且在FSW的情况下跟踪异常。
标量浮点堆栈寄存器文件(x87堆栈)1045,其又名MMX封包整数平面寄存器文件1050—在图示的实施例中,x87堆栈为利用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作的八元素堆栈;而MMX寄存器用于对64位封包整数数据执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作数。
段寄存器1055—在图示的实施例中,存在六个16位寄存器,其用于存储分段地址生成所使用的数据。
RIP寄存器1065—在图示的实施例中,该64位寄存器存储指令指针。
本发明的替代实施例可以使用更宽或更窄的寄存器。另外,本发明的可替代实施例可以使用更多、更少、或不同的寄存器文件和寄存器。
示例性的有序处理器体系结构—图11A-11B
图11A-11B图示了示例性的有序处理器体系结构的框图。围绕扩增有宽矢量处理器(VPU)的有序CPU核心的多个实例来设计这些示例性的实施例。核心通过高带宽互连网络与某些固定功能逻辑、存储器I/O接口和其它必要的I/O逻辑进行通信,取决于el3t应用。例如,该实施例实现为独立式GPU通常包括PCI总线。
图11A是根据本发明的实施例的单CPU核心连同其与片上互连网络1102的连接及其2级(L2)高速缓冲存储器1104的本地子集的框图。指令解码器1100支持带有包括特定矢量指令格式900的扩展的x86指令集。尽管在本发明的一个实施例中(为了简化设计),标量单元1108和矢量单元1110使用单独的寄存器集(分别是标量寄存器1112和矢量寄存器1114),并且在它们之间传递的数据被写入存储器并且然后从1级(L1)高速缓冲存储器1106中读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集或者包括允许数据在两个寄存器文件之间传递的通信路径,而不进行写入和读回)。
L1高速缓冲存储器1106允许低时延存取高速缓冲存储器的标量和矢量单元。连同矢量友好指令格式的load-op指令,这表示能够有点类似于扩展寄存器文件来处理L1高速缓冲存储器1106。这显著地提高了许多算法的性能,尤其是利用驱逐暗示字段852B。
L2高速缓冲存储器1104的本地子集是被划分成单独的本地子集的全局L2高速缓冲存储器的一部分,每个CPU核心各一个本地子集。每个CPU具有通往其L2高速缓冲存储器1104的自身本地子集的直接存取路径。由CPU核心读取的数据被存储在其L2高速缓冲存储器子集1104中,并且能够与存取其自身局部L2高速缓冲存储器子集的其它CPU并行地被快速地存取。由CPU核心写入的数据被存储在其自身的L2高速缓冲存储器子集1104中,并且如果有必要的话从其它子集中清除。环形网络确保共享数据的一致性。
图11B是根据本发明的实施例的图11A中的CPU核心的部分的分解视图。图11B包括L1高速缓冲存储器1104的L1数据高速缓冲存储器1106A部分,以及关于矢量单元1110和矢量寄存器1114的更多细节。具体地,矢量单元1110是16-宽矢量处理单元(VPU)(参见16-宽ALU 1128),其执行整数、单精度浮点和双精度浮点指令。VPU支持用混合单元1120混合寄存器输入、用数字转换单元1122A-B进行数字转换、以及在存储器输入上用复制单元1124进行复制。写屏蔽寄存器1126允许预测作为结果的矢量写入。
寄存器数据能够以多种方式进行混合,例如,支持矩阵乘法。来自存储器的数据能够跨越VPU通道而被复制。这是图形和非图形并行数据处理的共同操作,显著地提高了高速缓冲存储效率。
环形网络是双向的,以允许诸如CPU核心、L2高速缓冲存储器和其它逻辑块的代理在芯片内彼此通信。每个环形数据路径在每个方向上为1012位宽。
示例性的无序体系结构—图12
图12是示出根据本发明的实施例的示例性的无序体系结构的框图。具体地,图12示出了公知的示例性无序体系结构,其已被修改而并入了矢量友好指令格式及其执行。在图12中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示在那些单元之间的数据流方向。图12包括前端单元1205,其与执行引擎单元1210和存储器单元1215耦合;执行引擎单元1210进一步与存储器单元1215耦合。
前端单元1205包括1级(L1)分支预测单元1220,其与2级(L2)分支预测单元1222耦合。L1和L2分支预测单元1220和1222与L1指令高速缓冲存储单元1224耦合。L1指令高速缓冲存储单元1224与指令转换后援缓冲器(TLB)1226耦合,指令转换后援缓冲器1226进一步与指令取回和预解码单元1228耦合。指令取回和预解码单元1228与指令队列单元1230耦合,指令队列单元1230进一步与解码单元1232耦合。解码单元1232包括复杂解码器单元1234和三个简单解码器单元1236、1238和1240。解码单元1232包括微代码ROM单元1242。解码单元1232可如前所述在解码阶段部分中那样操作。L1指令高速缓冲存储单元1224进一步与存储器单元1215中的L2高速缓冲存储单元1248耦合。指令TLB单元1226进一步与存储器单元1215中的第二级TLB单元1246耦合。解码单元1232、微代码ROM单元1242和循环流探测器单元1244各自与执行引擎单元1210中的重命名/分配器单元1256耦合。
执行引擎单元1210包括重命名/分配器单元1256,重命名/分配器单元1256与引退单元(retirement unit)1274和统一调度器单元1258耦合。引退单元1274进一步与执行单元1260耦合并且包括重排序缓冲单元1278。统一调度器单元1258进一步与物理寄存器文件单元1276耦合,物理寄存器文件单元1276与执行单元1260耦合。物理寄存器文件单元1276包括矢量寄存器单元1277A、写屏蔽寄存器单元1277B、和标量寄存器单元1277C;这些寄存器单元可以提供矢量寄存器1010、矢量屏蔽寄存器1015、以及通用寄存器1025;并且物理寄存器文件单元1276可以包括未示出的附加寄存器文件(例如,标量浮点堆栈寄存器文件1045,又名MMX封包整数平面寄存器文件1050)。执行单元1260包括三个混合标量和矢量单元1262、1264和1272;加载单元1266;存储地址单元1268;存储数据单元1270。加载单元1266、存储地址单元1268和存储数据单元1270各自进一步与存储器单元1215中的数据TLB单元1252耦合。
存储器单元1215包括与数据TLB单元1252耦合的第二级TLB单元1246。数据TLB单元1252与L1数据高速缓冲存储单元1254耦合。L1数据高速缓冲存储单元1254与L2高速缓冲存储单元1248进一步耦合。在一些实施例中,L2高速缓冲存储单元1248进一步与存储器单元1215内部和/或外部的L3和更高的高速缓冲存储单元1250耦合。
通过举例的方式,示例性的无序体系结构可以实现如下的过程管线8200:1)指令取回和预解码单元1228执行取回和长度解码阶段;2)解码单元1232执行解码阶段;3)重命名/分配器单元1256执行分配阶段和重命名阶段;4)统一调度器1258执行调度阶段;5)物理寄存器文件单元1276、重排序缓冲单元1278和存储器单元1215执行寄存器读取/存储器读取阶段;执行单元1260执行执行/数据变换阶段;6)存储器单元1215和重排序缓冲单元1278执行写回/存储器写入阶段1960;7)引退单元1274执行ROB读取阶段;8)各个单元可在异常处理阶段中被涉及;以及9)引退单元1274和物理寄存器文件单元1276执行提交阶段。
示例性的单核心和多核心处理器—图17
图17是根据本发明的实施例的带有集成存储器控制器和图形的单核心处理器和多核心处理器1700的框图。图17中的实线框示出了带有单核心1702A、系统代理1710、一组一个或多个总线控制器单元1716的处理器1700,而虚线框的任选添加示出了带有多个核心1702A-N、系统代理单元1710中的一组一个或多个集成存储器控制器单元1714、以及集成图形逻辑1708的可选处理器1700。
存储器层级包括核心内的一级或多级高速缓冲存储器、一组或一个或多个共享高速缓冲存储单元1706以及与一组集成存储器控制器单元1714耦合的外部存储器(未显示)。这组共享高速缓冲存储单元1706可包括一个或多个中级高速缓冲存储器,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓冲存储器、最后一级高速缓冲存储器(LLC)、和/或其组合。尽管在一个实施例中,基于环的互连单元1712将集成图形逻辑1708、一组共享高速缓冲存储单元1706和系统代理单元1710互连,可选的实施例可以使用任何数量的用于将这些单元互连的公知技术。
在一些实施例中,核心1702A-N中的一个或多个能够为多线程的。系统代理1710包括协调并操作核心1702A-N的那些部件。系统代理单元1710可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调整核心1702A-N和集成图形逻辑1708的功率状态所需要的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
从体系结构和/或指令集方面看,核心1702A-N可以是同类的或异构的。例如,核心1702A-N中的一些可以是有序的(例如,类似于图11A和图11B中所示的),而其它核心是无序的(例如,类似于图12中所示的)。作为另一示例,核心1702A-N中的两个或更多个可以能够执行相同的指令集,而其它核心可能够仅执行该指令集的子集或不同的指令集。至少一个核心能够执行本文所描述的矢量友好指令格式。
处理器可以是通用处理器,诸如可从Santa Clara,Calif的英特尔公司获得的CoreTM i3、i5、i7、2Duo和Quad、XeonTM、或ItaniumTM处理器。可选地,处理器可以来自其它公司。处理器可以是专用处理器,例如网络或通信处理器,压缩引擎、图形处理器、协同处理器、嵌入式处理器等等。处理器可在一个或多个芯片上实现。处理器1700可以利用例如BiCMOS、CMOS或NMOS的多种处理技术中的任一种成为一个或多个基板的一部分和/或可在一个或多个基板上实现。
示例性的计算机系统和处理器—图13-15
图13-15是适于包括处理器1700的示例性系统,而图17是可包括一个或多个核心1702的示例性的片上系统(SoC)。本领域公知的用于膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备和各种其它电子设备的其它系统设计和配置也是适用的。一般地,如本文所公开的能够合并处理器和/或其它执行逻辑的大量系统或电子设备一般是适用的。
现参考图13,示出了依照本发明的一个实施例的系统1300的框图。系统1300可包括与图形存储器控制器中心(GMCH)1320耦合的一个或多个处理器1310、1315。在图13中用虚线表示了附加处理器1315的可选特性。
每个处理器1310、1315可以是某种型号的处理器1700。然而,应当理解,集成图形逻辑和集成存储器控制单元不可能存在于处理器1310、1315中。
图13示出了GMCH 1320可与存储器1340耦合,存储器1340可以例如是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓冲存储器相关联。
GMCH 1320可以是芯片组或芯片组的一部分。GMCH 1320可以与处理器1310、1315通信并且控制处理器1310、1315和存储器1340之间的交互。GMCH 1320还可充当处理器1310、1315和系统1300的其它元件之间的加速总线接口。对于至少一个实施例,GMCH 1320经由诸如前端总线(FSB)1395的多点分支总线与处理器1310、1315通信。
此外,GMCH 1320与显示器1345(诸如平板显示器)耦合。GMCH 1320可以包括集成图形加速器。GMCH 1320进一步与输入/输出(I/O)控制器中心(ICH)1350耦合,其可用于将各种外围设备与系统1300耦合。例如,在图13的实施例中显示了外部图形设备1360连同另外的外围设备1370,外部图形设备1360可以是与ICH 1350耦合的分立图形设备。
可选地,附加的或不同的处理器也可以存在于系统1300中。例如,附加的处理器1315可以包括与处理器1310相同的附加处理器、与处理器1310异构或非对称的附加处理器、加速器(例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其它处理器。从包括体系结构、微体系结构、热力、功率消耗特性等指标的度量范围看,物理资源1310、1315之间可存在多种差别。这些差别可有效地将其自身展现为处理元件1310、1315中的非对称和异构的。对于至少一个实施例,各种处理元件1310、1315可驻存在同一片封装中。
现在参考图14,该图示出了依照本发明的实施例的第二系统1400的框图。如图14所示,微处理器系统1400是点对点互连系统,并且包括经由点对点互连1450耦合的第一处理器1470和第二处理器1480。如图14所示,处理器1470和1480中的每个可以是某种型号的处理器1700。
可选地,一个或多个处理器1470、1480可以是除了处理器之外的元件,诸如加速器或现场可编程门阵列。
尽管显示为仅具有两个处理器1470、1480,但应当理解,本发明的范围不受此限制。在其它实施例中,一个或多个附加的处理元件可存在于既定的处理器中。
处理器1470还可以包括集成存储器控制器中心(IMC)1472和点对点(P-P)接口1476和1478。类似地,第二处理器1480可以包括IMC 1482和P-P接口1486和1488。处理器1470、1480可以利用PtP接口电路1478、1488经由点对点(PtP)接口1450交换数据。如图14所示,IMC的1472和1482将处理器与相应的存储器(即,存储器1442和存储器1444)耦合,该存储器可以是在本地附接至相应的处理器的主存储器的部分。
处理器1470、1480可以各自利用点对点接口电路1476、1494、1486、1498经由单独的P-P接口1452、1454与芯片组1490交换数据。芯片组1490还可以经由高性能图形接口1439与高性能图形电路1438交换数据。
共享高速缓冲存储器(未显示)可包括在两个处理器之外的任一处理器中,而经由P-P互连与处理器连接,以使得在处理器被置于低功率模式时任一个或两个处理器的本地高速缓冲存储器信息可被存储在共享高速缓冲存储器中。
芯片组1490可以经由接口1496与第一总线1416耦合。在一个实施例中,第一总线1416可以是外围部件互连(PCI)总线、或诸如PCI快速总线或另一第三代I/O互连总线的总线,但是本发明的范围不受此限制。
如图14中所示,各个I/O设备1414可以连同将第一总线1416与第二总线1420耦合的总线桥1418一起与第一总线1416耦合。在一个实施例中,第二总线1420可以是低引脚数(LPC)总线。各种设备可与第二总线1420耦合,包括例如键盘/鼠标1422、通信设备1426和数据存储单元1428,诸如在一个实施例中可包括代码1430的磁盘驱动或其它大容量存储设备。此外,音频I/O 1424可与第二总线1420耦合。注意的是,其它体系结构是可能的。例如,除了图14的点对点体系结构之外,系统可以实现多点分支总线(multi-drop bus)或其它这样的体系结构。
现在参考图15,该图示出了依照本发明的实施例的第三系统1500的框图。图14和图15中相似的元件使用了相似附图标记,为了避免使图15的其它方面不清晰而从图15中省去了图14的一些方面。
图15图示出处理元件1470、1480可以分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。对于至少一个实施例,CL 1472、1482可以包括存储器控制中心逻辑(IMC),诸如上文结合图14中所描述的。另外,CL 1472、1482还可以包括I/O控制逻辑。图15中不仅示出了与CL 1472、1482耦合的存储器1442、1444,而且示出了I/O设备1514也与控制逻辑1472、1482耦合。传统I/O设备1515与芯片组1490耦合。
现在参考图16,示出了依照本发明的实施例的SoC 1600的框图。图17中的相似元件使用了相似的附图标记。而且,虚线框是更高级的SoC上的可选特征。在图16中,互连单元1602与如下部件耦合:应用处理器1610,其包括一组一个或多个核心1702A-N和共享高速缓冲存储单元1706;系统代理单元1710;总线控制器单元1716;集成存储器控制器单元1714;一组或一个或多个媒体处理器1620,其可包括集成图形逻辑1708、用于提供静态和/或视频摄像机功能的图像处理器1624、用于提供硬件音频加速的音频处理器1626、以及用于提供视频编码/解码加速的视频处理器1628;静态随机存取存储器(SRAM)单元1630;直接存储器存取(DMA)单元1632;以及用于与一个或多个外部显示器耦合的显示单元1640。
本文所公开的机制的实施例可在硬件、软件、固件或这些实现方法的组合中实现。本发明的实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码可应用于输入数据以执行本文所述的功能并且生成输出信息。输出信息可以已知方式应用于一个或多个输出设备。为了本申请的目的,处理器系统包括具有例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器的处理器的任何系统。
程序代码可以用高级过程编程语言或面向对象的编程语言来实施,以与处理系统通信。根据需要,程序代码还可以用汇编或机器语言来实施。事实上,本文所描述的机制的范围不限于任何特定的编程语言。在任何情况下,语言可以是经编译的或经解释的语言。
至少一个实施例的一个或多个方面可通过存储在机器可读介质上的代表处理器内的各种逻辑的代表性指令来实施,当由机器读取时,指令使机器装配逻辑来执行本文所描述的技术。这种称为“IP核心”的代表可存储在有形的机器可读介质上,并且供给各个顾客或制造设施以加载到实际上制作逻辑或处理器的制造机器中。
这种机器可读存储介质可包括但不限于通过机器或设备制造或形成的非暂态性的有形物品布置,包括:存储介质,诸如硬盘、包括软盘、光盘(光盘只读存储器(CD-ROM)、可重写光盘(CD-RW))和磁光盘的任何其它类型的磁盘;半导体器件,诸如只读存储器(ROM)、随机存取存储器(RAM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡;或者适用于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括非暂态性的有形机器可读介质,其包含矢量友好指令格式的指令或者包括设计数据,诸如硬件描述语言(HDL),这限定了本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例还可称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换成目标指令集。例如,指令转换器可以将指令变换(例如,利用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式转换成待由核心处理的一个或多个其它指令。指令转换器可以软件、硬件、固件或其组合来实施。指令转换器可以在处理器上、不在处理器上、或部分在处理器上和部分不在处理器上。
图18是根据本发明的实施例的对比将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图。在图示的实施例中,指令转换器是软件指令转换器,但是可选地指令转换器可以软件、固件、硬件或其各种组合来实现。图18示出了高级语言1802的程序可利用x86编译器1804进行编译以生成x86二进制代码1806,x86二进制代码1806可由具有至少一个x86指令集核心1816的处理器本机执行(假设经编译的一些指令呈矢量友好指令格式)。具有至少一个x86指令集核心1816的处理器代表能够通过兼容地执行或其它方式处理如下来执行与具有至少一个x86指令集核心的英特尔处理器基本相同的功能的任何处理器:(1)英特尔x86指令集核心的指令集的实质部分,或者(2)旨在于具有至少一个x86指令集核心的英特尔处理器上运行的应用程序或其它软件的对象代码版本,从而实现与具有至少一个x86指令集核心的英特尔处理器基本相同的结果。X86编译器1804代表了可操作以生成x86二进制代码1806(例如,对象代码)的编译器,x86二进制代码1806能够通过或不通过额外的链接处理而在具有至少一个x86指令集核心1816的处理器上执行。类似地,图18示出了高级语言1802的程序可以利用可选的指令集编译器1808进行编译以生成可选的指令集二进制代码1810,指令集二进制代码1810可由不具有至少一个x86指令集核心1814的处理器(例如,具有执行CA,Sunnyvale的MIPS Technologies的MIPS指令集和/或执行CA,Sunnyvale的ARM Holdings的ARM指令集的核心的处理器)本机执行。指令转换器1812用于将x86二进制代码1806转换成可由不具有x86指令集核心1814的处理器本机执行的代码。该经转换的代码不大可能与可选的指令集二进制代码1810相同,这是因为能够实现这点的指令转换器很难制造;然而,经转换的代码将实现通常的操作并且由来自可选的指令集的指令构成。因此,指令转换器1812代表了通过仿真、模拟或任何其它处理而允许不具有x86指令集处理器或核心的处理器或其它电子设备来执行x86二进制代码1806的软件、固件、硬件或其组合。
本文所公开的矢量友好指令格式的指令的一些操作可通过硬件部件来执行,并且可以用于使或至少使得电路或其它硬件部件被编程有执行操作的指令的机器可执行指令来具体实施。电路可以包括通用或专用处理器,或逻辑电路,仅列举了几个示例。操作还可任选地通过硬件和软件的组合来执行。执行逻辑和/或处理器可以包括响应机器指令或从机器指令得到的一个或多个控制信号以存储指令指定结果操作数的专门或特定的电路或其它逻辑。例如,本文公开的指令的实施例可以在图13-16的一个或多个系统中执行,并且矢量友好指令格式的指令的实施例可以存储在程序代码中以在系统中执行。另外,这些图的处理元件可以使用本文详述的详细管线和/或体系结构(例如,有序和无序体系结构)中的一个。例如,有序体系结构的解码单元可以对指令进行解码,将经解码的指令传递到矢量或标量单元,等等。
上面的描述旨在说明本发明的优选实施例。从上面的讨论还应当显知,尤其在该技术领域,增长快速且进一步的发展不易于预见,本领域技术人员能够对本发明的布置和细节进行修改而在随附权利要求书及其等同内容的范围内不偏离本发明的原理。例如,方法的一个或多个操作可组合或进一步分离。
替代的实施例
尽管已经描述了本机执行矢量友好指令格式的实施例,但是本发明的替代实施例可以通过在执行不同指令集的处理器(例如,执行CA,Sunnyvale的MIPS Technologies的MIPS指令集的处理器,执行CA,Sunnyvale的ARM Holdings的ARM指令集的处理器)上运行的仿真层来执行矢量友好指令格式。而且,尽管图中的流程图示出了本发明的一些实施例所执行的操作的特定次序,但应当理解这样的次序是示例性的(例如,替代的实施例可以按不同的次序执行操作,组合一些操作,重叠一些操作,等等)。
在上文的描述中,为了说明的目的,已经阐述了多方面具体细节从而提供本发明的实施例的全面理解。然而,本领域技术人员显而易见,可在不具有这些具体细节中的一些细节的情况下来实施一个或多个其它实施例。所描述的特定实施例被提供不是为了限制本发明而是说明本发明的实施例。本发明的范围不是由上文提供的具体示例确定的,而是仅由下面的权利要求书确定。

Claims (19)

1.一种在计算机处理器中执行对齐指令的方法,包括:
取出所述对齐指令,其中所述对齐指令包括写屏蔽操作数、目的地操作数、第一源操作数、第二源操作数和偏移值;
对所取出的对齐指令进行解码;
通过如下操作来执行经解码的对齐指令
将所述第一源操作数的第一多个数据元素和所述第二源操作数的第二多个数据元素串接,
基于所述偏移值将串接的数据元素向右移位,以及
基于写屏蔽的相应位来确定向右移位的、串接的数据元素的哪些将被存储在目的地的相应位置上;以及
将所述向右移位的、串接的数据元素的已被确定为应当存储到所述目的地的那些数据元素存储在所述目的地中的所述相应位置上。
2.如权利要求1所述的方法,其中所述写屏蔽是16位寄存器。
3.如权利要求1所述的方法,其中所述偏移是8位立即数值。
4.如权利要求1所述的方法,还包括:
确定是否使用所述写屏蔽;以及
如果不使用所述写屏蔽,则将所述向右移位的、串接的数据元素中的数据元素存储在所述目的地的所述相应位置上,而不基于所述写屏蔽的相应位来确定所述向右移位的、串接的数据元素中的哪些将被存储在所述目的地的相应位置上。
5.如权利要求1所述的方法,其中针对所述写屏蔽的每个位位置并行地进行所述确定。
6.如权利要求1所述的方法,其中所述第一源操作数和第二源操作数是512位寄存器。
7.如权利要求1所述的方法,其中所述第二源操作数是512位存储器单元,并且来自所述存储器单元的数据元素在所述源的串接之前被加载到临时的512位寄存器中。
8.如权利要求1所述的方法,其中所述第一操作数的数据元素是所述向右移位的、串接的数据元素中的最低有效数据元素。
9.一种方法,包括:
响应对齐指令,所述对齐指令包括第一和第二源操作数、目的地操作数、写屏蔽操作数和偏移,
将第一源的第一数据元素集合与第二源的第二数据元素集合串接;
将串接的数据元素向右移位X数据元素,其中X是在所述对齐指令中提供的立即数值;以及
对于写屏蔽的第一位位置,确定所述第一位位置是否指示经移位的、串接的数据元素的相应数据元素将被存储在目的地的相应位置上,
当所述写屏蔽的所述第一位位置指示所述经移位的、串接的数据元素的所述相应数据元素应当被存储时,将所述经移位的、串接的数据元素的所述相应数据元素存储在所述目的地中的相应位置上,并且
当所述写屏蔽的所述第一位位置指示其相应数据元素不应被存储在所述目的地中时,不对所述目的地中的所述相应位置上的数据元素进行处理。
10.如权利要求9所述的方法,还包括:
将所述第一源的第一数据元素集合与所述第二源的第二数据元素集合串接;
对于写屏蔽的第二位位置,确定所述第二位位置是否指示所述经移位的、串接的数据元素的相应数据元素将被存储在所述目的地中的相应位置上,
当所述写屏蔽的所述第二位位置指示所述经移位的、串接的数据元素的所述相应数据元素应当被存储时,将所述经移位的、串接的数据元素的所述相应数据元素存储在所述目的地的相应位置上,并且
当所述写屏蔽的所述第二位位置指示其相应数据元素不应当被存储在所述目的地中时,不对所述目的地中的所述相应位置上的数据元素进行处理。
11.如权利要求10所述的方法,还包括:
确定最后一个位位置何时已被评估以确定所述经移位的、串接的数据元素的相应数据元素是否将被存储在所述目的地中的相应位置上,从而完成所述对齐指令。
12.如权利要求9所述的方法,其中所述写屏蔽的所述第一位位置是所述写屏蔽的最低有效位。
13.如权利要求9所述的方法,其中所述写屏蔽是16位寄存器。
14.如权利要求9所述的方法,其中所述偏移是8位立即数值。
15.如权利要求9所述的方法,其中针对所述写屏蔽的每个位位置并行地进行所述确定。
16.如权利要求1所述的方法,其中所述第一和第二源操作数是512位寄存器。
17.如权利要求1所述的方法,其中所述第二源操作数是512位存储器单元,并且来自所述存储器单元的数据元素在所述源的串接之前被加载到临时的512位寄存器中。
18.一种装置,包括:
硬件解码器,其用于对对齐指令进行解码,其中所述对齐指令包括写屏蔽操作数、目的地操作数、第一源操作数、第二源操作数和偏移值;
执行逻辑,用于
将所述第一源操作数的第一多个数据元素和所述第二源操作数的第二多个数据元素串接,
基于所述偏移值将串接的数据元素向右移位,
基于所述写屏蔽的相应位来确定向右移位的、串接的数据元素的哪些将被存储到目的地的相应位置上,以及
将所述向右移位的、串接的数据元素的已被确定为应当存储到所述目的地的那些数据元素存储在所述目的地中的所述相应位置上。
19.如权利要求18所述的装置,还包括:
用于存储所述写屏蔽的16位写屏蔽寄存器;以及
用于存储所述第一和第二源的数据元素的至少两个512位寄存器。
CN201710458693.2A 2011-04-01 2012-03-29 用于对齐寄存器的系统、装置和方法 Active CN107273095B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/078,868 US20120254589A1 (en) 2011-04-01 2011-04-01 System, apparatus, and method for aligning registers
US13/078,868 2011-04-01
CN201280026790.XA CN103562854B (zh) 2011-04-01 2012-03-29 用于对齐寄存器的系统、装置和方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201280026790.XA Division CN103562854B (zh) 2011-04-01 2012-03-29 用于对齐寄存器的系统、装置和方法

Publications (2)

Publication Number Publication Date
CN107273095A true CN107273095A (zh) 2017-10-20
CN107273095B CN107273095B (zh) 2020-12-29

Family

ID=46928899

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201710458693.2A Active CN107273095B (zh) 2011-04-01 2012-03-29 用于对齐寄存器的系统、装置和方法
CN201280026790.XA Expired - Fee Related CN103562854B (zh) 2011-04-01 2012-03-29 用于对齐寄存器的系统、装置和方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201280026790.XA Expired - Fee Related CN103562854B (zh) 2011-04-01 2012-03-29 用于对齐寄存器的系统、装置和方法

Country Status (7)

Country Link
US (1) US20120254589A1 (zh)
JP (1) JP5764257B2 (zh)
KR (2) KR101592079B1 (zh)
CN (2) CN107273095B (zh)
DE (1) DE112012001542T5 (zh)
GB (1) GB2504226B (zh)
WO (1) WO2012135494A2 (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2943248T3 (es) 2011-04-01 2023-06-12 Intel Corp Formato de instrucción compatible con vectores y ejecución del mismo
US20130027416A1 (en) * 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
CN104011670B (zh) 2011-12-22 2016-12-28 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
WO2013095535A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Floating point rounding processors, methods, systems, and instructions
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
US9632781B2 (en) * 2013-02-26 2017-04-25 Qualcomm Incorporated Vector register addressing and functions based on a scalar register data value
US9477467B2 (en) 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US11461096B2 (en) 2019-05-24 2022-10-04 Texas Instruments Incorporated Method and apparatus for vector sorting using vector permutation logic
US9740888B1 (en) * 2014-02-07 2017-08-22 Seagate Technology Llc Tamper evident detection
US10133570B2 (en) 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
US9971686B2 (en) * 2015-02-23 2018-05-15 Intel Corporation Vector cache line write back processors, methods, systems, and instructions
JP6492943B2 (ja) 2015-05-07 2019-04-03 富士通株式会社 計算機、コンパイル方法、コンパイルプログラム、およびパイプライン処理プログラム
US10001995B2 (en) 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
WO2020066375A1 (ja) * 2018-09-25 2020-04-02 日本電気株式会社 情報処理装置、情報処理方法、プログラム
CN110688330B (zh) * 2019-09-23 2021-08-31 北京航空航天大学 一种基于内存映射相邻性的虚拟内存地址翻译方法
TWI762908B (zh) * 2020-04-17 2022-05-01 新唐科技股份有限公司 串接式擴增裝置及包含其之串接式系統

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4789925A (en) * 1985-07-31 1988-12-06 Unisys Corporation Vector data logical usage conflict detection
US5983344A (en) * 1997-03-19 1999-11-09 Integrated Device Technology, Inc. Combining ALU and memory storage micro instructions by using an address latch to maintain an address calculated by a first micro instruction
US20040098556A1 (en) * 2001-10-29 2004-05-20 Buxton Mark J. Superior misaligned memory load and copy using merge hardware
CN1601462A (zh) * 2003-09-27 2005-03-30 英特尔公司 处理器的扩展寄存器空间装置和方法
CN101438236A (zh) * 2006-05-10 2009-05-20 高通股份有限公司 用以在微处理器内组合来自多个寄存器单元的对应半字单元的方法及系统
CN101523349A (zh) * 2006-10-02 2009-09-02 特兰斯蒂有限公司 计算机系统和改编计算机系统以使其支持寄存器窗口架构的方法
CN101930356A (zh) * 2010-08-24 2010-12-29 中国航天科技集团公司第九研究院第七七一研究所 用于浮点协处理器的寄存器文件分组编址、读写控制方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
US4949250A (en) * 1988-03-18 1990-08-14 Digital Equipment Corporation Method and apparatus for executing instructions for a vector processing system
JPH01319863A (ja) * 1988-06-21 1989-12-26 Nec Corp ベクトルマスク制御方式
CN1326033C (zh) * 1994-12-02 2007-07-11 英特尔公司 可以对复合操作数进行压缩操作的微处理器
JP2806346B2 (ja) * 1996-01-22 1998-09-30 日本電気株式会社 演算処理装置
US6535903B2 (en) * 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6223277B1 (en) * 1997-11-21 2001-04-24 Texas Instruments Incorporated Data processing circuit with packed data structure capability
US6745318B1 (en) * 1999-08-18 2004-06-01 Sanjay Mansingh Method and apparatus of configurable processing
US6807622B1 (en) * 2000-08-09 2004-10-19 Advanced Micro Devices, Inc. Processor which overrides default operand size for implicit stack pointer references and near branches
JP3776732B2 (ja) * 2001-02-02 2006-05-17 株式会社東芝 プロセッサ装置
US7685212B2 (en) * 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US7349934B2 (en) * 2002-12-20 2008-03-25 Texas Instruments Incorporated Processor system and method with combined data left and right shift operation
GB2411974C (en) * 2003-12-09 2009-09-23 Advanced Risc Mach Ltd Data shift operations
GB2411975B (en) * 2003-12-09 2006-10-04 Advanced Risc Mach Ltd Data processing apparatus and method for performing arithmetic operations in SIMD data processing
US7339592B2 (en) * 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories
US7761694B2 (en) * 2006-06-30 2010-07-20 Intel Corporation Execution unit for performing shuffle and other operations
US8156310B2 (en) * 2006-09-11 2012-04-10 International Business Machines Corporation Method and apparatus for data stream alignment support
US8667250B2 (en) * 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US8788794B2 (en) * 2010-12-07 2014-07-22 Advanced Micro Devices, Inc. Programmable atomic memory using stored atomic procedures

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4789925A (en) * 1985-07-31 1988-12-06 Unisys Corporation Vector data logical usage conflict detection
US5983344A (en) * 1997-03-19 1999-11-09 Integrated Device Technology, Inc. Combining ALU and memory storage micro instructions by using an address latch to maintain an address calculated by a first micro instruction
US20040098556A1 (en) * 2001-10-29 2004-05-20 Buxton Mark J. Superior misaligned memory load and copy using merge hardware
CN1601462A (zh) * 2003-09-27 2005-03-30 英特尔公司 处理器的扩展寄存器空间装置和方法
CN101438236A (zh) * 2006-05-10 2009-05-20 高通股份有限公司 用以在微处理器内组合来自多个寄存器单元的对应半字单元的方法及系统
CN101523349A (zh) * 2006-10-02 2009-09-02 特兰斯蒂有限公司 计算机系统和改编计算机系统以使其支持寄存器窗口架构的方法
CN101930356A (zh) * 2010-08-24 2010-12-29 中国航天科技集团公司第九研究院第七七一研究所 用于浮点协处理器的寄存器文件分组编址、读写控制方法

Also Published As

Publication number Publication date
GB2504226A (en) 2014-01-22
KR20160014100A (ko) 2016-02-05
KR101926241B1 (ko) 2018-12-06
KR20130137697A (ko) 2013-12-17
GB2504226B (en) 2020-01-29
CN103562854A (zh) 2014-02-05
GB201317942D0 (en) 2013-11-27
JP2014510352A (ja) 2014-04-24
DE112012001542T5 (de) 2014-02-20
CN107273095B (zh) 2020-12-29
CN103562854B (zh) 2017-07-14
WO2012135494A3 (en) 2012-12-27
US20120254589A1 (en) 2012-10-04
WO2012135494A2 (en) 2012-10-04
JP5764257B2 (ja) 2015-08-19
KR101592079B1 (ko) 2016-02-04

Similar Documents

Publication Publication Date Title
CN103562854B (zh) 用于对齐寄存器的系统、装置和方法
CN103562856B (zh) 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法
US20190108029A1 (en) Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
CN103562855B (zh) 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法
CN109614076A (zh) 浮点到定点转换
US9792115B2 (en) Super multiply add (super MADD) instructions with three scalar terms
CN104903850B (zh) 用于滑动窗口编码算法的指令
TWI489382B (zh) 改良的萃取指令背景之設備及方法
US9910670B2 (en) Instruction set for eliminating misaligned memory accesses during processing of an array having misaligned data rows
TWI610228B (zh) 用於執行向量位元反轉和交叉的方法和設備
CN109313549A (zh) 用于向量的元素排序的装置、方法和系统
CN108292224A (zh) 用于聚合收集和跨步的系统、设备和方法
TW201530430A (zh) 用於資料類型之向下轉換的裝置及方法(二)
CN109313553A (zh) 用于跨步加载的系统、装置和方法
CN108780394A (zh) 用于转换编码格式的硬件装置和方法
CN107193537B (zh) 经改进的插入指令的装置和方法
CN110321165A (zh) 复数向量融合乘加和复数向量乘法的高效实现
CN110058886A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
TWI733718B (zh) 用於獲得偶數和奇數資料元素的系統、裝置及方法
CN109992301A (zh) 用于向量广播的系统、方法和装置
US9851972B2 (en) Functional unit for instruction execution pipeline capable of shifting different chunks of a packed data operand by different amounts

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