CN103562855B - 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 - Google Patents

用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 Download PDF

Info

Publication number
CN103562855B
CN103562855B CN201180071236.9A CN201180071236A CN103562855B CN 103562855 B CN103562855 B CN 103562855B CN 201180071236 A CN201180071236 A CN 201180071236A CN 103562855 B CN103562855 B CN 103562855B
Authority
CN
China
Prior art keywords
data element
instruction
write mask
vector
size
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.)
Expired - Fee Related
Application number
CN201180071236.9A
Other languages
English (en)
Other versions
CN103562855A (zh
Inventor
J·C·圣阿德里安
R·E·桑斯
R·C·瓦伦丁
S·G·杜兰
J·G·维德迈尔
S·萨姆德腊拉
M·B·吉尔卡尔
A·T·福赛思
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 CN103562855A publication Critical patent/CN103562855A/zh
Application granted granted Critical
Publication of CN103562855B publication Critical patent/CN103562855B/zh
Expired - Fee Related 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
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction

Abstract

描述了用于在计算机处理器中执行扩展和/或压缩指令的系统、装置和方法的实施例。在一些实施例中,扩展指令的执行导致基于写屏蔽的值选择来自源的将被稀疏地存储在目的地中的元素,并将源的每个所选择的数据元素作为稀疏数据元素存储在目的地位置中,其中目的地位置对应于指示源的相应数据元素待被存储的每个写屏蔽位位置。

Description

用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目 的地存储器单元中的系统、装置和方法
技术领域
本发明的领域通常涉及计算机处理器体系结构,且更具体地涉及当被执行时引起特定结果的指令。
背景技术
存在通过操纵数据结构布局来提高存储器利用率的几种方法。对于某些算法,像3D变换和照明,存在排列顶点数据的两种基本方法。传统方法是结构阵列(AoC)布置,对每个顶点有一个结构。另一方法将每个坐标的阵列中的数据排列在阵列结构(SoA)布置中。
存在用于计算AoS格式的数据的两个选择:当数据处于AoS布置中时对数据执行操作,或将它重新排列(将它混合)成SoA布置。在原始AoS布置上执行SIMD操作可能需要更多的计算,且一些操作不利用所有的可用SIMD元件。因此,这个选择通常效率较低。
SoA布置允许单指令多数据(SIMD)技术的并行化的更有效使用,因为数据准备好以更理想的垂直方式计算。相反,直接在AoS数据上计算可导致消耗SIMD执行时隙但只产生单个标量结果的水平操作,如在以前的代码样本中的很多“不在意(DC)”时隙所示的。
随着SIMD技术的出现,数据组织的选择变得更重要,且应小心地基于将在数据上执行的操作。在一些应用中,传统数据布置可能不会导致最大性能。应用开发者被鼓励探究不同的数据布置和数据分割政策用于有效的计算。这可能意味着在给定的应用中使用AoS、SoA以及甚至混合SoA的组合。
附图说明
本发明作为例子而不是限制在附图的图中示出,其中相似的附图标记指示相似的元件,且其中:
图1中示出扩展指令的执行的例子。
图2示出以寄存器操作数作为源的扩展指令的执行的例子。
图3示出用于执行扩展指令的伪代码的例子。
图4示出处理器中的扩展指令的使用的实施例。
图5示出用于处理扩展指令的方法的实施例。
图6示出处理器中的压缩指令的执行的例子。
图7示出处理器中的压缩指令的执行的另一例子。
图8示出用于执行扩展指令的伪代码的例子。
图9示出处理器中的压缩指令的使用的实施例。
图10示出用于处理压缩指令的方法的实施例的例子。
图11A是示出根据本发明的实施例的一般矢量友好指令格式及其A类指令模板的方框图。
图11B是示出根据本发明的实施例的一般矢量友好指令格式及其B类指令模板的方框图。
图12A-C示出根据本发明的实施例的示例性特定矢量友好指令格式。
图13是根据本发明的一个实施例的寄存器体系结构的方框图。
图14A是根据本发明的实施例的单CPU核心连同其到片上互连网络的连接和其2级(L2)高速缓存的本地子集的方框图。
图14B是根据本发明的实施例的在图14A中的CPU核心的部分分解图。
图15是示出根据本发明的实施例的示例性无序体系结构的方框图。
图16是根据本发明的一个实施例的系统的方框图。
图17是根据本发明的实施例的第二系统的方框图。
图18是根据本发明的实施例的第三系统的方框图。
图19是根据本发明的实施例的SoC的方框图。
图20是根据本发明的实施例的具有集成存储器控制器和图形的单核心处理器和多核心处理器的方框图。
图21是根据本发明的实施例的对比将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的方框图。
具体实施方式
在下面的描述中阐述了很多特定的细节。然而,应理解,本发明的实施例可在没有这些特定的细节的情况下被实践。在其它实例中,公知的电路、结构和技术没有详细示出,以便不使本描述的理解不清楚。
在说明书中对“一个实施例”、“实施例”、“示例性实施例”等的提及表明所描述的实施例可包括特定的特征、结构或特性,但每个实施例可不一定包括该特定的特征、结构或特性。而且,这样的短语不一定指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,不管是否被明确描述,认为本领域技术人员知道结合其它实施例影响这样的特征、结构或特性。
下面描述了“扩展”和“压缩”指令的几个实施例以及可用于执行这样的指令的系统、体系结构、指令格式等的实施例。在几个不同的领域中有益的扩展和压缩包括转换AoS和SoA布置。例如,从XYZW XYZW XYZW…XYZW模式转变到XXXXXXXX YYYYYYYY ZZZZZZZZWWWWWWWW类型的模式。另一这样的领域是矩阵转置。具有长度16的矢量可被视为元素的4x4阵列。使用扩展指令,一行四个连续的元素M[0]、M[1]、M[2]和M[3]可被取出并扩展(合并以保持构建阵列)成4x4阵列行(例如,矢量元素1、3、7和11)之一。
此外,基于动态条件存储到存储器的连续单元中的通用代码将受益于压缩和扩展指令。例如,在一些情况下,将具有不平常的条件的罕见元素压缩到临时存储器空间是有利的。将它们封包存储在一起扩增了计算的密集度。完成此的一种方法是通过使用下面详述的压缩。在处理临时存储器空间(或FIFO)之后,扩展可用于将那些罕见元素恢复回到其原始位置。扩展还用于再次扩展被封包成队列的数据。
扩展
以扩展开始,扩展的执行使处理器基于由写屏蔽操作数确定的活动元素,将来自源操作数(存储器或寄存器操作数)的连续的数据元素写到目的地操作数(一般是寄存器操作数)中的(稀疏)数据元素位置。此外,源操作数的数据元素可根据其尺寸和什么尺寸的数据元素在目的地寄存器中而被向上转换(upconvert)。例如,如果源操作数是存储器操作数且其数据元素在尺寸上是16位而目的地寄存器的数据元素是32位,则将要被存储在目的地中的存储器操作数的数据元素被向上转换为32位。稍后将详述向上转换和它们如何被编码成指令格式的例子。
这个指令的格式是“VEXPANDPS zmm1{k1}zmm2/U(mem)”,其中zmm1和zmm2分别是目的地和源矢量寄存器操作数(例如128、256、512位寄存器等),k1是写屏蔽操作数(例如16位寄存器),以及U(mem)是源存储器单元操作数。从存储器取回的任何东西都是从存储器地址开始的连续位的集合,且其取决于目的地寄存器的尺寸而可以是几个尺寸(128、256、512位等)之一—该尺寸通常与目的地寄存器的尺寸相同。在一些实施例中,写屏蔽也具有不同的尺寸(8位、32位等)。此外,在一些实施例中,不是写屏蔽的所有位都被指令利用(例如,只有较低的八个最低有效位被使用)。当然,VEXPANDPS是指令的操作码。一般地,每个操作数明确地被定义在指令中。数据元素的尺寸可例如通过使用数据粒度位(如稍后描述的“W”)的指示来定义在指令的“前缀”中。在大部分实施例中,W将指示每个数据元素是32位或64位。如果数据元素在尺寸上是32位且源在尺寸上是512位,则每个源有十六(16)个数据元素。
该指令在正常情况下被写屏蔽,使得在目的地寄存器中,只有在写屏蔽寄存器(在上面的例子中的k1)中设置了相应的位的那些元素被修改。在目的地寄存器中,在写屏蔽寄存器中清除了相应的位的元素保留其以前的值。然而,当不使用写屏蔽(或写屏蔽被设置为全一)时,这个指令可用于较高性能矢量负载,其中下述情形有很高的可信度:存储器引用将产生高速缓存行分割(cache-line split)。
扩展指令的执行的例子在图1中示出。在本例中,源是在RAX寄存器中找到的地址处定址的存储器。当然,存储器地址可存储在其它寄存器中或被发现作为指令中的立即数。在本例中的写屏蔽被示为0x4DB1。对于具有值“1”的写屏蔽的每个位位置,来自存储器源的数据元素被存储在目的地寄存器中的相应位置处。例如,写屏蔽的第一个位置(例如,k1[0])是“1”,其指示相应的目的地数据元素位置(例如,目的地寄存器的第一数据元素)将在其中存储来自源存储器的数据元素。在这种情况下,它将是与RAX地址相关联的数据元素。掩码接下来的三个位是“0”,其指示不处理目的地寄存器的相应数据元素(在附图中被示为“Y”)。写屏蔽中的下一个“1”值在第五位位置(例如,k1[4])中。这表明在与RAX寄存器相关联的数据元素之后(连续)的数据元素将被存储在目的地寄存器的第五数据元素槽中。其余的写屏蔽位位置用于确定存储器源的哪些额外数据元素将存储在目的地寄存器中(在本实例中,总共八个数据元素被存储,但可能有更少或更多,这取决于写屏蔽)。此外,来自存储器源的数据元素可被向上转换以在存储到目的地中之前符合目的地的数据元素尺寸,例如从16位浮点值转变到32位值。上面详述了向上转换和如何将它们编码成指令格式的例子。此外,在一些实施例中,存储器操作数的连续数据元素在扩展之前存储到寄存器中。
图2示出以寄存器操作数作为源的扩展指令的执行的例子。与前面的附图一样,在本例中的写屏蔽是0x4DB1。对于具有值“1”的写屏蔽的每个位位置,来自寄存器源的数据元素被存储在目的地寄存器中的相应位置处。例如,写屏蔽的第一位置(例如,k1[0])是“1”,其指示相应的目的地数据元素位置(例如,目的地寄存器的第一数据元素)将在其中存储来自源寄存器的数据元素。在这种情况下,它将是源寄存器的第一数据元素。掩码的接下来的三个位是“0”,其指示不处理目的地寄存器的相应数据元素(在附图中被示为“Y”)。写屏蔽中的下一个“1”值在第五位位置(例如,k1[4])中。这指示在源寄存器的第一存储数据之后(连续)的数据元素将被存储在目的地寄存器的第五数据元素槽中。其余的写屏蔽位位置用于确定寄存器源的哪些额外的数据元素将存储在目的地寄存器中(在本实例中,总共八个数据元素被存储,但可能有更少或更多,这取决于写屏蔽)。
图3示出用于执行扩展指令的伪代码的例子。
图4示出处理器中的扩展指令的使用的实施例。具有目的地操作数、源操作数(存储器或寄存器)、写屏蔽和偏移(如果包括的话)的扩展指令在401处被取出。在一些实施例中,目的地操作数是512位矢量寄存器(例如ZMM1),而写屏蔽是16位寄存器(例如k1)。如果有存储器源操作数,则它可以是存储地址(或其一部分)或表示地址或其一部分的立即数的寄存器。一般地,目的地和源操作数具有相同的尺寸。在一些实施例中,它们在尺寸上都是512位。然而,在其它实施例中,它们可以都是不同的尺寸,例如128或256位。
扩展指令在403处被解码。取决于指令的格式,各种数据可在这个阶段被解释,例如是否存在向上转换(或其它数据变换),哪些寄存器要写入和取回,什么存储器地址来自源,等等。
源操作数值在405处被取回/读取。在大部分实施例中,与存储器源单元地址相关的数据元素和连续的(随后的)地址(及其数据元素)此时被读取(例如,整个高速缓存行被读取)。在源是寄存器的实施例中,它此时被读取。
如果有待执行的任何数据元素变换(例如向上转换),则它可以在407处被执行。例如,来自存储器的16位数据元素可被向上转换成32位数据元素。
扩展指令(或包括这样的指令的操作,例如微操作)在409处由执行资源执行。这个执行使得基于写屏蔽的“活动”元素(位位置)确定来自源操作数的哪些值将被作为稀疏数据元素存储在目的地中。这样的确定的例子在图1和2中示出。
在411处,源操作数的适当数据元素存储到目的地寄存器中对应于写屏蔽的“活动”元素的单元处。再次,这个的例子在图1和2中示出。虽然分开地示出409和411,但在一些实施例中,它们一起被执行作为指令执行的一部分。
图5示出用于处理扩展指令的方法的实施例。在这个实施例中,假设操作401-407中的一些(如果不是全部)在先前已被执行,然而,未对其进行显示,以免模糊下文提出的细节。例如,未示出取出和解码,也未示出操作数(源和写屏蔽)取回。
在501处,确定在第一位位置处的写屏蔽是否指示相应的源单元应存储在目的地寄存器的相应数据元素单元中。例如,在第一位置处的写屏蔽具有指示目的地寄存器的第一数据元素位置应被以来自源的值(在这种情况下是通过源操作数访问的连续数据元素的第一数据元素)覆写的值(例如“1”)吗?
当在第一位位置处的写屏蔽不指示在目的地寄存器中应有变化时,则写屏蔽中的下一位位置将被评估且不做出变化。当在第一位位置处的写屏蔽指示在目的地的该第一数据元素位置应有变化时,则第一源数据元素(例如,存储器单元或源寄存器的最低有效数据元素)在509处被存储到第一数据元素位置处。取决于实现,存储器数据元素在507处被转换成目的地的数据元素尺寸。这也可在501的评估之前出现。可被写到目的地寄存器中的来自源的随后的(连续的)数据元素在511处准备好。
在513处,确定所评估的写屏蔽位置是否是写屏蔽的最后一个或目的地的所有数据元素位置是否已被填充。如果为真,则操作结束。
如果不为真,则在515处应评估写屏蔽中的下一位位置。这个评估出现在503处且类似于501的确定,但它不是针对写屏蔽的第一位位置。如果所述确定为“是”,则存储数据元素,等等(507、509和511),而如果所述确定为“否”,则在505处不处理目的地的数据元素。
此外,虽然这个附图和上面的描述将各自的最前面的位置(first positions)考虑为最低有效位置,但在一些实施例中,最前面的位置是最高有效位置。
压缩
压缩指令的执行使处理器基于由写屏蔽操作数确定的活动元素,将来自源操作数(一般是寄存器操作数)的数据元素存储(封包)到目的地操作数(存储器或寄存器操作数)中的连续元素中。此外,源操作数的数据元素可根据其尺寸和如果目的地是存储器则数据元素是什么尺寸来被向下转换。例如,如果存储器操作数的数据元素在尺寸上是16位的而源寄存器的数据元素是32位的,则将要被存储在存储器中的寄存器的数据元素被向下转换为16位。稍后将详述向下转换和它们如何编码成指令格式的例子。压缩的执行也可被视为创建在元素对齐地址处开始的逻辑地映射的字节/字/双字流。流的长度取决于写屏蔽,因为被掩码禁用的元素未被添加到流。压缩一般用于将稀疏数据压缩成队列。此外,不使用写屏蔽(或写屏蔽被设置为全一),它可用于较高性能矢量存储,其中下述情形有很高的可信度:存储器引用将产生高速缓存行分割。
这个指令的格式是“VCOMPRESSPS zmm2/mem{k1},D(zmm1)”,其中zmm1和zmm2分别是源和目的地矢量寄存器操作数(例如128、246、 512位寄存器),k1是写屏蔽操作数(例如16位寄存器),以及mem是存储器单元。也可能有包括在指令中的存储器操作数的偏移。存储到存储器的任何东西都是从存储器地址开始的连续位的集合,且可以是几个尺寸(128、256、512位等)之一。在一些实施例中,写屏蔽也具有不同的尺寸(8位、32位等)。此外,在一些实施例中,不是写屏蔽的所有位都被指令利用(例如,只有较低的八个最低有效位被使用)。当然,VCOMPRESSPS是指令的操作码。一般,每个操作数明确地被定义在指令中。数据元素的尺寸可例如通过使用数据粒度位(如本文描述的“W”)的指示而被定义在指令的“前缀”中。在大部分实施例中,W将指示每个数据元素是32位或64位。如果数据元素在尺寸上是32位且源在尺寸上是512位,则每个源有十六(16)个数据元素。
在图6中示出处理器中的压缩指令的执行的例子。在本例中,目的地存储器定址在与在RAX寄存器中找到的一地址相关联的地址处。当然,存储器地址可存储在其它寄存器中或被发现作为指令中的立即数。在本例中的写屏蔽被示为0x4DB1。对于写屏蔽具有值“1”的每个实例,来自源(例如ZMM寄存器)的数据元素被连续地存储(封包)到存储器中。例如,写屏蔽的第一位置(例如,k1[0])是“1”,其指示相应的源数据元素位置(例如源寄存器的第一数据元素)应被写到存储器中。在这种情况下,它将被存储为与RAX地址相关联的数据元素。掩码的接下来的三个位是“0”,其指示源寄存器的相应数据元素不被存储在存储器中(在附图中被示为“Y”)。写屏蔽中的下一个“1”值在第五位位置(例如,k1[4])中。这指示在与RAX寄存器相关联的数据元素之后(连续)的数据元素位置将在其中存储源寄存器的第五数据元素槽。其余的写屏蔽位位置用于确定源寄存器的哪些额外的数据元素将被存储在存储器中(在本实例中,总共八个数据元素被存储,但可能有更少或更多,这取决于写屏蔽)。此外,来自寄存器源的数据元素可在存储之前被向下转换以符合存储器的数据元素尺寸,例如从32位浮点值转变到16位值。
图7示出处理器中的压缩指令的执行的另一例子。在本例中,目的地是寄存器。在本例中的写屏蔽再次是0x4DB1。对于写屏蔽具有值“1”的每个实例,来自源(例如ZMM寄存器)的数据元素被连续地存储(封包) 在目的地寄存器中。例如,写屏蔽的第一位置(例如,k1[0])是“1”,其指示相应的源数据元素位置(例如源寄存器的第一数据元素)应被写到目的地寄存器中。在这种情况下,它将被存储为目的地寄存器的第一数据元素。掩码的接下来的三个位是“0”,其指示源寄存器的相应数据元素不被存储在目的地寄存器中(在附图中被示为“Y”)。写屏蔽中的下一个“1”值在第五位位置(例如,k1[4])中。这指示在第一数据元素之后(连续)的数据元素位置将在其中存储源寄存器的第五数据元素槽。其余的写屏蔽位位置用于确定源寄存器的哪些额外的数据元素将被存储在目的地寄存器中(在本实例中,总共八个数据元素被存储,但可能有更少或更多,这取决于写屏蔽)。
图8示出用于执行扩展指令的伪代码的例子。
图9示出处理器中的压缩指令的使用的实施例。具有目的地操作数、源操作数和写屏蔽的压缩指令在901处被取出。在一些实施例中,源操作数是512位矢量寄存器(例如ZMM1),而写屏蔽是16位寄存器(例如k1)。目的地可以是存储在寄存器中的存储器单元或作为立即数或寄存器操作数。此外,压缩指令可包括存储器地址的偏移。
压缩指令在903处被解码。取决于指令的格式,各种数据可在这个阶段被解释,例如是否存在向下转换,哪些寄存器要取回,什么存储器地址来自目的地操作数(和偏移,如果有的话),等等。
源操作数值在905处被取回/读取。例如,源寄存器的至少第一数据元素被读取。
如果存在待执行的任何数据元素变换(例如向下转换),则可以在907处执行。例如,来自寄存器的32位数据元素可被向下转换成16位数据元素。
压缩指令(或包括这样的指令的操作,例如微操作)在909处由执行资源执行。这个执行使得基于写屏蔽的“活动”元素(位位置)确定来自源操作数的哪些值将被作为封包数据元素加载在目的地中。这样的分析的例子在图6中示出。
对应于写屏蔽的“活动”元素的源操作数的适当数据元素在911处被存储到目的地中。再次,这个的例子在图6和7中示出。虽然分开地示出 909和911,但在一些实施例中,它们一起被执行作为指令的执行的一部分。
图10示出用于处理压缩指令的方法的实施例的例子。在这个实施例中,假设操作901-907中的一些(如果不是全部)在先前已被执行,然而,未对其进行显示,以免模糊在下文提出的细节。例如,没有示出取出和解码,也没有示出操作数(源和写屏蔽)取回。
在1001处,确定在第一位位置处的写屏蔽是否指示相应的源数据元素应存储在由目的地操作数最初指示的目的地单元(最低有效位置)中。例如,在第一位置处的掩码具有指示源寄存器的第一数据元素位置应被写到存储器中的值(例如“1”)吗?
当在第一位位置处的写屏蔽不指示在目的地中应有变化(第一数据元素应通过源寄存器的第一数据元素保持不变)时,则写屏蔽中的下一位位置将被评估(如果有的话)且没有做出变化。当在第一位位置处的写屏蔽指示在目的地的该第一数据元素位置应有变化时,则源数据元素在1007处被存储到目的地的第一数据元素位置处。取决于实现,源数据元素在1005处被转换成目的地的数据元素尺寸。这也可在1001处的评估之前出现。可被写入到的随后的(连续的)目的地单元在1009处准备好。
在1011处,确定所评估的写屏蔽位置是否是写屏蔽的最后一个或目的地的所有数据元素位置是否被填充。如果为真,则操作结束。如果不为真,则在1013处将评估写屏蔽中的下一位位置。这个评估出现在1003处且类似于1001处的确定,但它不是针对写屏蔽的第一位位置。如果所述确定为“是”,则存储数据元素,等等(1005、1007和1009)。
此外,虽然这个附图和上面的描述将各自的最前面的位置考虑为最低有效位置,但在一些实施例中,最前面的位置是最高有效位置。
上面详述的指令的实施例可体现在下面详述的“一般矢量友好指令格式”中。在其它实施例中,不利用这样的格式并使用另一指令格式,然而,写屏蔽寄存器、各种数据变换(混合、广播等)、寻址等的下面描述通常可适用于上述指令的实施例的描述。此外,下面详述了示例性系统、体系结构和管线。上述指令的实施例可在这样的系统、体系结构和管线上执行,但不限于详述的那些。
矢量友好指令格式是适合于矢量指令的指令格式(例如,存在矢量操作特有的某些字段)。虽然描述了通过矢量友好指令格式支持矢量和标量操作的实施例,但可选的实施例只使用矢量友好指令格式的矢量操作。
示例性一般矢量友好指令格式—图11A-B
图11A-B是示出根据本发明的实施例的一般矢量友好指令格式及其指令模板的方框图。图11A是示出根据本发明的实施例的一般矢量友好指令格式及其A类指令模板的方框图;而图11B是示出根据本发明的实施例的一般矢量友好指令格式及其B类指令模板的方框图。具体地,为一般矢量友好指令格式1100定义A类和B类指令模板,这两个指令模板都包括无存储器存取1105指令模板和存储器存取1120指令模板。在矢量友好指令格式的上下文中的术语“一般”是指不与任何特定的指令集相关联的指令格式。虽然将描述矢量友好指令格式的指令在源于寄存器(无存储器存取1105指令模板)或寄存器/存储器(存储器存取1120指令模板)的矢量上操作的实施例,但本发明的可选实施例可只支持这些中的一个。此外,虽然将描述存在矢量指令格式的加载和存储指令的本发明的实施例,但可选的实施例替代地或此外具有不同指令格式的指令,其将矢量移动进和移动出寄存器(例如,从存储器到寄存器中,从寄存器到存储器中,在寄存器之间)。此外,虽然将描述支持两类指令模板的本发明的实施例,但可选的实施例可支持这些中的仅仅一个或多于两个。
虽然将描述矢量友好指令格式支持下列项的本发明的实施例:具有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字节)数据元素宽度)的更多、更少和/或不同的矢量操作数尺寸(例如,1156字节矢量操作数)。
在图11A中的A类指令模板包括:1)在无存储器存取1105指令模板内,示出了:无存储器存取、全取整(full round)控制型操作1110指令模板,和无存储器存取、数据变换型操作1115指令模板;以及2)在存储器存取1120指令模板内,示出了:存储器存取、临时1125指令模板,和存储器存取、非临时1130指令模板。在图11B中的B类指令模板包括:1)在无存储器存取1105指令模板内,示出了:无存储器存取、写屏蔽控制、部分取整控制型操作1112指令模板,和无存储器存取、写屏蔽控制、高低缩放大小(visze)型操作1117指令模板;以及2)在存储器存取1120指令模板内,示出了:存储器存取、写屏蔽控制1127指令模板。
格式
一般矢量友好指令格式1100包括在下面以图11A-B中所示的顺序列出的下列字段。
格式字段1140—在该字段中的特定值(指令格式标识符值)唯一地识别矢量友好指令格式,且因此识别在指令流中的矢量友好指令格式的指令的出现。因此,格式字段1140的内容区分开第一指令格式的指令的出现与其它指令格式的指令的出现,从而允许矢量友好指令格式引入到具有其它指令格式的指令集中。因此,这个字段在不需要只有一般矢量友好指令格式的指令集的意义上是可选的。
基础操作字段1142—它的内容区分不同的基础操作。如在本文稍后描述的,基础操作字段1142可包括操作码字段和/或是操作码字段的部分。
寄存器索引字段1144—它的内容直接地或通过地址生成来指定源和目的地操作数的位置,它们在寄存器中还是在存储器中。这些包括足够数量的位以从PxQ(例如32x1312)寄存器文件选择N个寄存器。虽然在一个实施例中N可以高达三个源和一个目的地寄存器,但可选的实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源中的一个也充当目的地;可支持多达三个源,其中这些源中的一个也充当目的地;可支持多达两个源和一个目的地)。虽然在一个实施例中P=32,但可选的实施例可支持更多或更少的寄存器(例如,16)。虽然在一个实施例中Q=1312位,但可选的实施例可支持更多或更少的位(例如,128、1024)。
修饰符字段1146—它的内容区分开指定存储器存取的一般矢量指令格式的指令的出现与不指定存储器存取的指令的出现;也就是说,区分开无存储器存取1105指令模板与存储器存取1120指令模板。存储器存取操作读取和/或写入到存储器等级结构(在一些情况下,使用寄存器中的值指定源和/或目的地地址),而无存储器存取操作不这样(例如,源和目的地是寄存器)。虽然在一个实施例中这个字段也在三种不同的方式之间进行选择以执行存储器地址计算,但可选的实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩增操作字段1150—它的内容除了基础操作以外还区分各种不同的操作中的哪个将被执行。该字段是上下文特定的。在本发明的一个实施例中,该字段被分成类字段1168、α字段1152和β字段1154。扩增操作字段允许操作的公共组在单个指令而不是2、3或4个指令中执行。下面是使用扩增字段1150来减少所需指令的数量的指令的一些例子(其术语在本文稍后被更详细地描述)。
其中[rax]是用于地址生成的基址指针,且其中{}指示数据操纵字段所指定的转换操作(在本文稍后被更详细地描述)。
标度字段1160—它的内容允许用于存储器地址生成(例如,对于使用2标度*索引+基址的地址生成)的索引字段的内容的定标。
位移字段1162A—它的内容用作存储器地址生成的部分(例如,对于使用2标度*索引+基址+位移的地址生成)。
位移因子字段1162B(注意,位移字段1162A直接并置在位移因子字段1162B之上指示一个或另一个被使用)—它的内容用作地址生成的部分;它指定应由存储器存取的尺寸(N)缩放的位移因子,其中N是存储器存取中的字节的数量(例如,对于使用2标度*索引+基址+所缩放的位移的地址生成)。冗余低阶位被忽略,且因此位移因子字段的内容乘以存储器操作数总尺寸(N),以便产生将在计算有效地址时使用的最终位移。N的值由处理器硬件在运行时间基于全操作码字段1174(在本文稍后描述)和如在本文稍后描述的数据操纵字段1154C确定。位移字段1162A和位移因子字段1162B在它们不用于无存储器存取1105指令模板和/或不同的实施例可实现这两个中的仅仅一个或没有一个的意义上是可选的。
数据元素宽度字段1164—它的内容区分多个数据元素宽度中的哪个应被使用(在一些实施例中对于所有指令;在其它实施例中对于仅仅一些指令)。这个字段在如果仅仅支持一个数据元素宽度和/或使用操作码的某个方面支持数据元素宽度则不需要该字段的意义上是可选的。
写屏蔽字段1170—它的内容在每数据元素位置基础上控制目的地矢量操作数中的数据元素位置是否反映基础操作和扩增操作的结果。A类指令模板支持合并-写屏蔽,而B类指令模板支持合并-和归零-写屏蔽。当合并时,矢量掩码允许目的地中的任何元素集合在任何操作(由基础操作和扩增操作指定)的执行期间被防止更新;在另一实施例中,保留相应的屏蔽位具有0的目的地的每个元素的旧值。相反,当归零时,矢量掩码允许目的地中的任何元素集合在任何操作(由基础操作和扩增操作指定)的执行期间被归零时;在一个实施例中,当相应的屏蔽位具有0值时,目的地的元素被设置为0。这个功能的子集是控制正被执行的操作的矢量长度(也就是说,从第一个到最后一个正被修改的元素的跨度)的能力:然而,被修改的元素不一定是连续的。因此,写屏蔽字段1170允许部分矢量操作,包括加载、存储、算术、逻辑等。此外,这个屏蔽可用于故障抑制(即,通过屏蔽目的地的数据元素位置以防止接收可以/将引起故障的任何操作的结果,例如假设存储器中的矢量越过页边界并且第一页而不是第二页将引起页故障,如果位于第一页上的矢量的所有数据元素都被写屏蔽所屏蔽,则页故障可被忽略)。此外,写屏蔽允许包含某些类型的条件语句的“矢量化循环”。虽然描述了写屏蔽字段1170的内容选择包含待使用的写屏蔽的多个写屏蔽寄存器之一(且因此写屏蔽字段1170的内容间接地识别待执行的屏蔽)的本发明的实施例,但可选的实施例替代地或此外允许写屏蔽字段1170的内容直接指定待执行的屏蔽。此外,当下列情况时归零允许性能提高:1)寄存器重命名在目的地操作数不也是源的指令(也被称为非三元指令)上被使用,因为在寄存器重命名管线阶段期间,目的地不再是隐式源(没有来自当前目的地寄存器的数据元素需要被拷贝到重命名的目的地寄存器,或以某种方式连同操作一起被携载,因为不是操作的结果的任何数据元素(任何屏蔽的数据元素)将被归零);以及2)在写回阶段期间,因为零正被写入。
立即数字段1172—它的内容允许立即数的具体说明。该字段在它不存在于不支持立即数的一般矢量友好格式的实现中以及它不存在于不使用立即数的指令中的意义上是可选的。
指令模板类选择
类字段1168—它的内容区分开不同类的指令。参考图11A -B,该字段的内容在A类和B类指令之间选择。在图11A-B中,圆角方形用于指示特定的值存在于字段中(例如,分别在图11A-B中的类字段1168的A类1168A和B类1168B)。
A类的无存储器存取指令模板
在A类的无存储器存取1105指令模板的情况中,α字段1152被解释为RS字段1152A,其内容区分不同扩增操作类型中的哪个将被执行(例如,分别为无存储器存取、取整型操作1110和无存储器存取、数据变换型操作1115指令模板指定取整1152A.1和数据变换1152A.2),而β字段1154区分指定类型的哪些操作将被执行。在图11中,圆角方框用于指示特定的值是否存在(例如,在修饰符字段1146中的无存储器存取1146A;α字段1152/rs 字段1152A的取整1152A.1和数据变换1152A.2)。在无存储器存取1105指令模板中,不存在标度字段1160、位移字段1162A和位移标度字段1162B。
无存储器存取指令模板—全取整控制型操作
在无存储器存取全取整控制型操作1110指令模板中,β字段1154被解释为取整控制字段1154A,其内容提供静态取整。虽然在本发明的所述实施例中,取整控制字段1154A包括抑制全部浮点异常(SAE)字段1156和取整操作控制字段1158,可选的实施例可支持可将这两个概念编码成同一字段或只有这些概念/字段中的一个或另一个(例如,可只有取整操作控制字段1158)。
SAE字段1156—它的内容区分是否禁用异常事件报告;当SAE字段1156的内容指示抑制被启用时,给定的指令不报告任何类型的浮点异常标志且不唤起任何浮点异常处理程序。
取整操作控制字段1158—它的内容区分要执行一组取整操作中的哪个(例如,上取整、下取整、向零取整、就近取整)。因此,取整操作控制字段1158允许在每指令基础上改变取整模式,且因此在这被需要时特别有用。在处理器包括用于指定取整模式的控制寄存器的本发明的一个实施例中,取整操作控制字段1150的内容覆盖该寄存器值(能够选择取整模式而不必在这样的控制寄存器上执行保存-修改-恢复是有利的)。
无存储器存取指令模板—数据变换型操作
在无存储器存取数据变换型操作1115指令模板中,β字段1154被解释为数据变换字段1154B,其内容区分多个数据变换中的哪个应被执行(例如,无数据变换、混合、广播)。
A类的存储器存取指令模板
在A类的存储器存取1120指令模板的情况下,α字段1152被解释为驱逐(eviction)暗示字段1152B,其内容区分应使用驱逐暗示中的哪个(在图11A中,临时1152B.1和非临时1152B.2分别被指定用于存储器存取、临时1125指令模板和存储器存取、非临时1130指令模板),而β字段1154被解释为数据操纵字段1154C,其内容区分应执行多个数据操纵操作(也被称为基元)中的哪个(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器存取1120指令模板包括标度字段1160以及可选地包括位移字段1162A或位移标度字段1162B。
矢量存储器指令通过转换支持来执行从存储器的矢量加载和到存储器的矢量存储。如同常规矢量指令一样,矢量存储器指令以逐数据元素(element-wise)的方式从存储器转移数据/将数据转移到存储器,实际上被转移的元素由被选择为写屏蔽的矢量掩码的内容规定。在图11A中,圆角方形用于指示特定值存在于字段中(例如,修饰符字段1146中的存储器存取1146B;α字段1152/驱逐暗示字段1152B的临时1152B.1和非临时1152B.2)。
存储器存取指令模板—临时
临时数据是可能足够快地被重新使用以受益于高速缓存的数据。然而,这是暗示,并且不同的处理器可以用不同的方法(包括完全忽略暗示)实现它。
存储器存取指令模板—非临时
非临时数据是不可能足够快地被重新使用以受益于在一级高速缓存器中的高速缓存并应被给予驱逐的优先级的数据。然而,这是暗示,并且不同的处理器可以用不同的方法(包括完全忽略暗示)实现它。
B类的指令模板
在B类的指令模板的情况下,α字段1152被解释为写屏蔽控制(Z)字段1152C,其内容区分由写屏蔽字段1170控制的写屏蔽是否应为合并或归零。
B类的无存储器存取指令模板
在B类的无存储器存取1105指令模板的情况下,β字段1154的部分被解释为RL字段1157A,其内容区分应执行不同的扩增操作类型中的哪个(例如,取整1157A.1和矢量长度(VSIZE)1157A.2分别被指定用于无存储器存取、写屏蔽控制、部分取整控制型操作1112指令模板和无存储器存取、写屏蔽控制、VSIZE型操作1117指令模板),而β字段1154的其余部分区分应执行特定类型的操作中的哪个。在图11中,圆角方框用于指示特定的值存在(例如,在修饰符字段1146中的无存储器存取1146A;RL字段1157A的取整1157A.1和VSIZE1157A.2)。在无存储器存取1105指令模板中,不存在标度字段1160、位移字段1162A和位移标度字段1162B。
无存储器存取指令模板—写屏蔽控制、部分取整控制型操作
在无存储器存取、写屏蔽控制、部分取整控制型操作1110指令模板中,β字段1154的其余部分被解释为取整操作字段1159A,且异常事件报告被禁用(给定的指令不报告任何类型的浮点异常标志且不唤起任何浮点异常处理程序)。
取整操作控制字段1159A—正如取整操作控制字段1158一样,它的内容区分要执行一组取整操作中的哪个(例如,上取整、下取整、向零取整和就近取整)。因此,取整操作控制字段1159A允许在每指令基础上改变取整模式,且因此在这被需要时特别有用。在处理器包括用于指定取整模式的控制寄存器的本发明的一个实施例中,取整操作控制字段1150的内容覆盖该寄存器值(能够选择取整模式而不必在这样的控制寄存器上执行保存-修改-恢复是有利的)。
无存储器存取指令模板—写屏蔽控制、VSIZE型操作
在无存储器存取、写屏蔽控制、VSIZE型操作1117指令模板中,β字段1154的其余部分被解释为矢量长度字段1159B,其内容区分应在多个数据矢量长度中的哪个上执行(例如,128、1156或1312字节)。
B类的存储器存取指令模板
在A类的存储器存取1120指令模板的情况中,β字段1154的部分被解释为广播字段1157B,其内容区分广播型数据操纵操作是否应被执行,而β字段1154的其余部分被解释为矢量长度字段1159B。存储器存取1120指令模板包括标度字段1160且可选地包括位移字段1162A或位移标度字段1162B。
关于字段的附加注释
关于一般矢量友好指令格式1100,全操作码字段1174被示为包括格式字段1140、基础操作字段1142和数据元素宽度字段1164。虽然示出一个实施例,其中全操作码字段1174包括所有这些字段,但在不支持它们中的全部的实施例中,全操作码字段1174包括比这些字段中的全部少的字段。全操作码字段1174提供操作代码。
扩增操作字段1150、数据元素宽度字段1164和写屏蔽字段1170允许这些特征在每指令基础上以一般矢量友好指令格式被指定。
写屏蔽字段和数据元素宽度字段的组合产生类型确定的(typed)指令,因为它们允许基于不同的数据元素宽度而应用掩码。
指令格式需要相对小数量的位,因为它基于其它字段的内容为不同目的重新使用不同的字段。例如,一个观点是,修饰符字段的内容在图11A-B上的无存储器存取1105指令模板和图11A-B上的存储器存取11250指令模板之间选择;而类字段1168的内容在图11A的指令模板1110/1115和图11B的1112/1117之间的那些无存储器存取1105指令模板内选择;以及类字段1168的内容在图11A的指令模板1125/1130和图11B的1127之间的那些存储器存取1120指令模板内选择。从另一观点看,类字段1168的内容分别在图11A和B的A类和B类指令模板之间选择;而修饰符字段的内容在图11A的指令模板1105和1120之间的那些A类指令模板内选择;以及修饰符字段的内容在图11B的指令模板1105和1120之间的那些B类指令模板内选择。在类字段的内容指示A类指令模板的情况下,修饰符字段1146的内容选择α字段1152(在rs字段1152A和EH字段1152B之间)的解释。以有关的方式,修饰符字段1146和类字段1168的内容选择α字段是否被解释为rs字段1152A、EH字段1152B或写屏蔽控制(Z)字段1152C。在类字段和修饰符字段指示A类无存储器存取操作的情况下,扩增字段的β字段的解释基于rs字段的内容而改变;而在类字段和修饰符字段指示B类无存储器存取操作的情况下,β字段的解释取决于RL字段的内容。在类字段和修饰符字段指示A类存储器存取操作的情况下,扩增字段的β字段的解释基于基础操作字段的内容而改变;而在类字段和修饰符字段指示B类存储器存取操作的情况下,扩增字段的β字段的广播字段1157B的解释基于基础操作字段的内容而改变。因此,基础操作字段、修饰符字段和扩增操作字段的组合允许指定甚至更多种的扩增操作。
在A类和B类内找到的各种指令模板在不同的情况下是有益的。当由于性能原因需要归零-写屏蔽或较小的矢量长度时,A类是有用的。例如,当重命名被使用时,归零允许避免虚假相关性,因为我们不再需要与目的地人工地合并;作为另一例子,当用矢量掩码仿真较短矢量尺寸时,矢量长度控制使存储-加载转发问题变得容易。当希望:1)在使用取整模式控制的同时允许浮点异常(即,当SAE字段的内容指示无时);2)能够使用向上转换、混合、交换和/或向下转换;3)在图形数据类型上操作时,B类是有用的。例如,向上转换、混合、交换、向下转换和图形数据类型减少当与以不同格式的源一起工作时需要的指令的数量;作为另一例子,允许异常的能力提供与定向的取整模式的完全的IEEE符合。
示例性特定矢量友好指令格式
图12A-C示出根据本发明的实施例的示例性特定矢量友好指令格式。图12A-C示出特定矢量友好指令格式1200,其在它指定字段的位置、尺寸、解释和顺序以及那些字段中的一些的值的意义上是特定的。特定矢量友好指令格式1200可用于扩展x86指令集,且因此一些字段与在现有的x86指令集及其扩展(例如,AVX)中使用的那些字段类似或相同。这个格式保持与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。示出来自图12A-C的字段映射到的来自图11的字段。
应理解,虽然为了例证性目的在一般矢量友好指令格式1100的上下文中参考特定矢量友好指令格式1200描述了本发明的实施例,但本发明不限于特定矢量友好指令格式1200,除了在被主张的场合以外。例如,一般矢量友好指令格式1100设想各种字段的各种可能的尺寸,而特定矢量友好指令格式1200被示为具有特定尺寸的字段。作为特定的例子,虽然数据元素宽度字段1164被示为在特定矢量友好指令格式1200中的一位字段,但本发明不被如此限制(也就是说,一般矢量友好指令格式1100设想数据元素宽度字段1164的其它尺寸)。
格式—图12A-C
一般矢量友好指令格式1100包括在下面以图12A-C中所示的顺序列出的下列字段。
EVEX前缀(字节0-3)
EVEX前缀1202-以四字节形式被编码。
格式字段1140(EVEX字节0,位[7:0])—第一字节(EVEX字节0)是格式字段1140,且它包含0x62(在本发明的一个实施例中用于区分矢量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段1205(EVEX字节1,位[7-5])—由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和1157BEX字节1,位[5]-B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与相应的VEX位字段相同的功能,并使用1s补码形式来编码,即,ZMM0被编码为1111B,ZMM5被编码为0000B。指令的其它字段对寄存器索引的较低三个位编码,如在本领域中已知的(rrr、xxx和bbb),使得Rrrr、Xxxx和Bbbb可通过加上EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段1210—这是REX’字段1210的第一部分,且是EVEX.R’位字段(EVEX字节1,位[4]-R’),其用于对扩展的32寄存器集的较高16或较低16编码。在本发明的一个实施例中,该位连同如下面指示的其它位一起以位反转格式被存储以区分(在公知的x86 32位模式中)BOUND指令,其真实操作码字节是62,但在MOD R/M字段(下面描述的)中不接受在MOD字段中的值11;本发明的可选实施例不以反转格式存储这个位和下面的其它所指示的位。值1用于对较低16个寄存器编码。换句话说,R’Rrrr通过组合EVEX.R’、EVEX.R和来自其它字段的其它RRR来形成。
操作码映射字段1215(EVEX字节1,位[3:0]-mmmm)—其内容对隐式前置操作码字节(0F、0F 38或0F 3)编码。
数据元素宽度字段1164(EVEX字节2,位7]-W)—由记号EVEX.W表示。EVEX.W用于定义数据类型的粒度(尺寸)(32位数据元素或64位数据元素)。
EVEX.vvvv 1220(EVEX字节2,位[6:3]-vvvv)—EVEX.vvvv的作用可包括以下:1)EVEX.vvvv对以反转(1s补码)形式规定的第一源寄存器操作数编码,且对于具有2个或更多个源操作数的指令是有效的;2)EVEX.vvvv对以用于一定矢量移位的1s补码形式规定的目的地寄存器操作数编码;或3)EVEX.vvvv不对任何操作数编码,字段被保留且应包含1111b。因此,EVEX.vvvv字段1220对以反转(1s补码)形式存储的第一源寄存器说明符的4个低阶位编码。根据指令,额外的不同EVEX位字段用于将说明符尺寸扩展到32个寄存器。
EVEX.U 1168类字段(EVEX字节2,位[2]-U)—如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1225(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前缀编码,且因此不需要扩展。
α字段1152(EVEX字节3,位[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写屏蔽控制、以及EVEX.N;也以α示出)—如前所述,这个字段是上下文特定的。稍后在本文提供额外的描述。
β字段1154(EVEX字节3,位[6:4]-SSS;也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ示出)—如前所述,这个字段是上下文特定的。稍后在本文提供额外的描述。
REX’字段1210—这是REX’字段的其余部分,且是EVEX.V’位字段(EVEX字节3,位[3]-V’),其可用于对扩展的32寄存器集的较高16或较低16编码。该位以位反转格式存储。值1用于对较低16个寄存器编码。换句话说,V’VVVV通过组合EVEX.V’、EVEX.vvvv来形成。
写屏蔽字段1170(EVEX字节3,位[2:0]-kkk)—它的内容指定如前所述的写屏蔽寄存器中的寄存器的索引。在本发明的一个实施例中,特定值EVEX.kkk=000具有特殊行为,其暗示没有写屏蔽被用于特定指令(这可以用各种方式实现,包括使用硬连线到全1的写屏蔽或绕过屏蔽硬件的硬件)。
真实操作码字段1230(字节4)
这也被称为操作码字节。操作码的一部分在这个字段中被指定。
MOD R/M字段1240(字节5)
修饰符字段1146(MODR/M.MOD,位[7-6]-MOD字段1242)—如前所述,MOD字段1242的内容区分开存储器存取和无存储器存取操作。该字段将稍后在本文被进一步描述。
MODR/M.reg字段1244,位[5-3]—ModR/M.reg字段的作用可被总结为两种情况:ModR/M.reg对目的地寄存器操作数或源寄存器操作数编码,或ModR/M.reg被处理为操作码扩展且不用于对任何指令操作数编码。
MODR/M.r/m字段1246,位[2-0]—ModR/M.r/m字段的作用可包括下面的内容:ModR/M.r/m对参考存储器地址的指令操作数编码,或ModR/M.r/m对目的地寄存器操作数或源寄存器操作数编码。
标度、索引、基础(SIB)字节(字节6)
标度字段1160(SIB.SS,位[7-6]—如前所述,标度字段1160的内容用于存储器地址生成。该字段将稍后在本文被进一步描述。
SIB.xxx 1254(位[5-3]和SIB.bbb 1256(位[2-0])—之前关于寄存器索引Xxxx和Bbbb提到了这些字段的内容。
位移字节(字节7或字节7-10)
位移字段1162A(字节7-10)—当MOD字段1242包含10时,字节7-10是位移字段1162A,且它与传统32位位移(disp32)一样工作并以字节粒度工作。
位移因子字段1162B(字节7)—当MOD字段1242包含01时,字节7是位移因子字段1162B。这个字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。因为disp8是符号扩展的,它只能在-128和127字节偏移之间寻址;按照64字节高速缓存行,disp8使用可被设置到仅仅四个真正有用的值-128、-64、0和64的8个位;因为常常需要较大的范围,所以disp32被使用;然而,disp32需要4个字节。与disp8和disp32相反,位移因子字段1162B是disp8的重新解释;当使用位移因子字段1162B时,实际位移由位移因子字段的内容乘以存储器操作数存取的尺寸(N)确定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移但具有大得多的范围)。这样的压缩位移基于下列假设:有效位移是存储器存取的粒度的倍数,且因此地址偏移的冗余低阶位不需要被编码。换句话说,位移因子字段1162B代替传统x86指令集8位位移。因此,位移因子字段1162B以与x86指令集8位位移相同的方式被编码(所以在ModRM/SIB编码规则中没有变化),唯一的例外是,disp8被超载到disp8*N。换句话说,在编码规则或编码长度中没有变化,但只在通过硬件对位移值的解释中有变化(这需要按照存储器操作数的尺寸缩放位移以得到逐字节地址偏移)。
立即数
立即数字段1172如前所述的操作。
示例性寄存器体系结构—图13
图13是根据本发明的一个实施例的寄存器体系结构1300的方框图。寄存器体系结构的寄存器文件和寄存器在下面列出:
矢量寄存器文件1310—在所示实施例中,有1312位宽的32个矢量寄存器;这些寄存器被称为zmm0到zmm31。较低16个zmm寄存器的低阶1156位叠加在寄存器ymm0-16上。较低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)叠加在寄存器xmm0-15上。特定矢量友好指令格式1200在这些叠加的寄存器文件上操作,如在下面的表中所示。
换句话说,矢量长度字段1159B在最大长度和一个或多个其它较短的长度之间选择,其中每个这样较短的长度是前一长度的一半;以及没有矢量长度字段1159B的指令模板在最大矢量长度上操作。此外,在一个实施例中,特定矢量友好指令格式1200的B类指令模板在封包的或标量单/双精度浮点数据和封包的或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;较高阶数据元素位置保持与它们在该指令之前相同或者根据实施例进行归零。
写屏蔽寄存器1315—在所示实施例中,有8个写屏蔽寄存器(k0到k7),每个在尺寸上为64位。如前所述,在本发明的一个实施例中,矢量屏蔽寄存器k0不能用作写屏蔽;当通常指示k0的编码用于写屏蔽时,选择0xFFFF的硬线写屏蔽,有效地对那个指令禁用写屏蔽。
多媒体扩展控制状态寄存器(MXCSR)1320—在所示实施例中,这个32位寄存器提供在浮点操作中使用的状态位和控制位。
通用寄存器1325—在所示实施例中,存在与现有的x86寻址模式一起使用以对存储器操作数进行寻址的十六个64位通用寄存器。这些寄存器被按名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8到R15进行参考。
扩展标志(EFLAGS)寄存器1330—在所示实施例中,这个32位寄存器用于记录很多指令的结果。
浮点控制字(FCW)寄存器1335和浮点状态字(FSW)寄存器1340—在所示实施例中,这些寄存器由x87指令集扩展使用以在FCW的情况下设置取整模式、异常掩码和标志,并在FSW的情况下记录异常。
标量浮点堆栈寄存器文件(x87堆栈)1345,其又被称为MMX封包整数平面寄存器文件1350—在所示实施例中,x87堆栈是用于利用x87指令集扩展在32/64/80位浮点数据上执行标量浮点操作的八元素堆栈;而MMX寄存器用于在64位封包整数数据上执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作数。
段寄存器1355—在所示实施例中,存在用于存储用于分段地址生成的数据的十六个16位寄存器。
RIP寄存器1365—在所示实施例中,这个64位寄存器存储指令指针。
本发明的可选实施例可使用较宽或较窄的寄存器。此外,本发明的可选实施例可使用更多、更少或不同的寄存器文件和寄存器。
示例性有序处理器体系结构—图14A-14B
图14A-B示出示例性有序处理器体系结构的方框图。围绕扩增有宽矢量处理器(VPU)的有序CPU核心的多个实例来设计这些示例性的实施例。核心通过高带宽互连网络与一些固定功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信,取决于e16t应用。例如,本实施例作为独立GPU的实现一般将包括PCIe总线。
图14A是根据本发明的实施例的单CPU核心连同其到片上互连网络1402的连接和其2级(L2)高速缓存器1404的本地子集的方框图。指令解码器1400支持具有扩展(包括特定矢量指令格式1200)的x86指令集。虽然在本发明的一个实施例中(以简化设计),标量单元1408和矢量单元1410使用分开的寄存器集(分别是标量寄存器1412和矢量寄存器1414),且在它们之间传输的数据被写到存储器并接着从1级(L1)高速缓存器被读回,但本发明的可选实施例可使用不同的方法(例如,使用单个寄存器集或包括允许数据在两个寄存器文件之间传输的通信路径,而没有被写入和读回)。
L1高速缓存器1406允许低时延访问高速缓存器的标量和矢量单元。连同矢量友好指令格式的load-op指令一起,这意味着L1高速缓存器1406可有点像扩展寄存器文件一样被处理。这明显提高了很多算法的性能,特别是使用驱逐暗示字段1152B。
L2高速缓存器1404的本地子集是被分成单独的本地子集的全局L2高速缓存器的一部分,每CPU核心一个本地子集。每个CPU具有到其L2高速缓存器1404的自己的本地子集的直接存取路径。由CPU核心读取的数据存储在其L2高速缓存器子集1404中,并可与访问其自己的局部L2高速缓存器子集的其它CPU并行地被快速访问。由CPU核心写入的数据存储在其自己的L2高速缓存器子集1404中,并如果必要的话从其它子集清除。环形网络为共享的数据确保一致性。
图14B是根据本发明的实施例的在图14A中的CPU核心的部分的分解图。图14B包括L1高速缓存器1404的L1数据高速缓存器1406A部分,以及关于矢量单元1410和矢量寄存器1414的更多细节。具体地,矢量单元1410是16-宽矢量处理单元(VPU)(见16-宽ALU 1428),其执行整数、单精度浮点和双精度浮点指令。VPU支持用混合单元1420混合寄存器输入、用数字转换单元1422A-B进行数字转换、和在存储器输入上用复制单元1424进行复制。写屏蔽寄存器1426允许预测作为结果的矢量写入。
寄存器数据可以用各种方式被混合,例如以支持矩阵乘法。来自存储器的数据跨越VPU通道被复制。这是在图形和非图形并行数据处理中的公共操作,这明显扩增了高速缓存器效率。
环形网络是双向的,以允许代理(例如CPU核心、L2高速缓存器和其它逻辑块)在芯片内彼此通信。每个环形数据路径在每方向上1312位宽。
示例性无序体系结构—图15
图15是示出根据本发明的实施例的示例性无序体系结构的方框图。具体地,图15示出被修改以合并矢量友好指令格式及其执行的公知的示例性无序体系结构。在图15中,箭头表示在两个或更多个单元之间的耦合,且箭头的方向指示在那些单元之间的数据流的方向。图15包括耦合到执行引擎单元1510和存储器单元1515的前端单元1505;执行引擎单元1510进一步耦合到存储器单元1515。
前端单元1505包括耦合到2级(L2)分支预测单元1522的1级(L1)分支预测单元1520。L1和L2分支预测单元1520和1522耦合到L1指令高速缓存器单元1524。L1指令高速缓存器单元1524耦合到指令转换后援缓冲器(TLB)1526,缓冲器1526进一步耦合到指令取回和预解码单元1528。指令取回和预解码单元1528耦合到指令队列单元1530,指令队列单元1530进一步耦合到解码单元1532。解码单元1532包括复杂解码器单元1534和三个简单解码器单元1536、1538和1540。解码单元1532包括微代码ROM单元1542。解码单元1532可如前所述在解码阶段部分中那样操作。L1指令高速缓存器单元1524进一步耦合到存储器单元1515中的L2高速缓存器单元1548。指令TLB单元1526进一步耦合到存储器单元1515中的第二级TLB单元1546。解码单元1532、微代码ROM单元1542和循环流探测器单元1544中的每个均耦合到执行引擎单元1510中的重命名/分配器单元1556。
执行引擎单元1510包括耦合到引退单元(retirement unit)1574和统一调度器单元1558的重命名/分配器单元1556。引退单元1574进一步耦合到执行单元1560并包括重排序缓冲单元1578。统一调度器单元1558进一步耦合到物理寄存器文件单元1576,物理寄存器文件单元1576耦合到执行单元1560。物理寄存器文件单元1576包括矢量寄存器单元1577A、写屏蔽寄存器单元1577B、和标量寄存器单元1577C;这些寄存器单元可提供矢量寄存器1310、矢量屏蔽寄存器1315、以及通用寄存器1325;并且物理寄存器文件单元1576可包括未示出的附加寄存器文件(例如,标量浮点堆栈寄存器文件1345,又名MMX封包整数平面寄存器文件1350)。执行单元1560包括三个混合的标量和矢量单元1562、1564和1572;加载单元1566;存储地址单元1568;存储数据单元1570。加载单元1566、储地址单元1568和存储数据单元1570中的每个进一步耦合到存储器单元1515中的数据TLB单元1552。
存储器单元1515包括耦合到数据TLB单元1552的第二级TLB单元1546。数据TLB单元1552耦合到L1数据高速缓存器单元1554。L1数据高速缓存器单元1554进一步耦合到L2高速缓存器单元1548。在一些实施例中,L2高速缓存器单元1548进一步耦合到在存储器单元1515的内部和/或外部的L3和更高的高速缓存器单元1550。
作为例子,示例性无序体系结构可如下实现过程管线:1)指令取回和预解码单元1528执行取回和长度解码阶段;2)解码单元1532执行解码阶段;3)重命名/分配器单元1556执行分配阶段和重命名阶段;4)统一调度器1558执行调度阶段;5)物理寄存器文件单元1576、重排序缓冲单元1578和存储器单元1515执行寄存器读取/存储器读取阶段;执行单元1560执行执行/数据变换阶段;6)存储器单元1515和重排序缓冲单元1578执行写回/存储器写入阶段;7)引退单元1574执行ROB读取阶段;8)各种单元可在异常处理阶段中被涉及;以及9)引退单元1574和物理寄存器文件单元1576执行提交阶段。
示例性单核心和多核心处理器—图20
图20是根据本发明的实施例的具有集成存储器控制器和图形的单核心处理器和多核心处理器2000的方框图。图19中的实线框示出具有单核心2002A、系统代理2010、一组一个或多个总线控制器单元2016的处理器2000,而虚线框的可选添加示出具有多个核心2002A-N、系统代理单元2010中的一组一个或多个集成存储器控制器单元2014、以及集成图形逻辑2008的可选处理器2000。
存储器层级包括在核心内的一级或多级高速缓存器、一组或一个或多个共享高速缓存器单元2006和耦合到一组集成存储器控制器单元2014的外部存储器(未示出)。这组共享高速缓存器单元2006可包括一个或多个中级高速缓存器,例如2级(L2)、3级(L3)、4级(L4)或其它级高速缓存器、最后一级高速缓存器(LLC)和/或其组合。虽然在一个实施例中,基于环的互连单元2012使集成图形逻辑2008、一组共享的高速缓存器单元2006和系统代理单元2010互连,可选的实施例可使用用于使这样的单元互连的任意数量的公知技术。
在一些实施例中,一个或多个核心2002A-N有多线程的能力。系统代理2010包括协调并操作核心2002A-N的那些部件。系统代理单元2010可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核心2002A-N和集成图形逻辑2008的功率状态所需的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核心2002A-N从体系结构和/或指令集方面来说可以是同类或异构的。例如,一些核心2002A-N可以是有序的(例如,像图14A和14B中所示的那样),而其它核心是无序的(例如,像图15中所示的那样)。作为另一例子,两个或更多个核心2002A-N可能能够执行相同的指令集,而其它核心可能能够只执行该指令集的子集或不同的指令集。至少一个核心能够执行本文所述的矢量友好指令格式。
处理器可以是通用处理器,例如从加利福尼亚州的Santa Clara的英特尔公司可得到的CoreTM i3、i5、i7、2Duo和Quad、XeonTM或ItaniumTM处理器。可选地,处理器可以来自其它公司。处理器可以是专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、协同处理器、嵌入式处理器等。处理器可在一个或多个芯片上实现。处理器2000可以利用例如BiCMOS、CMOS或NMOS的多种处理技术中的任一种成为一个或多个基板的一部分和/或可在一个或多个基板上实现。
示例性计算机系统和处理器—图16-19
图16-18是适合于包括处理器2000的示例性系统,而图19是可包括一个或多个核心2002的示例性片上系统(SoC)。在本领域中已知用于膝上型计算机、桌上型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微处理器、蜂窝电话、便携式媒体播放器、手持设备和各种其它电子设备的其它系统设计和配置也是适当的。通常,能够合并处理器和/或如本文公开的其它执行逻辑的大量的系统或电子设备通常是适当的。
现在参考图16,示出了根据本发明的一个实施例的系统1600的方框图。系统1600可包括耦合到图形存储器控制中心(GMCH)1620的一个或多个处理器1610、1615。附加处理器1615的可选性质在图16中以虚线表示。
每个处理器1610、1615可以是处理器2000的某个版本。然而,应注意,集成图形逻辑和集成存储器控制单元不可能存在于处理器1610、1615中。
图16示出GMCH 1620可耦合到存储器1640,其可以例如是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存器相关联。
GMCH 1620可以是芯片组或芯片组的一部分。GMCH 1620可与处理器1610、1615通信并控制处理器1610、1615和存储器1640之间的交互。GMCH 1620也可充当处理器1610、1615和系统1600的其它元件之间的加速总线接口。对于至少一个实施例,GMCH 1620经由多点总线(例如前端总线(FSB)1695)与处理器1610、1615通信。
此外,GMCH 1620耦合到显示器1645(例如平板显示器)。GMCH 1620可包括集成图形加速器。GMCH 1620进一步耦合到输入/输出(I/O)控制中心(ICH)1650,其可用于将各种外围设备耦合到系统1600。例如在图16的实施例中示出的是外围图形设备1660连同另一外围设备1670,外围图形设备1660可以是耦合到ICH 1650的分立图形设备。
可选地,额外或不同的处理器也可存在于系统1600中。例如,额外的处理器1615可包括与处理器1610相同的额外处理器、与处理器1610异构或不对称的额外处理器、加速器(例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。从指标(包括体系结构、微体系结构、热、功耗特征等)的度量范围来说,在物理资源1610、1615之间可能有各种差异。这些差异在处理元件1610、1615当中可有效地表现为非对称和异构的。对于至少一个实施例,各种处理元件1610、1615可存在于相同的片封装中。
现在参考图17,示出了根据本发明的实施例的第二系统1700的方框图。如图17所示,微处理器系统1700是点对点互连系统,并包括经由点对点互连1750耦合的第一处理器1770和第二处理器1780。如图17所示,处理器1770和1780中的每个可以是处理器2000的某个版本。
可选地,处理器1770、1780中的一个或多个可以是除了处理器以外的元件,例如加速器或现场可编程门阵列。
虽然只示出两个处理器1770、1780,但应理解,本发明的范围不限于此。在其它实施例中,一个或多个额外的处理元件可存在于给定处理器中。
处理器1770还可包括集成存储器控制中心(IMC)1772和点对点(P-P)接口1776和1778。类似地,第二处理器1780可包括IMC 1782以及P-P接口1786和1788。处理器1770、1780可经由点对点(PtP)接口1750使用PtP接口电路1778、1788交换数据。如图17所示,IMC的1772和1782将处理器耦合到相应的存储器,即,存储器1742和存储器1744,其可以是本地连接到相应的处理器的主存储器的部分。
处理器1770、1780中的每个可经由单独的P-P接口1752、1754使用点对点接口电路1776、1794、1786、1798与芯片组1790交换数据。芯片组1790也可经由高性能图形接口1739与高性能图形电路1738交换数据。
共享的高速缓存器(未示出)可包含于两个处理器外部的任一处理器中,但经由P-P互连与处理器连接,使得如果处理器置于低功率模式中则任一个或两个处理器的本地高速缓存器信息可存储在共享的高速缓存器中。
芯片组1790可经由接口1796耦合到第一总线1716。在一个实施例中,第一总线1716可以是外围部件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线的总线,但本发明的范围并不限于此。
如图17所示,各种I/O设备1714可连同将第一总线1716耦合到第二总线1720的总线桥1718耦合到第一总线1716。在一个实施例中,第二总线1720可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线1720,包括例如键盘/鼠标1722、通信设备1726、以及数据存储单元1728(例如可包括代码1730的磁盘驱动或其它大容量存储设备)。此外,音频I/O 1724可耦合到第二总线1720。注意,其它体系结构是可能的。例如,不是图17的点对点体系结构,系统可实现多点分支总线(multi-drop bus)或其它这样的体系结构。
现在参考图18,示出了根据本发明的实施例的第三系统1800的方框图。图17和18中的相似元件具有相似的附图标记,且图17的某些方面从图18中省略,以便避免模糊图18的其它方面。
图18示出处理元件1770、1780可分别包括集成存储器和I/O控制逻辑(“CL”)1772和1782。对于至少一个实施例,CL 1772、1782可包括存储器控制中心逻辑(IMC),例如上面结合图18 和17所描述的。此外,CL 1772、1782还可包括I/O控制逻辑。图18示出不仅存储器1742、1744耦合到CL1772、1782,而且I/O设备1814也耦合到控制逻辑1772、1782。传统I/O设备1815耦合到芯片组1790。
现在参考图19,示出了根据本发明的实施例的SoC 1900的方框图。图19中的相似元件具有相似的附图标记。而且,虚线框是更高级的SoC上的可选特征。在图19中,互连单元1902耦合到:包括一组一个或多个核心2002A-N和共享高速缓存器单元2006的应用处理器1910;系统代理单元2010;总线控制器单元2016;集成存储器控制器单元2014;一组或一个或多个媒体处理器1920,其可包括集成图形逻辑2008、用于提供静止和/或视频摄像机功能的图像处理器1924、用于提供硬件音频加速的音频处理器1926、以及用于提供视频编码/解码加速的视频处理器1928;静态随机存取存储器(SRAM)单元1930;直接存储器存取(DMA)单元1932;以及用于耦合到一个或多个外部显示器的显示单元1940。
本文所公开的机制的实施例可以在硬件、软件、固件或这样的实现方法的组合中实现。本发明的实施例可以被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码可应用于输入数据以执行本文描述的功能并产生输出信息。输出信息可以用已知的方式应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,所述处理器例如是数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级过程编程语言或面向对象的编程语言实现,以与处理系统通信。如果需要的话,程序代码还可以用汇编或机器语言实现。事实上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上代表处理器内的各种逻辑的代表性指令实现,所述指令在被机器读取时使机器制造逻辑以执行本文描述的技术。被称为“IP核心”的这种表示可存储在有形的机器可读介质上,并被提供给各种消费者或制造设施以加载到实际上产生逻辑或处理器的制造机器中。
这样的机器可读存储介质在没有限制的情况下可包括由机器或设备制造或形成的物品的非瞬态的有形布置,包括存储介质例如硬盘,任何其它类型的磁盘,包括软盘、光盘(光盘只读存储器(CD-ROM)、可重写光盘(CD-RW))以及磁光盘,半导体设备例如只读存储器(ROM)、随机存取存储器(RAM)例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡,或适合于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括包含矢量友好指令格式的指令或包含设计数据(例如硬件描述语言(HDL))的非瞬态的有形机器可读介质,这限定了本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可被称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换成目标指令集。例如,指令转换器可将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以另外方式转换成将被核心处理的一个或多个其它指令。指令转换器可在软件、硬件、固件或其组合中实现。指令转换器可以在处理器上、处理器外、或部分在处理器上和部分在处理器外。
图21是根据本发明的实施例的对比将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的方框图。在所示实施例中,指令转换器是软件指令转换器,但可选地,指令转换器可在软件、硬件、固件或其各种组合中实现。图21示出以高级语言2102的程序可使用x86编译器2104被编译以产生x86二进制代码2106,其可由具有至少一个x86指令集核心2116的处理器本机地执行(假设被编译的一些指令呈矢量友好指令格式)。具有至少一个x86指令集核心2116的处理器代表能执行与具有至少一个x86指令集核心的英特尔处理器基本相同功能的任意处理器,其方式是通过兼容地执行或以另外方式处理(1)英特尔x86指令集核心的指令集的本质部分,或(2)以在具有至少一个x86指令集核心的英特尔处理器上运行为目标的应用或其它软件的对象代码版本,以便实现与具有至少一个x86指令集核心的英特尔处理器实质上相同的结果。x86编译器2104代表可操作以生成x86二进制代码2106(例如,对象代码)的编译器,x86二进制代码2106可在有或没有额外的连接处理的情况下在具有至少一个x86指令集核心2116的处理器上执行。类似地,
图21示出高级语言2102的程序可使用可选的指令集编译器2108被编译以产生可选的指令集二进制代码2110,其可由不具有至少一个x86指令集核心2114的处理器(例如,具有执行CA,Sunnyvale的MIPS科技公司的MIPS指令集和/或执行CA,Sunnyvale的ARM公司的ARM指令集的核心的处理器)本机执行。指令转换器2112用于将x86二进制代码2106转换成由不具有x86指令集核心2114的处理器本机执行的代码。该转换后的代码不可能与可选的指令集二进制代码2110相同,这是因为能够完成此的指令转换器难以制造;然而,转换后的代码将实现一般操作且由来自可选的指令集的指令构成。因此,指令转换器2112代表软件、固件、硬件或其组合,其可通过仿真、模拟或任何其它过程来允许没有x86指令集处理器或核心的处理器或其它电子设备执行x86二进制代码2106。
以本文所公开的矢量友好指令格式的指令的某些操作可由硬件部件执行,并可体现在用于使得或至少导致以执行操作的指令编程的电路或其它硬件部件的机器可执行指令中。电路可包括通用或专用处理器或逻辑电路,仅列举几个例子。操作也可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可包括响应于机器指令或从机器指令得到的一个或多个控制信号来存储指令特定结果操作数的专门或特定的电路或其它逻辑。例如,本文公开的指令的实施例可以在图16-19的一个或多个系统中被执行,且矢量友好指令格式的指令的实施例可存储在程序代码中以在系统中被执行。此外,这些图的处理元件可利用本文详述的详细管线和/或体系结构(例如,有序和无序体系结构)之一。例如,有序体系结构的解码单元可对指令解码,将解码的指令传递到矢量或标量单元,等等。
上面的描述用来说明本发明的优选实施例。从上面的讨论中,清楚的是,特别是在增长快速且进一步的进步不容易被预见的这样的技术领域中,本发明可在布置和细节上被本领域中的技术人员修改,而不偏离在所附权利要求及其等效形式的范围内的本发明的原理。例如,方法的一个或多个操作可组合或进一步分开。
可选的实施方式
虽然已经描述了本机执行矢量友好指令格式的实施例,但本发明的可选实施例可通过在执行不同的指令集的处理器(例如,具有执行CA,Sunnyvale的MIPS科技公司的MIPS指令集和/或执行CA,Sunnyvale的ARM公司的ARM指令集的核心的处理器)上运行的仿真层来执行矢量友好指令格式。此外,虽然附图中的流程图示出由本发明的某些实施例执行的操作的特定顺序,但应理解,这样的顺序是示例性的(例如,可选的实施例可以按不同的顺序执行操作,组合某些操作,重叠某些操作,等等)。
在上面的描述中,出于解释的目的,已经阐述了很多特定的细节,以便提供对本发明的实施例的彻底理解。然而对本领域中的技术人员明显的是,一个或多个其它实施例可在没有这些特定细节中的一些的情况下被实践。所描述的特定实施例并不被提供来限制本发明,而是说明本发明的实施例。本发明的范围不应由上面提供的特定例子而仅由下面的权利要求确定。

Claims (20)

1.一种在计算机处理器中执行压缩指令的方法,包括:
取出所述压缩指令,其中所述压缩指令包括操作码、前缀、目的地操作数、源操作数、以及写屏蔽操作数;
对所取出的压缩指令进行解码;
执行解码后的压缩指令以基于所述写屏蔽操作数的值来选择来自所述源操作数的哪些数据元素待存储在所述目的地操作数中;以及
将所述源操作数的所选择的数据元素作为顺序封包的数据元素存储在所述目的地操作数中,其中,所述源操作数的数据元素的大小由所述压缩指令的前缀中的单个位来定义,并且在所述执行中使用的所述写屏蔽操作数的值的数量由所述源操作数的数据元素的大小和所述源操作数的大小来确定,并不是所述写屏蔽操作数的全部值,其中,所述写屏蔽操作数是多个写屏蔽寄存器其中之一。
2.根据权利要求1所述的方法,其中所述目的地操作数是存储器,而所述源操作数是寄存器。
3.根据权利要求1所述的方法,其中所述源操作数和所述目的地操作数是寄存器。
4.根据权利要求1所述的方法,其中执行还包括:
确定所述写屏蔽操作数的第一位位置值指示相应的第一源数据元素应存储到所述目的地操作数的单元中;以及
将所述相应的第一源数据元素存储到所述目的地操作数的所述单元中。
5.根据权利要求1所述的方法,其中执行还包括:
确定所述写屏蔽操作数的第一位位置值指示相应的第一源数据元素不应存储到所述目的地操作数的单元中;以及
评估所述写屏蔽操作数的第二位位置值,而不将所述第一源数据元素存储到所述目的地操作数的所述单元中。
6.根据权利要求1所述的方法,其中待存储到所述目的地操作数中的每个源数据元素首先被置于流中,并且将所述流存储到所述目的地操作数中。
7.根据权利要求1所述的方法,还包括:
在将待存储到所述目的地操作数中的所选择的数据元素存储到所述目的地操作数中之前对其进行向下转换。
8.根据权利要求7所述的方法,其中将所选择的数据元素从32位值向下转换成16位值。
9.一种在计算机处理器中执行扩展指令的方法,包括:
取出所述扩展指令,其中所述扩展指令包括操作码、前缀、目的地操作数、源操作数、以及写屏蔽操作数;
对所取出的扩展指令进行解码;
执行解码后的扩展指令以基于所述写屏蔽操作数的值来选择所述目的地操作数的哪些数据元素单元将被用于稀疏地存储来自所述源操作数的数据元素;以及
将所述源操作数的每个连续的数据元素作为稀疏数据元素存储到所述目的地操作数的所选择的数据元素单元中,其中每个所选择的数据元素单元对应于指示所述目的地操作数的相应数据元素单元将被用于存储来自所述源操作数的数据元素的每个写屏蔽操作数位位置,其中,所述源操作数的数据元素的大小由所述扩展指令的前缀中的单个位来定义,并且在所述执行中使用的所述写屏蔽操作数的值的数量由所述目的地操作数的数据元素的大小和所述目的地操作数的大小来确定,并不是所述写屏蔽操作数的全部值,其中,所述写屏蔽操作数是多个写屏蔽寄存器其中之一。
10.根据权利要求9所述的方法,其中所述目的地操作数是寄存器,而所述源操作数是存储器。
11.根据权利要求9所述的方法,其中所述源操作数和所述目的地操作数是寄存器。
12.根据权利要求9所述的方法,其中执行还包括:
确定所述写屏蔽操作数的第一位位置值指示所述目的地操作数的相应第一数据元素单元应被用于存储来自所述源操作数的相应数据元素;以及
将来自所述源操作数的相应数据元素存储到所述目的地操作数的所述相应的第一数据元素单元中。
13.根据权利要求9所述的方法,其中执行还包括:
确定所述写屏蔽操作数的第一位位置值指示所述目的地操作数的相应第一数据元素单元不应被用于存储来自所述源操作数的相应数据元素;以及
评估所述写屏蔽操作数的第二位位置值,而不将来自所述源操作数的相应数据元素存储到所述目的地操作数的所述相应的第一数据元素单元中。
14.根据权利要求9所述的方法,其中待存储到所述目的地操作数中的每个源数据元素首先被置于流中,并且所述流存储到所述目的地操作数中。
15.根据权利要求9所述的方法,还包括:
在将待存储到所述目的地操作数中的数据元素存储到所述目的地操作数中之前对其进行向上转换。
16.根据权利要求15所述的方法,其中将所述数据元素从16位值向上转换成32位值。
17.一种用于执行指令的装置,包括:
硬件解码器,其对扩展指令和/或压缩指令进行解码,其中所述扩展指令包括第一写屏蔽操作数、第一目的地操作数、第一源操作数、第一操作码和第一前缀,且所述压缩指令包括第二写屏蔽操作数、第二目的地操作数、第二源操作数、第二操作码和第二前缀;以及
执行逻辑,其
执行解码后的扩展指令以基于所述第一写屏蔽操作数的值来选择所述第一目的地操作数的哪些数据元素单元将被用于稀疏地存储来自所述第一源操作数的数据元素,并将所述第一源操作数的每个连续的数据元素作为稀疏数据元素存储在所述第一目的地操作数的所选择的数据元素单元中,其中每个所选择的数据元素单元对应于指示所述第一目的地操作数的相应数据元素单元将被用于存储来自所述源操作数的数据元素的每个第一写屏蔽操作数位位置,以及
执行解码后的压缩指令以基于所述第二写屏蔽操作数的值来选择来自所述第二源操作数的哪些数据元素待存储在所述第二目的地操作数中,并将所述第二源操作数的所选择的数据元素作为顺序封包的数据元素存储到所述第二目的地操作数中,
其中,所述第一源操作数的数据元素的大小由所述扩展指令的第一前缀来定义,所述第二源操作数的数据元素的大小由所述压缩指令的第二前缀来定义,并且所述执行逻辑所使用的所述第一写屏蔽操作数的值的数量由所述第一目的地操作数的数据元素的大小和所述第一目的地操作数的大小来确定,并不是所述第一写屏蔽操作数的全部值,所述执行逻辑所使用的所述第二写屏蔽操作数的值的数量由所述第二源操作数的数据元素的大小和所述第二源操作数的大小来确定,并不是所述第二写屏蔽操作数的全部值,其中,所述第一写屏蔽操作数是多个写屏蔽寄存器其中之一,所述第二写屏蔽操作数是多个写屏蔽寄存器其中之一。
18.根据权利要求17所述的装置,还包括:
16位写屏蔽寄存器,用于存储所述第一写屏蔽操作数或所述第二写屏蔽操作数;以及
第一512位寄存器,用于存储在所述压缩指令或所述扩展指令的执行期间选择的数据元素。
19.根据权利要求18所述的装置,还包括:
第二512位寄存器,用于充当用于所述扩展指令的所述第一源操作数或所述压缩指令的所述第二源操作数。
20.根据权利要求17所述的装置,其中将所选择的数据元素在所述扩展指令的执行期间从16位值向上转换成32位值。
CN201180071236.9A 2011-04-01 2011-12-09 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 Expired - Fee Related CN103562855B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/078,896 2011-04-01
US13/078,896 US20120254592A1 (en) 2011-04-01 2011-04-01 Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
PCT/US2011/064254 WO2012134558A1 (en) 2011-04-01 2011-12-09 Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location

Publications (2)

Publication Number Publication Date
CN103562855A CN103562855A (zh) 2014-02-05
CN103562855B true CN103562855B (zh) 2017-08-11

Family

ID=46928902

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180071236.9A Expired - Fee Related CN103562855B (zh) 2011-04-01 2011-12-09 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法

Country Status (8)

Country Link
US (1) US20120254592A1 (zh)
JP (2) JP2014513341A (zh)
KR (2) KR20130137698A (zh)
CN (1) CN103562855B (zh)
DE (1) DE112011105818T5 (zh)
GB (1) GB2503827B (zh)
TW (2) TWI550512B (zh)
WO (1) WO2012134558A1 (zh)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103646009B (zh) 2006-04-12 2016-08-17 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
EP3156896B1 (en) 2010-09-17 2020-04-08 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
CN103635875B (zh) 2011-03-25 2018-02-16 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
PL3422178T3 (pl) 2011-04-01 2023-06-26 Intel Corporation Przyjazny dla wektorów format instrukcji i jego wykonanie
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US20150039859A1 (en) 2011-11-22 2015-02-05 Soft Machines, Inc. Microprocessor accelerated code optimizer
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9632825B2 (en) 2013-03-15 2017-04-25 Intel Corporation Method and apparatus for efficient scheduling for asymmetrical execution units
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
KR101708591B1 (ko) 2013-03-15 2017-02-20 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9424034B2 (en) * 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
US9395990B2 (en) 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems
US9323524B2 (en) * 2013-09-16 2016-04-26 Oracle International Corporation Shift instruction with per-element shift counts and full-width sources
KR102152735B1 (ko) * 2013-09-27 2020-09-21 삼성전자주식회사 그래픽 처리 장치 및 이의 동작 방법
US20150186136A1 (en) * 2013-12-27 2015-07-02 Tal Uliel Systems, apparatuses, and methods for expand and compress
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
KR101826707B1 (ko) * 2014-03-27 2018-02-07 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
EP3123300A1 (en) 2014-03-28 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements
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
US9811464B2 (en) * 2014-12-11 2017-11-07 Intel Corporation Apparatus and method for considering spatial locality in loading data elements for execution
US20160179521A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Method and apparatus for expanding a mask to a vector of mask values
US20160179520A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Method and apparatus for variably expanding between mask and vector registers
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US20170109093A1 (en) * 2015-10-14 2017-04-20 International Business Machines Corporation Method and apparatus for writing a portion of a register in a microprocessor
US20170177348A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instruction and Logic for Compression and Rotation
US10007519B2 (en) * 2015-12-22 2018-06-26 Intel IP Corporation Instructions and logic for vector bit field compression and expansion
US10891131B2 (en) 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
JP6767660B2 (ja) 2017-01-27 2020-10-14 富士通株式会社 プロセッサ、情報処理装置及びプロセッサの動作方法
WO2018174936A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
EP3607434B1 (en) * 2017-04-06 2022-06-22 Intel Corporation Vector compress2 and expand2 instructions with two memory locations
US11360771B2 (en) * 2017-06-30 2022-06-14 Intel Corporation Method and apparatus for data-ready memory operations
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10970078B2 (en) * 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
US10831488B1 (en) * 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
US10838734B2 (en) * 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US11403256B2 (en) * 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
CN111124495B (zh) * 2019-12-16 2021-02-12 海光信息技术股份有限公司 一种数据处理方法、解码电路及处理器
US20220308873A1 (en) * 2021-03-27 2022-09-29 Intel Corporation Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register
US20230409326A1 (en) * 2022-06-15 2023-12-21 Intel Corporation Device, method and system for executing a tile load and expand instruction

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4490786A (en) * 1981-06-19 1984-12-25 Fujitsu Limited Vector processing unit
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
CN101488083A (zh) * 2007-12-26 2009-07-22 英特尔公司 用于转换向量数据的方法、装置和指令

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0634203B2 (ja) * 1983-04-11 1994-05-02 富士通株式会社 ベクトル処理装置
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
JPS62226275A (ja) * 1986-03-28 1987-10-05 Hitachi Ltd ベクトル処理装置
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JP2928301B2 (ja) * 1989-12-25 1999-08-03 株式会社日立製作所 ベクトル処理装置
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
US20020002666A1 (en) * 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
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
US7395412B2 (en) * 2002-03-08 2008-07-01 Ip-First, Llc Apparatus and method for extending data modes in a microprocessor
US7212676B2 (en) * 2002-12-30 2007-05-01 Intel Corporation Match MSB digital image compression
US7243205B2 (en) * 2003-11-13 2007-07-10 Intel Corporation Buffered memory module with implicit to explicit memory command expansion
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
JP2009026106A (ja) * 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
GB2456775B (en) * 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
GB2457303A (en) * 2008-02-11 2009-08-12 Linear Algebra Technologies Randomly accessing elements of compressed matrix data by calculating offsets from non-zero values of a bitmap
KR101545701B1 (ko) * 2008-10-07 2015-08-19 삼성전자 주식회사 프로세서 및 그 명령어 번들 복원 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4490786A (en) * 1981-06-19 1984-12-25 Fujitsu Limited Vector processing unit
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
CN101488083A (zh) * 2007-12-26 2009-07-22 英特尔公司 用于转换向量数据的方法、装置和指令

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
A First Look at the Larrabee New Instructions(LRBni);Michael Abrash;《http://drdobbs.com/high-performance-computing/216402188》;20090401;第11-12页 *

Also Published As

Publication number Publication date
DE112011105818T5 (de) 2014-10-23
KR20160130320A (ko) 2016-11-10
JP6109910B2 (ja) 2017-04-05
GB2503827A (en) 2014-01-08
KR101851487B1 (ko) 2018-04-23
WO2012134558A1 (en) 2012-10-04
TWI550512B (zh) 2016-09-21
TW201241744A (en) 2012-10-16
JP2016029598A (ja) 2016-03-03
JP2014513341A (ja) 2014-05-29
TWI470542B (zh) 2015-01-21
US20120254592A1 (en) 2012-10-04
KR20130137698A (ko) 2013-12-17
GB201317058D0 (en) 2013-11-06
CN103562855A (zh) 2014-02-05
GB2503827B (en) 2020-05-27
TW201523441A (zh) 2015-06-16

Similar Documents

Publication Publication Date Title
CN103562855B (zh) 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法
CN103562856B (zh) 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法
KR101610691B1 (ko) 기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법
CN103562854B (zh) 用于对齐寄存器的系统、装置和方法
CN104094218B (zh) 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法
KR101938290B1 (ko) 히스토그램을 결정하기 위한 명령어
KR101722346B1 (ko) 적분 이미지 계산 명령어를 위한 방법 및 장치
CN104137060B (zh) 高速缓存协处理单元
CN109614076A (zh) 浮点到定点转换
CN104335166B (zh) 用于执行混洗和操作的装置和方法
CN107003843A (zh) 用于对向量元素集合执行约减操作的方法和设备
CN104137053B (zh) 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法
CN104350461B (zh) 具有不同的读和写掩码的多元素指令
CN104137061B (zh) 用于执行向量频率扩展指令的方法、处理器核和计算机系统
WO2013095619A1 (en) Super multiply add (super madd) instruction with three scalar terms
CN107924307A (zh) 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令
KR20130140143A (ko) 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법
CN109313553A (zh) 用于跨步加载的系统、装置和方法
CN109791490A (zh) 用于将向量操作进行混合的装置、方法和系统
CN109992301A (zh) 用于向量广播的系统、方法和装置
CN108268277A (zh) 用于广播比较加法的系统、设备和方法

Legal Events

Date Code Title Description
C06 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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170811

Termination date: 20191209

CF01 Termination of patent right due to non-payment of annual fee