CN116009814A - 用于经融合的乘加的系统、装置和方法 - Google Patents

用于经融合的乘加的系统、装置和方法 Download PDF

Info

Publication number
CN116009814A
CN116009814A CN202310172571.2A CN202310172571A CN116009814A CN 116009814 A CN116009814 A CN 116009814A CN 202310172571 A CN202310172571 A CN 202310172571A CN 116009814 A CN116009814 A CN 116009814A
Authority
CN
China
Prior art keywords
source
packed data
instruction
result
destination
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
CN202310172571.2A
Other languages
English (en)
Inventor
R.瓦伦丁
G.利夫钦
P.马吉切尔
M.J.查尼
E.奥尔德-艾哈迈德-瓦尔
J.科巴尔
M.B.格卡尔
Z.斯珀伯
S.鲁巴诺维奇
A.格拉德斯坦
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
Priority to CN202310172571.2A priority Critical patent/CN116009814A/zh
Publication of CN116009814A publication Critical patent/CN116009814A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/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/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/30105Register structure
    • 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/30181Instruction operation extension or modification
    • 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, look ahead
    • G06F9/3818Decoding for concurrent execution

Abstract

本申请公开了用于经融合的乘加的系统、装置和方法。在一些实施例中,第一和第二紧缩数据源操作数的紧缩数据元素具有与第三紧缩数据操作数的紧缩数据元素的第二大小不同的第一大小。执行电路执行经解码的单个指令,用以为目的地操作数的每个紧缩数据元素定位履行:来自第一和第二紧缩数据源的、与第三紧缩数据源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三紧缩数据源的紧缩数据元素定位的全大小紧缩数据元素,并且将加法结果存储在与第三紧缩数据源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。

Description

用于经融合的乘加的系统、装置和方法
本申请是PCT国际申请号为PCT/US2016/057991、国际申请日为2016年10月20日、进入中国国家阶段的申请号为201680089435.5,题为“用于经融合的乘加的系统、装置和方法”的发明专利申请的分案申请。
技术领域
本发明的领域一般地涉及计算机处理器架构,并且更具体地涉及当被执行的时候引发特定结果的指令。
背景技术
线性代数中的常见操作是乘法累加操作(例如c=c+a*b)。乘法累加典型地是操作流中的子操作,例如在两个向量之间的点积,其还可以是矩阵乘法中列和行的单个乘积。例如,
C=0
For(I)
C+=A[l]*B[l]。
附图说明
本发明作为示例而不是限制地在附图的各图中被图示,在所述附图中,同样的参考标记指示类似的元素并且其中:
图1图示了根据实施例的使用不同大小的操作数的经融合的乘法累加指令的示例性执行;
图2图示了根据实施例的二次幂大小的SIMD实现方式,其中累加器使用比到乘法器的输入更大的输入大小;
图3图示了用于处理诸如经融合的乘法累加指令之类的指令的硬件的实施例;
图4图示了由处理器执行以处理经融合的乘法累加指令的方法的实施例;
图5图示了经融合的乘法累加的执行的子集的实施例;
图6图示了用于在硬件中实现该指令的伪代码的实施例;
图7图示了经融合的乘法累加的执行的子集的实施例;
图8图示了用于在硬件中实现该指令的伪代码的实施例;
图9图示了经融合的乘法累加的执行的子集的实施例;
图10图示了用于在硬件中实现该指令的伪代码的实施例;
图11图示了经融合的乘法累加的执行的子集的实施例;
图12图示了用于在硬件中实现该指令的伪代码的实施例;
图13A是一框图,其图示了根据本发明的实施例的通用向量友好的指令格式及其A类指令模板;
图13B是一框图,其图示了根据本发明的实施例的通用向量友好的指令格式及其B类指令模板;
图14A是一框图,其图示了根据本发明的实施例的示例性的特定向量友好的指令格式;
图14B是一框图,其图示了根据本发明的一个实施例的构成全操作码字段的特定向量友好的指令格式的字段;
图14C是一框图,其图示了根据本发明的一个实施例的构成寄存器索引字段的特定向量友好的指令格式的字段;
图14D是一框图,其图示了根据本发明的一个实施例的构成扩增操作字段的特定向量友好的指令格式的字段;
图15是根据本发明的一个实施例的寄存器架构的框图;
图16A是一框图,其图示了根据本发明的实施例的示例性有序的流水线以及示例性的寄存器重命名、无序的发布/执行流水线二者;
图16B是一框图,其图示了根据本发明的实施例的有序架构核,以及将被包括在处理器中的示例性的寄存器重命名、无序的发布/执行架构核二者的示例性实施例;
图17A是根据本发明的实施例的单个处理器核的框图,所述单个处理器核连同其与管芯上互连网络1702的连接以及连同其2级(L2)高速缓存1704的局部子集;
图17B是根据本发明的实施例的图17A中的处理器核的部分的展开视图;
图18是根据本发明的实施例的处理器1800的框图,所述处理器1800可以具有多于一个核、可以具有集成的存储器控制器、并且可以具有集成的图形;
图19示出了根据本发明的一个实施例的系统的框图;
图20是根据本发明的实施例的第一更特定示例性系统的框图;
图21是根据本发明的实施例的第二更特定示例性系统的框图;
图22是根据本发明的实施例的SoC的框图;以及
图23是一框图,其根据本发明的实施例而对比了使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令。
具体实施方式
在以下描述中,阐明了众多具体细节。然而,理解的是,本发明的实施例可以在没有这些具体细节的情况下被实践。在其它实例中,众所周知的电路、结构和技术没有被详细示出以便不使对本描述的理解模糊不清。
本说明书中对“一个实施例”、“实施例”、“示例实施例”等等的提及指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可以不一定包括所述特定的特征、结构或特性。此外,这样的短语不一定指代相同的实施例。此外,当结合实施例描述了特定的特征、结构或特性的时候,所主张的是无论是否被明确地描述,结合其它实施例来影响这样的特征、结构或特性在本领域技术人员的知识范围内。
在处理大数据集中,可以通过将数据类型的大小定得尽可能小而增大存储器和计算密度。如果输入项来自传感器数据,那么可预期8位或16位整数数据作为输入。神经网络计算,其也可以被编码以匹配该密集格式,典型地具有“小”数作为输入项。然而,累加器对乘积求和,意味着累加器应当容许输入项的位数的两倍(乘法的性质)并且潜在地容许多得多,以便避免在计算中任何点处的溢出或饱和。
本文中详述的是如下实施例:所述实施例尝试将输入数据大小保持得很小,并且总计到经融合的乘法累加(FMA)操作的链中的更大累加器。图1图示了根据实施例的使用不同大小的操作数的经融合的乘法累加指令的示例性执行。第一源101(例如SIMD或向量寄存器)和第二源103存储关于第三源105的“一半大小的”紧缩(packed)数据元素(例如单输入、多数据(SIMD)或向量寄存器),所述第三源105存储用于累加的全大小紧缩数据元素。其中紧缩数据元素大小是以此方式的值的任何集合是可支持的。
如所示出的,被存储在第一和第二源101和103的相同定位的紧缩数据元素中的值被乘在一起。例如,A0*B0、A1*B1等等。两个这样的“一半大小的”紧缩数据元素乘法的结果被加到来自第三源105的对应的“全大小的”紧缩数据元素。例如,A0*B0+A1*B1+C0等等。
结果被存储在目的地107(例如SIMD寄存器)中,所述目的地107具有至少“全大小”的紧缩数据元素大小。在一些实施例中,第三源105和目的地107是相同的。
图2图示了根据实施例的二次幂大小的SIMD实现方式,其中累加器使用比到乘法器的输入更大的输入大小。注意到,(对于乘法器)的源以及累加器值可以是有符号或无符号的值。对于具有2X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的两倍大小),表201图示了不同的配置。对于字节大小的源,累加器使用字或半精度浮点(HPFP)值,其在大小方面是16位的。对于字大小的源,累加器使用32位整数或单精度浮点(SPFP)值,其在大小方面是32位的。对于SPFP或32位整数大小的源,累加器使用64位整数或双精度浮点(DPFP)值,其在大小方面是64位的。使用图1作为示例,当源1 101和源2 103的紧缩数据元素大小是8位的时候,于是累加器将使用来自源3 103的16位大小的数据元素。当源1 101和源2 103的紧缩数据元素大小是16位的时候,于是累加器将使用来自源3 103的32位大小的数据元素。当源1 101和源2103的紧缩数据元素大小是32位的时候,于是累加器将使用来自源3 103的64位大小的数据元素。
对于具有4X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的四倍大小),表203图示了不同的配置。对于字节大小的源,累加器使用32位整数或单精度浮点(SPFP)值,其在大小方面是32位的。对于字大小的源,累加器使用64位整数或双精度浮点(DPFP)值,其在大小方面是64位的。使用图1作为示例,当源1 101和源2 103的紧缩数据元素大小是8位的时候,于是累加器将使用来自源3 103的32位大小的数据元素。当源1 101和源2 103的紧缩数据元素大小是16位的时候,于是累加器将使用来自源3 103的64位大小的数据元素。
对于具有8X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的八倍大小),表205图示了一配置。对于字节大小的源,累加器使用64位整数或双精度浮点(DPFP)值,其在大小方面是64位的。使用图1作为示例,当源1 101和源2 103的紧缩数据元素大小是8位的时候,于是累加器将使用来自源3 103的64位大小的数据元素。
本文中详述的是用于经融合的乘法累加的指令和电路的实施例。在一些实施例中,经融合的乘法累加指令具有混合精度和/或使用水平缩减,如本文中所详述的。
本文中详述的是如下指令的实施例:所述指令当被执行的时候为目的地的每个紧缩数据元素定位引起来自第一和第二源的、与第三源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,并且将来自这些乘法的结果加到第三源的紧缩数据元素定位的全大小(相对于N大小的紧缩数据元素)紧缩数据元素,并且将(多个)加法的结果存储在与第三源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。例如,当M等于2(例如全大小的紧缩数据元素是16位并且N是8位)的时候,来自第一源的相继紧缩数据元素被乘到第二源的相应的相继紧缩数据元素。
因而,本文中所详述的是如下指令的实施例:所述指令当被执行的时候引起来自第一和第二源的一半大小的紧缩数据元素对的乘法,并且将来自这些乘法的结果加到第三源的全大小(相对于一半大小的紧缩数据元素)紧缩数据元素并且将结果存储在目的地中。换言之,在一些实施例中,对于第三源的每个数据元素定位i,存在来自第一源的数据元素定位[2i]的数据与来自第二源的数据元素定位[2i]的数据的乘法用以生成第一结果,来自第一源的数据元素定位[2i+1]的数据与来自第二源的数据元素定位[2i+1]的数据的乘法用以生成第二结果,以及将所述第一和第二结果加到来自第三源的数据元素定位i的数据。在一些实施例中,在加法结束时执行饱和。在一些实施例中,来自第一和/或第二源的数据在乘法之前经符号扩展。
此外,本文中所详述的是如下指令的实施例:所述指令当被执行的时候引起来自第一和第二源的四分之一大小的紧缩数据元素四重件(quartet)的乘法,并且将来自这些乘法的结果加到第三源的全大小(相对于四分之一大小的紧缩数据元素)紧缩数据元素并且将结果存储在目的地中。换言之,在一些实施例中,对于第三源的每个数据元素定位i,存在来自第一源的数据元素定位[4i]的数据与来自第二源的数据元素定位[4i]的数据的乘法用以生成第一结果,来自第一源的数据元素定位[4i+1]的数据与来自第二源的数据元素定位[4i+1]的数据的乘法用以生成第二结果,来自第一源的数据元素定位[4i+2]的数据与来自第二源的数据元素定位[4i+2]的数据的乘法用以生成第二结果,来自第一源的数据元素定位[4i+3]的数据与来自第二源的数据元素定位[4i+3]的数据的乘法用以生成第二结果,以及将所述第一、第二、第三和第四结果加到来自第三源的数据元素定位i的数据。在一些实施例中,在加法结束时执行饱和。在一些实施例中,来自第一和/或第二源的数据在乘法之前经符号扩展。
在指令的整数版本的一些实施例中,饱和电路用于当加法导致太大值的时候保持操作数的符号。特别地,饱和评估发生在多路加法与向目的地的写入中间的无限精度结果上。存在实例,其中最大正数或最小负数不能被信任,因为它可能反映计算超过了容器空间。然而,这至少可以被检查。当累加器是浮点并且输入项是整数的时候,于是要回答的问题是如何并且在何时进行从整数乘积的转换使得不存在从部分项到最终浮点累加的双凑整(double-rounding)。在一些实施例中,乘积和以及浮点累加器被变成无限精度值(数百位的定点数),加法被执行,然后执行向实际累加器类型的单凑整。
在一些实施例中,当输入项是浮点操作数的时候,凑整以及应对特殊值(无穷并且不是数(NAN)),计算中差错(fault)的排序需要在定义中解决。在一些实施例中,操作的次序被指定,其被仿真并且确保实现方式以该次序递送差错。对于这样的实现方式而言也许不可能避免在计算过程中的多个凑整。单精度乘法可完全填充到双精度结果中,而无论输入值如何。然而,两个这样的操作的水平加法在没有凑整的情况下可能不适合双精度型,并且总和在没有附加凑整的情况下可能不适合累加器。在一些实施例中,凑整在水平求和期间被执行,并且在累加期间被执行一次。
图3图示了用于处理诸如经融合的乘法累加指令之类的指令的硬件的实施例。如所图示的,存储装置303存储经融合的乘法累加指令301,其待执行,为目的地的每个紧缩数据元素定位引起来自第一和第二源的、与第三源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三源的紧缩数据元素定位的全大小(相对于N大小的紧缩数据元素)紧缩数据元素,并且将(多个)加法的结果存储在与第三源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。
由解码电路305接收指令301。例如,解码电路305从取出逻辑/电路接收该指令。所述指令包括针对第一、第二和第三源以及目的地的字段。在一些实施例中,源和目的地是寄存器。另外,在一些实施例中,第三源和目的地是相同的。指令301的操作码和/或前缀包括对以下的指示:字节、字、双字和四字的源和目的地数据元素大小{B/W/D/Q},以及迭代的数目。
稍后将详述至少一个指令格式的更详细的实施例。解码电路305将指令解码成一个或多个操作。在一些实施例中,该解码包括生成将由执行电路(诸如执行电路311)执行的多个微操作。解码电路305还解码指令前缀。
在一些实施例中,寄存器重命名、寄存器分配和/或调度电路307提供用于以下各项中一个或多个的功能性:1)将逻辑操作数之值重命名成物理操作数之值(例如,在一些实施例中的寄存器混叠表),2)将状态位和标志分配给经解码的指令,以及3)对经解码的指令进行调度以用于在指令池外的执行电路上执行(例如在一些实施例中通过使用预留站)。寄存器(寄存器文件)和/或存储器308存储数据,如将由执行电路309在其上操作的指令的操作数。示例性寄存器类型包括紧缩数据寄存器、通用寄存器、和浮点寄存器。
执行电路309执行经解码的指令。
在一些实施例中,引退/写回电路311在架构上将目的地寄存器提交到寄存器或存储器中,并且引退指令。
用于经融合的乘法累加指令的格式的实施例是FMA[SOURCESIZE{B/W/D/Q}][DESTSIZE{B/W/D/Q}]DSTREG、SRC1、SRC2、SRC3。在一些实施例中,FMA[SOURCESIZE{B/W/D/Q}][DESTSIZE{B/W/D/Q}]是指令的操作码和/或前缀。B/W/D/Q将源/目的地的数据元素大小指示为字节、字、双字和四字。DSTREG是针对紧缩数据目的地寄存器操作数的字段。SRC1、SRC2和SRC3是针对诸如紧缩数据寄存器和/或存储器之类的源的字段。
用于经融合的乘法累加指令的格式的实施例是FMA[SOURCESIZE{B/W/D/Q}][DESTSIZE{B/W/D/Q}]DSTREG/SRC3、SRC1、SRC2。在一些实施例中,FMA[SOURCESIZE{B/W/D/Q}][DESTSIZE{B/W/D/Q}]是指令的操作码和/或前缀。B/W/D/Q将源/目的地的数据元素大小指示为字节、字、双字和四字。DSTREG/SRC3是针对紧缩数据目的地寄存器操作数和第三源操作数的字段。SRC1、SRC2和SRC3是针对诸如紧缩数据寄存器和/或存储器之类的源的字段。
在一些实施例中,经融合的乘法累加指令包括针对写掩码寄存器操作数(k)(例如FMA[SOURCESIZE{B/W/D/Q}][DESTSIZE{B/W/D/Q}]{k}DSTREG/SRC3,SRC1,SRC2或FMA[SOURCESIZE{B/W/D/Q}][DESTSIZE{B/W/D/Q}]{k}DSTREG,SRC1,SRC2,SRC3)的字段。写掩码用于有条件地控制按元素的操作以及结果的更新。取决于实现方式,写掩码使用合并或归零掩码化。编码有预测(写掩码、写入掩码或k寄存器)操作数的指令使用该操作数来有条件地控制按元素的计算操作以及结果向目的地操作数的更新。预测操作数已知为操作掩码(写掩码)寄存器。操作掩码是一组大小为MAX_KL(64位)的架构寄存器。注意到,从该组架构寄存器中,仅仅k1直到k7可以作为预测操作数被寻址。k0可以被用作常规的源或目的地,但是不能被编码为预测操作数。还注意到,预测操作数可以用于使能实现针对具有存储器操作数(源或目的地)的某些指令的存储器故障抑制。作为预测操作数,操作掩码寄存器包含一个位来管控对向量寄存器的每个数据元素的操作/更新。通常,操作掩码寄存器可以支持具有如下元素大小的指令:单精度、浮点(浮点32)、整数双字(整数32)、双精度浮点(浮点64)、整数四字(整数64)。操作掩码寄存器的长度MAX_XL足以处置多达其中每元素具有一位、即64位的64个元素。对于给定向量长度,每个指令仅仅访问基于其数据类型所需要的最低有效掩码位的数目。操作掩码寄存器以按元素的粒度来影响指令。因此,每个数据元素的任何数字或非数字操作以及中间结果向目的地操作数的按元素的更新在操作掩码寄存器的对应位上被预测。在大多数实施例中,用作预测操作数的操作掩码服从以下性质:1)如果对应的操作掩码位没有被设置,则针对元素不执行指令的操作(这意味着不能由操作在被屏蔽(masked-off)的元素上引起异常或违反,并且因此,作为屏蔽操作的结果不更新任何异常标志);2)如果没有设置对应的写掩码位,则不利用操作的结果来更新目的地元素。代替地,目的地元素值必须被保持(合并-掩码化)或它必须被归零(归零-掩码化);3)对于具有存储器操作数的一些指令,对于具有0掩码位的元素,存储器故障被抑制。注意到,该特征提供用于实现控制流预测的通用构造,因为掩码事实上为向量寄存器目的地提供合并行为。作为可替换方案,掩码化可以用于归零、而不是合并,使得利用0、而不是保持旧值来更新被掩蔽的元素。提供归零行为来在不需要旧值的时候移除对旧值的隐式依赖性。
在实施例中,指令的编码包括缩放-索引-基(SIB,scale-index-base)类型的存储器寻址操作数,其间接地标识存储器中的多个被索引的目的地位置。在一个实施例中,SIB类型的存储器操作数可以包括一编码,其标识基地址寄存器。基地址寄存器的内容可以表示存储器中的基地址,根据所述基地址计算存储器中特定目的地位置的地址。例如,基地址可以是针对经扩展的向量指令的潜在目的地位置的块中的第一位置的地址。在一个实施例中,SIB类型的存储器操作数可以包括一编码,其标识索引寄存器。索引寄存器的每个元素可以指定索引或偏移值,其可用于根据基地址来计算潜在目的地位置的块内的相应目的地位置的地址。在一个实施例中,SIB类型的存储器操作数可以包括一编码,其指定在计算相应目的地地址的时候将被应用到每个索引值的缩放因子。例如,如果为四的缩放因子值被编码在SIB类型的存储器操作数中,则从索引寄存器的元素中所获得的每个索引值可以乘以四,然后被加到基地址以计算目的地地址。
在一个实施例中,具有形式vm32{x,y,z}的SIB类型的存储器操作数可以标识通过使用SIB类型的存储器寻址所指定的存储器操作数的向量数组。在该示例中,存储器地址的数组通过使用以下各项来被指定:公共基寄存器、恒定缩放因子、以及包含单独元素的向量索引寄存器,所述单独元素中的每一个是32位索引值。向量索引寄存器可以是XMM寄存器(vm32x)、YMM寄存器(vm32y)、或ZMM寄存器(vm32z)。在另一实施例中,具有形式vm64{x,y,z}的SIB类型的存储器操作数可以标识通过使用SIB类型的存储器寻址所指定的存储器操作数的向量数组。在该示例中,存储器地址的数组通过使用以下各项来被指定:公共基寄存器、恒定缩放因子、以及包含单独元素的向量索引寄存器,所述单独元素中的每一个是64位索引值。向量索引寄存器可以是XMM寄存器(vm64x)、YMM寄存器(vm64y)、或ZMM寄存器(vm64z)。
图4图示了由处理器执行以处理经融合的乘法累加指令的方法的实施例。
在401处,取出指令。例如,取出经融合的乘法累加指令。经融合的乘法累加指令包括操作码,以及针对如以上所详述的紧缩数据源操作数以及紧缩数据目的地操作数的字段。在一些实施例中,经融合的乘法累加指令包括写掩码操作数。在一些实施例中,从指令高速缓存中取出指令。
在403处解码所取出的指令。例如,所取出的经融合的乘法累加指令由诸如本文中所详述的那个之类的解码电路来解码。
在405处检索与经解码的指令的源操作数相关联的数据值。
在407处,由诸如本文中详述的那个之类的执行电路(硬件)来执行经解码的指令。对于经融合的乘法累加指令,所述执行将为目的地的每个紧缩数据元素定位引起:来自第一和第二源的、与第三源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三源的紧缩数据元素定位的全大小(相对于N大小的紧缩数据元素)紧缩数据元素,并且将(多个)加法的结果存储在与第三源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。
在一些实施例中,在409处提交或引退指令。
图5图示了经融合的乘法累加的执行的子集的实施例。特别地,这图示了目的地的一个紧缩数据元素定位的迭代的执行电路。在该实施例中,经融合的乘法累加对有符号的源起作用,其中所述累加器是2x输入数据大小。图6图示了用于在硬件中实现该指令的伪代码的实施例。
第一有符号的源(源1 501)和第二有符号的源(源2 503)各自具有四个紧缩数据元素。这些紧缩数据元素中的每一个存储有符号的数据,诸如浮点数据。第三有符号的源509(源3)具有两个紧缩数据元素,其中每一个都存储有符号的数据。第一和第二有符号的源501和503的大小是第三有符号的源509的大小的一半。例如,第一和第二有符号的源501和503可以具有32位紧缩数据元素(例如,单精度浮点),第三有符号的源509可以具有64位紧缩数据元素(例如双精度浮点)。
在该图示中,仅仅示出了第一和第二有符号的源501和503的两个最高有效紧缩数据元素定位以及第三有符号的源509的最高有效紧缩数据元素定位。当然,还将处理其它紧缩数据元素定位。
如所图示的,紧缩数据元素成对被处理。例如,第一和第二有符号的源501和503的最高有效紧缩数据元素定位的数据通过使用乘法器电路505而被相乘,并且来自第一和第二有符号的源501和503的第二最高有效紧缩数据元素定位的数据通过使用乘法器电路507而被相乘。在一些实施例中,这些乘法器电路505和507被再用于其它紧缩数据元素定位。在其它实施例中,使用附加的乘法器电路,使得并行处理紧缩数据元素。在一些上下文中,通过使用为有符号的第三源509的大小的道来进行并行执行。每个乘法的结果通过使用加法电路511而被相加。
乘法结果相加的结果被加到来自有符号的源3 509的最高有效紧缩数据元素定位的数据(通过使用不同的加法器513或相同的加法器511)。
最后,第二加法的结果被存储到与从有符号的第三源509中所使用的紧缩数据元素定位相对应的紧缩数据元素定位中的有符号的目的地515中。在一些实施例中,写掩码被应用到该存储,使得如果设置了对应的写掩码(位),则发生存储,并且如果没有设置,则不发生存储。
图7图示了经融合的乘法累加的执行的子集的实施例。特别地,这图示了目的地的一个紧缩数据元素定位的迭代的执行电路。在该实施例中,经融合的乘法累加对有符号的源起作用,其中所述累加器是2x输入数据大小。图8图示了用于在硬件中实现该指令的伪代码的实施例。
第一有符号的源(源1 701)和第二有符号的源(源2 703)各自具有四个紧缩数据元素。这些紧缩数据元素中的每一个存储有符号的数据,诸如整数数据。第三有符号的源709(源3)具有两个紧缩数据元素,其中每一个都存储有符号的数据。第一和第二有符号的源701和703的大小是第三有符号的源709的大小的一半。例如,第一和第二有符号的源701和703可以具有32位紧缩数据元素(例如,单精度浮点),第三有符号的源709可以具有64位紧缩数据元素(例如双精度浮点)。
在该图示中,仅仅示出了第一和第二有符号的源701和703的两个最高有效紧缩数据元素定位以及第三有符号的源709的最高有效紧缩数据元素定位。当然,还将处理其它紧缩数据元素定位。
如所图示的,紧缩数据元素成对被处理。例如,第一和第二有符号的源701和703的最高有效紧缩数据元素定位的数据通过使用乘法器电路705而被相乘,并且来自第一和第二有符号的源701和703的第二最高有效紧缩数据元素定位的数据通过使用乘法器电路707而被相乘。在一些实施例中,这些乘法器电路705和707被再用于其它紧缩数据元素定位。在其它实施例中,使用附加的乘法器电路,使得并行处理紧缩数据元素。在一些上下文中,通过使用为有符号的第三源709的大小的道来进行并行执行。每个乘法的结果通过使用加法/饱和电路711而被加到有符号的第三源709。
当加法导致太大的值的时候,加法/饱和(累加器)电路711保持操作数的符号。特别地,饱和评估发生在多路加法与向有符号的目的地715的写入之间的无限精度结果上。当累加器711是浮点并且输入项是整数的时候,乘积和以及浮点累加器输入值被转变成无限精度值(数百位的定点数),执行乘法结果与第三输入的加法,并且执行向实际累加器类型的单凑整。
加法和饱和检查的结果被存储到与从有符号的第三源709中所使用的紧缩数据元素定位相对应的紧缩数据元素定位中的有符号的目的地715中。在一些实施例中,写掩码被应用到该存储,使得如果设置了对应的写掩码(位),则发生存储,并且如果没有设置,则不发生存储。
图9图示了经融合的乘法累加的执行的子集的实施例。特别地,这图示了目的地的一个紧缩数据元素定位的迭代的执行电路。在该实施例中,经融合的乘法累加对有符号的源以及无符号的源起作用,其中所述累加器是4x输入数据大小。图10图示了用于在硬件中实现该指令的伪代码的实施例。
第一有符号的源(源1 901)和第二无符号的源(源2 903)各自具有四个紧缩数据元素。这些紧缩数据元素中的每一个,诸如浮点或整数数据之类。第三有符号的源(源3915)具有紧缩数据元素,其中存储有符号的数据。第一和第二源901和903的大小是第三有符号的源915的四分之一。例如,第一和第二源901和903可以具有16位紧缩数据元素(例如,字),并且第三有符号的源915可以具有64位紧缩数据元素(例如双精度浮点或64位整数)。
在该图示中,示出了第一和第二源901和903的四个最高有效紧缩数据元素定位以及第三有符号的源915的最高有效紧缩数据元素定位。当然,还将处理其它紧缩数据元素定位,如果存在任何的话。
如所图示的,紧缩数据元素以四重件被处理。例如,第一和第二源901和903的最高有效紧缩数据元素定位的数据通过使用乘法器电路907而被相乘,来自第一和第二源901和903的第二最高有效紧缩数据元素定位的数据通过使用乘法器电路907而被相乘,来自第一和第二源901和903的第三最高有效紧缩数据元素定位的数据通过使用乘法器电路909而被相乘,并且来自第一和第二源901和903的最低有效紧缩数据元素定位的数据通过使用乘法器电路911而被相乘。在一些实施例中,在乘法之前,第一源901的有符号的紧缩数据元素经符号扩展,并且第二源903的无符号的紧缩数据元素被零扩展。
在一些实施例中,这些乘法器电路905-911被再用于其它紧缩数据元素定位。在其它实施例中,使用附加的乘法器电路,使得并行处理紧缩数据元素。在一些上下文中,通过使用为有符号的第三源915的大小的道来进行并行执行。每个乘法的结果通过使用加法电路911而被相加。
乘法结果相加的结果被加到来自有符号的源3 915的最高有效紧缩数据元素定位的数据(通过使用不同的加法器913或相同的加法器911)。
最后,第二加法的结果被存储到与从有符号的第三源909中所使用的紧缩数据元素定位相对应的紧缩数据元素定位中的有符号的目的地919中。在一些实施例中,写掩码被应用到该存储,使得如果设置了对应的写掩码(位),则发生存储,并且如果没有设置,则不发生存储。
图11图示了经融合的乘法累加的执行的子集的实施例。特别地,这图示了目的地的一个紧缩数据元素定位的迭代的执行电路。在该实施例中,经融合的乘法累加对有符号的源以及无符号的源起作用,其中所述累加器是4x输入数据大小。图12图示了用于在硬件中实现该指令的伪代码的实施例。
第一有符号的源(源1 1101)和第二无符号的源(源2 1103)各自具有四个紧缩数据元素。这些紧缩数据元素中的每一个,诸如浮点或整数数据之类。第三有符号的源(源31115)具有紧缩数据元素,其中存储有符号的数据。第一和第二源1101和1103的大小是第三有符号的源1115的四分之一。例如,第一和第二源1101和1103可以具有16位紧缩数据元素(例如,字),并且第三有符号的源1115可以具有64位紧缩数据元素(例如双精度浮点或64位整数)。
在该图示中,示出了第一和第二源1101和1103的四个最高有效紧缩数据元素定位以及第三有符号的源1115的最高有效紧缩数据元素定位。当然,还将处理其它紧缩数据元素定位,如果存在任何的话。
如所图示的,紧缩数据元素以四重件被处理。例如,第一和第二源1101和1103的最高有效紧缩数据元素定位的数据通过使用乘法器电路1107而被相乘,来自第一和第二源1101和1103的第二最高有效紧缩数据元素定位的数据通过使用乘法器电路1107而被相乘,来自第一和第二源1101和1103的第三最高有效紧缩数据元素定位的数据通过使用乘法器电路1109而被相乘,并且来自第一和第二源1101和1103的最低有效紧缩数据元素定位的数据通过使用乘法器电路1111而被相乘。在一些实施例中,在乘法之前,第一源1101的有符号的紧缩数据元素经符号扩展,并且第二源1103的无符号的紧缩数据元素被零扩展。
在一些实施例中,这些乘法器电路1105-1111被再用于其它紧缩数据元素定位。在其它实施例中,使用附加的乘法器电路,使得并行处理紧缩数据元素。在一些上下文中,通过使用为有符号的第三源1115的大小的道来进行并行执行。乘法结果相加的结果被加到来自有符号的源31115的最高有效紧缩数据元素定位的数据,被加到有符号的第三源1115,其通过使用加法/饱和电路1113。
当加法导致太大的值的时候,加法/饱和(累加器)电路1113保持操作数的符号。特别地,饱和评估发生在多路加法与向目的地1115的写入之间的无限精度结果上。当累加器1113是浮点并且输入项是整数的时候,乘积和以及浮点累加器输入值被转变成无限精度值(数百位的定点数),执行乘法结果与第三输入的加法,并且执行向实际累加器类型的单凑整。
加法和饱和检查的结果被存储到与从有符号的第三源715中所使用的紧缩数据元素定位相对应的紧缩数据元素定位中的有符号的目的地1119中。在一些实施例中,写掩码被应用到该存储,使得如果设置了对应的写掩码(位),则发生存储,并且如果没有设置,则不发生存储。
以下各图详述用于实现上文实施例的示例性架构和系统。在一些实施例中,上述一个或多个硬件组件和/或指令如以下所述那样被仿真,或被实现为软件模块。
示例性实施例包括一种处理器,其包括用于对单个指令进行解码的解码器,所述单个指令具有操作码、表示目的地操作数的目的地字段、以及针对第一、第二、和第三紧缩数据源操作数的字段,其中第一和第二紧缩数据源操作数的紧缩数据元素具有与第三紧缩数据操作数的紧缩数据元素的第二大小不同的第一大小;寄存器文件,其具有多个紧缩数据寄存器,包括针对源和目的地操作数的寄存器;以及执行电路,其用于执行经解码的单个指令,用以为目的地操作数的每个紧缩数据元素定位执行:来自第一和第二紧缩数据源的、与第三紧缩数据源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三紧缩数据源的紧缩数据元素定位的全大小紧缩数据元素,并且将加法结果存储在与第三紧缩数据源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。
在一些实施例中,以下中的一个或多个适用:指令定义紧缩数据元素的大小;所述执行电路在乘法之前零扩展第二源的紧缩数据元素并且符号扩展第一源的紧缩数据元素;当第一大小是第二大小一半的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;当第一大小是第二大小一半的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查;当第一大小是第二大小四分之一的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;和/或当第一大小是第二大小四分之一的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查。
示例性实施例包括一种用于对单个指令进行解码的方法,所述单个指令具有操作码、表示目的地操作数的目的地字段、以及针对第一、第二、和第三紧缩数据源操作数的字段,其中第一和第二紧缩数据源操作数的紧缩数据元素具有与第三紧缩数据操作数的紧缩数据元素的第二大小不同的第一大小;寄存器文件,其具有多个紧缩数据寄存器,包括针对源和目的地操作数的寄存器;以及执行经解码的单个指令,用以为目的地操作数的每个紧缩数据元素定位执行:来自第一和第二紧缩数据源的、与第三紧缩数据源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三紧缩数据源的紧缩数据元素定位的全大小紧缩数据元素,并且将加法结果存储在与第三紧缩数据源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。
在一些实施例中,以下中的一个或多个适用:指令定义紧缩数据元素的大小;所述执行电路在乘法之前零扩展第二源的紧缩数据元素并且符号扩展第一源的紧缩数据元素;当第一大小是第二大小一半的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;当第一大小是第二大小一半的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查;当第一大小是第二大小四分之一的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;和/或当第一大小是第二大小四分之一的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查。
示例性实施例包括一种存储了指令的非暂时性机器可读介质,所述指令当被执行的时候引发用于对单个指令进行解码的方法,所述单个指令具有操作码、表示目的地操作数的目的地字段、以及针对第一、第二、和第三紧缩数据源操作数的字段,其中第一和第二紧缩数据源操作数的紧缩数据元素具有与第三紧缩数据操作数的紧缩数据元素的第二大小不同的第一大小;寄存器文件,其具有多个紧缩数据寄存器,包括针对源和目的地操作数的寄存器;以及执行经解码的单个指令,用以为目的地操作数的每个紧缩数据元素定位执行:来自第一和第二紧缩数据源的、与第三紧缩数据源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三紧缩数据源的紧缩数据元素定位的全大小紧缩数据元素,并且将加法结果存储在与第三紧缩数据源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。
在一些实施例中,以下中的一个或多个适用:指令定义紧缩数据元素的大小;所述执行电路在乘法之前零扩展第二源的紧缩数据元素并且符号扩展第一源的紧缩数据元素;当第一大小是第二大小一半的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;当第一大小是第二大小一半的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查;当第一大小是第二大小四分之一的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;和/或当第一大小是第二大小四分之一的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查。
示例性实施例包括一种系统,其包括存储器和处理器,所述处理器包括用于对单个指令进行解码的解码器,所述单个指令具有操作码、表示目的地操作数的目的地字段、以及针对第一、第二、和第三紧缩数据源操作数的字段,其中第一和第二紧缩数据源操作数的紧缩数据元素具有与第三紧缩数据操作数的紧缩数据元素的第二大小不同的第一大小;寄存器文件,其具有多个紧缩数据寄存器,包括针对源和目的地操作数的寄存器;以及执行电路,其用于执行经解码的单个指令,用以为目的地操作数的每个紧缩数据元素定位执行:来自第一和第二紧缩数据源的、与第三紧缩数据源的紧缩数据元素定位相对应的M个N大小的紧缩数据元素的乘法,将来自这些乘法的结果加到第三紧缩数据源的紧缩数据元素定位的全大小紧缩数据元素,并且将加法结果存储在与第三紧缩数据源的紧缩数据元素定位相对应的紧缩数据元素定位目的地中,其中M等于全大小紧缩数据元素除以N。
在一些实施例中,以下中的一个或多个适用:指令定义紧缩数据元素的大小;所述执行电路在乘法之前零扩展第二源的紧缩数据元素并且符号扩展第一源的紧缩数据元素;当第一大小是第二大小一半的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;当第一大小是第二大小一半的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查;当第一大小是第二大小四分之一的时候,在乘法中的每一个上执行第一加法,并且在第一加法的结果以及来自先前迭代的结果上执行第二加法;和/或当第一大小是第二大小四分之一的时候,在每一个乘法以及来自先前迭代的结果上执行单个加法和饱和检查。
上文详述的(多个)指令的实施例以下文详述的“通用向量友好的指令格式”来被具体化,可以如此被具体化。在其它实施例中,不利用这样的格式,并且使用另一指令格式,然而,对写掩码寄存器、各种数据变换(拌和(swizzle)、广播等等)、寻址等等的以下描述一般可适用于以上(多个)指令的实施例的描述。另外,在以下详述示例性的系统、架构和流水线。上文(多个)指令的实施例可以在这样的系统、架构和流水线上被执行,但是不限于所详述的那些。
指令集
指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如位的数目、位的位置)来除了其它事物之外尤其指定将被执行的操作(例如操作码)以及将在其上执行该操作的(多个)操作数和/或(多个)其它数据字段(例如掩码)。尽管有指令模板(或子格式)的定义,但是一些指令格式被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式字段的不同子集(所包括的字段典型地以相同的次序,但是至少一些具有不同的位定位,因为有较少的字段被包括)和/或被定义成使给定的字段被不同地解释。因而,ISA的每个指令通过使用给定的指令格式(并且如果被定义的话则以该指令格式的指令模板中的给定一个模板)来被表述,并且包括用于指定操作和操作数的字段。例如,示例性的ADD(加法)指令具有特定的操作码和指令格式,所述指令格式包括用于指定该操作码的操作码字段以及用于选择操作数(源1/目的地和源2)的操作数字段;并且该ADD(加法)指令在指令流中的出现将在操作数字段中具有特定的内容,其选择特定的操作数。被称为高级向量扩展(AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案的SIMD扩展集已经被发布和/或公布(例如,参见
Figure BDA0004099787650000171
64和IA-32架构软件开发者手册,2014年9月;并且参见
Figure BDA0004099787650000172
高级向量扩展编程参考,2014年10月)。
示例性指令格式
本文中所述的(多个)指令的实施例可以用不同的格式被具体化。另外,在以下详述示例性的系统、架构和流水线。(多个)指令的实施例可以在这样的系统、架构和流水线上被执行,但是不限于所详述的那些。
通用向量友好指令格式
向量友好指令格式是适合用于向量指令的指令格式(例如存在特定于向量操作的某些字段)。虽然描述了其中通过向量友好指令格式来支持向量和标量操作二者的实施例,但是可替换的实施例仅仅使用向量操作、向量友好指令格式。
图13A-13B是框图,其图示了根据本发明的实施例的通用向量友好的指令格式及其指令模板。图13A是一框图,其图示了根据本发明的实施例的通用向量友好的指令格式及其A类指令模板;而图13B是一框图,其图示了根据本发明的实施例的通用向量友好的指令格式及其B类指令模板。特别地,一通用向量友好指令格式1300,为其定义了A类和B类指令模板,这二者包括非存储器访问1305指令模板和存储器访问1320指令模板。在向量友好指令格式的上下文中的术语“通用”是指:指令格式不被约束到任何特定的指令集。
虽然本发明的实施例将被描述,其中向量友好指令格式支持以下:64字节向量操作数长度(或大小)与32位(4字节)或64位(8字节)数据元素宽度(或大小)(并且因而,64字节向量包括16个双字大小的元素或可替换地8个四字大小的元素);64字节向量操作数长度(或大小)与16位(2字节)或8位(1字节)数据元素宽度(或大小);32字节向量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小);以及16字节向量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小);但是可替换的实施例可以支持更多、更少和/或不同的向量操作数大小(例如256字节向量操作数)与更多、更少或不同的数据元素宽度(例如128位(16字节)数据元素宽度)。
图13A中的A类指令模板包括:1)在非存储器访问1305指令模板内,示出有非存储器访问、全凑整(full round)控制类型操作1310指令模板,以及非存储器访问、数据变换类型操作1315指令模板;以及2)在存储器访问1320指令模板内,示出有存储器访问、暂时1325指令模板,以及存储器访问、非暂时1330指令模板。图13B中的B类指令模板包括:1)在非存储器访问1305指令模板内,示出有非存储器访问、写掩码控制、部分凑整(partial round)控制类型操作1312指令模板,以及非存储器访问、写掩码控制、v大小(vsize)类型操作1317指令模板;以及2)在存储器访问1320指令模板内,示出有存储器访问、写掩码控制1327指令模板。
通用向量友好指令格式1300包括下文中按图13A-13B中所图示的次序所列出的以下字段。
格式字段1340——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且因而标识以向量友好指令格式的指令在指令流中的出现。因而,在以下意义上该字段是可选的:对于仅仅具有通用向量友好指令格式的指令集而言,不需要它。
基本操作字段1342——其内容区别不同的基本操作。
寄存器索引字段1344——其内容直接地或通过地址生成而指定源和目的地操作数的位置,无论它们是在寄存器中还是在存储器中。这些包括足够数目的位来从PxQ(例如32×512、16×128、32×1024、64×1024)寄存器文件中选择N个寄存器。尽管在一个实施例中N可以多达三个源和一个目的地寄存器,但是可替换的实施例可以支持更多或更少的源和目的地寄存器(例如可以支持多达两个源,其中这些源中的一个还充当目的地;可以支持多达三个源,其中这些源中的一个还充当目的地;可以支持多达两个源和一个目的地)。
修饰符字段1346——其内容区分以通用向量指令格式的、指定存储器访问的指令的出现与并非如此的那些;也就是说,在非存储器访问1305指令模板和存储器访问1320指令模板之间进行区分。存储器访问操作对存储器层次进行读取和/或写入(在一些情况中通过使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中该字段还在用于执行存储器地址计算的三种不同方式之间进行选择,但是可替换的实施例可以支持用于执行存储器地址计算的更多、更少或不同的方式。
扩增操作字段1350——其内容区分除了基本操作之外还将执行各种不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被划分成类字段1368、阿尔法(alpha)字段1352和贝塔(beta)字段1354。扩增操作字段1350允许在单指令、而不是2个、3个或4个指令中执行公共群组的操作。
缩放字段1360——其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用“2缩放*索引+基(2scale*index+base)”的地址生成)。
位移字段1362A——其内容用作存储器地址生成的部分(例如,用于使用“2缩放*索引+基+位移(2scale*index+base+displacement)”的地址生成)。
位移因子字段1362B(注意到将位移字段1362A直接并置在位移因子字段1362B上指示:一个或另一个被使用)——其内容用作地址生成的部分;它指定将通过存储器访问的大小(N)被缩放的位移因子——其中N是存储器访问中的字节的数目(例如,用于使用“2缩放*索引+基+经缩放的位移(2scale*index+base+scaled displacement)”的地址生成)。冗余低阶位被忽略并且因此,位移因子字段的内容乘以存储器操作数总大小(N)以便生成将在计算有效地址中被使用的最终位移。N的值由处理器硬件在运行时基于全操作码字段1374(在本文中稍后被描述)以及数据操纵字段1354C来确定。位移字段1362A和位移因子字段1362B在如下意义上是可选的:它们不用于非存储器访问1305指令模板和/或不同的实施例可以实现两个中的仅一个或不可以实现两个中的任一个。
数据元素宽度字段1364——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中对于所有指令;在其它实施例中仅仅对于指令中的一些)。该字段在如下意义上是可选的:如果仅支持一个数据元素宽度和/或通过使用操作码的某个方面来支持数据元素宽度的话,则不需要它。
写掩码字段1370——其内容在按数据元素定位的基础上控制目的地向量操作数中的该数据元素定位是否反映基本操作和扩增操作的结果。A类指令模板支持合并-写掩码化,而B类指令模板支持合并-和归零-写掩码化二者。当合并时,向量掩码允许在任何操作(由基本操作和扩增操作所指定)的执行期间保护目的地中的任何元素集合不受更新;在另一个实施例中,保持其中对应的掩码位具有0的目的地的每个元素的旧值。相比之下,当归零时,向量掩码允许在任何操作(由基本操作和扩增操作所指定)的执行期间使目的地中的任何元素集合归零;在一个实施例中,当对应的掩码位具有0值时候,目的地的元素被设置成0。该功能性的子集是控制被执行的操作的向量长度(即,被修改的元素、从第一个到最后一个的跨度)的能力;然而,没有必要使被修改的元素是相继的。因而,写掩码字段1370允许部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了本发明的实施例,其中写掩码字段1370的内容在多个写掩码寄存器中选择包含将被使用的写掩码的一个写掩码寄存器(并且因而写掩码字段1370的内容间接地标识将被执行的该掩码化),但是可替换的实施例代替地或附加地允许掩码写字段1370的内容直接地指定将被执行的掩码化。
即时字段1372——其内容允许即时的规范。该字段在如下意义上是可选的:它不存在于不支持即时的通用向量友好格式的实现方式中并且它不存在于不使用即时的指令中。
类字段1368——其内容在不同类的指令之间进行区分。参考图13A-B,该字段的内容在A类和B类指令之间进行选择。在图13A-B中,圆化拐角方形用于指示在字段中存在特定值(例如分别在图13A-B中针对类字段1368的A类1368A和B类1368B)。
A类指令模板
在A类非存储器访问1305指令模板的情况中,阿尔法字段1352被解释为RS字段1352A,其内容区分将执行不同扩增操作类型中的哪一个(例如,为非存储器访问、凑整类型操作1310和非存储器访问、数据变换类型操作1315指令模板分别指定凑整1352A.1和数据变换1352A.2),而贝塔字段1354区分将执行所指定类型的操作中的哪一个。在非存储器访问1305指令模板中,缩放字段1360、位移字段1362A、和位移缩放字段1362B不存在。
非存储器访问指令模板——全凑整控制类型操作
在非存储器访问全凑整控制类型操作1310指令模板中,贝塔字段1354被解释为凑整控制字段1354A,其(多个)内容提供静态凑整。虽然在本发明的所描述的实施例中,凑整控制字段1354A包括抑制所有浮点异常(SAE)字段1356和凑整操作控制字段1358,但是可替换的实施例可以支持、可以将这两个概念编码到相同字段中或仅仅具有这些概念/字段中的一个或另一个(例如,可以仅具有凑整操作控制字段1358)。
SAE字段1356——其内容区分是否要禁用异常事件报告;当SAE字段1356的内容指示了抑制被启用的时候,给定的指令不报告任何种类的浮点异常标志,并且不引发任何浮点异常处置机。
凑整操作控制字段1358——其内容区分要执行凑整操作群组中的哪一个(例如,向上凑整、向下凑整、向零凑整以及凑整到最近)。因而,凑整操作控制字段1358允许在按指令的基础上改变凑整模式。在其中处理器包括用于指定凑整模式的控制寄存器的本发明一个实施例中,凑整操作控制字段1350的内容覆写该寄存器值。
非存储器访问指令模板——数据变换类型操作
在非存储器访问数据变换类型操作1315指令模板中,贝塔字段1354被解释为数据变换字段1354B,其内容区分将执行多个数据变换中的哪一个(例如,没有任何数据变换、拌和、广播)。
在A类存储器访问1320指令模板的情况中,阿尔法字段1352被解释为逐出提示字段1352B,其内容区分将使用逐出提示中的哪一个(在图13A中,为存储器访问、暂时1325指令模板和存储器访问、非暂时1330指令模板分别指定暂时1352B.1和非暂时1352B.2),而贝塔字段1354被解释为数据操纵字段1354C,其内容区分将执行多个数据操纵操作(也已知为基元)中的哪一个(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问1320指令模板包括缩放字段1360,以及可选地位移字段1362A或位移缩放字段1362B。
向量存储器指令在具有转换支持的情况下执行从存储器的向量加载以及向存储器的向量存储。如同常规向量指令那样,向量存储器指令以按数据元素的方式从/向存储器传递数据,其中实际被传递的元素由被选为写掩码的向量掩码的内容来指示。
存储器访问指令模板——暂时性
暂时性数据是很可能将足够快地被再用以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略提示。
存储器访问指令模板——非暂时性
非暂时性数据是不太可能足够快地被再用以受益于一级高速缓存中高速缓存的数据,并且应当被给予针对逐出的优先。然而,这是提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略提示。
B类指令模板
在B类指令模板的情况中,阿尔法字段1352被解释为写掩码控制(Z)字段1352C,其内容区分受写掩码字段1370所控制的写掩码化应当是合并还是归零。
在B类非存储器访问1305指令模板的情况中,贝塔字段1354的部分被解释为RL字段1357A,其内容区分将执行不同扩增操作类型中的哪一个(例如,为非存储器访问、写掩码控制、部分凑整控制类型操作1312指令模板和非存储器访问、写掩码控制、V大小(VSIZE)类型操作1317指令模板分别指定凑整1357A.1和向量长度(V大小)1357A.2),而贝塔字段1354的其余部分区分将执行所指定类型的操作中的哪一个。在非存储器访问1305指令模板中,缩放字段1360、位移字段1362A、和位移缩放字段1362B不存在。
在非存储器访问、写掩码控制、部分凑整控制类型操作1310指令模板中,贝塔字段1354的其余部分被解释为凑整操作字段1359A并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处置机)。
凑整操作控制字段1359A——正如同凑整操作控制字段1358那样,其内容区分要执行凑整操作群组中的哪一个(例如,向上凑整、向下凑整、向零凑整以及凑整到最近)。因而,凑整操作控制字段1359A允许在按指令的基础上改变凑整模式。在其中处理器包括用于指定凑整模式的控制寄存器的本发明一个实施例中,凑整操作控制字段1350的内容覆写该寄存器值。
在非存储器访问、写掩码控制、V大小(VSIZE)类型操作1317指令模板中,贝塔字段1354的其余部分被解释为向量长度字段1359B,其内容区分将在多个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在B类存储器访问1320指令模板的情况中,贝塔字段1354的部分被解释为广播字段1357B,其内容区分是否将执行广播类型的数据操纵操作,而贝塔字段1354的其余部分被解释为向量长度字段1359B。存储器访问1320指令模板包括缩放字段1360,以及可选地位移字段1362A或位移缩放字段1362B。
关于通用向量友好指令格式1300,示出了全操作码字段1374,其包括格式字段1340、基本操作字段1342和数据元素宽度字段1364。虽然示出了一个实施例,其中全操作码字段1374包括所有这些字段,但是在不支持它们中所有的实施例中全操作码字段1374包括少于所有这些字段。全操作码字段1374提供操作码(opcode(操作码))。
扩增操作字段1350、数据元素宽度字段1364、以及写掩码字段1370允许在通用向量友好指令格式中在按指令的基础上指定这些特征。
写掩码字段和数据元素宽度字段的组合创建类型指令,因为它们允许基于不同的数据元素宽度来应用掩码。
存在于A类和B类内的各种指令模板在不同情形中是有益的。在本发明的一些实施例中,不同的处理器或处理器内的不同核可以支持仅仅A类、仅仅B类或这两个类。例如,意图用于通用计算的高性能通用无序核可以仅仅支持B类,主要意图用于图形和/或科学(吞吐量)计算的核可以仅仅支持A类,并且意图用于这二者的核可以支持二者(当然,具有来自两个类的模板和指令、但不是来自两个类的所有模板和指令的某种混合的核在本发明的范围内)。而且,单个处理器可以包括多个核,其中的所有支持相同的类或者其中不同的核支持不同的类。例如,在具有分离的图形和通用核的处理器中,主要意图用于图形和/或科学计算的图形核中的一个可以仅仅支持A类,而通用核中的一个或多个可以是高性能通用核,其具有意图用于仅仅支持B类的通用计算的无序执行和寄存器重命名。没有分离的图形核的另一处理器可以包括支持A类和B类二者的一个多个通用有序或无序核。当然,在本发明的不同实施例中,来自一个类的特征还可以被实现在另一个类中。以高级语言所编写的程序将被置于(例如,准时制(just in time)编译或静态地被编译)各种不同的可执行形式中,包括:1)一种形式,其仅仅具有受用于执行的目标处理器所支持的(多个)类的指令;或2)一种形式,其具有通过使用所有类的指令的不同组合所编写的可替换例程以及具有控制流代码,所述控制流代码基于受当前执行代码的处理器所支持的指令而选择要执行的例程。
示例性特定向量友好指令格式
图14A是一框图,其图示了根据本发明的实施例的示例性的特定向量友好的指令格式。图14A示出了特定的向量友好指令格式1400,其在以下意义上是特定的:它指定字段的位置、大小、解释和次序,以及针对那些字段中一些字段的值。特定向量友好指令格式1400可以用于扩展x86指令集,并且因而字段中的一些与在现有x86指令集及其扩展(例如AVX)中所使用的那些类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段一致。图示了来自图14A的字段映射到其中的来自图13的字段。
应当理解的是,尽管为了说明性目的而在通用向量友好指令格式1300的上下文中参考特定向量友好指令格式1400描述了本发明的实施例,但是本发明不限于特定向量友好指令格式1400,除了在被要求的地方之外。例如,通用向量友好指令格式1300设想用于各种字段的各种可能大小,而特定向量友好指令格式1400被示出为具有特定大小的字段。作为特定示例,虽然数据元素宽度字段1364在特定向量友好指令格式1400中被图示为一位字段,但是本发明不被这样限制(也就是说,通用向量友好指令格式1300设想数据元素宽度字段1364的其它大小)。
通用向量友好指令格式1300包括下文中按图14A中所图示的次序所列出的以下字段。
EVEX前缀(字节0-3)1402——以四字节形式被编码。
格式字段1340(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段1340并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段1405(EVEX字节1、位[7-5])——包括EVEX.R位字段(EVEX字节1、位[7]-R),EVEX.X位字段(EVEX字节1、位[6]-X),和1357BEX字节1、位[5]-B)。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能性,并且通过使用多个1的补码形式被编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其它字段对寄存器索引的较低三个位进行编码,如本领域中已知的那样(rrr、xxx和bbb),使得可以通过添加EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX'字段1310——这是REX'字段1310的第一部分,并且是EVEX.R'位字段(EVEX字节1、位[4]-R'),其用于对经扩展的32寄存器集合的较高16个或较低16个进行编码。在本发明的一个实施例中,该位、连同如以下所指示的其它位用位反转格式来被存储以区别(在众所周知的x86 32位模式中)于BOUND指令,其实操作码字节是62,但是不在MOD R/M字段(以下所述的)中接受MOD字段中的值11;本发明的可替换实施例不对此以及以下用反转格式的其它所指示的位进行存储。值1用于对较低16个寄存器进行编码。换言之,通过组合EVEX.R’、EVEX.R和来自其它字段的其它RRR来形成R’Rrrr。
操作码映射字段1415(EVEX字节1、位[3:0]-mmmm)——其内容对所暗指的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段1364(EVEX字节2、位[7]-W)——其由记号EVEX.W来表示。EVEX.W用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。
EVEX.vvvv 1420(EVEX字节2、位[6:3]-vvvv)——EVEX.vvvv的作用可以包括以下:1)EVEX.vvvv对用反转(多个1补码)形式所指定的第一源寄存器操作数进行编码,并且对于具有2个或更多源操作数的指令是有效的;2)EVEX.vvvv对目的地寄存器操作数进行编码,所述目的地寄存器操作数针对某些向量移位以多个1补码形式被指定;或3)EVEX.vvvv不编码任何操作数,所述字段被预留并且应当包含1111b。因而,EVEX.vvvv字段1420对用反转(多个1补码)形式所存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,额外不同的EVEX位字段用于将指定符大小扩展到32个寄存器。
EVEX.U 1368类字段(EVEX字节2、位[2]-U)——如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1425(EVEX字节2、位[1:0]-pp)——为基本操作字段提供附加的位。除了为以EVEX前缀格式的遗留SSE指令提供支持之外,这还具有如下益处:使SIMD前缀紧密(EVEX前缀仅仅需要2位,而不是需要一字节来表述SIMD前缀)。在一个实施例中,为了对使用既以遗留格式也以EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的遗留SSE指令进行支持,这些遗留SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时被扩充成遗留SIMD前缀,然后被提供到解码器的PLA(因此PLA可以在没有修改的情况下执行这些遗留指令的遗留和EVEX格式二者)。尽管较新的指令可以直接作为操作码扩展而使用EVEX前缀编码字段的内容,但是某些实施例以类似的方式扩充以用于一致性,但是允许通过这些遗留SIMD前缀来指定不同的含义。可替换的实施例可以重设计PLA来支持2位SIMD前缀编码,并且因而不需要扩充。
阿尔法字段1352(EVEX字节3、位[7]-EH;也已知为EVEX.EH,EVEX.rs,EVEX.RL,EVEX.写掩码控制,以及EVEX.N;还利用α来被说明)——如先前所述,该字段是上下文特定的。
贝塔字段1354(EVEX字节3、位[6:4]-SSS,也已知为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来被说明)——如先前所描述的,该字段是上下文特定的。
REX'字段1310——这是REX'字段的其余部分,并且是EVEX.V'位字段(EVEX字节3、位[3]-V'),其可以用于对经扩展的32寄存器集合的较高16个或较低16个进行编码。该位用位反转格式被存储。值1用于对较低16个寄存器进行编码。换言之,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写掩码字段1370(EVEX字节3、位[2:0]-kkk)——其内容指定写掩码寄存器中的寄存器的索引,如先前所描述的。在本发明的一个实施例中,特定的值EVEX.kkk=000具有特殊的表现,意味着没有任何写掩码被用于特定的指令(这可以用各种方式被实现,包括使用被硬连线到全一的写掩码或绕过掩码化硬件的硬件)。
实操作码字段1430(字节4)也被已知为操作码字节。在该字段中指定操作码的部分。
MOD R/M字段1440(字节5)包括MOD字段1442、Reg字段1444和R/M字段1446。如先前所描述的,MOD字段1442的内容在存储器访问和非存储器访问操作之间进行区分。Reg字段1444的作用可以被总结成两种情形:对目的地寄存器操作数或源寄存器操作数进行编码,或被看作操作码扩展并且不用于对任何指令操作数进行编码。R/M字段1446的作用可以包括以下:对引用存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基(SIB)字节(字节6)——如先前所描述的,缩放字段1350的内容用于存储器地址生成。SIB.xxx 1454和SIB.bbb1456——这些字段的内容已经在先前关于寄存器索引Xxxx和Bbbb而被提及。
位移字段1362A(字节7-10)——当MOD字段1442包含10时,字节7-10是位移字段1362A,并且它与遗留32位的位移(disp32)相同地起作用,并且以字节粒度而起作用。
位移因子字段1362B(字节7)——当MOD字段1442包含01时,字节7是位移因子字段1362B。该字段的位置与以字节粒度起作用的遗留x86指令集8位的位移(disp8)的位置相同。由于disp8是经符号扩展的,所以它仅仅能够在-128和127字节偏移之间寻址;在64字节高速缓存线方面,disp8使用8位,所述8位能够被设置成仅仅四个真实有用的值-128、-64、0和64;因为通常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32形成对比,位移因子字段1362B是disp8的重解释;当使用位移因子字段1362B的时候,通过位移因子字段的内容乘以存储器操作数访问的大小(N)来确定实际的位移。该类型的位移被称为disp8*N。这缩减平均指令长度(用于位移但是具有大得多的范围的单个字节)。这样的经压缩的位移基于以下假定:即有效位移是存储器访问的粒度的倍数,并且因此,地址偏移的冗余低阶位不需要被编码。换言之,位移因子字段1362B替代遗留x86指令集8位的位移。因而,以与x86指令集8位的位移相同的方式来对位移因子字段1362B进行编码(因此在ModRM/SIB编码规则中没有任何改变),其中唯一的例外是:disp8被过载成disp8*N。换言之,在编码规则或编码长度中没有任何改变,而是仅仅在由硬件(其需要通过存储器操作数的大小来对位移进行缩放以获得按字节的地址偏移)对位移值的解释中有改变。即时字段1372如先前描述的那样运作。
全操作码字段
图14B是一框图,其图示了根据本发明的一个实施例的构成全操作码字段1374的特定向量友好指令格式1400的字段。特别地,全操作码字段1374包括格式字段1340、基本操作字段1342和数据元素宽度(W)字段1364。基本操作字段1342包括前缀编码字段1425、操作码映射字段1415和实操作码字段1430。
寄存器索引字段
图14C是一框图,其图示了根据本发明的一个实施例的构成寄存器索引字段1344的特定向量友好指令格式1400的字段。特别地,寄存器索引字段1344包括REX字段1405、REX'字段1410、MODR/M.reg字段1444、MODR/M.r/m字段1446、VVVV字段1420、xxx字段1454和bbb字段1456。
扩增操作字段
图14D是一框图,其图示了根据本发明的一个实施例的构成扩增操作字段1350的特定向量友好指令格式1400的字段。当类(U)字段1368包含0时,它表示EVEX.U0(A类1368A);当它包含1时,它表示EVEX.U1(B类1368B)。当U=0并且MOD字段1442包含11(表示非存储器访问操作)时,阿尔法字段1352(EVEX字节3、位[7]-EH)被解释为rs字段1352A。当rs字段1352A包含一个1(凑整1352A.1)时,贝塔字段1354(EVEX字节3、位[6:4]-SSS)被解释为凑整控制字段1354A。凑整控制字段1354A包括一位SAE字段1356和两位凑整操作字段1358。当rs字段1352A包含一个0(数据变换1352A.2)时,贝塔字段1354(EVEX字节3、位[6:4]-SSS)被解释为三位数据变换字段1354B。当U=0并且MOD字段1442包含00、01或10(表示存储器访问操作)时,阿尔法字段1352(EVEX字节3、位[7]-EH)被解释为逐出提示(EH)字段1352B,并且贝塔字段1354(EVEX字节3、位[6:4]-SSS)被解释为三位数据操纵字段1354C。
当U=1时,阿尔法字段1352(EVEX字节3、位[7]-EH)被解释为写掩码控制(Z)字段1352C。当U=1并且MOD字段1442包含11(表示非存储器访问操作)时,贝塔字段1354的部分(EVEX字节3、位[4]-S0)被解释为RL字段1357A;当它包含一个1(凑整1357A.1)时,贝塔字段1354的其余部分(EVEX字节3、位[6-5]-S2-1)被解释为凑整操作字段1359A,而当RL字段1357A包含一个0(V大小(VSIZE)1357.A2)时,贝塔字段1354的其余部分(EVEX字节3、位[6-5]-S2-1)被解释为向量长度字段1359B(EVEX字节3、位[6-5]-L1-0)。当U=1并且MOD字段1442包含00、01或10(表示存储器访问操作)时,贝塔字段1354(EVEX字节3、位[6:4]-SSS)被解释为向量长度字段1359B(EVEX字节3、位[6-5]-L1-0)和广播字段1357B(EVEX字节3、位[4]-B)。
示例性寄存器架构
图15是根据本发明的一个实施例的寄存器架构1500的框图。在所图示的实施例中,存在为512位宽的32个向量寄存器1510;这些寄存器被参考标记为zmm0直到zmm31。较低16个zmm寄存器的较低阶256位被叠覆在寄存器ymm0-16上。较低16个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)被叠覆在寄存器xmm0-15上。特定向量友好指令格
式1400在这些叠覆的寄存器文件上操作,如以下的表中所图示的那样。
Figure BDA0004099787650000281
换言之,向量长度字段1359B在最大长度和一个或多个其它较短的长度之间选择,其中每个这样的较短的长度是在前长度的一半长;并且没有向量长度字段1359B的指令模板在最大向量长度上操作。此外,在一个实施例中,特定向量友好指令格式1400的B类指令模板在紧缩或标量单精度/双精度浮点数据以及紧缩或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素定位上执行的操作;要么使得较高阶数据元素定位与它们在指令之前那样相同,或被归零,这取决于实施例。
写掩码寄存器1515——在所图示的实施例中,存在8个写掩码寄存器(k0直到k7),每一个在大小上为64位。在可替换的实施例中,写掩码寄存器1515在大小上为16位。如先前所述的,在本发明的一个实施例中,向量掩码寄存器k0不能被用作写掩码;当通常将会指示k0的编码用于写掩码时,它选择0xFFFF的硬连线的写掩码,其有效地禁用针对该指令的写掩码化。
通用寄存器1525——在所图示的实施例中,存在十六个64位通用寄存器,其连同现有的x86寻址模式一起被使用以对存储器操作数进行寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8直到R15来被参考标记。
标量浮点堆栈寄存器文件(x87堆栈)1545,在其上混叠了MMX紧缩整数平坦寄存器文件1550——在所图示的实施例中,x87堆栈是八元素堆栈,其用于通过使用x87指令集扩展来在32/64/80-位浮点数据上执行标量浮点操作;而MMX寄存器用于在64位紧缩整数数据上执行操作,以及为在MMX和XMM寄存器之间执行的一些操作持有操作数。
本发明的可替换的实施例可以使用更宽或更窄的寄存器。另外,本发明的可替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。
示例性核架构、处理器和计算机架构
处理器核可以用不同的方式、为了不同的目的、并且在不同的处理器中被实现。例如,这样的核的实现方式可以包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)主要意图用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可以包括:1)CPU,其包括一个或多个意图用于通用计算的通用有序核和/或一个或多个意图用于通用计算的通用无序核;以及2)协处理器,其包括一个或多个主要意图用于图形和/或科学(吞吐量)的专用核。这样的不同的处理器导致不同的计算机系统架构,其可以包括:1)来自CPU的分离芯片上的协处理器;2)在与CPU的相同封装中的分离管芯上的协处理器;3)在与CPU相同的管芯上的协处理器(在所述情况中,这样的协处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或被称为专用核);以及4)可以在相同管芯上包括所述CPU(有时被称为(多个)应用核或(多个)应用处理器)、上述协处理器和附加功能性的芯片上系统。接下来描述示例性的核架构,继之以对示例性处理器和计算机架构的描述。
示例性核架构
有序和无序核框图
图16A是一框图,其图示了根据本发明的实施例的示例性有序的流水线以及示例性的寄存器重命名、无序的发布/执行流水线二者。图16B是一框图,其图示了根据本发明的实施例的有序架构核,以及将被包括在处理器中的示例性的寄存器重命名、无序的发布/执行架构核二者的示例性实施例。图16A-B中的实线框图示了有序流水线和有序核,而可选的添加虚线框图示了寄存器重命名、无序发布/执行流水线与核。考虑到有序方面是无序方面的子集,将描述无序方面。
在图16A中,处理器流水线1600包括取出级1602、长度解码级1604、解码级1606、分配级1608、重命名级1610、调度(也已知为分派或发布)级1612、寄存器读取/存储器读取级1614、执行级1616、写回/存储器写入级1618、异常处置级1622、以及提交级1624。
图16B示出了处理器核1690,所述处理器核1690包括前端单元1630,所述前端单元1630耦合到执行引擎单元1650,并且所述前端单元1630和执行引擎单元1650二者耦合到存储器单元1670。核1690可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或者混合的或可替换的核类型。作为又一选项,核1690可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等等。
前端单元1630包括分支预测单元1632,所述分支预测单元1632耦合到指令高速缓存单元1634,所述指令高速缓存单元1634耦合到指令转换后备缓冲器(TLB)1636,所述指令转换后备缓冲器(TLB)1636耦合到指令取出单元1638,所述指令取出单元1638耦合到解码单元1640。解码单元1640(或解码器)可以解码指令,并且作为输出而生成一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号,其解码自、或其以其它方式反映、或得自原始指令。可以通过使用各种不同的机制来实现解码单元1640。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,核1690包括微代码ROM或其它介质,其存储针对某些宏指令的微代码(例如在解码单元1640中或以其它方式在前端单元1630内)。解码单元1640耦合到执行引擎单元1650中的重命名/分配器单元1652。
执行引擎单元1650包括重命名/分配器单元1652,所述重命名/分配器单元1652耦合到引退单元1654和一组一个或多个调度器单元1656。(多个)调度器单元1656表示任何数目的不同调度器,包括预留站、中央指令窗口等等。(多个)调度器单元1656耦合到物理寄存器(多个)文件(多个)单元1658。物理寄存器(多个)文件单元1658中的每一个表示一个或多个物理寄存器文件,其中的不同的多个存储一个或多个不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为将被执行的下一个指令的地址的指令指针)等等。在一个实施例中,物理寄存器(多个)文件单元1658包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。物理寄存器(多个)文件(多个)单元1658被引退单元1654重叠,用以图示可以用来实现寄存器重命名和无序执行的各种方式(例如,通过使用(多个)重排序缓冲器和(多个)引退寄存器文件;通过使用(多个)未来文件、(多个)历史缓冲器,以及(多个)引退寄存器文件;通过使用寄存器映射和寄存器池;等等)。引退单元1654和物理寄存器(多个)文件(多个)单元1658被耦合到(多个)执行集群1660。(多个)执行集群1660包括一组一个或多个执行单元1662以及一组一个或多个存储器访问单元1664。执行单元1662可以执行各种操作(例如移位、加法、减法、乘法),并且可以执行在各种类型的数据(例如标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上。虽然一些实施例可以包括专用于特定功能或功能集的多个执行单元,但是其它实施例可以包括仅一个执行单元或全部执行所有功能的多个执行单元。(多个)调度器单元1656、物理寄存器(多个)文件(多个)单元1658、和(多个)执行集群1660被示出为可能是复数的,因为某些实施例为某些类型的数据/操作(例如标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其各自具有其自己的调度器单元、物理寄存器(多个)文件单元和/或执行集群——并且在分离的存储器访问流水线的情况中,实现某些实施例,其中仅仅该流水线的执行集群具有(多个)存储器访问单元1664)创建分离的流水线。还应当理解的是,在其中使用分离的流水线的情况中,这些流水线中的一个或多个可以是无序发布/执行并且其余是有序的。
该组存储器访问单元1664耦合到存储器单元1670,所述存储器单元1670包括数据TLB单元1672,所述数据TLB单元1672耦合到数据高速缓存单元1674,所述数据高速缓存单元1674耦合到2级(L2)高速缓存单元1676。在一个示例性实施例中,存储器访问单元1664可以包括加载单元、存储地址单元、和存储数据单元,其中的每一个耦合到存储器单元1670中的数据TLB单元1672。指令高速缓存单元1634此外耦合到存储器单元1670中的2级(L2)高速缓存单元1676。L2高速缓存单元1676耦合到高速缓存的一个或多个其它层级并且最后耦合到主存储器。
作为示例,示例性寄存器重命名、无序发布/执行核架构可以如下实现流水线1600:1)指令取出1638执行取出和长度解码级1602和1604;2)解码单元1640执行解码级1606;3)重命名/分配器单元1652执行分配级1608和重命名级1610;4)(多个)调度器单元1656执行调度级1612;5)物理寄存器(多个)文件(多个)单元1658和存储器单元1670执行寄存器读取/存储器读取级1614;执行集群1660履行执行级1616;6)存储器单元1670和物理寄存器(多个)文件(多个)单元1658执行写回/存储器写入级1618;7)在异常处置级1622中可以涉及各种单元;以及8)引退单元1654和物理寄存器(多个)文件(多个)单元1658执行提交级1624。
核1690可以支持一个或多个指令集(例如x86指令集(具有在较新版本的情况下已经添加的一些扩展);加利福尼亚州森尼维耳市的MIPS Technologies的MIPS指令集;加利福尼亚州森尼维耳市的ARM Holdings的ARM指令集(具有可选的附加扩展、诸如NEON)),包括本文中所述的(多个)指令。在一个实施例中,核1690包括用于支持紧缩数据指令集扩展(例如AVX1、AVX2)的逻辑,从而允许由许多多媒体应用所使用的操作将通过使用紧缩数据被执行。
应当理解的是,核可以支持多线程化(执行操作或线程的两个或更多并行集合),并且可以用各种方式来这样做,包括时间切片的多线程化、同时多线程化(其中单个物理核为物理核正同时多线程化的线程中的每一个提供逻辑核),或其组合(例如,时间切片的取出和解码以及此后的同时多线程化,诸如在
Figure BDA0004099787650000321
超线程化技术中那样)。
虽然在无序执行的上下文中描述了寄存器重命名,但是应当理解的是,寄存器重命名可以被使用在有序架构中。虽然处理器的所图示的实施例还包括分离的指令和数据高速缓存单元1634/1674以及共享的L2高速缓存单元1676,但是可替换的实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存,或多个层级的内部高速缓存。在一些实施例中,所述系统可以包括内部高速缓存以及在核和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存可以在核和/或处理器的外部。
特定的示例性有序核架构
图17A-B图示了更特定的示例性有序核架构的框图,所述核将是芯片中若干逻辑块(包括相同类型和/或不同类型的其它核)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如环状网络)而与某个固定的功能逻辑、存储器I/O接口、以及其它必要的I/O逻辑进行通信。
图17A是根据本发明的实施例的单个处理器核的框图,所述单个处理器核连同其与管芯上互连网络1702的连接以及连同其2级(L2)高速缓存1704的局部子集;在一个实施例中,指令解码器1700支持x86指令集,其具有紧缩数据指令集扩展。L1高速缓存1706允许对高速缓存存储器的低等待时间访问进入到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1708和向量单元1710使用分离的寄存器集合(相应地,标量寄存器1712和向量寄存器1714),并且在它们之间传递的数据被写入到存储器,并且然后从1级(L1)高速缓存1706中读回,但是本发明的可替换的实施例可以使用不同的途径(例如使用单个寄存器集合或包括通信路径,所述通信路径允许数据在两个寄存器文件之间被传递而没有被写入和读回)。
L2高速缓存1704的局部子集是全局L2高速缓存的部分,所述全局L2高速缓存被划分成分离的局部子集,每个处理器核一个。每个处理器核具有至其自己的L2高速缓存1704局部子集的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集1704中,并且可以被快速地访问,这与其它处理器核访问其自己的局部L2高速缓存子集相并行。由处理器核所写入的数据被存储在其自己的L2高速缓存子集1704中,并且被从其它子集转储清除(flush),如果必要的话。环状网络确保针对共享数据的一致性。环状网络是双向的以允许代理、诸如处理器核、L2高速缓存和其它逻辑块在芯片内与彼此通信。每个环状数据路径是每个方向1012位宽的。
图17B是根据本发明的实施例的图17A中的处理器核的部分的展开视图。图17B包括L1高速缓存1704的L1数据高速缓存1706A部分,以及关于向量单元1710和向量寄存器1714的更多细节。特别地,向量单元1710是16宽向量处理单元(VPU)(参见16宽ALU 1728),其执行整数、单精度浮动、以及双精度浮动指令中的一个或多个。VPU支持利用拌和单元1720来拌和寄存器输入,利用数值转换单元1722A-B来进行数值转换,以及利用复制单元1724来在存储器输入上复制。写掩码寄存器1726允许预测结果产生的向量写入。
图18是根据本发明的实施例的处理器1800的框图,所述处理器1800可以具有多于一个核、可以具有集成的存储器控制器、并且可以具有集成的图形。图18中的实线框图示了处理器1800,其具有单个核1802A、系统代理1810、一组一个或多个总线控制器单元1816,虽然可选地添加了虚线框图示了可替换的处理器1800,其具有多个核1802A-N、在系统代理单元1810中的一组一个或多个集成的存储器控制器单元1814、以及专用逻辑1808。
因而,处理器1800的不同实现方式可以包括:1)CPU,其中专用逻辑1808是集成的图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且核1802A-N是一个或多个通用核(例如,通用有序核、通用无序核、二者的组合);2)协处理器,其中核1802A-N是大量主要意图用于图形和/或科学(吞吐量)的专用核;以及3)协处理器,其中核1802A-N是大量通用有序核。因而,处理器1800可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)、协处理器(包括30或更多核)、嵌入式处理器等等。处理器可以实现在一个或多个芯片上。处理器1800可以是一个或多个基板的一部分和/或可以被实现在一个或多个基板上,所述基板使用多个过程技术、诸如例如BiCMOS、CMOS、或NMOS中的任一个。
存储器层次包括核内一个或多个层级的高速缓存、一组或一个或多个共享高速缓存单元1806、以及外部存储器(未示出),所述外部存储器耦合到该组集成存储器控制器单元1814。该组共享高速缓存单元1806可以包括一个或多个中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存、最末级高速缓存(LLC)和/或其组合。虽然在一个实施例中,基于环的互连单元1812互连着集成图形逻辑1808(集成图形逻辑1808是专用逻辑的示例并且在本文中还被称为专用逻辑)、该组共享高速缓存单元1806、以及系统代理单元1810/(多个)集成存储器控制器单元1814,但是可替换的实施例可以使用任何数目的众所周知的技术用于互连这样的单元。在一个实施例中,在一个或多个高速缓存单元1806与核1802-A-N之间维持一致性。
在一些实施例中,核1802A-N中的一个或多个能够多线程化。系统代理1810包括协调和操作核1802A-N的那些组件。系统代理单元1810可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括对于调节核1802A-N以及集成图形逻辑1808的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1802A-N在架构指令集方面可以是同质或异质的;也就是说,核1802A-N中的两个或多个可以能够执行相同的指令集,而其它的可以能够仅仅执行该指令集或不同指令集的子集。
示例性计算机架构
图19-22是示例性计算机架构的框图。本领域中已知用于膝上型电脑、台式电脑、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持式设备、以及各种其它电子设备的其它系统设计和配置也是合适的。通常,能够并入如本文中所公开的处理器和/或其它执行逻辑的各种各样的系统或电子设备通常是合适的。
现在参考图19,示出的是根据本发明的一个实施例的系统1900的框图。系统1900可以包括一个或多个处理器1910、1915,其耦合到控制器中枢1920。在一个实施例中,控制器中枢1920包括图形存储器控制器中枢(GMCH)1990以及输入/输出中枢(IOH)1950(其可以在分离的芯片上);GMCH 1990包括存储器和图形控制器,向其耦合了存储器1940和协处理器1945;IOH 1950将输入/输出(I/O)设备1960耦合到GMCH 1990。可替换地,存储器和图形控制器中的一个或二者被集成在处理器内(如本文中所述),存储器1940和协处理器1945直接耦合到处理器1910,以及在具有IOH 1950的单个芯片中的控制器中枢1920。
在图19中用断线来标示附加处理器1915的可选性质。每个处理器1910、1915可以包括本文中所述的处理核中的一个或多个,并且可以是某个版本的处理器1800。
存储器1940可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或二者的组合。对于至少一个实施例,控制器中枢1920经由多点分支总线(multi-drop bus)来与(多个)处理器1910、1915通信,所述多点分支总线诸如前侧总线(FSB)、点对点接口、诸如快速路径互连(QuickPath Interconnect,QPI)或类似的连接1995。
在一个实施例中,协处理器1945是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。在一个实施例中,控制器中枢1920可以包括集成图形加速器。
在物理资源1910、1915之间可以存在着在包括架构、微架构、热学、功率消耗特性等等的优值的度量的范围方面的各种差异。
在一个实施例中,处理器1910执行指令,所述指令控制一般类型的数据处理操作。指令内嵌入的可以是协处理器指令。处理器1910将这些协处理器指令识别为具有如下类型:所述类型应当由附连的协处理器1945来执行。因此,处理器1910在协处理器总线或其它互连上向协处理器1945发布这些协处理器指令(或表示协处理器指令的控制信号)。(多个)协处理器1945接受并且执行所接收的协处理器指令。
现在参考图20,示出的是根据本发明的实施例的第一更特定示例性系统2000的框图。如图20中所示,多处理器系统2000是点对点互连系统,并且包括经由点对点互连2050所耦合的第一处理器2070和第二处理器2080。处理器2070和2080中的每一个可以是某个版本的处理器1800。在本发明的一个实施例中,处理器2070和2080分别是处理器1910和1915,而协处理器2038是协处理器1945。在另一实施例中,处理器2070和2080分别是处理器1910协处理器1945。
示出了处理器2070和2080,其分别包括集成存储器控制器(IMC)单元2072和2082。处理器2070作为其总线控制器单元的部分还包括点对点(P-P)接口2076和2078;类似地,第二处理器2080包括P-P接口2086和2088。处理器2070、2080可以通过使用P-P接口电路2078、2088、经由点对点(P-P)接口2050来交换信息。如图20中所示,IMC 2072和2082将处理器耦合到相应的存储器,即存储器2032和存储器2034,其可以是被本地附连到相应处理器的主存储器的部分。
处理器2070、2080可以各自通过使用点对点接口电路2076、2094、2086、2098、经由单独的P-P接口2052、2054来与芯片组2090交换信息。芯片组2090可以可选地经由高性能接口2092来与协处理器2038交换信息。在一个实施例中,协处理器2038是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。
共享的高速缓存(未示出)可以被包括在任一处理器中或在两个处理器的外部,还经由P-P互连而与处理器连接,使得如果处理器被置于低功率模式中,则任一或两个处理器的本地高速缓存信息可以被存储在共享的高速缓存中。
芯片组2090可以经由接口2096而耦合到第一总线2016。在一个实施例中,第一总线2016可以是外围组件互连(PCI)总线,或是诸如PCI快速总线或另一第三代I/O互连总线之类的总线,尽管本发明的范围不被这样限制。
如图20中所示,各种I/O设备2014连同总线桥2018可以被耦合到第一总线2016,所述总线桥2018将第一总线2016耦合到第二总线2020。在一个实施例中,一个或多个附加的处理器2015、诸如协处理器、高吞吐量MIC处理器、GPGPU的、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其它处理器被耦合到第一总线2016。在一个实施例中,第二总线2020可以是低引脚计数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线2020,包括例如键盘和/或鼠标2022、通信设备2027和存储单元2028、诸如盘驱动器或其它大容量存储设备,其可以包括指令/代码和数据2030。此外,音频I/O2024可以耦合到第二总线2020。注意到,其它架构是可能的。例如,代替于图20的点对点架构,系统可以实现多点分支总线或其它这样的架构。
现在参考图21,示出的是根据本发明的实施例的第二更特定示例性系统2100的框图。图20和21中同样的元素具有同样的参考标号,并且图20的某些方面已经从图21中省略以便避免使图21的其它方面模糊。
图21图示了处理器2070、2080可以分别包括集成存储器和I/O控制逻辑(“CL”)2072和2082。因而,CL 2072、2082包括集成存储器控制器单元并且包括I/O控制逻辑。图21图示了不仅是存储器2032、2034被耦合到CL 2072、2082,而且还有I/O设备2114也耦合到控制逻辑2072、2082。遗留I/O设备2115耦合到芯片组2090。
现在参考图22,示出的是根据本发明的实施例的SoC 2200的框图。图18中的类似元素具有同样的参考标号。而且,虚线框是更高级SoC上的可选特征。在图22中,(多个)互连单元2202耦合到:应用处理器2210,其包括一组一个或多个核1802A-N,所述核包括高速缓存单元1804A-N,以及(多个)共享的高速缓存单元1806;系统代理单元1810;(多个)总线控制器单元1816;(多个)集成存储器控制器单元1814;一组一个或多个协处理器2220,其可以包括集成图形逻辑、图形处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2230;直接存储器存取(DMA)单元2232;以及显示单元2240,其用于耦合到一个或多个外部显示器。在一个实施例中,(多个)协处理器2220包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
本文中公开的机制的实施例可以用硬件、软件、固件、或这样的实现途径的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
程序代码、诸如图20中所图示的代码2030可以被应用到输入指令以执行本文中所述的功能并且生成输出信息。输出信息可以用已知方式被应用到一个或多个输出设备。为了该应用,一种处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级过程性或面向对象的编程语言来被实现以与处理系统通信。如果期望,则程序代码还可以用汇编或机器语言来被实现。事实上,本文中所述的机制在范围上不被限制到任何特定的编程语言。在任何情况中,语言可以是经编译或解译的语言。
至少一个实施例的一个或多个方面可以由被存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其当被机器读取的时候使得所述机器制成用于执行本文中所述的技术的逻辑。这样的表示、已知为“IP核”可以被存储在有形的机器可读介质上,并且被供应到各种消费者或制造设施以加载到制造机器中,所述制造机器实际构成逻辑或处理器。
这样的机器可读存储介质可以无限制地包括由机器或设备所制造或形成的物品的非暂时性、有形布置,包括存储介质、诸如硬盘、任何其它类型的盘、包括软盘、光学盘、光盘只读存储器(CD-ROM)、光盘可重写(CD-RW)、以及磁光盘、半导体设备、诸如只读存储器(ROM)、随机存取存储器(RAM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁性或光学卡、或适合用于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括非暂时性、有形的机器可读介质,其包含指令或包含设计数据,诸如硬件描述语言(HDL),其限定本文中所述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以被称为程序产品。
仿真(包括二进制转换、代码变形等等)
在一些情况中,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转换(例如通过使用静态二进制转换、动态二进制转换、包括动态编译)、变形、仿真或以其它方式转换成一个或多个其它指令来由核处理。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、远离处理器、或部分在处理器上并且部分远离处理器。
图23是一框图,其根据本发明的实施例而对比了使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令。在所图示的实施例中,指令转换器是软件指令转换器,尽管可替换地,指令转换器可以用软件、固件、硬件或其各种组合来实现。图23示出了以高级语言2302的程序可以通过使用x86编译器2304来被编译以生成x86二进制代码2306,所述x86二进制代码2306可以由具有至少一个x86指令集核2316的处理器来原生地执行。具有至少一个x86指令集核2316的处理器表示通过如下而可以与具有至少一个x86指令集核的英特尔处理器执行大体上相同的功能的任何处理器:兼容地执行或以其它方式处理(1)英特尔x86指令集核的指令集的实质部分,或(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它软件的目标代码版本,以便与具有至少一个x86指令集核的英特尔处理器实现大体上相同的结果。x86编译器2304表示一种编译器,所述编译器可操作以生成x86二进制代码2306(例如目标代码),所述x86二进制代码2306可以在具有或没有附加链接处理的情况下在具有至少一个x86指令集核2316的处理器上被执行。类似地,图23示出了以高级语言2302的程序可以通过使用可替换的指令集编译器2308来被编译以生成可替换的指令集二进制代码2310,所述可替换的指令集二进制代码2310可以由没有至少一个x86指令集核2314的处理器(例如具有如下核的处理器:所述核执行加利福尼亚州森尼维耳市的MIPS Technologies的MIPS指令集和/或执行加利福尼亚州森尼维耳市的ARM Holdings的ARM指令集)原生地执行。指令转换器2312用于将x86二进制代码2306转换成可以由没有x86指令集核2314的处理器原生地执行的代码。这种经转换的代码不大可能与可替换的指令集二进制代码2310相同,因为能够这样做的指令转换器难以制成;然而,经转换的代码将实现一般操作并且由来自可替换指令集的指令构成。因而,指令转换器2312表示软件、固件、硬件、或由此的组合,其通过仿真、模拟或任何其它过程而允许没有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码2306。

Claims (17)

1.一种装置,包括:
解码电路,用于对单条指令解码,所述单条指令具有用于指示操作码、紧缩目的地操作数、第一紧缩源操作数和第二紧缩源操作数的字段,其中,目的地的元素大小为32位,并且第一源的元素和第二源的元素大小为16位;
寄存器堆,具有多个紧缩数据寄存器,所述多个紧缩数据寄存器包括用于所述目的地操作数和所述源操作数的寄存器;以及
执行电路,耦合至所述解码电路,所述执行电路用于执行与所述单条指令对应的操作,包括对于所述目的地的每个元素位置:
将来自所述第一源的第一元素与来自所述第二源的第一元素相乘,以生成第一结果,
将来自所述第一源的第二元素与来自所述第二源的第二元素相乘,以生成第二结果,
将所述第一结果与所述第二结果相加,以生成第三结果;
将所述第三结果与来自所述目的地的元素位置的元素相加,以生成第四结果,以及
将所述第四结果存储在所述目的地的元素位置中。
2.如权利要求1所述的装置,其中,所述执行电路还用于结合将所述第一结果和所述第二结果相加来执行舍入。
3.如权利要求1或2所述的装置,其中,所述执行电路还用于执行将所述第三结果与来自所述目的地的元素位置的元素相加来执行舍入。
4.如权利要求1-3中的任一项所述的装置,其中,所述第一源具有长度,并且所述第二源具有所述长度,所述长度是128位、256位或512位中的一个。
5.如权利要求1-3中的任一项所述的装置,其中,所述目的地具有长度,所述长度是128位、256位或512位中的一个。
6.一种方法,包括:
对单条指令解码,所述单条指令具有用于指示操作码、紧缩目的地操作数、第一紧缩源操作数和第二紧缩源操作数的字段,其中,目的地的元素大小为32位,并且第一源的元素和第二源的元素大小为16位;
执行与所述单条指令对应的操作,包括对于所述目的地的每个元素位置:
将来自所述第一源的第一元素与来自所述第二源的第一元素相乘,以生成第一结果,
将来自所述第一源的第二元素与来自所述第二源的第二元素相乘,以生成第二结果,
将所述第一结果与所述第二结果相加,以生成第三结果;
将所述第三结果与来自所述目的地的元素位置的元素相加,以生成第四结果,以及
将所述第四结果存储在所述目的地的元素位置中。
7.如权利要求6所述的方法,进一步包括:结合将所述第一结果与所述第二结果相加来进行舍入。
8.如权利要求6或7所述的方法,进一步包括:结合将所述第三结果与来自所述目的地的元素位置的元素相加来进行舍入。
9.如权利要求6-8中的任一项所述的方法,其中,所述第一源具有长度,并且所述第二源具有所述长度,所述长度是128位、256位或512位中的一个。
10.如权利要求6-8中的任一项所述的方法,其中,所述目的地具有长度,所述长度是128位、256位或512位中的一个。
11.一种系统,包括:
存储器控制器;以及
处理器核,所述处理器核包括如权利要求1-5中的任一项所述的装置。
12.如权利要求11所述的系统,其中,所述系统是片上系统。
13.一种计算机可读存储介质,具有存储于其上的指令,所述指令当由处理器执行时使所述处理器执行如权利要求6-10中的任一项所述的方法。
14.一种处理器核,包括:
指令解码器;
与所述指令解码器耦合的标量单元,所述标量单元使用标量寄存器;
与所述指令解码器耦合的向量单元,所述向量单元使用向量寄存器;以及
L1高速缓存,其允许对所述标量寄存器和所述向量寄存器的低等待时间访问,
所述处理器核使用全局L2高速缓存的本地子集,并具有对所述本地子集的直接访问路径。
15.如权利要求14所述的处理器核,其特征在于,所述向量单元是16宽向量处理单元(VPU),所述VPU执行整型、单精度浮点以及双精度浮点指令中的一个或多个。
16.如权利要求15所述的处理器核,其特征在于,所述VPU通过混合单元支持对寄存器输入的混合、通过数值转换单元支持数值转换,并通过复制单元支持对存储器输入的复制。
17.一种方法,包括:
使用x86编译器编译采用高级程序语言的程序,以生成由具有至少一个x86指令集核的第一处理器原生执行的x86二进制代码;
使用指令转换器,将所述x86二进制代码转换成能够由不具有x86指令集核的第二处理器原生执行的替代二进制代码。
CN202310172571.2A 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法 Pending CN116009814A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310172571.2A CN116009814A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201680089435.5A CN109716290B (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
CN202310172571.2A CN116009814A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
PCT/US2016/057991 WO2018075052A1 (en) 2016-10-20 2016-10-20 Systems, apparatuses, and methods for fused multiply add

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201680089435.5A Division CN109716290B (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法

Publications (1)

Publication Number Publication Date
CN116009814A true CN116009814A (zh) 2023-04-25

Family

ID=62019029

Family Applications (4)

Application Number Title Priority Date Filing Date
CN201680089435.5A Active CN109716290B (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
CN202111331383.7A Pending CN113885833A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
CN202211329959.0A Pending CN115480730A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
CN202310172571.2A Pending CN116009814A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法

Family Applications Before (3)

Application Number Title Priority Date Filing Date
CN201680089435.5A Active CN109716290B (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
CN202111331383.7A Pending CN113885833A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法
CN202211329959.0A Pending CN115480730A (zh) 2016-10-20 2016-10-20 用于经融合的乘加的系统、装置和方法

Country Status (5)

Country Link
US (7) US11169802B2 (zh)
EP (7) EP3971711A1 (zh)
CN (4) CN109716290B (zh)
TW (4) TW202311986A (zh)
WO (1) WO2018075052A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109716290B (zh) 2016-10-20 2023-12-19 英特尔公司 用于经融合的乘加的系统、装置和方法
US10483981B2 (en) * 2016-12-30 2019-11-19 Microsoft Technology Licensing, Llc Highspeed/low power symbol compare
WO2018211129A1 (en) * 2017-05-19 2018-11-22 Movidius Ltd. Methods, systems and apparatus to improve convolution efficiency
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11409525B2 (en) 2018-01-24 2022-08-09 Intel Corporation Apparatus and method for vector multiply and accumulate of packed words
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
KR20210034999A (ko) * 2019-09-23 2021-03-31 에스케이하이닉스 주식회사 Aim 장치 및 aim 장치에서의 곱셈-누산 연산 방법
CN112434256B (zh) * 2020-12-03 2022-09-13 海光信息技术股份有限公司 矩阵乘法器和处理器

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2289354B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping
US5784305A (en) * 1995-05-01 1998-07-21 Nec Corporation Multiply-adder unit
US5953241A (en) 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US5862067A (en) * 1995-12-29 1999-01-19 Intel Corporation Method and apparatus for providing high numerical accuracy with packed multiply-add or multiply-subtract operations
US5880984A (en) 1997-01-13 1999-03-09 International Business Machines Corporation Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments
US6014684A (en) 1997-03-24 2000-01-11 Intel Corporation Method and apparatus for performing N bit by 2*N-1 bit signed multiplication
US7430578B2 (en) * 2001-10-29 2008-09-30 Intel Corporation Method and apparatus for performing multiply-add operations on packed byte data
US6944747B2 (en) * 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
FR2853425B1 (fr) 2003-04-07 2006-01-13 Atmel Corp Sequence de multiplication efficace pour operandes a grands nombres entiers plus larges que le materiel multiplicateur
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US20080252652A1 (en) 2007-04-13 2008-10-16 Guofang Jiao Programmable graphics processing element
TW200910779A (en) 2007-08-31 2009-03-01 Univ Nat Taipei Technology Fast calculation method for characteristic value of software-based wireless decoder
US8316071B2 (en) 2009-05-27 2012-11-20 Advanced Micro Devices, Inc. Arithmetic processing unit that performs multiply and multiply-add operations with saturation and method therefor
US9104510B1 (en) * 2009-07-21 2015-08-11 Audience, Inc. Multi-function floating point unit
US8458442B2 (en) * 2009-08-26 2013-06-04 International Business Machines Corporation Method and structure of using SIMD vector architectures to implement matrix multiplication
US8990282B2 (en) * 2009-09-21 2015-03-24 Arm Limited Apparatus and method for performing fused multiply add floating point operation
CN101751244B (zh) 2010-01-04 2013-05-08 清华大学 微处理器
GB2478731B (en) 2010-03-15 2013-08-21 Advanced Risc Mach Ltd Operand size control
CN108647044B (zh) * 2011-12-28 2022-09-13 英特尔公司 浮点缩放处理器、方法、系统和指令
CN104137055B (zh) * 2011-12-29 2018-06-05 英特尔公司 点积处理器、方法、系统和指令
CN104011652B (zh) * 2011-12-30 2017-10-27 英特尔公司 打包选择处理器、方法、系统和指令
US10095516B2 (en) * 2012-06-29 2018-10-09 Intel Corporation Vector multiplication with accumulation in large register space
US9626184B2 (en) 2013-06-28 2017-04-18 Intel Corporation Processors, methods, systems, and instructions to transcode variable length code points of unicode characters
US9395990B2 (en) * 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems
US9417843B2 (en) * 2013-08-20 2016-08-16 Apple Inc. Extended multiply
RU2656730C2 (ru) * 2014-03-26 2018-06-06 Интел Корпорейшн Процессоры, способы, системы и команды для сложения трех операндов-источников с плавающей запятой
US9766888B2 (en) * 2014-03-28 2017-09-19 Intel Corporation Processor instruction to store indexes of source data elements in positions representing a sorted order of the source data elements
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US11023231B2 (en) * 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
US10146535B2 (en) * 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
CN109716290B (zh) 2016-10-20 2023-12-19 英特尔公司 用于经融合的乘加的系统、装置和方法
US10489063B2 (en) * 2016-12-19 2019-11-26 Intel Corporation Memory-to-memory instructions to accelerate sparse-matrix by dense-vector and sparse-vector by dense-vector multiplication
WO2018174930A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
US11409525B2 (en) * 2018-01-24 2022-08-09 Intel Corporation Apparatus and method for vector multiply and accumulate of packed words
US11768681B2 (en) * 2018-01-24 2023-09-26 Intel Corporation Apparatus and method for vector multiply and accumulate of packed bytes

Also Published As

Publication number Publication date
EP3971710A1 (en) 2022-03-23
CN115480730A (zh) 2022-12-16
TWI761367B (zh) 2022-04-21
EP3971711A1 (en) 2022-03-23
US20230418602A1 (en) 2023-12-28
US11526354B2 (en) 2022-12-13
US20220050678A1 (en) 2022-02-17
EP3529695B1 (en) 2023-10-11
TW202311986A (zh) 2023-03-16
TW202217603A (zh) 2022-05-01
EP3971709A1 (en) 2022-03-23
EP3529695A4 (en) 2020-07-15
US11544058B2 (en) 2023-01-03
TW201823973A (zh) 2018-07-01
WO2018075052A1 (en) 2018-04-26
CN109716290A (zh) 2019-05-03
CN113885833A (zh) 2022-01-04
US11782709B2 (en) 2023-10-10
EP4198718A1 (en) 2023-06-21
EP4148563A1 (en) 2023-03-15
CN109716290B (zh) 2023-12-19
US11526353B2 (en) 2022-12-13
US11507369B2 (en) 2022-11-22
TW202326409A (zh) 2023-07-01
US20220012056A1 (en) 2022-01-13
TWI800118B (zh) 2023-04-21
US20230048998A1 (en) 2023-02-16
US20200026515A1 (en) 2020-01-23
US20210406011A1 (en) 2021-12-30
US20220012057A1 (en) 2022-01-13
US11169802B2 (en) 2021-11-09
EP3529695A1 (en) 2019-08-28
EP3989062A1 (en) 2022-04-27

Similar Documents

Publication Publication Date Title
US11487541B2 (en) Systems, apparatuses, and methods for chained fused multiply add
CN109791488B (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN109716290B (zh) 用于经融合的乘加的系统、装置和方法
KR102463858B1 (ko) 벡터 인덱스 로드 및 저장을 위한 방법 및 장치
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
JP2019197531A (ja) 連鎖タイル演算を実施するためのシステムおよび方法
CN117707622A (zh) 用于具有可变精度输入操作数的融合乘-加操作的指令
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN109643235B (zh) 用于多源混合操作的装置、方法和系统
CN107077333B (zh) 用于实行向量位聚集的方法和装置
CN112988230A (zh) 用于将大约为一的浮点值相乘的指令的装置、方法和系统
US20190102199A1 (en) Methods and systems for executing vectorized pythagorean tuple instructions
CN112988231A (zh) 用于将零的值相乘的指令的装置、方法和系统
CN113050994A (zh) 用于512位操作的系统、装置和方法

Legal Events

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