CN108268277A - 用于广播比较加法的系统、设备和方法 - Google Patents

用于广播比较加法的系统、设备和方法 Download PDF

Info

Publication number
CN108268277A
CN108268277A CN201711239218.2A CN201711239218A CN108268277A CN 108268277 A CN108268277 A CN 108268277A CN 201711239218 A CN201711239218 A CN 201711239218A CN 108268277 A CN108268277 A CN 108268277A
Authority
CN
China
Prior art keywords
packaged data
instruction
source
vector
packaged
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.)
Pending
Application number
CN201711239218.2A
Other languages
English (en)
Inventor
R.瓦伦丁
J.科巴尔
M.普洛特尼科夫
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 CN108268277A publication Critical patent/CN108268277A/zh
Pending legal-status Critical Current

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
    • 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/3001Arithmetic 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/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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • 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/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提供用于运行指令的系统、设备和方法的实施例。在一些情况下,指令具有目标操作数以及第一源操作数和第二源操作数的字段。解码指令引起采用归约操作对第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个归约的结果,其中要用于归约中的第一打包数据源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在第二打包数据源中存储的打包数据元素的比较的结果来支配。

Description

用于广播比较加法的系统、设备和方法
技术领域
本发明的领域一般涉及计算机处理器架构,以及更具体来说涉及在被运行时引起特定结果的指令。
背景技术
使用冲突检测封装的稀疏更新模式的向量化具有其局限性。考虑稀疏更新的示例代码:
这个循环无法采用直接方式来向量化,因为它在idx[i]在循环的不同迭代上具有相等值时可具有潜在数据相关性(参考相同存储器地址)。
对循环进行向量化的常规方式是要采用冲突指令来检查索引的冲突,该冲突指令生成将向量中的每个索引彼此比较的结果,并且基于这个结果,将值从B[]加载到向量,置换、累加并且存储到A[]。累加通常通过基于特殊置换控制(其基于冲突结果来生成)置换值在while内循环中进行。这个过程是迭代的,并且如以下所示的那样重复进行:
while内循环的迭代的主体和次数根据可用的指令集和算法实现而改变。例如,如果存在16个相等索引(极端情况),则简单算法包含15个置换和15个加法。
本发明提供一组技术方案,如下。
1. 一种设备,包括:
解码器,其用来对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
运行电路系统,其用来运行所解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个所述归约的结果,其中要用于所述归约中的所述第一打包数据源的所述打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在所述第二打包数据源中存储的所述打包数据元素的比较的结果来支配。
2. 如技术方案1所述的设备,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是存储器位置。
3. 如技术方案1所述的设备,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是打包数据寄存器。
4. 如技术方案1所述的设备,其中,所述第二源操作数中存储的打包数据元素的值形成掩码。
5. 如技术方案1所述的设备,其中,要运行所解码指令,所述运行电路系统要向来自暂时向量的第一集合的单独暂时向量广播来自所述第二打包数据源的索引的给定向量的每个索引,将暂时向量的所述第一集合与来自所述第二打包数据源的索引的所述给定向量进行比较以生成掩码集合,使用所述掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的所述第二集合全部归约到单个向量。
6. 如技术方案1所述的设备,其中,所述归约是加法、减法、乘法和除法中的一个。
7. 如技术方案1所述的设备,其中,所述比较是三角和等于、不等于、小于、大于、小于或等于和大于或等于中的一个或多个。
8. 一种方法,包括:
对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
运行所解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个所述归约的结果,其中要广播的所述第一打包数据源的所述打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在所述第二打包数据源中存储的所述打包数据元素的比较的结果来支配。
9. 如技术方案8所述的方法,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是存储器位置。
10. 如技术方案8所述的方法,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是打包数据寄存器。
11. 如技术方案8所述的方法,其中,所述第二源操作数中存储的打包数据元素的值形成掩码。
12. 如技术方案8所述的方法,其中,对于所述目标操作数的每个打包数据元素位置,向来自暂时向量的第一集合的单独暂时向量广播来自所述第二打包数据源的索引的给定向量的每个索引,将暂时向量的所述第一集合与来自所述第二打包数据源的索引的所述给定向量进行比较以生成掩码集合,使用所述掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的所述第二集合全部归约到单个向量。
13. 如技术方案8所述的方法,其中,来自所述目的地的初始值是所述归约生成中使用的另一个输入。
14. 如技术方案8所述的方法,还包括:
在解码之前把来自第一指令集的所述指令转化为第二指令集的指令,其中待解码的所述指令属于所述第二指令集。
15. 一种存储指令的非暂时机器可读媒介,所述指令在由处理器运行时使所述处理器执行方法,所述方法包括:
对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
运行所述解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个所述归约的结果,其中要广播的所述第一打包数据源的所述打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在所述第二打包数据源中存储的所述打包数据元素的比较的结果来支配。
16. 如技术方案15所述的非暂时机器可读媒介,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是存储器位置。
17. 如技术方案15所述的非暂时机器可读媒介,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是打包数据寄存器。
18. 如技术方案15所述的非暂时机器可读媒介,其中,所述第二源操作数中存储的打包数据元素的值形成掩码。
19. 如技术方案15所述的非暂时机器可读媒介,其中,对于所述目标操作数的每个打包数据元素位置,向来自暂时向量的第一集合的独立暂时向量广播来自所述第二打包数据源的索引的给定向量的各索引,将暂时向量的所述第一集合与来自所述第二打包数据源的索引的所述给定向量进行比较以生成掩码集合,使用所述掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的所述第二集合全部归约到单个向量。
20. 如技术方案15所述的非暂时机器可读媒介,其中,来自所述目的地的初始值是所述归约生成中使用的另一个输入。
21. 如技术方案15所述的非暂时机器可读媒介,还包括:
在解码之前把来自第一指令集的所述指令转化为第二指令集的指令,其中待解码的所述指令属于所述第二指令集。
附图说明
在附图中的图中作为示例而不是限制来图示本发明,附图中相似参考指示类似元素,并且其中:
图1图示广播比较加法指令的示范运行;
图2图示广播比较加法指令的示范运行;
图3图示广播比较算术指令的示范运行;
图4图示广播比较加法指令的运行的实施例;
图5图示广播比较加法指令的运行的实施例;
图6图示用来处理指令、例如广播比较算术指令的硬件的实施例;
图7图示由处理器执行以处理广播比较算术指令的方法的实施例;
图8A-8B是图示按照本发明的实施例的通用向量友好指令格式及其指令模板的框图;
图9A是图示按照本发明的实施例的示范特定向量友好指令格式的框图;
图9B是图示按照本发明的一个实施例的组成全操作码字段的特定向量友好指令格式的字段的框图;
图9C是图示按照本发明的一个实施例的组成寄存器索引字段的特定向量友好指令格式900的字段的框图;
图9D是图示按照本发明的一个实施例的组成扩大操作字段的特定向量友好指令格式900的字段的框图;
图10是按照本发明的一个实施例的寄存器架构的框图;
图11A是图示按照本发明的实施例的示范有序管线和示范寄存器重命名、无序发出/运行管线的框图;
图11B是图示按照本发明的实施例的要包含在处理器中的有序架构核和示范寄存器重命名、无序发出/运行架构核的示范性实施例的框图;
图12A-B图示更具体的示范有序核架构的框图,该核将是芯片中的若干逻辑块中的一个(包含相同类型和/或不同类型的其他核);
图13是按照本发明的实施例的可具有多于一个核、可具有集成存储器控制器并且可具有集成图形的处理器的框图;
图14示出按照本发明的一个实施例的系统的框图;
图15是按照本发明的实施例的第一更具体示范系统的框图;
图16是按照本发明的实施例的第二更具体示范系统的框图;
图17是按照本发明的实施例的SoC的框图;以及
图18是按照本发明的实施例的与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。
具体实施方式
在以下描述中,提出许多具体细节。但是理解的是,在没有这些具体细节的情况下也可实施本发明的实施例。在其他情况下,没有详细示出众所周知的电路、结构和技术,以免使本描述的理解模糊。
在说明书中对“一个实施例”、“实施例”、“示例实施例”等的提及指示所述的实施例可包含特定特征、结构或特性,但是每一个实施例可能不一定包含该特定特征、结构或特性。此外,这类短语不一定表示相同的实施例。此外,在结合实施例来描述特定特征、结构或特性时,无论是否明确描述,均认为结合其他实施例来影响这种特征、结构或特性正是在本领域的技术人员的知识范围之内的。
不幸的是,对稀疏更新模式的向量化的典型解决方案必定具有带有置换和掩码计算的这个循环。大多数问题情况是以大量冲突,其可引起比标量运行要慢的代码。本文详述的是用来向具有归零复位(zeroing unset)元素的暂时向量(temporal vector)集合广播值并且然后进行全部暂时向量到单个向量的归约(相加)的指令的实施例。例如,在上述代码中,通过冲突指令所生成的掩码集合用于到具有归零复位元素的暂时向量集合的稀疏归约操作。
对典型冲突指令的问题在于,它们仅支持索引的输入向量的双字和四字数据类型。对于较小数据类型,不存在足够空间以保存目标向量中的成对比较的全部位。例如,对于字节索引,在512位寄存器中存在64个元素。对于将64个元素与单个元素进行比较,将需要64位来保存单个元素的输出结果,并且对整个结果总共需要4096位(64位64位),其是512位寄存器能够容纳的八倍。
此外,实际上存在起作用的两种数据类型:索引的类型以及用于归约的数据的类型,并且它们可能是不同的大小。例如,A[]和B[]为字节整数,以及idx[]为四字整数。因此,在512位B寄存器中,能够存在从阵列B[]所加载的用于归约的64个元素,而仅存在从idx[]所加载的512位索引中的8个索引。通过当前基于冲突的方式,只能够处理来自512位B的8个元素,意味着仅存在1/8向量效率。一般来说,本文详述的实施例在单个指令中将索引的比较与数据归约相结合。
在稀疏更新模式中使用这个指令的某个示范优点可包含但不限于:无置换;没有用于生成置换控制的开销;没有用于掩码计算的开销;完全没有while内循环;对不同索引类型的支持;以及索引/数据类型的组合的向量效率。
本文详述的是广播比较算术指令的实施例。算术运算包含但不限于加法、减法、乘法和除法。这个指令的运行使运行电路(运行单元)执行对第一打包数据源的广播打包数据元素的算术运算(例如求和),并且在打包数据目的地中存储每个运算的结果。在一些实施例中,要广播的第一源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素(没有广播)的比较的结果来支配(dictate)。因此,只有第一打包数据源101的广播打包数据元素经受算术运算。在一些实施例中,要选择用于算术运算的第一源的广播打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素(没有广播)的比较的结果来支配。例如,在一些实施例中,向来自暂时向量的第一集合的单独暂时向量广播来自索引的给定向量(打包数据源2)的每个索引,将暂时向量的第一集合与索引的给定向量(打包数据源2)进行比较,以生成掩码集合,掩码集合用来向具有归零复位元素的暂时向量的第二集合广播为归约所提供的值(打包数据源1的打包数据元素),以及到单个向量的全部暂时向量的归约经由加法进行。另外,在一些实施例中,要支持比更新元素的数据类型要大的索引类型,来自暂时向量的第一集合的向量可具有增加的向量长度,但是具有与来自暂时向量的第二集合的向量相同的元素数量。比较可以是许多类型,例如等于、小于、大于、小于或等于、大于或等于、不等于等。算术运算也可具有许多类型,例如加法、减法、除法和乘法。通常,比较类型和算术运算通过操作码或立即数来定义。注意,对于一些算术运算(例如加法),当使用掩码时,零用来代替未使用的打包数据元素,但是对于其他算术运算(例如乘法),一用来代替未使用的打包数据元素。归零或一的那种方式可通过指令的操作码来设置。在一些实施例中,进行基于三角的比较。
通过这个指令,用于对稀疏更新模式进行向量化的算法看起来像是:
图1图示广播比较加法指令的示范运行。虽然这个说明按照小字节序格式,但是本文所述的原理按照大字节序格式工作。此外,在这个示例中,打包数据目的地131的每个打包数据元素位置没有包含那个位置中存储的原始值。广播比较加法指令包含用于目的地(打包数据目的地(DST)131)和两个源(打包数据源1(SRC1)101和打包数据源2(SRC2)103)的字段。索引的数据元素(打包数据源2 103)的大小和数据(打包数据源1 101)通过指令本身来详述。
打包数据源1 101包含四个打包数据元素(在打包数据元素位置0-3处所示)。取决于实现,打包数据源1 101是打包数据寄存器(例如XMM、YMM、ZMM、向量、SIMD、D、S等寄存器)或者存储器位置。
打包数据源2 103包含四个打包数据元素(在打包数据元素位置0-3处所示)。取决于实现,打包数据源2 103是打包数据寄存器(例如XMM、YMM、ZMM、向量、SIMD、D、S等寄存器)或者存储器位置。
打包数据源101馈入到运行电路系统109中以便在其上操作。具体来说,运行电路系统109执行第一打包数据源101的所选广播打包数据元素的求和,并且在打包数据目的地131中存储求和结果。在一些实施例中,广播第一打包数据源101的哪些打包数据元素通过在第二打包数据源103中存储的打包数据元素的广播值与在第二打包数据源103中存储的打包数据元素(没有广播)的比较的结果来支配。因此,只有第一打包数据源101的广播打包数据元素经受算术运算。在其他实施例中,被选择用于算术运算的第一打包数据源101的哪些打包数据元素通过在第二打包数据源103中存储的打包数据元素的广播值与在第二打包数据源103中存储的打包数据元素(没有广播)的比较的结果来支配。打包数据元素选择电路系统113通过第二打包数据源103的打包数据元素相对于第二打包数据源103的那些打包数据元素的广播的比较来执行这个选择,以生成掩码105。在一些实施例中,广播使用交叉开关进行。
在一些实施例中,当索引数据类型大于用于归约的值的数据类型时,打包数据源2 103从存储器被获取,并且向增加总长度S*KL的暂时向量广播,其中S是索引打包数据元素大小,以及KL是打包数据源1 101中的打包数据元素的数量。
选择和广播电路系统111使用掩码105来选择打包数据源1 101的打包数据元素如何由一个或多个加法器电路系统121、123、125、127来使用。注意,虽然示出多个加法器,但是在一些实施例中,再使用相同的加法器。加法器121、123、125、127相加其输入打包数据元素值,以及每个加法器121、123、125、127的输出放入打包数据目的地131的对应打包数据元素位置中。在一些实施例中,选择和广播电路系统111是可配置交叉开关。
因此,如所图示,对打包数据目标操作数131的每个打包数据元素位置,存在加法器,其基于掩码105接收来自打包数据源1 101的打包数据元素。例如,在掩码105的打包数据元素位置0中,值为。因此,在这个元素中仅设置一个位位置(最低有效)。这个设置位指示对于打包数据源1 101的打包数据元素位置0,这个位置(A)中的值将要仅由一个加法器在其上操作(在这个示例中,那个加法器对应于加法器[0] 127,其是在与设置位相同的“位置”中的加法器)。在掩码105的打包数据元素位置3中,值为。因此,在这个元素中仅设置2个位(0b0110)。这些设置位指示对于打包数据源1 101的打包数据元素位置3,这个位置(D)中的值将要由两个加法器(其对应于设置位位置(在这个示例中,那些加法器对应于加法器[1]125和加法器[2]123))在其上操作。加法器的结果如所示的那样存储到打包数据目的地131的对应打包数据元素位置中。
图2图示广播比较加法指令的示范运行。虽然这个说明按照小字节序格式,但是本文所述的原理按照大字节序格式工作。此外,在这个示例中,打包数据目的地231的每个打包数据元素位置没有包含那个位置中存储的原始值。广播比较加法指令包含用于目的地(打包数据目的地(DST)231)和两个源(打包数据源1(SRC1)101和打包数据源2(SRC2)103)的字段。
打包数据源1 101包含四个打包数据元素(在打包数据元素位置0-3处所示)。取决于实现,打包数据源1 101是打包数据寄存器(例如XMM、YMM、ZMM、向量、SIMD、D、S等寄存器)或者存储器位置。
打包数据源2 103包含四个打包数据元素(在打包数据元素位置0-3处所示)。取决于实现,打包数据源2 103是打包数据寄存器(例如XMM、YMM、ZMM、向量、SIMD、D、S等寄存器)或者存储器位置。
打包数据源101馈入运行电路系统209中以便在其上操作。具体来说,运行电路系统209执行第一打包数据源101的所选广播打包数据元素的求和,并且在打包数据目的地231中存储求和结果。在一些实施例中,用来广播的第一打包数据源101的哪些打包数据元素通过在第二打包数据源103中存储的打包数据元素的广播值与在第二打包数据源103中存储的打包数据元素(没有广播)的比较的结果来支配。因此,只有第一打包数据源101的广播打包数据元素经受算术运算。在其他实施例中,要被选择用于算术运算的第一打包数据源101的哪些打包数据元素通过在第二打包数据源103中存储的打包数据元素的广播值与在第二打包数据源103中存储的打包数据元素(没有广播)的比较的结果来支配。打包数据元素选择电路系统113通过第二打包数据源103的打包数据元素相对于第二打包数据源103的那些打包数据元素的广播的比较来执行这个选择,以生成掩码105。在一些实施例中,广播使用交叉开关进行。
在一些实施例中,当索引数据类型大于用于归约的值的数据类型时,打包数据源2 103从存储器被获取,并且向增加总长度S*KL的暂时向量广播,其中S是索引打包数据元素大小,以及KL是打包数据源1 101中的打包数据元素的数量。索引的数据元素(打包数据源2 103)的大小和数据(打包数据源1 101)通过指令本身来详述。
选择和广播电路系统111使用掩码105来选择如何向一个或多个加法器电路221、223、225、227广播打包数据源1 101的打包数据元素。注意,虽然示出多个加法器,但是在一些实施例中,再使用相同的加法器。加法器221、223、225、227相加其输入打包数据元素值,以及每个加法器221、223、225、227的输出放入打包数据目的地231的对应打包数据元素位置中。在一些实施例中,来自打包数据目的地231的打包数据元素包含在加法中。在一些实施例中,选择和广播电路系统111是可配置交叉开关。
因此,如所图示,对打包数据目标操作数231的每个打包数据元素位置,存在加法器,其基于掩码105接收来自打包数据源1 101的打包数据元素。例如,在掩码105的打包数据元素位置0中,值为。因此,在这个元素中仅设置一个位位置(最低有效)。这个设置位指示对于打包数据源1 101的打包数据元素位置0,这个位置(A)中的值将要仅由一个加法器在其上操作(在这个示例中,那个加法器对应于加法器[0] 227,其是在与设置位相同的“位置”中的加法器)。在掩码105的打包数据元素位置3中,值为。因此,在这个元素中仅设置2个位(0b0110)。这些设置位指示对于打包数据源1 101的打包数据元素位置3,这个位置(D)中的值将要由两个加法器(其对应于设置位位置(在这个示例中,那些加法器对应于加法器[1]225和加法器[2]223))来操作。加法器的结果(包含来自打包数据目的地231的初始值)如所示的那样与打包数据目的地231的对应打包数据元素位置相加。
图3图示广播比较算术指令的示范运行。虽然这个说明按照小字节序格式,但是本文所述的原理按照大字节序格式工作。此外,在这个示例中,打包数据目的地331的每个打包数据元素位置没有包含那个位置中存储的原始值。广播比较加法指令包含用于目的地(打包数据目的地(DST)331)和两个源(打包数据源1(SRC1)101和打包数据源2(SRC2)103)的字段。算术运算可以是加法、减法、乘法、除法等。
打包数据源1 101包含四个打包数据元素(在打包数据元素位置0-3处所示)。取决于实现,打包数据源1 101是打包数据寄存器(例如XMM、YMM、ZMM、向量、SIMD、D、S等寄存器)或者存储器位置。
打包数据源2 103包含四个打包数据元素(在打包数据元素位置0-3处所示)。取决于实现,打包数据源2 103是打包数据寄存器(例如XMM、YMM、ZMM、向量、SIMD、D、S等寄存器)或者存储器位置。
打包数据源101馈入运行电路系统309中以便在其上操作。具体来说,运行电路系统309对第一打包数据源101的所选广播打包数据元素执行算术运算,并且在打包数据目的地331中存储运算结果。在一些实施例中,广播第一打包数据源101的哪些打包数据元素通过在第二打包数据源103中存储的打包数据元素的广播值与在第二打包数据源103中存储的打包数据元素(没有广播)的比较的结果来支配。因此,只有第一打包数据源101的广播打包数据元素经受算术运算。在其他实施例中,要被选择用于算术运算的第一打包数据源101的哪些打包数据元素通过在第二打包数据源103中存储的打包数据元素的广播值与在第二打包数据源103中存储的打包数据元素(没有广播)的比较的结果来支配。打包数据元素选择电路系统113通过第二打包数据源103的打包数据元素相对第二打包数据源103的那些打包数据元素的广播的比较来执行这个选择,以生成掩码105。在一些实施例中,广播使用交叉开关进行。
在一些实施例中,当索引数据类型大于用于归约的值的数据类型时,打包数据源2 103从存储器被获取,并且向增加总长度S*KL的暂时向量广播,其中S是索引打包数据元素大小,以及KL是打包数据源1 101中的打包数据元素的数量。索引的数据元素(打包数据源2 103)的大小和数据(打包数据源1 101)通过指令本身来详述。
选择和广播电路系统111使用掩码105来选择如何向一个或多个算术电路321、323、325、327广播打包数据源1 101的打包数据元素。注意,虽然示出多个算术电路,但是在一些实施例中,再使用相同的算术电路。算术电路321、323、325、327对其输入打包数据元素值执行运算,以及每个算术电路321、323、325、327的输出放入打包数据目的地331的对应打包数据元素位置中。在一些实施例中,来自打包数据目的地331的打包数据元素包含在加法中。在一些实施例中,选择和广播电路系统111是可配置交叉开关。
因此,如所图示,对打包数据目标操作数331的每个打包数据元素位置,存在算术电路,其基于掩码105接收来自打包数据源1 101的打包数据元素。例如,在掩码105的打包数据元素位置0中,值为。因此,在这个元素中仅设置一个位位置(最低有效)。这个设置位指示对于打包数据源1 101的打包数据元素位置0,这个位置(A)中的值将要仅在一个算术电路上操作(在这个示例中,那个算术电路对应于算术电路[0] 327,其是在与设置位相同的“位置”中的算术电路)。在掩码105的打包数据元素位置3中,值为。因此,在这个元素中仅设置2个位(0b0110)。这些设置位指示对于打包数据源1 101的打包数据元素位置3,这个位置(D)中的值将要由两个算术电路(其对应于设置位位置(在这个示例中,那些算术电路对应于算术电路[1]325和算术电路[2]323))来操作。算术电路的结果(包含来自打包数据目的地331(如果这样配置的配置)的初始值)如所示的那样相加到打包数据目的地331的对应打包数据元素位置。
图4图示广播比较加法指令的运行的实施例。注意,每个垂直列是向量寄存器的相同通道(lane)。如所示,第一打包数据源1 401将供应要相加的打包数据元素。“偏移”表示第一打包数据源1 401的每个打包数据元素位置。在这个示例中,存在8(KL=8)个打包数据元素。
第二打包数据源403提供索引的向量。在407处广播这些索引。广播索引相对第二打包数据源403来比较,以生成掩码的集合(409)。
在411处,掩码集合用来从第一打包数据源301向至少一个加法器(其相加广播值以生成结果)选择值。
在打包数据目的地的每个打包数据元素位置413处,存储在那个位置处的广播元素的所得到的和。
图5图示广播比较加法指令的运行的实施例。注意,每个垂直列是向量寄存器的相同通道。如所示,第一打包数据源1 501将供应要相加的打包数据元素。“偏移”表示第一打包数据源1 501的每个打包数据元素位置。在这个示例中,存在8(KL=8)个打包数据元素。
第二打包数据源503提供索引的向量。在507处广播这些索引。广播索引相对第二打包数据源503来比较,以生成掩码的集合(509)。这个比较是基于三角的。
在511处,掩码集合用来从第一打包数据源301向至少一个加法器(其相加广播值以生成结果)选择值。
在打包数据目的地的每个打包数据元素位置513处,存储在那个位置处的广播元素的所得到的和。
图6图示处理指令、例如广播比较算术指令的硬件的实施例。如所图示,存储装置603存储要运行的广播比较算术指令601。
指令601由解码电路系统605来接收。例如,解码电路系统605从取逻辑/电路系统来接收这个指令。该指令包含用于操作码、第一和第二打包数据源以及打包数据目的地的字段。在一些实施例中,源和目的地是寄存器,而在其他实施例中,一个或多个是存储器位置。在一些实施例中,指令601的操作码或前缀包含字节、字、双字和四字的元素大小的数据元素大小{B/W/D/Q}的指示。例如,索引的数据元素(打包数据源2 103)的大小和数据(打包数据源1 101)通过指令本身来详述。在一些实施例中,操作码包含算术函数,而在其他中,这通过立即数来支配。通常,比较类型和算术运算通过操作码或立即数来定义。比较可以是许多类型,例如等于、小于、大于、小于或等于、大于或等于、不等于等。算术运算也可具有许多类型,例如加法、减法、除法和乘法。
稍后将详述至少一个指令格式的更详细实施例。解码电路系统605将指令解码为一个或多个操作。在一些实施例中,这个解码包含生成要由运行电路系统(例如运行电路系统609)所执行的多个微操作。解码电路系统605还对指令前缀进行解码。
在一些实施例中,寄存器重命名、寄存器分配和/或调度电路系统607提供下列一个或多个的功能性:1) 将逻辑操作数值重命名为物理操作数值(例如在一些实施例中的寄存器别名表);2) 向解码指令分配状态位和标志;以及3) 从指令池来调度解码指令以供运行电路系统上的运行(例如在一些实施例中使用保留站)。另外,在一些实施例中,要支持比更新元素的数据类型要大的索引类型,来自暂时向量的第一集合的向量可具有增加的向量长度,但是具有与来自暂时向量的第二集合的向量相同数量的元素。
寄存器(寄存器堆)和/或存储器608将数据作为要由运行电路系统609所操作的指令的操作数来存储。示范寄存器类型包含打包数据寄存器、通用寄存器和浮点寄存器。
运行电路系统609运行解码指令。示范详细运行电路系统在图1、图2和图3中示出。解码指令的运行使运行电路系统执行对第一打包数据源的广播打包数据元素的算术运算(归约),并且在打包数据目的地中存储每个算术运算的结果。在一些实施例中,要广播的第一源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素(没有广播)的比较的结果来支配。因此,只有第一打包数据源101的广播打包数据元素经受算术运算。在一些实施例中,要选择的第一源的广播打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素(没有广播)的比较的结果来支配。例如,在一些实施例中,向来自暂时向量的第一集合的单独暂时向量广播来自索引的给定向量(打包数据源2)的每个索引,将暂时向量的第一集合与索引的给定向量(第二打包数据源)进行比较,以生成掩码集合,掩码集合用来对暂时向量的第二集合(具有用于加法和减法的归零复位元素以及用于乘法和除法的1)选择为归约所提供的广播值(第一打包数据源的打包数据元素),以及到单个向量的全部暂时向量的归约被进行。在一些实施例中,来自目的地的初始值是和生成中使用的另一个输入。比较可以是许多类型,例如等于、小于、大于、小于或等于、大于或等于、不等于等。算术运算也可具有许多类型,例如加法、减法、除法和乘法。通常,比较类型和算术运算通过操作码或立即数来定义。注意,对于一些算术运算(例如相加),当使用掩码时,零用来代替未使用的打包数据元素,但是对于其他算术运算(例如乘法),一用来代替未使用的打包数据元素。归零或者一的哪种方式可通过指令的操作码来设置。在一些实施例中,进行基于三角的比较。
在一些实施例中,引退(retirement)/回写电路系统611在架构上将目标寄存器提交到寄存器或存储器608中,并且引退该指令。
广播比较加法指令的格式的实施例是BROADCAST CMP ARITH{INDEX B/W/D/Q}{DATA B/W/D/Q} DSTREG, SRC1, SRC2。在一些实施例中,BROADCAST CMP ARITH{INDEX B/W/D/Q}{DATA B/W/D/Q}是指令的操作码助记符。B/W/D/Q指示作为字节、字、双字和四字的源/目的地的数据元素大小。例如源2(索引)和源1(数据)的大小。在其他实施例中,数据元素和/或索引大小是前缀的一部分。DSTREG是用于打包数据目标寄存器操作数的字段。SRC1和SRC2是用于诸如打包数据寄存器和/或存储器的源的字段。比较(CMP)和算术(ARITH)函数通过操作码和/或立即数来支配。
在一些实施例中,广播比较加法指令包含用于写掩码(writemask)寄存器操作数(k)的字段(例如BROADCAST CMP ARITH{INDEX B/W/D/Q}{DATA B/W/D/Q}{k} DSTREG,SRC1, SRC2)。写掩码用来有条件地控制每元素操作和结果的更新。取决于实现,写掩码使用合并或归零掩蔽。采用断言(predicate)(写掩码、写入掩码(write mask)或k寄存器)操作数所编码的指令使用那个操作数有条件地控制每元素计算操作以及对目标操作数的结果的更新。断言操作数称作操作掩码(写掩码)寄存器。在一些实施例中,操作掩码是大小64位的架构寄存器的集合。注意,从架构寄存器的这个集合,只有k1至k7能够作为断言操作数来寻址。k0能够用作常规源或目的地,但是不能编码为断言操作数。还注意,断言操作数能够用来实现对以存储器操作数(源或目的地)的一些指令的存储器故障抑制。作为断言操作数,操作掩码寄存器包含用来管理对向量寄存器的每个数据元素的操作/更新的一个位。一般来说,操作掩码寄存器能够支持具有元素大小的指令:单精度浮点(float32)、整数双字(int32)、双精度浮点(float64)、整数四字(int64)。操作掩码寄存器的长度MAX_KL足以操控多达64个元素,其中每元素一个位、即64位。对于给定向量长度,每个指令仅访问基于其数据类型所需的最小有效掩码位数。操作掩码寄存器以每元素粒度来影响指令。因此,每个数据元素的任何数值或者非数值运算以及对目标操作数的中间结果的每元素更新在操作掩码寄存器的对应位上断言。在大多数实施例中,用作断言操作数的操作掩码服从下列性质:1) 如果对应操作掩码位没有设置,则指令的操作不对元素执行(这暗示没有异常或违规能够通过对被掩蔽掉的元素的操作引起,并且因此,没有异常标志因被掩蔽掉的操作来更新);2) 如果对应写掩码位没有设置,则目标元素不采用操作结果来更新。目标元素值而是必须保存(合并-掩蔽)或者必须调零(归零-掩蔽);3) 对于具有存储器操作数的一些指令,对以掩码位为0的元素抑制存储器故障。注意,这个特征提供实现控制流程断言的多功能构造,因为掩码实际上为向量寄存器目的地提供合并行为。作为备选方案,掩蔽能够用于归零而不是合并,使得被掩蔽掉的元素采用0来更新而不是保存旧值。提供归零行为,以便在不需要旧值时去除对旧值的隐式相关性。
在实施例中,指令的编码包含换算(scale)-索引-基址(SIB)类型存储器寻址操作数,其直接识别存储器中的多个索引式目标位置。在一个实施例中,SIB类型存储器操作数可包含识别基址寄存器的编码。基址寄存器的内容可表示存储器中的基址,由其计算存储器中的特定目标位置的地址。例如,基址可以是扩展向量指令的潜在目标位置块中的第一位置的地址。在一个实施例中,SIB类型存储器操作数可包含识别索引寄存器的编码。索引寄存器的每个元素可指定可用来从基址计算潜在目标位置块内的相应目标位置的地址的索引或偏移值。在一个实施例中,SIB类型存储器操作数可包含指定在计算相应目标地址时要应用于每个索引值的换算因子的编码。例如,如果为四的换算因子值在SIB类型存储器操作数中编码,则从索引寄存器的元素所得到的每个索引值可与四相乘,然后与基址相加,以计算目标地址。
在一个实施例中,形式vm32{x,y,z}的SIB类型存储器操作数可识别使用SIB类型存储器寻址所指定的存储器操作数的向量阵列。在这个示例中,存储器地址的阵列使用通用基址寄存器、常数换算因子和包含个别元素(其各为32位索引值)的向量索引寄存器来指定。向量索引寄存器可以是128位寄存器(例如XMM)寄存器(vm32x)、256位(例如YMM)寄存器(vm32y)或512位(例如ZMM)寄存器(vm32z)。在另一个实施例中,形式vm64{x,y,z}的SIB类型存储器操作数可识别使用SIB类型存储器寻址所指定的存储器操作数的向量阵列。在这个示例中,存储器地址的阵列使用通用基址寄存器、常数换算因子和包含个别元素(其各为64位索引值)的向量索引寄存器来指定。向量索引寄存器可以是128位寄存器(例如XMM)寄存器(vm64x)、256位(例如YMM)寄存器(vm64y)或512位(例如ZMM)寄存器(vm64z)。
图7图示由处理器所执行以处理广播比较算术指令的方法的实施例。例如,如图1-3和图6所示的处理器核、如以下详述的管线等执行这种方法。
在701处,取指令。例如,取广播比较算术指令。广播比较加法指令包含用于操作码、第一和第二源操作数以及目标操作数的字段。在一些实施例中,该指令还包含用于写掩码的字段。在一些实施例中,从指令高速缓存中取该指令。源操作数和目标操作数是打包数据。索引的数据元素(第二打包数据源)的大小和数据(第一打包数据源)通过指令来详述。
所取指令在703处被解码。例如,所取广播比较加法指令由例如本文详述的解码电路系统的解码电路系统来解码。
在705处检索与解码指令的源操作数关联的数据值。例如,当源操作数的一个或多个是存储器操作数时,检索来自所指示存储器位置的数据。另外,在一些实施例中,要支持比更新元素的数据类型要大的索引类型,来自暂时向量的第一集合的向量可具有增加的向量长度,但是具有与来自暂时向量的第二集合的向量相同数量的元素。
在707处,解码指令由例如本文详述的运行电路系统的运行电路系统(硬件)来运行。对于广播比较加法指令,运行将使运行电路系统执行第一打包数据源的归约打包数据元素,并且在打包数据目的地中存储每个归约的结果。在一些实施例中,要广播的第一打包数据源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素的比较的结果来支配。在其他实施例中,要选择的第一打包数据源的广播打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素的比较的结果来支配。例如,在一些实施例中,向来自暂时向量的第一集合的单独暂时向量广播来自索引的给定向量(第二打包数据源)的每个索引,将暂时向量的第一集合与索引的给定向量(第二打包数据源)进行比较,以生成掩码集合,掩码集合用来向暂时向量的第二集合(具有用于加法和减法的归零复位元素以及将1用于乘法和除法)广播为归约所提供的广播值(第一打包数据源的打包数据元素),以及到单个向量的全部暂时向量的归约经由归约操作进行。在一些实施例中,来自目的地的初始值是归约中使用的另一个输入。归约可以是加法、乘法、减法和除法其中之一。比较可以是许多类型,例如等于、小于、大于、小于或等于、大于或等于、不等于等。算术运算也可具有许多类型,例如加法、减法、除法和乘法。在一些实施例中,进行基于三角的比较。
在一些实施例中,该指令在709处提交或引退。
广播比较加法的伪代码的示例如下:
KL是输入源1向量中为归约所给出的元素数量。虽然归约示为一个暂时向量中的累加的串行化序列,但是在其他实现中,采用通过树执行的归约,它能够经过KL暂时向量进行(因而广播操作被并行化)。
广播比较加法的伪代码的另一个示例如下所示。要支持索引/数据类型的任何组合(包含索引数据类型大于用于归约的值的数据类型时的情况),索引能够从存储器中获取,并且向增加总长度(S*KL)的暂时向量广播:
广播比较加法的伪代码的又一个示例如下所示。这用于三角比较。
本文详述实施例的示例。
1. 一种设备,包括:解码器,用来对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码;以及运行电路系统,用来运行解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个归约的结果,其中要用于归约中的第一打包数据源的打包数据元素通过第二打包数据源中存储的打包数据元素的广播值与第二打包数据源中存储的打包数据元素的比较的结果来支配。
2. 如示例1所述的设备,其中,第一源操作数是打包数据寄存器,以及第二源操作数是存储器位置。
3. 如示例1所述的设备,其中,第一源操作数是打包数据寄存器,以及第二源操作数是打包数据寄存器。
4. 如示例1所述的设备,其中,第二源操作数中存储的打包数据元素的值形成掩码。
5. 如示例1所述的设备,其中,要运行解码指令,运行电路系统向来自暂时向量的第一集合的单独暂时向量广播来自第二打包数据源的索引的给定向量的每个索引,将暂时向量的第一集合与来自第二打包数据源的索引的给定向量进行比较以生成掩码集合,使用掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的第二集合全部归约到单个向量。
6. 如示例1所述的设备,其中,归约是加法、减法、乘法和除法中的一个。
7. 如示例1所述的设备,其中,比较是三角和等于、不等于、小于、大于、小于或等于和大于或等于中的一个或多个。
8. 一种方法,包括:对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码;以及运行解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个归约的结果,其中要广播的第一打包数据源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素的比较的结果来支配。
9. 如示例8所述的方法,其中,第一源操作数是打包数据寄存器,以及第二源操作数是存储器位置。
10. 如示例8所述的方法,其中,第一源操作数是打包数据寄存器,以及第二源操作数是打包数据寄存器。
11. 如示例8所述的方法,其中,第二源操作数中存储的打包数据元素的值形成掩码。
12. 如示例8所述的方法,其中,对于目标操作数的每个打包数据元素位置,向来自暂时向量的第一集合的单独暂时向量广播来自第二打包数据源的索引的给定向量的每个索引,将暂时向量的第一集合与来自第二打包数据源的索引的给定向量进行比较以生成掩码集合,使用掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的第二集合全部归约到单个向量。
13. 如示例8所述的方法,其中,来自目的地的初始值是归约生成中使用的另一个输入。
14. 如示例8所述的方法,还包括:在解码之前把来自第一指令集的指令转化为第二指令集的指令,其中待解码指令属于第二指令集。
15. 一种存储指令的非暂时机器可读密集,指令在由处理器运行时使该处理器执行方法,该方法包括:对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码;以及运行解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个归约的结果,其中要广播的第一打包数据源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素的比较的结果来支配。
16. 如示例15所述的非暂时机器可读媒介,其中,第一源操作数是打包数据寄存器,以及第二源操作数是存储器位置。
17. 如示例15所述的非暂时机器可读媒介,其中,第一源操作数是打包数据寄存器,以及第二源操作数是打包数据寄存器。
18. 如示例15所述的非暂时机器可读媒介,其中,第二源操作数中存储的打包数据元素的值形成掩码。
19. 如示例15所述的非暂时机器可读媒介,其中,对于目标操作数的各打包数据元素位置,向来自暂时向量的第一集合的单独暂时向量广播来自第二打包数据源的索引的给定向量的每个索引,将暂时向量的第一集合与来自第二打包数据源的索引的给定向量进行比较以生成掩码集合,使用掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的第二集合全部归约到单个向量。
20. 如示例15所述的非暂时机器可读媒介,其中,来自目的地的初始值是归约生成中使用的另一个输入。
21. 如示例15所述的非暂时机器可读媒介,还包括:在解码之前把来自第一指令集的指令转化为第二指令集的指令,其中待解码指令属于第二指令集。
22. 一种设备,包括:
解码器部件,用于对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
执行部件,用于运行解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个归约的结果,其中要用于归约中的第一打包数据源的打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在第二打包数据源中存储的打包数据元素的比较的结果来支配。
23. 如示例22所述的设备,其中,第一源操作数是打包数据寄存器,以及第二源操作数是存储器位置。
24. 如示例22所述的设备,其中,第一源操作数是打包数据寄存器,以及第二源操作数是打包数据寄存器。
25. 如示例22-24中的任一项所述的设备,其中,第二源操作数中存储的打包数据元素的值形成掩码。
26. 如示例22-25中的任一项所述的设备,其中,要运行解码指令,执行电路向来自暂时向量的第一集合的单独暂时向量广播来自第二打包数据源的索引的给定向量的每个索引,将暂时向量的第一集合与来自第二打包数据源的索引的给定向量进行比较以生成掩码集合,使用掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的第二集合全部归约到单个向量。
27. 如示例22-26中的任一项所述的设备,其中,归约是加法、减法、乘法和除法中的一个。
28. 如示例22-27中的任一项所述的设备,其中,比较是三角和等于、不等于、小于、大于、小于或等于和大于或等于中的一个或多个。
以下附图详述实现上述实施例的示范架构和系统。在一些实施例中,以上所述的一个或多个硬件组件和/或指令如以下详述的那样模仿或者实现为软件模块。
指令集
指令集可包含一个或多个指令格式。给定指令格式可定义各种字段(例如位数、位位置),以指定要执行的操作(例如操作码)以及要在其上执行操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如掩码)等等。一些指令格式通过指令模板的定义(或者子格式)进一步分解。例如,给定指令格式的指令模板可定义成具有指令格式字段的不同子集(所包含的字段通常按照相同顺序,但是至少一些具有不同的位位置,因为存在所包含的更少字段),和/或定义成具有以不同方式所解释的给定字段。因此,ISA的每个指令使用给定指令格式来表达(以及如果被定义,则通过那种指令格式的指令模块的给定模块),并且包含用于指定操作和操作数的字段。例如,示范ADD指令具有特定操作码和指令格式,其包含指定那个操作码的操作码字段以及选择操作数(源1/目的地和源2)的操作数字段;以及这个ADD指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。称作高级向量扩展(AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案的SIMD扩展集合已经发布和/或发表(例如参见Intel® 64和IA-32架构软件开发人员手册,2014年9月;并且参见Intel®高级向量扩展编程参考,2014年10月)。
示范指令格式
本文所述的(一个或多个)指令的实施例可按照不同格式来体现。另外,下面详述示范系统、架构和管线。(一个或多个)指令的实施例可在这类系统、架构和管线上运行,但是并不局限于详述的那些系统、架构和管线。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在向量操作特定的某些字段)。虽然描述其中向量和标量操作均经过向量友好指令格式来支持的实施例,但是备选实施例仅使用向量友好指令格式的向量操作。
图8A-8B是图示按照本发明的实施例的通用向量友好指令格式及其指令模板的框图。图8A是图示按照本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图8B是图示按照本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体来说,通用向量友好指令格式800定义A类和B类指令模板,其均包含无存储器访问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字节)数据元素宽度)的更多、更少和/或不同向量操作数大小(例如256字节向量操作数)。
图8A中的A类指令模板包含:1) 在无存储器访问805指令模板内,示出无存储器访问、全舍入控制类型操作810指令模板和无存储器访问、数据变换类型操作815指令模板;以及2)在存储器访问820指令模板内,示出存储器访问、暂时825指令模板和存储器访问、非暂时830指令模板。图8B中的B类指令模板包含:1) 在无存储器访问805指令模板内,示出无存储器访问、写入掩码控制、部分舍入控制类型操作812指令模板和无存储器访问、写入掩码控制、vsize类型操作817指令模板;以及2)在存储器访问820指令模板内,示出存储器访问、写入掩码控制827指令模板。
通用向量友好指令格式800包含以下按照图8A-8B所图示的顺序所列出的下列字段。
格式字段840 - 这个字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且因而标识指令流中按照向量友好指令格式的指令的出现。因此,在对于仅具有通用向量友好指令格式的指令集不是所需的意义上,这个字段是可选的。
基础操作字段842 – 其内容区分不同的基础操作。
寄存器索引字段844 – 其内容直接地或者经过地址生成来指定源和目标操作数的位置(如果它们在寄存器中或者在存储器中的话)。这些包含充分位数,以便从P×Q (例如32×512、16×128、32×1024,、64×1024)寄存器堆中选择N个寄存器。虽然在一个实施例中,N可多达三个源和一个目标寄存器,但是备选实施例可支持更多或更少的源和目标寄存器(例如,可支持多达两个源(其中这些源之一还充当目的地),可支持多达三个源(其中这些源之一还充当目的地),可支持多达两个源和一个目的地)。
修改符字段846 – 其内容区分按照通用向量指令格式的指令的出现,其指定来自不是存储器访问的那些的存储器访问;即,在无存储器访问805指令模板与存储器访问820指令模板之间。存储器访问操作对存储器分级结构进行读和/或写(在一些情况下,使用寄存器中的值来指定源和/或目标地址),而非存储器访问操作不是这样(例如源和目的地是寄存器)。虽然在一个实施例中,这个字段也在执行存储器地址计算的三种不同方式之间进行选择,但是备选实施例可支持执行存储器地址计算的更多、更少或不同的方式。
扩大操作字段850 – 其内容区分除了基础操作之外、多种不同操作的哪一个还要被执行。这个字段是上下文特定的。在本发明的一个实施例中,这个字段分为类字段868、α字段852和β字段854。扩大操作字段850允许操作的共同编组在单个指令、而不是2、3或4个指令中执行。
换算字段860 – 其内容允许用于存储器地址生成(例如,用于使用2换算* 索引 +基址的地址生成)的索引字段的内容的换算。
位移字段862A – 其内容用作存储器地址生成的部分(例如用于使用2换算* 索引+ 基址 +位移的地址生成)。
位移因子字段862B(注意,直接在位移因子字段862B之上的位移字段862A的并置指示使用一个或另一个) – 其内容用作地址生成的部分;它指定通过存储器访问的大小(N)来换算的位移因子—其中N是存储器访问中的字节数(例如,用于使用2换算* 索引 + 基址 +位移的地址生成)。忽略冗余低阶位,并且因此位移因子字段的内容与存储器操作数总大小(N)相乘,以便生成计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于全操作码字段874(本文稍后所述)和数据操纵字段854C来确定。在它们没有用于无存储器访问805指令模板和/或不同实施例可以仅实现两个中的一个或没有的意义上,位移字段862A和位移因子字段862B是可选的。
数据元素宽度字段864 – 其内容区分要使用多个数据元素宽度的哪一个(在一些实施例中对于全部指令;在其他实施例中仅对于指令的一些)。在仅支持一个数据元素宽度和/或数据元素宽度使用操作码的某个方面来支持时不需要这个字段的意义上,这个字段是可选的。
写入掩码字段870 – 其内容基于每数据元素位置来控制目标向量操作数中的那个数据元素位置是否反映基础操作和扩大操作的结果。A类指令模板支持合并–写掩蔽,而B类指令模板支持合并-和归零-写掩蔽。当合并时,向量掩码允许目的地中的元素的任何集合在任何操作的运行期间被保护以免更新(通过基础操作和扩大操作所指定);在其他一个实施例中,保存目的地的每个元素的旧值,其中对应掩码位具有0。相比之下,当归零时,向量掩码允许目的地中的元素的任何集合在任何操作的运行期间被归零(通过基础操作和扩大操作所指定);在一个实施例中,当对应掩码位具有0值时,目的地的元素设置为0。这个功能性的子集是控制被执行操作的向量长度的能力(也就是说,元素的跨度从第一个修改成最后一个);但是,修改的元素是连续的不是必需的。因此,写入掩码字段870允许部分向量操作,包含加载、存储、算术、逻辑等。虽然描述其中写入掩码字段870的内容选择包含待使用的写入掩码的多个写入掩码寄存器其中之一(并且因而写入掩码字段870的内容间接地识别待执行掩蔽)的本发明的实施例,但是作为替代或补充,备选实施例允许掩码写字段870的内容直接指定待执行掩蔽。
立即数字段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区分要执行的所指定类型的操作的哪一个。在无存储器访问805指令模板中,换算字段860、位移字段862A和位移换算字段862B是不存在的。
无存储器访问指令模板 – 全舍入控制类型操作
在无存储器访问全舍入控制类型操作810指令模板中,β字段854被解释为舍入控制字段854A,其(一个或多个)内容提供静态舍入。虽然在本发明的所述实施例中,舍入控制字段854A包含抑制所有浮点异常(SAE)字段856和舍入操作控制字段858,但是备选实施例可支持将这些概念均编码到相同字段中,或者仅具有这些概念/字段的一个或另一个(例如可以仅具有舍入操作控制字段858)。
SAE字段856 – 其内容区分是否禁用异常事件报告;当SAE字段856的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志,并且不引起任何浮点异常处理程序。
舍入操作控制字段858 – 其内容区分要执行一组舍入操作的哪一个(例如上舍入、下舍入、向零方向舍入和就近舍入)。因此,舍入操作控制字段858允许基于每指令来改变舍入模式。在其中处理器包含用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段850的内容覆盖那个寄存器值。
无存储器访问指令模板 – 数据变换类型操作
在无存储器访问数据变换类型操作815指令模板中,β字段854被解释为数据变换字段854B,其内容区分要执行多个数据变换的哪一个(例如无数据变换、混合(swizzle)、广播)。
在A类的存储器访问820指令模板的情况下,α字段852被解释为驱逐提示字段852B,其内容区分要使用驱逐提示的哪一个(图8A中,对存储器访问、暂时825指令模板和存储器访问、非暂时830指令模板分别指定暂时852B.1和非暂时852B.2),而β字段854被解释为数据操纵字段854C,其内容区分要执行多个数据操纵操作(又称作原语)的哪一个(例如,无操纵、广播、源的上变换和目的地的下变换)。存储器访问820指令模板包含换算字段860以及可选包含位移字段862A或位移换算字段862B。
向量存储器指令采用转换支持来执行来自存储器的向量加载以及对存储器的向量存储。如同规则向量指令一样,向量存储器指令以逐个数据元素的方式来往于存储器传递数据,其中实际传递的元素通过选择作为写入掩码的向量掩码的内容来指示。
存储器暂时指令模板 – 暂时
暂时数据是可能足够快再使用以获益于高速缓存的数据。但是,这是提示,并且不同处理器可按照不同方式(包含完全忽略提示)来实现它。
存储器访问指令模板 – 非暂时
非暂时数据是不可能足够快被再使用以获益于第1级高速缓存中的高速缓存的数据,并且应当被给予驱逐的优先级。但是,这是提示,并且不同处理器可按照不同方式(包含完全忽略提示)来实现它。
B类的指令模板
在B类的指令模板的情况下,α字段852被解释为写入掩码控制(Z)字段852C,其内容区分由写入掩码字段870所控制的写入掩码应当是合并或归零。
在B类的非存储器访问805指令模板的情况下,β字段854的部分被解释为RL字段857A,其内容区分不同扩大操作类型的哪一个要被执行(例如,对无存储器访问、写入掩码控制、部分舍入控制操作812指令模板和无存储器访问、写入掩码控制、VSIZE类型操作817指令模板分别指定舍入857A.1和向量长度(VSIZE)857A.2),而β字段854的其余部分区分要执行所指定类型的操作的哪一个。在无存储器访问805指令模板中,换算字段860、位移字段862A和位移换算字段862B是不存在的。
在无存储器访问、写入掩码控制、部分舍入控制类型操作810指令模板中,β字段854的其余部分被解释为舍入操作字段859A,并且禁用异常事件报告(给定指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序)。
舍入操作控制字段859A – 正如舍入操作控制字段858,其内容区分要执行一组舍入操作的哪一个(例如上舍入、下舍入、向零方向舍入和就近舍入)。因此,舍入操作控制字段859A允许基于每指令来改变舍入模式。在其中处理器包含用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段850的内容覆盖那个寄存器值。
在无存储器访问、写入掩码控制、VSIZE类型操作817指令模板中,β字段854的其余部分被解释为向量长度字段859B,其内容区分多个数据向量长度的哪一个要被执行(例如128、256或512字节)。
在B类的存储器访问820指令模板的情况下,β字段854的部分被解释为广播字段857B,其内容区分广播类型数据操纵操作是否要被执行,而β字段854的其余部分被解释为向量长度字段859B。存储器访问820指令模板包含换算字段860以及可选包含位移字段862A或位移换算字段862B。
关于通用向量友好指令格式800,示出全操作码字段874,其包含格式字段840、基础操作字段842和数据元素宽度字段864。虽然示出其中全操作码字段874包含全部这些字段的一个实施例,但是在不支持它们全部的实施例中,全操作码字段874包含少于全部这些字段。全操作码字段874提供操作代码(操作码)。
扩大操作字段850、数据元素宽度字段864和写入掩码字段870允许这些特征基于每指令在通用向量友好指令格式中指定。
写入掩码字段和数据元素宽度字段的组合创建类型化指令,因为它们允许掩码基于不同数据元素宽度来应用。
存在于A类和B类内的各种指令模板在不同状况中是有益的。在本发明的一些实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类或者两类。例如,意图用于通用计算的高性能通用无序核可以仅支持B类,主要意图用于图形和/或科学(吞吐量)计算的核可以仅支持A类,以及意图用于两者的核可支持两者(当然,具有来自两类的模板和指令的某种混合但是没有来自两类的所有模板和指令的核处于本发明的范围之内)。而且,单个处理器可包含多个核,其全部支持相同类,或者其中不同核支持不同类。例如,在具有单独图形和通用核的处理器中,主要意图用于图形和/或科学计算的图形核中的一个可以仅支持A类,而通用核的一个或多个可以是具有意图用于通用计算的无序运行和寄存器重命名的高性能通用核,其仅支持B类。没有单独图形核的另一个处理器可包含一个或多个通用有序或无序核,其支持A类以及B类。当然,在本发明的不同实施例中,来自一类的特征也可在另一类中实现。通过高级语言所编写的程序将被输入(例如准时编译或静态编译)到多种不同的可运行形式中,包含:1) 仅具有由目标处理器所支持的(一个或多个)类的指令供运行的形式;或者2) 具有使用所有类的指令的不同组合所编写的备选例程并且具有控制流程代码(其基于由当前运行代码的处理器所支持的指令来选择要运行的例程)的形式。
示范特定向量友好指令格式
图9A是图示按照本发明的实施例的示范特定向量友好指令格式的框图。图9A示出特定向量友好指令格式900,其在它指定字段的位置、大小、解释和顺序以及那些字段的一些的值的意义上是特定的。特定向量友好指令格式900可用来扩展x86指令集,并且因而字段的一些与现有x86指令集及其扩展(例如AVX)中使用的字段类似或相同。这个格式保持为与具有扩展的现有x86指令集的前缀编码字段、真正操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示来自图9A的字段映射到其中的来自图8的字段。
应当理解,虽然为了说明的目的而在通用向量友好指令格式800的上下文中参照特定向量友好指令格式900来描述本发明的实施例,但是本发明并不局限于特定向量友好指令格式900,除了要求保护的情况之外。例如,通用向量友好指令格式800设想各种字段的多种可能大小,而特定向量友好指令格式900示为具有特定大小的字段。通过特定示例,虽然数据元素宽度字段864图示为特定向量友好指令格式900中的一位字段,但是本发明并不局限于此(也就是说,通用向量友好指令格式800考虑数据元素宽度字段864的其他大小)。
通用向量友好指令格式800包含以下按照图9A所图示的顺序所列出的下列字段。
EVEX前缀(字节0-3) 902 – 按照四字节形式来编码。
格式字段840(EVEX字节0、位[7:0]) – 第一字节(EVEX字节0)是格式字段840,并且它包含(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(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'字段810 – 这是REX'字段810的第一部分,并且是EVEX.R'位字段(EVEX字节1,位[4] – R'),其用来对扩展32寄存器组的上16或下16进行编码。在本发明的一个实施例中,这个位连同如以下所指示的其他位按照位反转格式来存储,以与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.vvv对于按照反转(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(因此PLA能够在未修改的情况下运行这些遗留指令的遗留和EVEX格式)之前在运行时扩大为遗留SIMD前缀。虽然较新指令能够将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'字段810 – 这是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具有暗示没有写入掩码用于特定指令的特殊行为(这可按照多种方式来实现,包含使用硬连线到全部一的写入掩码或者绕过掩蔽硬件的硬件)。
真正操作码字段930(字节4)又称作操作码字节。操作码的部分在这个字段中被指定。
MOD R/M字段940(字节5)包含MOD字节942、Reg字段944和/或R/M字段946。如先前所述,MOD字段942的内容区分存储器访问和非存储器访问操作。Reg字段944的作用能够概括成两种状况:对目标寄存器操作数或者源寄存器操作数进行编码,或者被看作是操作码扩展而不用来对任何指令操作数进行编码。R/M字段946的作用可包含下列:对引用存储器地址的指令操作数进行编码,或者对目标寄存器操作数或源寄存器操作数进行编码。
换算、索引、基址(SIB)字节(字节6) – 如先前所述,换算字段850的内容用于存储器地址生成。SIB.xxx 954和SIB.bbb 956 – 先前针对寄存器索引Xxxx和Bbbb已经提到这些字段的内容。
位移字段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使用8位,其能够设置成仅四个实际有用值-128、-64、0和64;由于常常需要较大范围,所以使用disp32;但是disp32要求4个字节。与disp8和disp32形成对照,位移因子字段862B是disp8的重新解释;当使用位移因子字段862B时,实际位移通过位移因子字段的内容乘以存储器操作数访问的大小(N)来确定。这种类型的位移称作disp8*N。这减少平均指令长度(用于位移但是具有大许多的范围的单个字节)。这种压缩位移基于如下假设:有效位移是存储器访问的粒度的倍数,并且因此地址偏移的冗余低阶位无需被编码。换言之,位移因子字段862B代替遗留x86指令集8位位移。因此,位移因子字段862B按照与x86指令集8位位移相同的方式来编码(因此没有ModRM/SIB编码规则的变化),其中唯一的例外是disp8过度加载到disp8*N。换言之,不存在编码规则或编码长度的变化,而是仅存在通过硬件(其需要将位移缩放存储器操作数的大小,以得到逐字节的地址偏移)对位移值的解释的变化。立即数字段872如先前所述的那样进行操作。
全操作码字段
图9B是图示按照本发明的一个实施例、组成全操作码字段874的特定向量友好指令格式900的字段的框图。具体来说,全操作码字段874包含格式字段840、基础操作字段842和数据元素宽度(W)字段864。基础操作字段842包含前缀编码字段925、操作码映射字段915和真正操作码字段930。
寄存器索引字段
图9C是图示按照本发明的一个实施例、组成寄存器索引字段844的特定向量友好指令格式900的字段的框图。具体来说,寄存器索引字段844包含REX字段905、REX'字段910、MODR/M.reg字段944、MODR/M.r/m字段946、VVVV字段920、xxx字段954和bbb字段956。
扩大操作字段
图9D是图示按照本发明的一个实施例、组成扩大操作字段850的特定向量友好指令格式900的字段的框图。当类(U)字段868包含0时,它表示EVEX.U0(A类868A);当它包含1时,它表示EVEX.U1(B类868B)。当U=0并且MOD字段942包含11(表示无存储器访问操作)时,α字段852(EVEX字节3,位[7] – EH)被解释为rs字段852A。当rs字段852A包含1(舍入852A.1)时,β字段854(EVEX字节3,位[6:4] – SSS)被解释为舍入控制字段854A。舍入控制字段854A包含一位SAE字段856和二位舍入操作字段858。当rs字段852A包含0(数据变换852A.2)时,β字段854(EVEX字节3,位[6:4] – SSS)被解释为三位数据变换字段854B。当U=0并且MOD字段942包含00、01或10(表示存储器访问操作)时,α字段852(EVEX字节3,位[7] – EH)被解释为释放提示(EH)字段852B,以及β字段854(EVEX字节3,位[6:4] – SSS)被解释为三位数据操纵字段854C。
当U=1时,α字段852(EVEX字节3,位[7] – EH)被解释为写入掩码控制(Z)字段852C。当U=1并且MOD字段942包含11(表示无存储器访问操作)时,β字段854(EVEX字节3,位[4] – S0)的部分被解释为RL字段857A;当它包含1(舍入857A.1)时,β字段854(EVEX字节3,位[6-5] – S2-1)的其余部分被解释为舍入操作字段859A,而当RL字段857A包含0(VSIZE857.A2)时,β字段854(EVEX字节3,位[6-5] – S2-1)的其余部分被解释为向量长度字段859B(EVEX字节3,位[6-5] – L1-0)。当U=1并且MOD字段942包含00、01或10(表示存储器访问操作)时,β字段854(EVEX字节3,位[6:4] – SSS)被解释为向量长度字段859B(EVEX字节3,位[6-5] – L1-0)和广播字段857B(EVEX字节3,位[4] – B)。
示范寄存器架构
图10是按照本发明的一个实施例的寄存器架构1000的框图。在所图示的实施例中,存在512位宽的32个向量寄存器1010;这些寄存器称作zmm0至zmm31。下16个zmm寄存器的低阶256位覆盖于寄存器ymm0-16上。下16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖于寄存器xmm0-15上。特定向量友好指令格式900在这些覆盖寄存器堆上进行操作,如下表所图示。
换言之,向量长度字段859B在最大长度与一个或多个其他较短长度之间进行选择,其中每个这种较短长度是先前长度的一半长度;以及没有向量长度字段859B的指令模板对最大向量长度进行操作。此外,在一个实施例中,特定向量友好指令格式900的B类指令模板对打包或标量单/双精度浮点数据和打包或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置所执行的操作;高阶数据元素位置保持为与它们在指令之前原本的情况相同或者根据本实施例归零。
写入掩码寄存器1015 – 在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每个的大小为64位。在备选实施例中,写入掩码寄存器1015的大小为16位。如先前所述,在本发明的一个实施例中,向量掩码寄存器k0不能用作写入掩码;当将正常指示k0的编码用于写入掩码时,它选择0xFFFF的硬连线写入掩码,从而有效地禁用那个指令的写入掩码。
通用寄存器1025 – 在所图示实施例中,存在16个64位通用寄存器,其连同现有x86寻址模式一起用来对存储器操作数进行寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来参考。
标量浮点栈寄存器堆(x87栈)1045(在其上被混叠MMX打包整数平面寄存器堆1050) – 在所图示的实施例中,x87栈是八元素栈,其用来使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作;而MMX寄存器用来对64位打包整数数据执行操作,以及保存在MMX与XMM寄存器之间执行的一些操作的操作数。
本发明的备选实施例可使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少或不同的寄存器堆和寄存器。
示范核架构、处理器和计算机架构
处理器核可按照不同方式为了不同目的并且在不同的处理器中实现。例如,这类核的实现可包含:1) 意图用于通用计算的通用有序核;2) 意图用于通用计算的高性能通用无序核;3) 主要意图用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包含:1) CPU,包含意图用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核;以及2) 协处理器,包含主要意图用于图形和/或科学(吞吐量)的一个或多个专用核。这类不同的处理器引起不同的计算机系统架构,其可包含:1) 与CPU分开的芯片上的协处理器;2) 与CPU相同的封装中的单独芯片上的协处理器;3) 与CPU相同的管芯上的协处理器(在所述情况下,这种协处理器有时称作专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者称作专用核);以及4) 可在相同管芯上包含所述CPU(有时称作应用(一个或多个)核或(一个或多个)应用处理器)、上述协处理器和附加功能性的芯片上的系统。接下来描述示范核架构,后面是示范处理器和计算机架构的描述。
示范核架构
有序和无序核框图
图11A是图示按照本发明的实施例、示范有序管线和示范寄存器重命名、无序发出/运行管线的框图。图11B是图示按照本发明的实施例、要包含在处理器中的有序架构核和示范寄存器重命名、无序发出/运行架构核的框图。图11A-B中的实线框图示有序管线和有序核,而虚线框的可选添加图示寄存器重命名、无序发出/运行管线和核。给定有序方面是无序方面的子集,将描述无序方面。
图11A中,处理器管线1100包含取级1102、长度解码级1104、解码级1106、分配级1108、重命名级1110、调度(又称作分发或发出)级1112、寄存器读/存储器读级1114、运行级1116、回写/存储器写级1118、异常处理级1122和提交级1124。
图11B示出包含耦合到运行引擎单元1150并且均耦合到存储器单元1170的前端单元1130的处理器核1190。核1190可以是简化指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或备选核类型。作为又一个选项,核1190可以是专用核(例如比如网络或通信核)、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元1130包含耦合到指令高速缓存单元1134的分支预测单元1132,指令高速缓存单元1134耦合到指令转换后备缓冲器(TLB)1136,指令转换后备缓冲器(TLB)1136耦合到指令取单元1138,指令取单元1138耦合到解码单元1140。解码单元1140(或解码器)可对指令进行解码,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令来解码或得出或者以其他方式反映原始指令。解码单元1140可使用各种不同的机制来实现。适当机制的示例包含但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1190包含微代码ROM或另一媒介,其存储某些宏指令的微代码(例如在解码单元1140中或者以别的方式在前端单元1130内)。解码单元1140耦合到运行引擎单元1150中的重命名/分配器单元1152。
运行引擎单元1150包含重命名/分配器单元1152,其耦合到引退单元1154和一组一个或多个调度器单元1156。(一个或多个)调度器单元1156表示任何数量的不同调度器,包含保留站、中心指令窗口等。(一个或多个)调度器单元1156耦合到(一个或多个)物理寄存器堆单元1158。(一个或多个)物理寄存器堆单元1158的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要运行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元1158包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元1158被引退单元1154重叠,以图示其中可实现寄存器重命名和无序运行的各种方式(例如使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元1154和(一个或多个)物理寄存器堆单元1158耦合到(一个或多个)运行集群1160。(一个或多个)运行集群1160包含一组一个或多个运行单元1162和一组一个或多个存储器访问单元1164。运行单元1162可执行各种操作(例如移位、加法、减法、乘法)并且在各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)上来执行。虽然一些实施例可包含专用于特定功能或功能集合的多个运行单元,但是其他实施例可以仅包含一个运行单元或多个运行单元,其全部执行全部功能。(一个或多个)调度器单元1156、(一个或多个)物理寄存器堆单元1158和(一个或多个)运行集群1160示为可能是多个的,因为某些实施例创建某些类型的数据/操作的单独管线(例如标量整数管线、标量浮点/打包整数/打包浮点/向量整数/向量浮点管线和/或存储器访问管线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或运行集群—以及在单独存储器访问管线的情况下,实现其中只有这个管线的运行集群具有(一个或多个)存储器访问单元1164的某些实施例)。还应当理解,在使用单独管线的情况下,这些管线的一个或多个可以是无序发出/运行,而其余的是有序的。
存储器访问单元1164的集合耦合到存储器单元1170,其包含耦合到数据高速缓存单元1174(其耦合到等级2(L2)高速缓存单元1176)的数据TLB单元1172。在一个示范实施例中,存储器访问单元1164可包含加载单元、存储地址单元和存储数据单元,其各耦合到存储器单元1170中的数据TLB单元1172。指令高速缓存单元1134还耦合到存储器单元1170中的等级2(L2)高速缓存单元1176。L2高速缓存单元1176耦合到一个或多个其他等级的高速缓存,并且最终耦合到主存储器。
作为示例,示范寄存器重命名、无序发出/运行核架构可按如下所述实现管线1100:1) 指令取1138执行取和长度解码级1102和1104;2) 解码单元1140执行解码级1106;3) 重命名/分配器单元1152执行分配级1108和重命名级1110;4) (一个或多个)调度器单元1156执行调度级1112;5) (一个或多个)物理寄存器堆单元1158和存储器单元1170执行寄存器读/存储器读级1114;运行集群1160执行运行级1116;6) 存储器单元1170和(一个或多个)物理寄存器堆单元1158执行回写/存储器写级1118;7) 各种单元可涉及在异常处理级1122中;以及8) 引退单元1154和(一个或多个)物理寄存器堆单元1158执行提交级1124。
核1190可支持一个或多个指令集(例如x86指令集(其中具有随较新版本已经添加的一些扩展);MIPS Technologies of Sunnyvale,CA的MIPS指令集;ARM Holdings ofSunnyvale,CA的ARM指令集(其中具有可选附加扩展、例如NEON)),包含本文所述的(一个或多个)指令。在一个实施例中,核1190包含支持打包数据指令集扩展(例如AVX1、AVX2)的逻辑,由此允许由许多多媒体应用所使用的操作使用打包数据来执行。
应当理解,核可支持多线程化(multithreading)(运行操作或线程的两个或更多并行集合),并且可按照多种方式这样做,包含时间切片多线程化、同时多线程化(其中单个物理核为物理核同时多线程化的线程的每个提供逻辑核)或者其组合(例如,例如在Intel®超线程化技术中的时间切片取和解码以及此后的同时多线程化)。
虽然在无序运行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。虽然处理器的所图示的实施例还包含单独指令和数据高速缓存单元1134/1174和共享L2高速缓存单元1176,但是备选实施例可具有用于指令和数据的单个内部高速缓存,例如比如等级1(L1)内部高速缓存或者多级内部高速缓存。在一些实施例中,系统可包含内部高速缓存以及核和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以是核和/或处理器外部的。
特定示范有序核架构
图12A-B图示更具体的示范有序核架构的框图,所述核将是芯片中的若干逻辑块中的一个(包含相同类型和/或不同类型的其他核)。逻辑块经过具有某种固定功能逻辑、存储器I/O接口和其他必要I/O逻辑(这取决于应用)的高带宽互连网络(例如环形网络)进行通信。
图12A是按照本发明的实施例、单个处理器核连同其到管芯上互连网络1202的连接并且连同其等级2(L2)高速缓存1204的本地子集的框图。在一个实施例中,指令解码器1200支持具有打包数据指令集扩展的x86指令集。L1高速缓存1206允许对标量和向量单元中的高速缓冲存储器的低等待时间访问。虽然在一个实施例中(为了简化设计),标量单元1208和向量单元1210使用单独寄存器组(分别为标量寄存器1212和向量寄存器1214),以及在它们之间所传递的数据被写到存储器并且然后从等级1(L1)高速缓存1206读回,但是本发明的备选实施例可使用不同方式(例如使用单个寄存器组,或者包含允许数据在两个寄存器堆之间来传递而无需被写入和读回的通信路径)。
L2高速缓存1204的本地子集是全局L2高速缓存(其划分为单独本地子集,每处理器核一个)的部分。每个处理器核具有到L2高速缓存1204的其自己的本地子集的直接访问路径。由处理器核所读取的数据存储在其L2高速缓存子集1204中,并且能够与访问其自己的本地L2高速缓存子集的其他处理器核并行地快速访问。由处理器核所写入的数据存储在其自己的L2高速缓存子集1204中,并且如果必要则从其他子集中被冲刷。环形网络确保共享数据的相干性。环形网络是双向的,以便允许诸如处理器核、L2高速缓存和其他逻辑块的代理在芯片内彼此通信。每个环形数据路径每方向为1012位宽。
图12B是按照本发明的实施例、图12A中的处理器核的部分的展开图。图12B包含L1高速缓存1204的L1数据高速缓存1206A部分以及与向量单元1210和向量寄存器1214有关的更多细节。具体来说,向量单元1210是16宽向量处理单元(VPU)(参见16宽ALU 1228),其运行整数、单精度浮动和双精度浮动指令的一个或多个。VPU支持在存储器输入上采用混合单元1220来混合寄存器输入、采用数字转换单元1222A-B的数字转换以及采用复制单元1224的复制。写入掩码寄存器1226允许断言所得到的向量写。
图13是按照本发明的实施例、可具有多于一个核、可具有集成存储器控制器并且可具有集成图形的处理器1300的框图。图13中的实线框图示具有单个核1302A、系统代理1310、一组一个或多个总线控制器单元1316的处理器1300,而虚线框的可选附加图示具有多个核1302A-N、系统代理单元1310中的一组一个或多个集成存储器控制器单元1314和专用逻辑1308的备选处理器1300。
因此,处理器1300的不同实现可包含:1) 具有作为集成图形和/或科学(吞吐量)逻辑(其可包含一个或多个核)的专用逻辑1308和作为一个或多个通用核(例如通用有序核、通用无序核、两者的组合)的核1302A-N的CPU;2) 具有作为主要意图用于图形和/或科学(吞吐量)的大量专用核的核1302A-N的处理器;以及3) 具有作为大量通用有序核的核1302A-N的协处理器。因此,处理器1300可以是通用处理器、协处理器或专用处理器,例如比如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协处理器(包含30个或以上核)、嵌入式处理器等。处理器可在一个或多个芯片上实现。处理器1300可以是一个或多个衬底的一部分和/或可使用多种工艺技术的任何,例如BiCMOS、CMOS或NMOS在一个或多个衬底上实现。
存储器分级结构包含核内的一级或多级高速缓存、一组一个或多个共享高速缓存单元1306以及耦合到集成存储器控制器单元1314的集合的外部存储器(未示出)。共享高速缓存单元1306的集合可包含一个或多个中间级高速缓存,例如等级2(L2)、等级3(L3)、等级4(L4)或者其他等级的高速缓存、最后等级的高速缓存(LLC)和/或它们的组合。虽然在一个实施例中,基于环形的互连单元1312互连集成图形逻辑1308(集成图形逻辑1308是专用逻辑的示例并且又称作专用逻辑)、共享高速缓存单元1306的集合和系统代理单元1310/(一个或多个)集成存储器控制器单元1314,但是备选实施例可将任何数量的众所周知技术用于互连这类单元。在一个实施例中,在一个或多个高速缓存单元1306与核1302A-N之间保持相干性。
在一些实施例中,核1302A-N的一个或多个具有多线程的能力。系统代理1310包含协调和操作核1302A-N的那些组件。系统代理单元1310可包含例如功率控制单元(PCU)和显示器单元。PCU可以是或者包含用于调节核1302A-N和集成图形逻辑1308的功率状态所需的逻辑和组件。显示器单元用于驱动一个或多个外部连接的显示器。
核1302A-N在架构指令集方面可以是同构或异构的;也就是说,核1302A-N的两个或更多可以能够运行相同指令集,而其他核可以能够仅运行那个指令集的子集或者不同的指令集。
示范计算机架构
图14-17是示范计算机架构的框图。在用于膝上型计算机、台式计算机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,蜂窝电话、便携媒体播放机、手持装置和各种其他电子装置的领域中已知的其他系统设计和配置也是适合的。一般来说,能够结合如本文所公开的处理器和/或其他运行逻辑的极多种系统或电子装置一般是适合的。
现在参照图14,所示的是按照本发明的一个实施例的系统1400的框图。系统1400可包含一个或多个处理器1410、1415,其耦合到控制器集线器1420。在一个实施例中,控制器集线器1420包含图形存储器控制器集线器(GMCH)1490和输入/输出集线器(IOH)1450(其可在单独芯片上);GMCH 1490包含存储器和图形控制器,存储器1440和协处理器1445与其耦合;IOH 1450将输入/输出(I/O)装置1460耦合到GMCH 1490。备选地,存储器和图形控制器的一个或两者集成在处理器内(如本文所述),存储器1440和协处理器1445直接耦合到处理器1410以及具有IOH 1450的单个芯片中的控制器集线器1420。
附加处理器1415的可选性质在图14中采用虚线表示。每个处理器1410、1415可包含本文所述处理核的一个或多个,并且可以是处理器1300的某个版本。
存储器1440可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或者两者的组合。对于至少一个实施例,控制器集线器1420经由多点总线(例如前侧总线(FSB))、点对点接口(例如快速路径互连(QPI))或者类似连接1495与(一个或多个)处理器1410、1415进行通信。
在一个实施例中,协处理器1445是专用处理器,例如比如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器1420可包含集成图形加速器。
在包含架构、微架构、热、功率消耗特性等的优点的衡量标准范围方面,在物理资源1410、1415之间能够存在各种差异。
在一个实施例中,处理器1410运行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器1410将这些协处理器指令辨认为应当由所附的协处理器1445来运行的类型。相应地,处理器1410在协处理器总线或其他互连上向协处理器1445发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1445接受和运行所接收的协处理器指令。
现在参照图15,所示的是按照本发明的实施例的第一更具体示范系统1500的框图。如图15所示,多处理器系统1500是点对点互连系统,并且包含经由点对点互连1550所耦合的第一处理器1570和第二处理器1580。处理器1570和1580的每个可以是处理器1300的某个版本。在本发明的一个实施例中,处理器1570和1580分别是处理器1410和1415,而协处理器1538是协处理器1445。在另一个实施例中,处理器1570和1580分别是处理器1410、协处理器1445。
示出处理器1570和1580,其分别包含集成存储器控制器(IMC)单元1572和1582。处理器1570还包含作为其总线控制器单元的部分的点对点(P-P)接口1576和1578;类似地,第二处理器1580包含P-P接口1586和1588。处理器1570、1580可使用点对点(P-P)接口电路1578、1588经由P-P接口1550来交换信息。如图15所示,IMC 1572和1582将处理器耦合到相应存储器、即存储器1532和存储器1534,其可以是本地附连到相应处理器的主存储器的部分。
处理器1570、1580各可使用点对点接口电路1576、1594、1586、1598经由个别P-P接口1552、1554与芯片组1590交换信息。芯片组1590可选地可经由高性能接口1592与协处理器1538交换信息。在一个实施例中,协处理器1538是专用处理器,例如比如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可包含在处理器中或者两个处理器外部,但是仍然经由P-P互连与处理器连接,使得如果处理器被置于低功耗模式中,则任一个或两个处理器的本地高速缓存信息可存储在共享高速缓存中。
芯片组1590可经由接口1596耦合到第一总线1516。在一个实施例中,第一总线1516可以是外设组件互连(PCI)总线或者例如PCI Express总线的总线或另一种第三代I/O互连总线,但是本发明的范围并不局限于此。
如图15所示,各种I/O装置1514可连同总线桥1518(其将第一总线1516耦合到第二总线1520)一起耦合到第一总线1516。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的加速器(例如,比如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器的一个或多个附加处理器1515耦合到第一总线1516。在一个实施例中,第二总线1520可以是低引脚计数(LPC)总线。在一个实施例中,各种装置可耦合到第二总线1520,包含例如键盘和/或鼠标1522、通信装置1527以及可包含指令/代码和数据1530的诸如磁盘驱动或其他海量存储装置的存储单元1528。此外,音频I/O 1524可耦合到第二总线1520。注意,其他架构是可能的。例如,代替图15的点对点架构,系统可实现多点总线或其他这种架构。
现在参照图16,所示的是按照本发明的实施例的第二更具体示范系统1600的框图。图15和图16中的相似元件标有相似参考数字,并且从图16中省略图15的某些方面,以免使图16的其他方面的理解模糊。
图16图示处理器1570、1580可分别包含集成存储器和I/O控制逻辑(“CL”)1572和1582。因此,CL 1572、1582包含集成存储器控制器单元,并且包含I/O控制逻辑。图16图示不仅存储器1532、1534耦合到CL 1572、1582,而且I/O装置1614也耦合到控制逻辑1572、1582。遗留I/O装置1615耦合到芯片组1590。
现在参照图17,所示的是按照本发明的实施例的SoC 1700的框图。图13中的类似元件标有相似参考数字。另外,虚线框是更高级SoC上的可选特征。图17中,(一个或多个)互连单元1702耦合到:应用处理器1710,其包含一组一个或多个核1302A-N(其包含高速缓存单元1304A-N)和(一个或多个)共享高速缓存单元1306;系统代理单元1310;(一个或多个)总线控制器单元1316;(一个或多个)集成存储器控制器单元1314;一组一个或多个协处理器1720,其可包含集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1730;直接存储器访问(DMA)单元1732;以及显示器单元1740,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1720包含专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文所公开的机制的实施例可在硬件、软件、固件或者这类实现方式的组合中实现。本发明的实施例可实现为在可编程系统上运行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包含易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
例如图15所图示的代码1530的程序代码可应用于输入指令,以执行本文所述的功能并且生成输出信息。输出信息可按照已知方式应用于一个或多个输出装置。为了本申请的目的,处理系统包含具有例如比如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器的处理器的任何系统。
程序代码可在高级规程或面向对象的编程语言中实现,以便与处理系统进行通信。如果预期的话,程序代码也可在汇编或机器语言中实现。实际上,本文所述的机制的范围并不局限于对任何具体编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可通过机器可读媒介上存储的、表示处理器内的各种逻辑的代表指令来实现,其在由机器读取时使机器制作执行本文所述技术的逻辑。称作“IP核”的这类表示可存储在有形机器可读媒介上,并且提供给各种客户或制造设施,以便加载到实际制作逻辑或处理器的制造机器中。
这种机器可读存储介质可以包含但不限于通过机器或装置所制造或形成的物品的非暂时有形装置,其中包含:例如硬盘的存储媒体;任何其他类型的磁盘,包含软盘、光盘、致密光盘只读存储器(CD-ROM)、可重写致密光盘(CD-RW)和磁光盘;半导体装置,例如只读存储器(ROM)、例如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)的随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的媒体。
相应地,本发明的实施例还包含非暂时有形机器可读介质,其包含指令或者包含定义本文所述结构、电路、设备、处理器和/或系统特征的设计数据、例如硬件描述语言(HDL)。这类实施例又可称作程序产品。
模仿(包含二进制转化、代码变形等)
在一些情况下,指令转换器可用来将指令从源指令集转换成目标指令集。例如,指令转换器可将指令转化(例如使用静态二进制转化、包含动态编译的动态二进制转化)、变形(morph)、模仿或者以其他方式变换成将要由核来处理的一个或多个其他指令。指令转换器可在软件、硬件、固件或其何组合中实现。指令转换器可以在处理器上、处理器外或者部分处理器上和部分处理器外。
图18是按照本发明的实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是备选地,指令转换器可在软件、固件、硬件或者它们的各种组合中实现。图18示出高级语言1802的程序可使用x86编译器1804来编译,以生成x86二进制代码1806,其可由具有至少一个x86指令集核的处理器1816本机运行。具有至少一个x86指令集核的处理器1816表示任何处理器,其能够通过兼容地运行或者以其他方式处理下列方面来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能:(1) Intel x86指令集核的指令集的实质部分;或者(2) 针对运行于具有至少一个x86指令集核的Intel处理器上的应用或其他软件的对象代码版本,以便取得与具有至少一个x86指令集核的Intel处理器基本上相同的结果。x86编译器1804表示可操作以生成x86二进制代码1806(例如对象代码)(其能够在具有或没有附加链接处理的情况下运行于具有至少一个x86指令集核的处理器1816上)的编译器。类似地,图18示出高级语言1802的程序可使用备选指令集编译器1808来编译,以便生成备选指令集二进制代码1810,其可由没有至少一个x86指令集核的处理器1814(例如具有运行MIPS Technologies of Sunnyvale,CA的MIPS指令集和/或运行ARMHoldings of Sunnyvale,CA的ARM指令集的核的处理器)本机运行。指令转换器1812用来将x86二进制代码1806转换为可由没有x86指令集核的处理器1814本机运行的代码。这个转换代码不可能与备选指令集二进制代码1810是相同的,因为能够进行这个操作的指令转换器难以制作;但是,转换代码将实现一般操作,并且由来自备选指令集的指令来组成。因此,指令转换器1812表示软件、固件、硬件或者其组合,其经过模仿、仿真或者任何其他过程允许处理器或者没有x86指令集处理器或核的其他电子装置运行x86二进制代码1806。

Claims (21)

1. 一种设备,包括:
解码器部件,其用来对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
运行电路系统部件,其用来运行所解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个所述归约的结果,其中要用于所述归约中的所述第一打包数据源的所述打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在所述第二打包数据源中存储的所述打包数据元素的比较的结果来支配。
2.如权利要求1所述的设备,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是存储器位置。
3.如权利要求1所述的设备,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是打包数据寄存器。
4.如权利要求1-3中任何所述的设备,其中,所述第二源操作数中存储的打包数据元素的值形成掩码。
5.如权利要求1-4中任何所述的设备,其中,要运行所解码指令,所述运行电路系统部件要向来自暂时向量的第一集合的单独暂时向量广播来自所述第二打包数据源的索引的给定向量的每个索引,将暂时向量的所述第一集合与来自所述第二打包数据源的索引的所述给定向量进行比较以生成掩码集合,使用所述掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的所述第二集合全部归约到单个向量。
6.如权利要求1-5中任何所述的设备,其中,所述归约是加法、减法、乘法和除法中的一个。
7.如权利要求1-6中任何所述的设备,其中,所述比较是三角和等于、不等于、小于、大于、小于或等于和大于或等于中的一个或多个。
8. 一种方法,包括:
对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
运行所解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个所述归约的结果,其中要广播的所述第一打包数据源的所述打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在所述第二打包数据源中存储的所述打包数据元素的比较的结果来支配。
9.如权利要求8所述的方法,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是存储器位置。
10.如权利要求8所述的方法,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是打包数据寄存器。
11.如权利要求8所述的方法,其中,所述第二源操作数中存储的打包数据元素的值形成掩码。
12.如权利要求8-11中任何所述的方法,其中,对于所述目标操作数的每个打包数据元素位置,向来自暂时向量的第一集合的单独暂时向量广播来自所述第二打包数据源的索引的给定向量的每个索引,将暂时向量的所述第一集合与来自所述第二打包数据源的索引的所述给定向量进行比较以生成掩码集合,使用所述掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的所述第二集合全部归约到单个向量。
13.如权利要求8-12中任何所述的方法,其中,来自所述目的地的初始值是所述归约生成中使用的另一个输入。
14.如权利要求8-13中任何所述的方法,还包括:
在解码之前把来自第一指令集的所述指令转化为第二指令集的指令,其中待解码的所述指令属于所述第二指令集。
15. 一种存储指令的非暂时机器可读媒介,所述指令在由处理器运行时使所述处理器执行方法,所述方法包括:
对具有目标操作数以及第一源操作数和第二源操作数的字段的指令进行解码,以及
运行所述解码指令以采用归约操作来执行第一打包数据源的广播打包数据元素的归约,并且在打包数据目的地中存储每个所述归约的结果,其中要广播的所述第一打包数据源的所述打包数据元素通过在第二打包数据源中存储的打包数据元素的广播值与在没有广播的情况下的在所述第二打包数据源中存储的所述打包数据元素的比较的结果来支配。
16.如权利要求15所述的非暂时机器可读媒介,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是存储器位置。
17.如权利要求15所述的非暂时机器可读媒介,其中,所述第一源操作数是打包数据寄存器,以及所述第二源操作数是打包数据寄存器。
18.如权利要求15所述的非暂时机器可读媒介,其中,所述第二源操作数中存储的打包数据元素的值形成掩码。
19.如权利要求15-18中任何所述的非暂时机器可读媒介,其中,对于所述目标操作数的每个打包数据元素位置,向来自暂时向量的第一集合的独立暂时向量广播来自所述第二打包数据源的索引的给定向量的各索引,将暂时向量的所述第一集合与来自所述第二打包数据源的索引的所述给定向量进行比较以生成掩码集合,使用所述掩码集合向暂时向量的第二集合广播为归约所提供的值,并且通过归约操作将暂时向量的所述第二集合全部归约到单个向量。
20.如权利要求15-19中任何所述的非暂时机器可读媒介,其中,来自所述目的地的初始值是所述归约生成中使用的另一个输入。
21.如权利要求15-20中任何所述的非暂时机器可读媒介,还包括:
在解码之前把来自第一指令集的所述指令转化为第二指令集的指令,其中待解码的所述指令属于所述第二指令集。
CN201711239218.2A 2016-12-30 2017-11-30 用于广播比较加法的系统、设备和方法 Pending CN108268277A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/396,199 US10268479B2 (en) 2016-12-30 2016-12-30 Systems, apparatuses, and methods for broadcast compare addition
US15/396199 2016-12-30

Publications (1)

Publication Number Publication Date
CN108268277A true CN108268277A (zh) 2018-07-10

Family

ID=60856985

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711239218.2A Pending CN108268277A (zh) 2016-12-30 2017-11-30 用于广播比较加法的系统、设备和方法

Country Status (3)

Country Link
US (1) US10268479B2 (zh)
EP (1) EP3343358A1 (zh)
CN (1) CN108268277A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI807927B (zh) * 2022-07-01 2023-07-01 晶心科技股份有限公司 具有向量歸約方法與元素歸約方法的向量處理器

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998006042A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Wide instruction unpack method and apparatus
US7480787B1 (en) * 2006-01-27 2009-01-20 Sun Microsystems, Inc. Method and structure for pipelining of SIMD conditional moves
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
CN104126172B (zh) 2011-12-22 2018-03-20 英特尔公司 用于掩码寄存器扩充操作的装置和方法
WO2013095575A1 (en) 2011-12-22 2013-06-27 Intel Corporation Broadcast operation on mask register
US20140201499A1 (en) * 2011-12-23 2014-07-17 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value
CN104126167B (zh) 2011-12-23 2018-05-11 英特尔公司 用于从通用寄存器向向量寄存器进行广播的装置和方法
WO2013095642A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for setting an output mask in a destination writemask register from a source write mask register using an input writemask and immediate
CN104204989B (zh) 2012-03-30 2017-10-13 英特尔公司 用于选择向量计算的元素的装置和方法
US9842046B2 (en) * 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
US9588766B2 (en) 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9851970B2 (en) * 2014-12-23 2017-12-26 Intel Corporation Method and apparatus for performing reduction operations on a set of vector elements

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI807927B (zh) * 2022-07-01 2023-07-01 晶心科技股份有限公司 具有向量歸約方法與元素歸約方法的向量處理器

Also Published As

Publication number Publication date
EP3343358A1 (en) 2018-07-04
US20180189064A1 (en) 2018-07-05
US10268479B2 (en) 2019-04-23

Similar Documents

Publication Publication Date Title
CN104094218B (zh) 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法
CN104756068B (zh) 合并相邻的聚集/分散操作
CN104011673B (zh) 向量频率压缩指令
CN104137060B (zh) 高速缓存协处理单元
CN104137059B (zh) 多寄存器分散指令
CN104081341B (zh) 用于多维数组中的元素偏移量计算的指令
CN104011647B (zh) 浮点舍入处理器、方法、系统和指令
CN104081336B (zh) 用于检测向量寄存器内的相同元素的装置和方法
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN104137061B (zh) 用于执行向量频率扩展指令的方法、处理器核和计算机系统
CN104094221B (zh) 基于零的高效解压缩
CN107003843A (zh) 用于对向量元素集合执行约减操作的方法和设备
CN108292224A (zh) 用于聚合收集和跨步的系统、设备和方法
CN104081337B (zh) 用于响应于单个指令来执行横向部分求和的系统、装置和方法
CN104011650B (zh) 使用输入写掩码和立即数从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的系统、装置和方法
CN104185837B (zh) 在不同的粒度等级下广播数据值的指令执行单元
CN109716290A (zh) 用于经融合的乘加的系统、装置和方法
CN104350461B (zh) 具有不同的读和写掩码的多元素指令
CN104583940B (zh) 用于skein256 sha3算法的处理器、方法、数据处理系统和设备
CN110321157A (zh) 用于具有可变精度输入操作数的融合乘-加操作的指令
CN108292227A (zh) 用于步进加载的系统、设备和方法
CN108701028A (zh) 用于执行用于置换掩码的指令的系统和方法
CN108196823A (zh) 用于执行双块绝对差求和的系统、装置和方法
CN108268244A (zh) 用于算术递归的系统、装置和方法
CN107111486A (zh) 用于计算z序曲线中的下一点的坐标的向量指令

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20180710

WD01 Invention patent application deemed withdrawn after publication