CN110580175A - 可变格式、可变稀疏矩阵乘法指令 - Google Patents
可变格式、可变稀疏矩阵乘法指令 Download PDFInfo
- Publication number
- CN110580175A CN110580175A CN201910431218.5A CN201910431218A CN110580175A CN 110580175 A CN110580175 A CN 110580175A CN 201910431218 A CN201910431218 A CN 201910431218A CN 110580175 A CN110580175 A CN 110580175A
- Authority
- CN
- China
- Prior art keywords
- matrix
- processing
- row
- column
- elements
- 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
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 349
- 238000012545 processing Methods 0.000 claims abstract description 255
- 238000007667 floating Methods 0.000 claims description 43
- 238000000034 method Methods 0.000 claims description 31
- 230000004044 response Effects 0.000 claims description 20
- 230000000694 effects Effects 0.000 claims description 10
- 238000011144 upstream manufacturing Methods 0.000 claims description 10
- 238000003491 array Methods 0.000 claims description 6
- 230000015654 memory Effects 0.000 description 130
- 239000013598 vector Substances 0.000 description 98
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 73
- 238000010586 diagram Methods 0.000 description 55
- 238000006073 displacement reaction Methods 0.000 description 40
- 239000000126 substance Substances 0.000 description 14
- 230000008901 benefit Effects 0.000 description 9
- 230000002123 temporal effect Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 238000013501 data transformation Methods 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000013135 deep learning Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 3
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 3
- 238000007792 addition Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000011143 downstream manufacturing Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- UIERETOOQGIECD-ARJAWSKDSA-N angelic acid group Chemical group C(\C(\C)=C/C)(=O)O UIERETOOQGIECD-ARJAWSKDSA-N 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000009510 drug design Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Abstract
公开的实施例涉及可变格式、可变稀疏矩阵乘法指令。在一个示例中,处理器包括提取和解码电路,用于提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,所述指令指定分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵的位置;执行电路,该执行电路响应于经解码的VFVSMM指令用于:将指定的A矩阵的每一行与后续行错开路由到(M×N)处理阵列的相应行中,并将指定的B矩阵的每一列与后续列错开路由到处理阵列的相应列中,其中,处理单元中的每一个生成A矩阵元素和具有与A矩阵元素的列地址相同的行地址的匹配B矩阵元素的K个乘积,并且将每个所生成的乘积与相应的C矩阵元素累加。
Description
技术领域
本发明的领域总体上涉及计算机处理器架构,具体而言,涉及可变格式、可变稀疏矩阵乘法指令。
背景技术
诸如深度神经网络的机器学习架构已经应用于包括计算机视觉、语音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学和药物设计的领域。深度学习是一类机器学习算法。最大化深度学习算法和计算的灵活性和成本效率可以帮助满足深度学习处理器(例如,在数据中心中执行深度学习的那些处理器)的需求。
矩阵乘法是包括机器学习的许多算法的关键性能/功率限制。一些传统的矩阵乘法方法是专用的,例如它们缺乏利用宽累加器支持各种数据格式(有符号和无符号8b/16b整数、16b浮点)的灵活性,以及支持密集和稀疏矩阵的灵活性。
发明内容
根据本申请的一方面,提供了一种处理器,包括:提取和解码电路,用于提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有的字段指定分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵的位置;以及执行电路,该执行电路用于:在以密集-密集模式操作的情况下,响应于经解码的VFVSMM指令,将A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将B矩阵的每一列与后续列错开路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元用于生成分别从A矩阵和B矩阵接收的匹配的A矩阵元素和B矩阵元素的K个乘积,当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,匹配存在;并且处理单元用于将每个所生成的乘积与C矩阵的相应元素累加,C矩阵的相应元素具有与处理单元在处理阵列中的相对位置相同的相对位置。
根据本申请的一方面,提供了一种方法,包括:使用提取和解码电路提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有的字段指定分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵的位置,以及使用执行电路在以密集-密集模式操作的情况下通过以下操作来响应经解码的VFVSMM指令:将A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将B矩阵的每一列与后续列错开路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元用于生成分别从A矩阵和B矩阵接收的匹配的A矩阵元素和B矩阵元素的K个乘积,当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,匹配存在;并且处理单元用于将每个所生成的乘积与C矩阵的相应元素累加,C矩阵的相应元素具有与处理单元在处理阵列中的位置相同的相对位置。
根据本申请的一方面,提供了一种包含指令的机器可读介质,所述指令在被执行时使得机器执行上述方法。
附图说明
通过示例而非限制的方式在附图的图中示出了本发明,其中相似的附图标记表示类似的元素,并且其中:
图1是示出根据实施例的用于执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令的处理部件的框图;
图2是根据一些实施例的用于执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令的处理阵列的框图;
图3是示出根据一些实施例的可变格式、可变稀疏矩阵乘法(VFVSMM)指令的部分执行的流程框图;
图4是示出根据一些实施例的用于执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令的执行流水线的流程框图;
图5是示出根据一些实施例的在执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令时在处理单元和路由电路之间共享的路由控制信号的框图;
图6是示出根据一些实施例的处理器执行可变格式、可变稀疏矩阵乘法(VFVSMM)的流程框图;
图7是示出根据一些实施例的可变精度整数/浮点乘法累加电路的框图;
图8A-8C是示出根据本发明实施例的通用向量友好指令格式及其指令模板的框图;
图8A是示出根据一些实施例的用于可变格式、可变稀疏矩阵乘法(VFVSMM)指令的格式的框图;
图8B是示出根据本发明实施例的通用向量友好指令格式及其A类指令模板的框图。
图8C是示出根据本发明实施例的通用向量友好指令格式及其B类指令模板的框图。
图9A是示出根据本发明实施例的示例性特定向量友好指令格式的框图。
图9B是示出根据本发明一个实施例的构成完整操作码字段的特定向量友好指令格式的字段的框图。
图9C是示出根据本发明一个实施例的构成寄存器索引字段的特定向量友好指令格式的字段的框图。
图9D是示出根据本发明一个实施例的构成增强操作字段的特定向量友好指令格式的字段的框图。
图10是根据本发明一个实施例的寄存器架构的框图。
图11A是示出根据本发明实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线的框图。
图11B是示出根据本发明实施例的要包括在处理器中的有序架构核和示例性寄存器重命名、无序发布/执行架构核的示例性实施例的框图;
图12A-B示出了更具体的示例性有序核架构的框图,其核将是芯片中的几个逻辑块之一(包括相同类型和/或不同类型的其他核);
图12A是根据本发明实施例的单个处理器核以及其与管芯上互连网络的连接及其二级(L2)缓存的本地子集的框图;
图12B是根据本发明实施例的图12A中的处理器核的一部分的展开图;
图13是根据本发明实施例的可以具有多于一个核,可以具有集成存储器控制器并且可以具有集成图形的处理器的框图;
图14-17是示例性计算机架构的框图;
图14示出了根据本发明一个实施例的系统的框图;
图15是根据本发明实施例的第一更具体的示例性系统的框图;
图16是根据本发明实施例的第二更具体的示例性系统的框图;
图17是根据本发明实施例的片上系统(SoC)的框图;及
图18是根据本发明实施例的对照使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
在以下说明中,阐述了许多具体细节。然而,应理解,可以在没有这些具体细节的情况下实践一些实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免使本说明书难以理解。
说明书中对“一个实施例”、“实施例”、“示例性实施例”等的提及指示所描述的实施例可以包括特征、结构或特性,但是每个实施例可以不一定包括该特征、结构或特征。而且,这些短语不一定是指同一实施例。此外,当关于实施例描述特征、结构或特性时,如果明确地描述,则认为影响关于其他实施例的这种特征、结构或特性在本领域技术人员的知识范围内。
所公开的实施例提供了可变格式、可变稀疏矩阵乘法(VFVSMM)指令的改进的执行。所公开的实施例针对各种不同的数据格式执行矩阵乘法和乘法累加,这些数据格式包括有符号/无符号8位/16位整数和16位/32位浮点格式。此外,所公开的实施例利用阻塞、基于握手的路由以及在处理阵列中的节点之间广播矩阵数据元素,来支持密集或稀疏矩阵操作数并且避免乘以稀疏矩阵的零值。此外,通过将处理阵列中的每个处理单元重新配置成2×2阵列,优化所公开的8位模式以实现4倍吞吐量。
如本文所使用的,矩阵的稀疏度被定义为非零元素的比例,其余元素为零或空。例如,在一些实施例中,稀疏度为0.125的稀疏矩阵仅具有1/8或12.5%的非零值元素。稀疏度也可以用于指代具有零值的元素的比例。无论哪种方式,所公开的实施例在矩阵乘法中利用一个或两个矩阵的稀疏度来改善功率、性能、灵活性和/或功能。
通过提供将具有各种格式和各种稀疏度的矩阵相乘的电路,预期通过所公开的实施例来改善灵活性、功能和成本。与将使用专用于各种格式和稀疏度中每一个的不同硬件的一些方法相反,所公开的实施例提供了可配置为适应变化的硬件。与将浪费功率和性能去乘以矩阵的零元素的一些方法相反,所公开的实施例在以密集-稀疏或稀疏-稀疏模式操作时避免至少一些零相乘,如下所述。
与依赖于专用于不同数据格式的不同电路的一些方法相比,通过提供单个可重新配置的执行电路以支持各种数据格式(包括整数和浮点),预期所公开的实施例有望改善成本和面积。所公开的实施例提供了一种矩阵乘法加速器,其累加时支持浮点和整数数据格式。通过避免乘以零元素,还可以优化所公开的加速器以对稀疏矩阵进行操作。通过将这些特征组合到可重新配置的电路中,所公开的实施例因此使单个矩阵乘法加速器电路能够利用宽累加器支持多种精度格式,同时有效地针对密集或稀疏矩阵进行重新配置。所公开的加速器实施例改善了面积和能量效率,同时提供了支持许多典型的矩阵乘法工作量(例如机器学习)的灵活性。
图1是示出根据一些实施例的用于执行(一个或多个)可变格式、可变稀疏矩阵乘法指令(VFVSMM指令)103的处理部件的框图。如图所示,储存装置101存储要执行的VFVSMM指令103。如下面进一步描述的,在一些实施例中,计算系统100是单指令多数据(SIMD)处理器,以基于单个指令同时处理多个数据元素。
在操作中,将由提取电路105从储存装置101中提取VFVSMM指令103。提取的VFVSMM指令107将由解码电路109解码。VFVSMM指令格式(将针对图7、8A-B和9A-D进一步例示和说明该格式)具有用于指定操作码以及目的地、乘数、被乘数和被加数复数向量的字段(此处未示出)。解码电路109将所提取的VFVSMM指令107解码为一个或多个操作。在一些实施例中,该解码包括生成将由执行电路(诸如执行电路119)结合路由电路118执行的多个微操作。解码电路109还解码指令后缀和前缀(如果使用的话)。在下面至少针对图2-6、11A-B和12A-B进一步说明和例示结合路由电路117操作的执行电路119。
在一些实施例中,寄存器重命名、寄存器分配和/或调度电路113提供用于以下操作中的一个或多个的功能:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中为寄存器别名表),2)将状态位和标志分配给经解码的指令,以及3)调度经解码的VFVSMM指令111用于在指令池外的执行电路119上执行(例如,在一些实施例中使用保留站(reservation station))。
寄存器(寄存器文件)和/或存储器115将数据存储为将由执行电路119操作的经解码的VFVSMM指令111的操作数。示例性寄存器类型包括写掩码寄存器、压缩(packed)数据寄存器、通用寄存器和浮点寄存器,如下至少针对图10进一步说明和例示的。
在一些实施例中,回写电路120提交执行经解码的VFVSMM指令111的结果。针对图2-6、11A-B和12A-B进一步例示和说明执行电路119和系统100。
图2是根据一些实施例的用于执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令的处理阵列的框图。如图所示,系统200包括输入矩阵A 202,输入矩阵B 204,输出矩阵C 206和路由电路212。还示出了执行电路208,其包括具有(M×N)个处理单元210的处理阵列。在一些实施例中,处理阵列中的每个处理单元是乘法累加电路,其展开视图显示为MAC 214。
所公开的处理单元210的优点在于它们可以被重用以在具有各种不同格式的矩阵上执行乘法和进行乘法累加。例如,如针对图8A所说明和例示的,所公开的实施例可以对各种数据格式中的任何一种以及以每个矩阵元素的位数为单位的元素大小712执行VFVSMM指令,这些数据格式例如8位整数、16位整数、32位整数、半精度浮点、单精度浮点或双精度浮点。通过避免实现不同硬件以处理不同类型的数据的需要,所公开的实施例通过针对不同类型的数据重用相同的电路来提供功率和成本益处。
在一些实施例中,例如,当处理8位整数数据时,通过配置每个处理单元执行2×2矩阵乘法,使执行电路吞吐量增加四倍。
如本文所述,处理单元有时被称为处理元件,并且有时被称为处理电路,并且有时可被称为处理节点。无论措辞如何,处理单元旨在包括执行数据路径计算并提供控制逻辑的电路。
在操作中,路由电路212和执行电路208以密集-密集模式、密集-稀疏模式或稀疏-稀疏模式进行操作,如下所述。
密集-密集模式
在一些实施例中,通过软件将路由和执行电路置于密集-密集模式,例如通过设置控制路由和执行电路的控制寄存器。所公开的实施例通过避免涉及稀疏矩阵的零元素的乘法来改善功率和性能。所公开的实施例通过允许在各种模式中(包括在各种稀疏度条件下和具有各种数据格式)重复使用相同的电路来提供成本优势。
在一些实施例中,将路由和执行电路置于密集-密集模式中,如VFVSMM指令所指示的,例如使用操作码的后缀。针对图8A-C和9A-D进一步说明和例示VFVSMM指令的格式。在一些实施例中,路由和执行电路响应于A和B矩阵中的一个或两个以压缩格式被存储而进入密集-密集模式,其中指示符(specifier)伴随每个矩阵元素并指定元素在逻辑A或B矩阵内的逻辑位置。
在操作中,响应于经解码的VFVSMM指令,使用路由电路212以密集-密集模式操作的执行电路将指定的A矩阵的每一行(错开(stagger)后续行)路由到具有(M×N)个处理单元的处理阵列的相应行中,并且将指定的B矩阵的每一列(错开后续列)路由到处理阵列的相应列中。在一些实施例中,每个行和列错开一个时钟周期,允许每个处理元件基于时钟周期和处理阵列中处理单元的相对位置推断每个接收的A矩阵和B矩阵元素的行和列地址。
继续操作,(M×N)处理单元中的每一个将生成水平接收的K个数据元素与垂直接收的K个数据元素中的每一个的乘积,并且累加每个生成的乘积与C矩阵的相应元素的在前值,所述相应元素具有与阵列中处理单元的位置相同的相对矩阵位置。
密集-稀疏模式
在一些实施例中,通过软件将路由电路和执行电路置于密集-稀疏模式,例如通过设置控制路由和执行电路的控制寄存器。所公开的实施例通过避免涉及稀疏矩阵的零元素的乘法来改善功率和性能。所公开的实施例通过允许在各种模式中(包括在各种稀疏度条件下和具有各种数据格式)重复使用相同的电路来提供成本优势。
在一些实施例中,将路由和执行电路置于密集-稀疏模式中,如VFVSMM指令所指示的,例如使用操作码的后缀。针对图8A-C和9A-D进一步说明和例示VFVSMM指令的格式。在一些实施例中,路由和执行电路响应于A和B矩阵中的一个或两个以压缩格式被存储而进入密集-稀疏模式,其中指示符伴随每个矩阵元素并指定元素在逻辑A或B矩阵内的逻辑位置。
应当注意,即使A矩阵和B矩阵都是密集矩阵,也可以使处理器以密集-稀疏模式执行VFVSMM指令。只要在这种情况下将稀疏矩阵格式化为包括每个数据元素的地址信息,处理器就可以被构造成进行一个或多个地址检查,每个地址检查确定地址匹配,因为A和B矩阵是密集矩阵,相邻地址间隔1。因此在这种情况下以密集-稀疏模式操作将引起一些额外的执行成本,但可以简化执行VFVSMM指令的任务。
在处理器将以密集-稀疏模式执行VFVSMM指令的一些实施例中,指定的B矩阵是稀疏矩阵(具有小于1的稀疏度,稀疏度被定义为非零元素的比例,其余元素为零或空),并且仅包括包含(K×N)个元素的逻辑矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段。
在操作中,响应于经解码的VFVSMM指令,使用路由电路212以密集-稀疏模式操作的执行电路将指定的A矩阵的每一行(与后续行错开)路由到(M×N)处理阵列的相应行中,并且将指定的B矩阵的每一列路由到处理阵列的相应列中。
作为稀疏矩阵,指定的B矩阵将以仅存储非零元素的压缩稀疏格式被存储在存储器中并从存储器加载。因此,A和B矩阵的后续元素可能在其行和列地址中具有间隙。在一些实施例中,每行错开一个时钟周期,允许每个处理元件基于时钟周期推断每个接收的A矩阵元素的列地址。
继续操作,以密集-稀疏模式操作的处理阵列210中的(M×N)个处理单元中的每一个基于时钟和处理单元在处理阵列210内的位置来确定每个水平接收的元素的列和行地址。然后,处理阵列210中的(M×N)个处理单元中的每一个确定垂直接收的元素的逻辑行地址与水平接收的元素的列地址之间是否存在地址匹配。当存在匹配时,处理单元将生成乘积。当不存在匹配时,如果列地址大于逻辑行地址,则处理单元保持水平接收的元素并使垂直接收的元素通过,否则,保持垂直接收的元素并使水平接收的元素通过。
稀疏-稀疏模式
在一些实施例中,通过软件将路由电路和执行电路置于稀疏-稀疏模式,例如通过设置控制路由和执行电路的控制寄存器。所公开的实施例通过避免涉及稀疏矩阵的零元素的乘法来改善功率和性能。所公开的实施例通过允许在各种模式中(包括在各种稀疏度条件下和具有各种数据格式)重复使用相同的电路来提供成本优势。
在一些实施例中,将路由和执行电路置于稀疏-稀疏模式中,如VFVSMM指令所指示的,例如使用操作码的后缀。针对图8A-C和9A-D进一步说明和例示VFVSMM指令的格式。在一些实施例中,路由和执行电路响应于A和B矩阵以压缩格式被存储而进入稀疏-稀疏模式,其中指示符伴随每个矩阵元素并指定元素在逻辑A或B矩阵内的逻辑位置。
在处理器将以稀疏-稀疏模式执行VFVSMM指令的一些实施例中,指定的A和B矩阵都是稀疏矩阵(具有小于1的稀疏度,稀疏度被定义为非零元素的比例,其余元素为零或空)。在这样的实施例中,指定的A和B矩阵均作为压缩稀疏矩阵被存储在存储器中,该压缩稀疏矩阵分别仅包括逻辑(M×K)和(K×N)矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段。
在操作中,使用路由电路212以稀疏-稀疏模式操作的执行电路将指定的A矩阵的每一行路由到(M×N)处理阵列的相应行中,并且将指定的B矩阵的每一列路由到处理阵列的相应列中。
作为稀疏矩阵,指定的A和B矩阵将以仅存储非零元素并且包括逻辑阵列中的元素的地址的压缩稀疏格式被存储在存储器中并从存储器加载。因此,A和B矩阵的后续元素可能在其行和列地址中具有间隙。
继续操作,以稀疏-稀疏模式操作的(M×N)个处理单元中的每一个将垂直接收的元素的逻辑行地址与水平接收的元素的逻辑列地址进行比较。当存在地址匹配时,处理单元将生成乘积。当不存在匹配时,如果逻辑列地址大于逻辑行地址,则处理单元将保持水平接收的元素并使垂直接收的元素通过,否则,保持垂直接收的元素并使水平接收的元素通过。
图3是示出根据一些实施例的可变格式、可变稀疏矩阵乘法(VFVSMM)指令的部分执行的流程框图。如图所示,执行电路300包括MAC 308的网格,其行从输入矩阵A 302的相应行接收A矩阵元素,并且其列从输入矩阵B 304的相应列接收B矩阵元素。MAC 308的网格产生输出矩阵C 306。在一些实施例中,当以密集-密集模式操作时,行和列“错开”一个时钟周期,允许每个处理元件基于时钟周期和处理阵列内处理单元的相对位置推断每个接收的A矩阵和B矩阵元素的行和列地址。如图所示,输入矩阵A 302的行1比行2提前一个周期被路由,并且比负载3提前两个周期被路由。
在操作中,当以密集-密集模式操作时,(M×N)个处理单元中的每一个将生成分别从指定的A和B矩阵接收的匹配的A矩阵和B矩阵元素的K个乘积(当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,匹配存在),并且将每个生成的乘积与指定的C矩阵的相应元素累加,该C矩阵的相应元素具有与处理阵列中的处理单元的位置相同的相对位置。
当以密集-稀疏模式操作时,MAC 308的网格中的(M×N)个MAC中的每个将确定在B矩阵元素的指定逻辑行地址与A矩阵元素的列地址之间是否存在地址匹配。当存在匹配时,生成乘积。当不存在匹配时,在A矩阵元素的列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
当以稀疏-稀疏模式操作时,MAC 308的网格中的(M×N)个MAC中的每个将确定在A矩阵元素的指定逻辑列地址与B矩阵元素的指定逻辑行地址之间是否存在匹配,当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的指定逻辑列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
下面至少针对图2、4-6、11A-B和12A-B进一步说明和例示执行电路300。
图4是示出根据一些实施例的用于执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令的执行流水线的流程框图。如图所示,A矩阵402和B矩阵404都是密集矩阵。在操作中,响应于经解码的VFVSMM指令,以密集-密集模式操作的执行电路将指定的A矩阵的每一行(错开后续行)路由到具有(M×N)个处理单元的处理阵列的相应行中,并将指定的B矩阵的每一列(错开后续列)路由到处理阵列的相应列中。还示出了沿着时间线400在七个点:418、420、422、424、426、426和428处拍摄的七个连续快照408A-G。
在一些实施例中,错开后续行和列指的是将每个后续行和列到处理阵列的相应行和列的路由延迟一个周期。错开后续行和列提供了创建流水线以使水平和垂直对齐以在7个周期内执行27次乘法累加的优点,如快照408A-G中所示。错开行和列还允许每个处理元件基于时钟周期和处理阵列内处理单元的相对位置来推断每个接收的A矩阵和B矩阵元素的行和列地址。
如快照408A所示,将A矩阵402的行0和B矩阵404的列0路由到处理阵列的相应行和相应列。同样在408A,A矩阵402和B矩阵404的相应元素在C矩阵406的元素C(0,0)处相乘并与其中的先前数据累加。
在快照408B处,已经过去了一个周期,A矩阵402的行0和列0已经移位1个点,并且A矩阵402的行1和B矩阵404的列1被路由到处理阵列的相应行和相应列中。同样在408B,A矩阵402和B矩阵404的相应元素在C(0,0)、C(0,1)和C(1,0)处相乘。在C(0,0)处生成的乘积与在408A处生成的先前值累加。
在快照408C处,已经过去了另一个周期,A矩阵402的行0和1以及B矩阵404的列0和1已经移位1个点,并且A矩阵402的行2和B矩阵404的列2被路由到处理阵列的相应行和相应列中。同样在408C,A矩阵402和B矩阵404的相应元素在C(0,0)、C(0,1)、C(0,2)、C(1,0)、C(1,1)和C(2,0)处相乘并与先前值(如果有的话)累加。如其粗体轮廓所示,在C(0,0)处生成的累加乘积是C(0,0)的最终值。
在快照408D处,已经过去了另一个周期,A矩阵402的行0-2和B矩阵404的列0-2已经移位1个点。同样在408D,A矩阵402和B矩阵404的相应元素在C(0,1)、C(0,2)、C(1,0)、C(1,1)、C(1,2)、C(2,0)和C(2,1)处相乘并与先前值(如果有的话)累加。如其粗体轮廓所示,在C(0,1)和C(1,0)处生成的累加乘积是C(0,1)和C(1,0)的最终值。
在快照408E处,已经过去了另一个周期,A矩阵402的行0-2和B矩阵404的列0-2已经移位1个点。同样在408E,A矩阵402和B矩阵404的相应元素在C(0,2)、C(1,1)、C(1,2)、C(2,0)、C(2,1)和C(2,2)处相乘并与先前值(如果有的话)累加。如其粗体轮廓所示,在C(0,2)、C(1,1)和C(2,0)处生成的累加乘积是C(0,2)、C(1,1)和C(2,0)的最终值。
在快照408F处,已经过去了另一个周期,A矩阵402的行1-2和B矩阵404的列1-2已经移位1个点。同样在408F,A矩阵402和B矩阵404的相应元素在C(1,2)、C(2,1)和C(2,2)处相乘并与先前值(如果有的话)累加。如其粗体轮廓所示,在C(2,1)和C(1,2)处生成的累加乘积是C(2,1)和C(1,2)的最终值。
在快照408G处,已经过去了另一个周期,A矩阵402的行2和B矩阵404的列2已经移位1个点。同样在408G,A矩阵402和B矩阵404的相应元素在C(2,2)处相乘并与先前值(如果有的话)累加。如其粗体轮廓所示,在C(2,2)处生成的累加乘积是C(2,2)的最终值。
图5是示出根据一些实施例的在执行可变格式、可变稀疏矩阵乘法(VFVSMM)指令的同时在处理单元和路由电路之间共享的路由控制信号的框图。示出的是在以稀疏-稀疏模式操作的单行处理单元的一部分(四个节点)的四个周期上的四个快照550A-550D。四个快照550A-550D中的每一个示出了四个处理单元554A-D-560A-D,每个处理单元接收具有行地址的垂直数据元素输入,以及具有列地址的水平数据元素输入。在一些实施例中,水平元素的行地址和垂直元素的列地址由处理阵列内处理单元的相对位置隐含地定义。
由于输入矩阵A和B的格式化要求,行和列地址将永远不会减小。相反,连续数据元素的行和列地址在密集模式下时将各自增加1,在稀疏模式下时将各自增加0或更多,直到到达行结尾或列结尾(如果保持请求在前一周期中生效则在稀疏模式中地址将保持不变,如针对快照550A例示和说明的)。
为了示出根据一些实施例的在节点之间共享的握手控制信号,图5的处理阵列将以稀疏-稀疏模式操作。
在操作中,以稀疏模式操作的每个处理单元将垂直接收的元素的行地址与水平接收的元素的列地址进行比较。(注意,可以执行这样的地址检查,但是在密集模式下操作时不需要这样的地址检查,在此期间每个元素的地址将准确地增加1。当在密集-稀疏模式下操作时,仅需要检查从稀疏矩阵接收的输入的地址。)
如果地址匹配,并且如果下游处理单元没有请求保持垂直和水平元素,则处理单元将所接收的元素相乘并且将乘积与相应的目的地矩阵元素的先前内容累加。如本文所使用的,术语“相应”表示目的地矩阵元素在(M×N)目的地矩阵内的相对位置与处理单元在(M×N)处理阵列内的相对位置相同。
但是,如果地址不匹配,则处理单元将保持具有较高地址的元素并使其他元素通过。由于行和列地址永远不会减小,因此保持较低地址的元素没有意义;永远不会有地址匹配。然而,处理单元保持较大地址的元素,以在将来具有地址匹配地址的其他元素到达时使用。在一些实施例中,每个处理单元具有用以保持数据元素的一些储存元件,例如寄存器或触发器。
此外,当地址不匹配时,处理单元将在被保持的数据元素的上游方向上发送保持请求,以便可以继续保持数据元素,并且在被保持的数据元素的下游方向上发送保持通知信号。
在一些实施例中,从下游节点接收保持请求的处理单元将生成并向上游发送相应的保持请求。
在一些实施例中,例如,如针对快照550A例示和说明的,处理单元结合路由电路将数据元素向下游广播到可以使用该元素的两个或多个处理单元。
表1列出了处理单元之间使用的各种握手控制。
表1-握手控制
信号# | 说明# |
保持请求# | 请求上游节点保持# |
保持通知# | 向下游通知保持计划# |
为了说明图5的执行快照,在周期1 550A之前,四个处理单元554A-560A具有垂直元素,其行地址分别等于3、2、1和0。如图所示,在周期1 550A中到达处理单元556A和560A的垂直数据元素都具有等于“4”的行地址,但是由于它们在不同的列中,所以可以具有不同的数据。同样在周期1 550A中,将具有等于4的列地址的水平元素广播到可以使用它的每个处理单元(由于处理单元558A在周期1 550A期间生成的水平保持请求,具有等于“4”的列地址的数据元素在周期2 550B期间保持在处理节点556B的触发器中)。同样在周期1中,来自处理单元558A的水平保持请求使处理单元556A保持水平元素,下一周期期间寻址为“4”,在周期2 550B中重复该数据元素。
如图所示,处理单元558A在周期1中接收的垂直数据元素具有等于“2”的行地址,并且很可能由于前一周期期间的垂直保持请求而被触发器保持。处理单元558A没有对周期1的垂直保持请求。因为水平输入地址“4”高于垂直输入地址“2”,所以处理单元558A生成水平保持请求并将其发送回556A,使得556B中的触发器在周期2中关闭。
如图所示,处理单元558A在周期1 550A期间还生成并向下游发送水平保持通知。在操作中,接收水平保持通知的下游处理单元将其置于一个或多个使用中(未示出):1)可以存在向上游传播的多个保持请求,并且从将保持数据的节点发送保持通知。在这种情况下,如果560A在周期1期间接收到保持请求,则来自558A的保持通知将向节点560A发信号通知上游的某个节点正保持该数据,因此560A将不需要保持。2)来自节点的保持通知还影响是否执行乘法。
在周期2 550B中继续执行,由于分别在地址为5的输入元素之间、地址为4的寄存元素之间以及地址为4的输入和寄存元素之间的地址匹配,因此在处理单元554B,556B和560B处发生乘法累加。
在周期3 550C处继续执行,在所有四个节点处发生乘法累加,因为在输入元素之间(如在554C、558C和560C中)或在寄存元素之间(如在556C中)的每种情况下存在地址匹配。注意,处理单元554C对输入数据元素执行乘法累加,并且处理单元556C对寄存数据元素执行乘法累加。在一些实施例中,如图所示,执行电路响应于确定水平和垂直元件之间的地址匹配,在556C处对地址为5的寄存元素执行乘法累加,然后在下一周期期间执行地址为6的输入元素的乘法累加。
在周期4 550D处继续执行,在550D处发生乘法累加,因为在输入(如在554D中)或寄存(如在556D中)元素之间存在地址匹配。
图6是示出根据一些实施例的执行可变格式、可变稀疏矩阵乘法(VFVSMM)的处理器的流程框图。如图所示,响应于VFVSMM指令,执行流程600的处理器在602处将使用提取电路来提取可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有指定存储分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵中的每一个矩阵的位置的字段。在604处,处理器使用解码电路来解码所提取的矩阵乘法指令。在一些实施例中,在606处,处理器将取回与指定的A和B矩阵相关联的数据元素。操作606是可选的,如其虚线边界所示,比如可以在不同时间取回数据元素,或者根本不取回数据元素。在608处,处理器将使用以密集-密集模式操作的执行电路通过以下操作来响应经解码的VFVSMM指令:将指定的A矩阵的每一行(错开后续行)路由到具有(M×N)个处理单元的处理阵列的相应行中,并将指定的B矩阵的每一列(错开后续列)路由到处理阵列的相应列中。在未示出的一些实施例中,处理器以每个时钟周期一个元素的速率路由指定的A矩阵的每一行和指定的B矩阵的每一列,并将每个后续行和后续列错开一个时钟周期,并且(M×N)个处理单元中的每一个基于时钟周期和处理阵列内处理单元的相对位置来推断每个接收的A矩阵和B矩阵元素的列和行地址。在未示出的一些实施例中,处理器维护元素计数或元素索引,其中每个处理单元参考元素计数,而不推断任何内容。在未示出的一些实施例中,A矩阵元素和B矩阵元素中的每一个包括用于指定其在A或B矩阵内的逻辑位置的字段。在610处,处理器将通过(M×N)个处理单元中的每一个生成分别从指定的A和B矩阵接收的匹配的A矩阵和B矩阵元素的K个乘积(当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,存在匹配),并且将每个生成的乘积与指定的C矩阵的相应元素累加,该C矩阵的相应元素具有与处理阵列中处理单元的位置相同的相对位置。
图7是示出根据一些实施例的可变精度整数/浮点乘法累加电路的框图。如图所示,乘法累加电路700包括FP16/INT16/INT8乘法器701和FP32/INT48/INT24累加器702。
在操作中,FP16/INT16/INT8乘法器701将在8b/16b整数和16b浮点输入之间重新配置,以支持不同的性能、数值范围和精度要求。此外,宽累加器可以为高维矩阵提供更准确的结果。MAC被组织为乘法后接累加的双周期流水线。四个8b乘法器703A-703D(每个乘法器的每个输入可独立地进行有符号/无符号的重新配置)分别在INT8和INT16模式中传送4路16b和1路32b结果。32b结果使用这些中的每一个作为16b乘法象限,使用正确的有效位对结果求和。浮点运算将11b尾数乘法映射到16b乘法器,整个非归一化的22b有效数与单精度乘积指数一起被发送到后续加法器级。非归一化乘积仅需要额外的保护位用于浮点加法,而从乘法关键路径中去除归一化。FP16乘法结果可完全由FP32乘积范围和精度表示,从而实现去除欠/溢出检测和饱和逻辑,以及乘法器中的任何舍入逻辑。
FP32加法器的延迟直接影响MAC吞吐量,因为它不能被流水线化以用于背靠背累加。代替后加前导零检测器(LZD),前导零预测器(LZA704)与32b加法器并联使用以计算归一化左移。可能需要将加法器输出求反以进行减法运算以产生无符号尾数。通过将该求反步骤延迟到归一化之后来隐藏晚到的加法器MSB(最高有效位)的临界性(criticality)。在反转操作之后,二的补码求反也需要递增。这与最终的舍入递增器合并,以将其从关键路径中去除。为了实现面积高效重新配置,32b整数乘积利用尾数加法器累加,而16b乘积需要两个额外的16b加法器用于4路吞吐量。宽整数累加将四个8b递增器/递减器用于高位,其中两个可以重新配置作为用于48b累加的16b单元操作。在重新配置尾数数据路径用于整数模式时,旁路多路复用器可减少关键路径。最佳放置的数据路径隔离门和基于模式的时钟门控确保在未使用的逻辑和时钟节点中没有切换活动。向FP32累加器添加INT48支持可将面积增大20%,而4路INT24支持则将此增大8%。
图8A是示出根据一些实施例的用于可变格式、可变稀疏矩阵乘法(VFVSMM)指令的格式的框图。如图所示,VFVSMM指令800包括操作码801(VFVSMM*),以及用于指定目的地802、源1 803和源2 804矩阵的字段。本文使用的源1、源2和目的地矩阵有时分别称为A、B和C矩阵。VFVSMM指令800还包括用于指定数据格式805和以每个矩阵元素的位数为单位的元素大小806的可选字段,数据格式例如整数、半精度浮点、单精度浮点或双精度浮点。数据格式805甚至可以指定依赖于实施方式的自定义格式。VFVSMM指令800有时包括指定M 807、N808和K 809的字段,其中指定的A、B和C矩阵分别具有(M×K)、(K×N)和(M×N)个数据元素。如其虚线边框所示,数据格式805、元素大小806、M 807、N 808和K 809是可选的,比如可以省略它们,从而假设预定的默认值。在一些实施例中,数据格式805、元素大小806、M 807、N808和K 809中的一个或多个被指定为操作码801的一部分,例如被指定为操作码的选定代码,后缀或前缀。例如,操作码801可以包括后缀,例如“B”、“W”、“D”或“Q”,以分别指定8位、16位、32位或64位的元素大小。操作码801被示为包括星号以指示它可以可选地包括额外的前缀或后缀以指定指令行为。如果VFVSMM指令800未指定任何可选参数,则根据需要应用预定的默认值。针对图8B-C和图9A-D进一步例示和说明VFVSMM指令800的格式。
指令集
指令集可以包括一个或多个指令格式。给定指令格式可以定义各种字段(例如,位数、位的位置)以指定要执行的操作(例如,操作码)和将在其上执行该操作的操作数和/或其他数据字段(例如,掩码)等。一些指令格式通过指令模板(或子格式)的定义被进一步细分。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常具有相同的顺序,但是至少一些具有不同的位位置,因为包括较少的字段)和/或被定义为具有不同解释的给定字段。因此,ISA的每个指令使用给定的指令格式表示(并且,如果定义,则在该指令格式的给定的一个指令模板中)并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,该指令格式包括指定该操作码的操作码字段和选择操作数的操作数字段(源1/目的地和源2);并且在指令流中出现该ADD指令将在操作数字段中具有选择特定操作数的特定内容。已发布和/或公布了被称为高级向量扩展(AVX)(AVX1和AVX2)并使用向量扩展(VEX)编码方案的一组SIMD扩展(例如,参见64和IA-32架构软件开发人员手册,2014年9月;参见高级向量扩展编程参考,2014年10月)。
示例性指令格式
本文描述的指令的实施例可以以不同的格式实现。另外,以下详细描述示例性系统、架构和流水线。指令的实施例可以在这样的系统、架构和流水线上执行,但不限于详细说明的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。虽然描述了通过向量友好指令格式支持向量和标量操作的实施例,但替代实施例仅使用向量友好指令格式的向量操作。
图8B-8C是示出根据本发明实施例的通用向量友好指令格式及其指令模板的框图。图8B是示出根据本发明实施例的通用向量友好指令格式及其A类指令模板的框图;图8C是示出根据本发明实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,为通用向量友好指令格式811定义A类和B类指令模板,两者都包括无存储器访问812指令模板和存储器访问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字节向量操作数)。
图8B中的A类指令模板包括:1)在无存储器访问812指令模板内,示出了无存储器访问、全舍入控制类型操作813指令模板和无存储器访问、数据变换类型操作815指令模板;2)在存储器访问820指令模板内,示出了存储器访问、时态(temporal)825指令模板和存储器访问、非时态830指令模板。图8C中的B类指令模板包括:1)在无存储器访问812指令模板内,示出了无存储器访问、写掩码控制、部分舍入控制类型操作814指令模板和无存储器访问、写掩码控制、vsize类型操作817指令模板;2)在存储器访问820指令模板内,示出了存储器访问、写掩码控制827指令模板。
通用向量友好指令格式811包括以下以图8B-8C所示的顺序列出的以下字段。
格式字段840-该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,因此标识指令在指令流中以向量友好指令格式出现。因此,该字段是可选的,仅具有通用向量友好指令格式的指令集是不需要该字段的。
基本操作字段842-其内容区分不同的基本操作。
寄存器索引字段844-其内容直接或通过地址生成来指定源和目标操作数的位置,无论它们在寄存器中还是在存储器中。这些包括足够数量的位以从PxQ(例如32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中,N可以是多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个也充当目的地,可以支持多达三个源,其中这些源中的一个也充当目的地,可能支持多达两个源和一个目的地)。
修正符字段846-其内容区分通用向量指令格式中指定存储器访问的指令的出现与不指定存储器访问的指令的出现;即,区分无存储器访问812指令模板和存储器访问820指令模板。存储器访问操作读取和/或写入存储器层级结构(在一些情况下使用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段还在三种不同方式之间进行选择以执行存储器地址计算,但替代实施例可以支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段850-其内容区分除基本操作之外还要执行各种不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被分成类字段868,α字段852和β字段854。增强操作字段850允许在单个指令中而不是2、3或4个指令中执行公共操作组。
缩放字段860-其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用2scale*index+base的地址生成)。
位移字段862A-其内容用作存储器地址生成的一部分(例如,用于使用2scale*index+base+displacement的地址生成)。
位移因子字段862B(注意,直接在位移因子字段862B上的位移字段862A的并置指示使用一个或另一个)-其内容用作地址生成的一部分;它指定位移因子,该位移因子将通过存储器访问的大小(N)来缩放-其中N是存储器访问中的字节数(例如,对于使用2scale*index+base+scaled displacement的地址生成)。忽略冗余低阶位,因此,位移因子字段的内容乘以存储器操作数总大小(N),以便生成用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段874(稍后描述)和数据操纵字段854C来确定。位移字段862A和位移因子字段862B从以下意义上来说是可选的,例如它们不用于无存储器访问812指令模板和/或不同实施例可以仅实现这两者中的一个或不实现这两者。
数据元素宽度字段864-其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其他实施例中仅针对一些指令)。该字段从以下意义上来说是可选的,例如如果仅支持一个数据元素宽度和/或使用操作码的某些方面支持数据元素宽度则不需要该字段。
写掩码字段870-其内容基于每个数据元素位置控制目的地向量操作数中的数据元素位置是否反映了基本操作和增强操作的结果。A类指令模板支持合并写掩码,而B类指令模板支持合并和归零写掩码。合并时,向量掩码允许在执行任何操作(由基本操作和增强操作指定)期间保护目的地中的任何元素集免于更新;在另一个实施例中,保留相应掩码位具有0值的目的地的每个元素的旧值。相反,当归零向量掩码允许在执行任何操作(由基本操作和增强操作指定)期间将目的地中的任何元素集归零;在一个实施例中,当相应的掩码位具有0值时,目的地的元素被设置为0。该功能的一个子集是能够控制正在执行的操作的向量长度(即,从第一个到最后一个被修改的元素的跨度);但是,修改的元素不必是连续的。因此,写掩码字段870允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了本发明的实施例,其中写掩码字段870的内容选择多个写掩码寄存器中包含要使用的写掩码的一个写掩码寄存器(并且因此写掩码字段870的内容间接地标识要执行的掩码),但替代实施例或者附加实施例允许写掩码字段870的内容直接指定要执行的掩码。
立即数(immediate)字段872-其内容允许指定立即数。该字段从以下意义上来说是可选的,例如它不存在于不支持立即数的通用向量友好格式的实现中并且它不存在于不使用立即数的指令中。
类字段868-其内容区分不同类的指令。参考图8A-B,该字段的内容在A类和B类指令之间进行选择。在图8A-B中,圆角方块用于表示在字段中存在特定值(例如,分别在图8A-B中的类字段868的A类868A和B类868B)。
A类指令模板
在A类的非存储器访问812指令模板的情况下,α字段852被解析为RS字段852A,其内容区分要执行不同的增强操作类型中的哪个(例如,舍入852A.1和数据变换852A.2分别被指定用于无存储器访问、舍入型操作810和无存储器访问、数据变换类型操作815指令模板),而β字段854区分要执行哪个指定类型的操作。在无存储器访问812指令模板中,不存在缩放字段860,位移字段862A和位移因子字段862B。
无存储器访问指令模板-全舍入控制类型操作
在无存储器访问全舍入控制类型操作813指令模板中,β字段854被解析为舍入控制字段854A,其内容提供静态舍入。虽然在本发明的所述实施例中,舍入控制字段854A包括抑制所有浮点异常(SAE)字段856和舍入操作控制字段858,但是替代实施例可以支持可以将这些概念编码到同一字段中或仅具有这些概念/字段中的一个或者另一个(例如,可以仅具有舍入操作控制字段858)。
SAE字段856-其内容区分是否禁用异常事件报告;当SAE字段的856内容表明启用抑制时,给定的指令不会报告任何类型的浮点异常标志,也不会引发任何浮点异常处理程序。
舍入操作控制字段858-其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入,向下舍入,向零舍入和向最近舍入)。因此,舍入操作控制字段858允许基于每个指令改变舍入模式。在本发明的处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段850的内容覆盖该寄存器值。
无存储器访问指令模板-数据变换类型操作
在无存储器访问数据变换类型操作815指令模板中,β字段854被解析为数据变换字段854B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、调配(swizzle)、广播)。
在类A的存储器访问820指令模板的情况下,α字段852被解析为逐出提示字段852B,其内容区分将使用哪一个驱逐提示(在图8A中,时态852B.1和非时态852B.2分别被指定用于存储器访问、时态825指令模板和存储器访问、非时态830指令模板),而β字段854被解析为数据操纵字段854C,其内容区分要执行多个数据操纵操作(也称为基元)中的哪一个(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问820指令模板包括缩放字段860,并且可选地包括位移字段862A或位移因子字段862B。
向量存储器指令利用转换支持执行从存储器的向量加载和到存储器的向量存储。与常规向量指令一样,向量存储器指令以逐个数据元素的方式从/向存储器传输数据,实际传输的元素由被选择作为写掩码的向量掩码的内容决定。
存储器访问指令模板-时态
时态数据是可能足够快地被重用以从缓存受益的数据。然而,这是一个提示,不同的处理器可以以不同的方式实现它,包括完全忽略提示。
存储器访问指令模板-非时态
非时态数据是不太可能足够快地被重用以从缓存在第一级缓存中受益的数据,并且应该优先驱逐。然而,这是一个提示,不同的处理器可以以不同的方式实现它,包括完全忽略提示。
B类指令模板
在B类的指令模板的情况下,α字段852被解析为写掩码控制(Z)字段852C,其内容区分由写掩码字段870控制的写掩码应该是合并还是归零。
在B类的无存储器访问812指令模板的情况下,β字段854的一部分被解析为RL字段857A,其内容区分要执行不同增强操作类型中的哪一个(例如,舍入857A.1和向量长度(VSIZE)857A.2分别被指定用于无存储器访问、写掩码控制、部分舍入控制类型操作814指令模板和无存储器访问、写掩码控制、VSIZE类型操作817指令模板),而β字段854的其余部分区分要执行哪个指定类型的操作。在无存储器访问812指令模板中,不存在缩放字段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。
关于通用向量友好指令格式811,示出了完整操作码字段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指令集的前缀编码字段、真实操作码字节字段、MODR/M字段、SIB字段、位移字段以及立即数字段保持一致。示出了9A中的字段所映射的图8中的字段。
应当理解,尽管出于说明性目的,在通用向量友好指令格式811的上下文中参考特定向量友好指令格式900描述了本发明的实施例,但是本发明不限于特定向量友好指令格式900,除非声明的情况下。例如,通用向量友好指令格式811考虑了各种字段的各种可能大小,而特定向量友好指令格式900被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段864被示为特定向量友好指令格式900中的一位字段,但是本发明不限于此(即,通用向量友好指令格式811考虑其他大小的数据元素宽度字段864)。
通用向量友好指令格式811包括以下按照图9A中所示的顺序列出的以下字段。
EVEX前缀(字节0-3)902-以四字节形式编码。
格式字段840(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段840并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段905(EVEX字节1,位[7-5])-由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和EVEX.X位字段(EVEX字节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'910A-这是REX'字段910的第一部分,并且是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.vvvv对第一个源寄存器操作数进行编码,以反转(1的补码)形式指定,并且对有2个或更多源操作数的指令有效;2)EVEX.vvvv对目标寄存器操作数进行编码,以1的补码形式指定用于某些向量移位;或者3)EVEX.vvvv不对任何操作数进行编码,该字段是保留的,并且应该包含1111b。因此,EVEX.vvvv字段920对以反转(1的补码)形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,使用额外不同的EVEX位字段将指定符大小扩展为32个寄存器。
EVEX.U 868类字段(EVEX字节2,位[2]-U)-如果EVEX.U=0,则表示A类或EVEX.U0;如果EVEX.U=1,则表示B类或EVEX.U1。
前缀编码字段925(EVEX字节2,位[1:0]-pp)-为基本操作字段提供附加位。除了以EVEX前缀格式提供对传统SSE指令的支持之外,这还具有压缩SIMD前缀的益处(不是要求字节表示SIMD前缀,EVEX前缀仅需要2位)。在一个实施例中,为了支持在传统格式和EVEX前缀格式中使用SIMD前缀(66H,F2H,F3H)的传统SSE指令,将这些传统SIMD前缀编码到SIMD前缀编码字段中;并且在运行时在被提供给解码器的PLA之前扩展为传统SIMD前缀(因此PLA可以执行这些传统指令的传统和EVEX格式而无需修改)。虽然较新的指令可以直接使用EVEX前缀编码字段的内容作为操作码扩展,但是某些实施例以类似的方式扩展以保持一致性,但允许这些传统SIMD前缀指定不同的含义。替代实施例可以重新设计PLA以支持2位SIMD前缀编码,因此不需要扩展。
α字段852(EVEX字节3,位[7]-EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也用α示出)-如前所述,该字段是特定于上下文的。
β字段854(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用β示出)-如前所述,该字段是特定于上下文的。
REX'910B-这是REX'字段910的剩余部分,并且是EVEX.V'位字段(EVEX字节3,位[3]-V'),其可用于对扩展32寄存器组的高16或低16位编码。该位以位反转格式存储。值1用于对低16位寄存器编码。即,通过组合EVEX.V'、EVEX.vvvv来形成V'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位,只能被设置为4个非常有用的值-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);当类(U)字段868包含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;当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的编码用于写掩码时,它选择0x6F的硬连线写掩码,有效地禁用该指令的写掩码。
通用寄存器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相同的封装中的单独管芯(die)上的协处理器;3)在与CPU相同的管芯上的协处理器(在这种情况下,这种协处理器有时被称为专用逻辑(例如,集成图形和/或科学(吞吐量)逻辑)或被称为专用核);4)片上系统,其可以在同一管芯上包括所描述的CPU(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、以上描述的协处理器、和附加功能。接下来描述示例性核架构,之后描述示例性处理器和计算机架构。
示例性核架构
有序和无序的核框图
图11A是示出根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线两者的框图。图11B是示出根据本发明的实施例的要被包括在处理器中的有序架构核和示例性寄存器重命名、无序发布/执行架构核两者的示例性实施例的框图。图11A-B中的实线框示出了有序流水线和有序核,而可选择添加的虚线框示出了寄存器重命名、无序发布/执行流水线和核。假定有序方面是无序方面的子集,将描述无序方面。
在图11A中,处理器流水线1100包括提取(fetch)阶段1102、长度解码阶段1104、解码阶段1106、分配阶段1108、重命名阶段1110、调度(也被称为调派或发布)阶段1112、寄存器读取/存储器读取阶段1114、执行阶段1116、写回/存储器写入阶段1118、异常处理阶段1122、和提交阶段(commit stage)1124。
图11B示出了处理器核1190,其包括耦合到执行引擎单元1150的前端单元1130,并且执行引擎单元1150和前端单元1130两者都耦合到存储器单元1170。核1190可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为另一种选择,核1190可以是专用核,例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元1130包括耦合到指令缓存单元1134的分支预测单元1132,指令缓存单元1134耦合到指令转换后备缓冲器(TLB)1136,指令转换后备缓冲器1136耦合到指令提取单元1138,指令提取单元1138耦合到解码单元1140。解码单元1140(或解码器)可以解码指令,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令、或其他控制信号,它们解码自原始指令或以其他方式反映原始指令或导出自原始指令。可以使用各种不同的机制来实现解码单元1140。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1190包括微代码ROM或存储用于某些宏指令的微代码的其他介质(例如,在解码单元1140中或在前端单元1130内)。解码单元1140耦合到执行引擎单元1150中的重命名/分配器单元1152。
执行引擎单元1150包括重命名/分配器单元1152,其耦合到引退(retirement)单元1154和一组一个或多个调度器单元1156。(一个或多个)调度器单元1156表示任意数目的不同调度器,包括,预留站(reservations station)、中央指令窗等。(一个或多个)调度器单元1156耦合到(一个或多个)物理寄存器文件单元1158。每个物理寄存器文件单元1158表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同的物理寄存器文件存储一个或多个不同的数据类型,例如,标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器文件单元1158包括向量寄存器单元、写入掩码寄存器单元、和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。(一个或多个)物理寄存器文件单元1158与引退单元1154重叠,以说明寄存器重命名和无序执行可以被实现的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器、和(一个或多个)引退寄存器文件;使用寄存器图和寄存器池;等等)。引退单元1154和(一个或多个)物理寄存器文件单元1158耦合到(一个或多个)执行集群1160。(一个或多个)执行集群1160包括一组一个或多个执行单元1162和一组一个或多个存储器访问单元1164。执行单元1162可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集的多个执行单元,但是其他实施例可以仅包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元1156、(一个或多个)物理寄存器文件单元1158、和(一个或多个)执行集群1160被示为可能是多个,因为某些实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,其中每个流水线都有自己的调度器单元、物理寄存器文件单元、和/或执行集群-并且在单独的存储器访问流水线的情况下,其中仅该流水线的执行集群具有(一个或多个)存储器访问单元1164的某些实施例被实现)。还应理解,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行而其余的是有序发布/执行的。
该组存储器访问单元1164耦合到存储器单元1170,存储器单元1170包括耦合到数据缓存单元1174的数据TLB单元1172,其中数据缓存单元1174耦合到2级(L2)缓存单元1176。在一个示例性实施例中,存储器访问单元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指令集(具有已经添加有较新版本的一些扩展);美国加利福尼亚州桑尼维尔市的MIP Technologies的MIPS指令集;美国加利福尼亚州桑尼维尔市的ARM Holdings的ARM指令集(具有可选的附加扩展,例如,NEON)),包括本文所描述的(一个或多个)指令。在一个实施例中,核1190包括支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许要使用打包数据来执行的许多多媒体应用所使用的操作。
应理解,核可以支持多线程(执行两个或更多个并行的操作集或线程集),并且可以以各种方式这样做,这些方式包括时间分片多线程、同时多线程(其中,单个物理核为该物理核正在同时进行多线程的每个线程提供逻辑核)、或它们的组合(例如,时间分片的提取和解码以及此后同时的多线程,例如,在超线程技术中)。
虽然在无序执行的上下文中描述了寄存器重命名,但应理解,寄存器重命名可以用在有序架构中。虽然所示处理器的实施例还包括单独的指令和数据缓存单元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中读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器组或包括允许数据在两个寄存器文件(file)之间传输而不被写入和读回的通信路径)。
L2缓存的本地子集1204是全局L2缓存的一部分,全局L2缓存被划分为分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自己的L2缓存的本地子集1204的直接访问路径。由处理器核读取的数据被存储在其L2缓存子集1204中并且可以与访问它们自己的本地L2缓存子集的其他处理器核并行地被快速访问。由处理器核写入的数据被存储在其自己的L2缓存子集1204中,并且在需要的情况下被从其他子集冲刷(flushed)。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2缓存、和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径在每个方向上为1012位宽。
图12B是根据本发明实施例的图12A中的处理器核的一部分的展开图。图12B包括L1缓存1206的L1数据缓存1206A部分,以及关于向量单元1210和向量寄存器1214的更多细节。具体地,向量单元1210是16宽的向量处理单元(VPU)(参见16宽的ALU 1228),它执行整数、单精度浮点、和双精度浮点指令中的一个或多个。VPU支持通过调配单元1220对寄存器输入进行调配,使用数字转换单元1222A-B进行数字转换,以及使用复制单元1224对存储器输入进行复制。写入掩码寄存器1226允许预测得到向量写入。
图13是根据本发明实施例的可具有不止一个核、可具有集成存储器控制器、且可具有集成图形的处理器1300的框图。图13中的实线框示出了具有单核1302A、系统代理1310、和一组一个或多个总线控制器单元1316的处理器1300;但虚线框的可选添加示出了具有以下各项的替代处理器1300:多个核1302A-N、系统代理单元1310中的一组一个或多个集成存储器控制器单元1314、以及专用逻辑1308。
因此,处理器1300的不同实现方式可以包括:1)具有专用逻辑1308的CPU(其中专用逻辑是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核)),以及核1302A-N(其是一个或多个通用核(例如,通用有序核、通用无序核、或两者的组合);2)具有核1302A-N的协处理器(其中核1302A-N是主要用于图形和/或科学(吞吐量)的大量专用核);3)具有核1302A-N的协处理器(其中核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。
图14中用虚线表示附加处理器1415的可选性质。每个处理器1410、1415可以包括本文所描述的处理核中的一个或多个,并且可以是处理器1300的某个版本。
存储器1440可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)、或这两者的组合。对于至少一个实施例,控制器集线器1420经由多点总线(multi-drop bus)与(一个或多个)处理器1410、1415通信,该多点总线例如是前端总线(FSB)、诸如QuickPath互连(QPI)之类的点对点接口、或类似的连接1495。
在一个实施例中,协处理器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可以可选地经由高性能接口1539来与协处理器1538交换信息。在一个实施例中,协处理器1538是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩和/或解压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享缓存(未示出)可以被包括在任一处理器中,或者在两个处理器外部但经由P-P互连与处理器连接,使得在处理器进入低功率模式的情况下,任一或两个处理器的本地缓存信息可以被存储在共享缓存中。
芯片集1590可以经由接口1596耦合到第一总线1516。在一个实施例中,第一总线1516可以是外围组件互连(PCI)总线,或诸如PCI Express总线或另一第三代I/O互连总线之类的总线,但本公开的范围不限于此。
如图15所示,各种I/O设备1514可以耦合到第一总线1516,以及将第一总线1516耦合到第二总线1520的总线桥1518。在一个实施例中,一个或多个附加处理器1515(例如,协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其他处理器)耦合到第一总线1516。在一个实施例中,第二总线1520可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线1520,包括,例如键盘和/或鼠标1522、通信设备1527、和诸如磁盘驱动器或其他大容量存储设备之类的储存装置1528(其可以包括指令/代码和数据1530)。此外,音频I/O 1524可以耦合到第二总线1520。注意,可能有其他架构。例如,代替图15的点对点架构,系统可以实现多点(multi-drop)总线或其他这样的架构。
现在参考图16,示出了根据本发明的实施例的第二更具体的示例性系统1600的框图。图15和16中的相似的元件具有相似的附图标记,并且图15中的某些方面已从图16中省略,以避免模糊图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。传统(legacy)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))、随机存取存储器(RAM)(如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光学卡或适用于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂时性实体机器可读介质,其包含指令或包含设计数据,例如硬件描述语言(HDL),其定义本文描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可以被称为程序产品。
仿真(包括二进制转换,代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换,包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为要由核处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或者部分在处理器上、部分在处理器外。
图18是根据本发明实施例的对照使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但替代地,指令转换器可以用软件、固件、硬件、或其各种组合来实现。图18示出了采用高级语言1802的程序可以使用x86编译器1804来编译以生成x86二进制代码1806,其可以由具有至少一个x86指令集核的处理器1816本地执行。具有至少一个x86指令集核的处理器1816表示可以通过进行以下操作来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能,从而实现与具有至少一个x86指令集核的Intel处理器基本上相同的结果的任何处理器:兼容地执行或以其他方式处理(1)Intel x86指令集核的指令集的大部分或者(2)目标为在具有至少一个x86指令集核的Intel处理器上运行的应用或其他软件的目标代码版本。x86编译器1804表示可操作以生成x86二进制代码1806(例如,目标代码)的编译器,其中二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核的处理器1816上被执行。类似地,图18示出了采用高级语言1802的程序可以使用替代指令集编译器1808来编译以生成替代指令集二进制代码1810,该二进制代码可以由没有至少一个x86指令集核的处理器1814(例如,具有执行美国加利福尼亚州桑尼维尔市的MIPSTechnologies的MIPS指令集和/或执行美国加利福尼亚州桑尼维尔市的ARM Holdings的ARM指令集的核的处理器)本地执行。指令转换器1812用于将x86二进制代码1806转换为可由不具有x86指令集核的处理器1814本地执行的代码。该转换后的代码不太可能与替代指令集二进制代码1810相同,因为很难制造出能够实现它的指令转换器;但是,转换后的代码将完成一般操作,并由来自替代指令集的指令组成。因此,指令转换器1812表示通过仿真、模拟、或任何其他过程来允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1806的软件、固件、硬件、或其组合。
进一步的示例
示例1提供了一种示例性处理器,包括:提取和解码电路,用于提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有指定存储分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵中的每一个的位置的字段;以及执行电路,以密集-密集模式操作、响应于经解码的VFVSMM指令,将指定的A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将指定的B矩阵的每一列与后续列错开路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元生成分别从指定的A和B矩阵接收的匹配的A矩阵和B矩阵元素的K个乘积(当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,匹配存在),并且将每个所生成的乘积与指定的C矩阵的相应元素累加,该C矩阵的相应元素具有与处理单元在处理阵列中的位置相同的相对位置。
示例2包括示例1的示例性处理器的实质,其中,执行电路用于以每个时钟周期一个元素的速率路由指定的A矩阵的每一行和指定的B矩阵的每一列,并且将每个后续行和后续列错开一个时钟周期,并且其中,(M×N)个处理单元中的每一个处理单元用于基于时钟周期和处理单元在处理阵列内的相对位置来推断每个接收的A矩阵和B矩阵元素的列和行地址。
示例3包括示例1的示例性处理器的实质,其中,指定的B矩阵仅包括逻辑上包括(K×N)个元素的稀疏矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段,其中,执行电路以密集-稀疏模式操作、响应于经解码的VFVSMM指令,将指定的A矩阵的每一行与后续行错开路由到处理阵列的相应行中,并将指定的B矩阵的每一列路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元以密集-稀疏模式操作的情况下用于:确定在B矩阵元素的指定逻辑行地址和A矩阵元素的列地址之间是否存在地址匹配,并且当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
示例4包括示例1的示例性处理器的实质,其中,指定的A和B矩阵是稀疏矩阵,分别仅包括逻辑(M×K)和(K×N)矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段,并且其中,执行电路以稀疏-稀疏模式操作、响应于经解码的VFVSMM指令将指定的A矩阵的每一行路由到处理阵列的相应行中,并将指定的B矩阵的每一列路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元以稀疏-稀疏模式操作的情况下用于:确定在A矩阵元素的指定逻辑列地址与B矩阵元素的指定逻辑行地址之间是否存在匹配,当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的指定逻辑列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
示例5包括示例1的示例性处理器的实质,其中,当不存在匹配时,(M×N)个处理单元中的每一个还用于生成并在被保持的数据元素的上游方向上发送保持请求,并且生成并在被保持的数据元素的下游方向上发送保持通知。
示例6包括示例1的示例性处理器的实质,其中,执行电路在使数据元素通过时将数据元素向下游广播到两个或多个处理单元。
示例7包括示例1的示例性处理器的实质,其中,矩阵乘法指令还用于指定所指定的A、B和C矩阵的每个数据元素的数据元素大小,所述数据元素大小作为指令操作数或作为操作码的一部分而被指定。
示例8包括示例1的示例性处理器的实质,其中,矩阵乘法指令还用于指定所指定的A、B和C矩阵的每个数据元素的数据格式,所述数据格式是整数、半精度浮点、单精度浮点、双精度浮点和自定义格式中的一个。
示例9包括示例1的示例性处理器的实质,其中,处理阵列通过在多个时钟周期上迭代地使用较小的处理单元阵列来在效果上包括(M×N)个处理单元以执行与(M×N)个处理单元的实际物理阵列相同的处理。
示例10包括示例1的示例性处理器的实质,其中,处理阵列通过级联多个较小的处理单元阵列来在效果上包括(M×N)个处理单元以执行与(M×N)个处理单元的实际物理阵列相同的处理。
示例11提供了一种示例性方法,包括:使用提取和解码电路提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有指定存储分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵中的每一个的位置的字段,以及使用执行电路以密集-密集模式操作的情况下通过以下操作来响应经解码的VFVSMM指令:将指定的A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将指定的B矩阵的每一列与后续列错开路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个生成分别从指定的A和B矩阵接收的匹配的A矩阵和B矩阵元素的K个乘积(当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,匹配存在),并且将每个所生成的乘积与指定的C矩阵的相应元素累加,该C矩阵的相应元素具有与处理单元在处理阵列中的位置相同的相对位置。
示例12包括示例11的示例性方法的实质,其中,执行电路以每个时钟周期一个元素的速率路由指定的A矩阵的每一行和指定的B矩阵的每一列,并且将每个后续行和后续列错开一个时钟周期,并且其中,(M×N)个处理单元中的每一个基于时钟周期和处理单元在处理阵列内的相对位置来推断每个接收的A矩阵和B矩阵元素的列和行地址。
示例13包括示例11的示例性方法的实质,其中,指定的B矩阵仅包括逻辑上包括(K×N)个元素的稀疏矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段,其中,执行电路以密集-稀疏模式操作、响应于解码的VFVSMM指令将指定的A矩阵的每一行与后续行错开路由到处理阵列的相应行中,并将指定的B矩阵的每一列路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元以密集-稀疏模式操作的情况下用于:确定在B矩阵元素的指定逻辑行地址和A矩阵元素的列地址之间是否存在地址匹配,当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的所推断的列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
示例14包括示例11的示例性方法的实质,其中,指定的A和B矩阵是稀疏矩阵,分别仅包括逻辑(M×K)和(K×N)矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段,并且其中,执行电路以稀疏-稀疏模式操作、响应于经解码的VFVSMM指令将指定的A矩阵的每一行路由到处理阵列的相应行中,并将指定的B矩阵的每一列路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个处理单元以稀疏-稀疏模式操作的情况下用于:确定在A矩阵元素的指定逻辑列地址与B矩阵元素的指定逻辑行地址之间是否存在匹配,当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的指定逻辑列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
示例15包括示例11的示例性方法的实质,其中,当不存在匹配时,(M×N)个处理单元中的每一个还用于生成并在被保持的数据元素的上游方向上发送保持请求,并且生成并在被保持的数据元素的下游方向上发送保持通知。
示例16包括示例11的示例性方法的实质,其中,执行电路在使数据元素通过时将数据元素向下游广播到两个或多个处理单元。
示例17包括示例11的示例性方法的实质,其中,矩阵乘法指令还用于指定所指定的A、B和C矩阵的每个数据元素的数据元素大小,所述数据元素大小作为指令操作数或作为操作码的一部分而被指定。
示例18包括示例11的示例性方法的实质,其中,矩阵乘法指令还用于指定所指定的A、B和C矩阵的每个数据元素的数据格式,所述数据格式是整数、半精度浮点、单精度浮点、双精度浮点和自定义格式中的一个。
示例19包括示例11的示例性方法的实质,其中,处理阵列通过在多个时钟周期上迭代地使用较小的处理单元阵列来在效果上包括(M×N)个处理单元,以执行与(M×N)个处理单元的实际物理阵列相同的处理。
示例20包括示例11的示例性方法的实质,其中,处理阵列通过级联多个较小的处理单元阵列来在效果上包括(M×N)个处理单元,以执行与(M×N)个处理单元的实际物理阵列相同的处理。
示例21提供了一种包含指令的示例性非暂时性机器可读介质,所述指令在由处理器执行时使得处理器通过以下方式进行响应:使用提取和解码电路提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有指定存储分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵中的每一个的位置的字段,以及使用执行电路以密集-密集模式操作的情况下通过以下操作来响应经解码的VFVSMM指令:将指定的A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将指定的B矩阵的每一列与后续列错开路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个生成分别从指定的A和B矩阵接收的匹配的A矩阵和B矩阵元素的K个乘积(当B矩阵元素具有与A矩阵元素的列地址相同的行地址时,匹配存在),并且将每个所生成的乘积与指定的C矩阵的相应元素累加,该C矩阵的相应元素具有与处理单元在处理阵列中的位置相同的相对位置。
示例22包括示例21的示例性非暂时性机器可读介质的实质,其中,执行电路以每个时钟周期一个元素的速率路由指定的A矩阵的每一行和指定的B矩阵的每一列,并且将每个后续行和后续列错开一个时钟周期,并且其中,(M×N)个处理单元中的每一个基于时钟周期和处理单元在处理阵列内的相对位置来推断每个接收的A矩阵和B矩阵元素的列和行地址。
示例23包括示例21的示例性非暂时性机器可读介质的实质,其中,指定的B矩阵仅包括逻辑上包括(K×N)个元素的稀疏矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段,其中,执行电路以密集-稀疏模式操作、响应于经解码的VFVSMM指令将指定的A矩阵的每一行与后续行错开路由到处理阵列的相应行中,并将指定的B矩阵的每一列路由到处理阵列的相应列中,并且其中,(M×N)个处理单元中的每一个以密集-稀疏模式操作的情况下用于:确定在B矩阵元素的指定逻辑行地址和A矩阵元素的列地址之间是否存在地址匹配,当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
示例24包括示例21的示例性非暂时性机器可读介质的实质,其中,指定的A和B矩阵是稀疏矩阵,分别仅包括逻辑(M×K)和(K×N)矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段,并且其中,执行电路以稀疏-稀疏模式操作、响应于经解码的VFVSMM指令将指定的A矩阵的每一行路由到处理阵列的相应行中,并将指定的B矩阵的每一列路由到处理阵列的相应列中,并且其中,以稀疏-稀疏模式操作的(M×N)个处理单元中的每一个用于:确定在A矩阵元素的指定逻辑列地址与B矩阵元素的指定逻辑行地址之间是否存在匹配,当存在匹配时,生成乘积,当不存在匹配时,在A矩阵元素的指定逻辑列地址大于B矩阵元素的指定逻辑行地址时保持A矩阵元素并使B矩阵元素通过,否则,保持B矩阵元素并使A矩阵元素通过。
示例25包括示例21的示例性非暂时性机器可读介质的实质,其中,(M×N)个处理单元中的每一个处理单元还用于:当不存在匹配时,生成并在被保持的数据元素的上游方向上发送保持请求,并且生成并在被保持的数据元素的下游方向上发送保持通知。
Claims (21)
1.一种处理器,包括:
提取和解码电路,用于提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,所述指令具有的字段指定分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵的位置;以及
执行电路,该执行电路用于:在以密集-密集模式操作的情况下,响应于经解码的VFVSMM指令,将所述A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将所述B矩阵的每一列与后续列错开路由到所述处理阵列的相应列中,并且
其中,所述(M×N)个处理单元中的每一个处理单元用于生成分别从所述A矩阵和所述B矩阵接收的匹配的A矩阵元素和B矩阵元素的K个乘积,当所述B矩阵元素具有与所述A矩阵元素的列地址相同的行地址时,匹配存在;并且所述处理单元用于将每个所生成的乘积与所述C矩阵的相应元素累加,所述C矩阵的所述相应元素具有与所述处理单元在所述处理阵列中的相对位置相同的相对位置。
2.根据权利要求1所述的处理器,其中,所述B矩阵仅包括逻辑上包括(K×N)个元素的稀疏矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段;
其中,所述执行电路用于:在以密集-稀疏模式操作的情况下,响应于经解码的VFVSMM指令,将所述A矩阵的每一行与后续行错开路由到所述处理阵列的相应行中,并将所述B矩阵的每一列路由到所述处理阵列的相应列中,并且
其中,所述(M×N)个处理单元中的每一个处理单元在以所述密集-稀疏模式操作的情况下用于:
确定在所述B矩阵元素的逻辑行地址和所述A矩阵元素的列地址之间是否存在地址匹配;并且
当存在匹配时,生成所述乘积,并且当不存在匹配时,在所述A矩阵元素的列地址大于所述B矩阵元素的逻辑行地址时保持所述A矩阵元素并使所述B矩阵元素通过,否则,保持所述B矩阵元素并使所述A矩阵元素通过。
3.根据权利要求1所述的处理器,
其中,所述A矩阵和所述B矩阵是稀疏矩阵,分别仅包括逻辑(M×K)和(K×N)矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段;并且
其中,所述执行电路用于:在以稀疏-稀疏模式操作的情况下,响应于经解码的VFVSMM指令,将所述A矩阵的每一行路由到所述处理阵列的相应行中,并将所述B矩阵的每一列路由到所述处理阵列的相应列中,
并且
其中,所述(M×N)个处理单元中的每一个处理单元在以所述稀疏-稀疏模式操作的情况下用于:
确定在所述A矩阵元素的逻辑列地址与所述B矩阵元素的逻辑行地址之间是否存在匹配;并且
当存在匹配时,生成所述乘积,并且当不存在匹配时,在所述A矩阵元素的逻辑列地址大于所述B矩阵元素的逻辑行地址时保持所述A矩阵元素并使所述B矩阵元素通过,否则,保持所述B矩阵元素并使所述A矩阵元素通过。
4.根据权利要求1至3中任一项所述的处理器,其中所述执行电路用于以每个时钟周期一个元素的速率路由所述A矩阵的每一行和所述B矩阵的每一列,并且将每个后续行和后续列错开一个时钟周期,并且其中所述(M×N)个处理单元中的每一个处理单元用于基于时钟周期和所述处理单元在所述处理阵列中的相对位置来推断每个接收到的A矩阵和B矩阵元素的行和列地址。
5.根据权利要求1至3中任一项所述的处理器,其中,当不存在匹配时,所述(M×N)个处理单元中的每一个处理单元还用于生成保持请求并在被保持的数据元素的上游方向上发送所述保持请求,并且生成保持通知并在被保持的数据元素的下游方向上发送所述保持通知。
6.根据权利要求1至3中任一项所述的处理器,其中,所述执行电路在使数据元素通过时将该数据元素向下游广播到两个或更多个处理单元。
7.根据权利要求1至3中任一项所述的处理器,其中,所述矩阵乘法指令还用于指定所述A、B和C矩阵的每个数据元素的数据元素大小,所述数据元素大小作为指令操作数或者作为操作码的一部分而被指定。
8.根据权利要求1至3中任一项所述的处理器,其中,所述矩阵乘法指令还用于指定所述A、B和C矩阵的每个数据元素的数据格式,所述数据格式是整数、半精度浮点、单精度浮点、双精度浮点和自定义格式中的一个。
9.根据权利要求1至3中任一项所述的处理器,其中,所述处理阵列用于通过在多个时钟周期上迭代地使用较小的处理单元阵列来在效果上包括(M×N)个处理单元,以执行与(M×N)个处理单元的实际物理阵列相同的处理。
10.根据权利要求1至3中任一项所述的处理器,其中,所述处理阵列用于通过级联多个较小的处理单元阵列来在效果上包括(M×N)个处理单元,以执行与(M×N)个处理单元的实际物理阵列相同的处理。
11.一种方法,包括:
使用提取和解码电路提取和解码可变格式、可变稀疏矩阵乘法(VFVSMM)指令,该指令具有的字段指定分别具有(M×K)、(K×N)和(M×N)个元素的A、B和C矩阵的位置,以及
使用执行电路在以密集-密集模式操作的情况下通过以下操作来响应经解码的VFVSMM指令:将所述A矩阵的每一行与后续行错开路由到具有(M×N)个处理单元的处理阵列的相应行中,并将所述B矩阵的每一列与后续列错开路由到所述处理阵列的相应列中,并且
其中,所述(M×N)个处理单元中的每一个处理单元用于生成分别从所述A矩阵和所述B矩阵接收的匹配的A矩阵元素和B矩阵元素的K个乘积,当所述B矩阵元素具有与所述A矩阵元素的列地址相同的行地址时,匹配存在;并且所述处理单元用于将每个所生成的乘积与所述C矩阵的相应元素累加,所述C矩阵的所述相应元素具有与所述处理单元在所述处理阵列中的位置相同的相对位置。
12.根据权利要求11所述的方法,其中,所述B矩阵仅包括逻辑上包括(K×N)个元素的稀疏矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段;
其中,所述执行电路用于:在以密集-稀疏模式操作的情况下,响应于经解码的VFVSMM指令,将所述A矩阵的每一行与后续行错开路由到所述处理阵列的相应行中,并将所述B矩阵的每一列路由到所述处理阵列的相应列中,并且
其中,所述(M×N)个处理单元中的每一个处理单元在以所述密集-稀疏模式操作的情况下用于:
确定在所述B矩阵元素的逻辑行地址和所述A矩阵元素的列地址之间是否存在地址匹配,并且
当存在匹配时,生成所述乘积,并且当不存在匹配时,在所述A矩阵元素的所推断的列地址大于所述B矩阵元素的逻辑行地址时保持所述A矩阵元素并使所述B矩阵元素通过,否则,保持所述B矩阵元素并使所述A矩阵元素通过。
13.根据权利要求11所述的方法,
其中,所述A矩阵和所述B矩阵是稀疏矩阵,分别仅包括逻辑(M×K)和(K×N)矩阵的非零元素,每个元素包括指定其逻辑行和列地址的字段;并且
其中,所述执行电路用于:在以稀疏-稀疏模式操作的情况下,响应于经解码的VFVSMM指令,将所述A矩阵的每一行路由到所述处理阵列的相应行中,并将所述B矩阵的每一列路由到所述处理阵列的相应列中,并且
其中,所述(M×N)个处理单元中的每一个处理单元在以所述稀疏-稀疏模式操作的情况下用于:
确定在所述A矩阵元素的逻辑列地址与所述B矩阵元素的逻辑行地址之间是否存在匹配,并且
当存在匹配时,生成所述乘积,并且当不存在匹配时,在所述A矩阵元素的逻辑列地址大于所述B矩阵元素的逻辑行地址时保持所述A矩阵元素并使所述B矩阵元素通过,否则,保持所述B矩阵元素并使所述A矩阵元素通过。
14.根据权利要求11至13中任一项所述的方法,其中所述执行电路用于以每个时钟周期一个元素的速率路由所述A矩阵的每一行和所述B矩阵的每一列,并且将每个后续行和后续列错开一个时钟周期,并且其中所述(M×N)个处理单元中的每一个处理单元用于基于时钟周期和所述处理单元在所述处理阵列中的相对位置来推断每个接收到的A矩阵和B矩阵元素的行和列地址。
15.根据权利要求11至13中任一项所述的方法,其中,当不存在匹配时,所述(M×N)个处理单元中的每一个处理单元还用于生成保持请求并在被保持的数据元素的上游方向上发送所述保持请求,并且生成保持通知并在被保持的数据元素的下游方向上发送所述保持通知。
16.根据权利要求11至13中任一项所述的方法,其中,所述执行电路在使数据元素通过时将该数据元素向下游广播到两个或更多个处理单元。
17.根据权利要求11至13中任一项所述的方法,其中,所述矩阵乘法指令还用于指定所述A、B和C矩阵的每个数据元素的数据元素大小,所述数据元素大小作为指令操作数或者作为操作码的一部分而被指定。
18.根据权利要求11至13中任一项所述的方法,其中,所述矩阵乘法指令还用于指定所述A、B和C矩阵的每个数据元素的数据格式,所述数据格式是整数、半精度浮点、单精度浮点、双精度浮点和自定义格式中的一个。
19.根据权利要求11至13中任一项所述的方法,其中,所述处理阵列用于通过在多个时钟周期上迭代地使用较小的处理单元阵列来在效果上包括(M×N)个处理单元,以执行与(M×N)个处理单元的实际物理阵列相同的处理。
20.根据权利要求11至13中任一项所述的方法,其中,所述处理阵列用于通过级联多个较小的处理单元阵列来在效果上包括(M×N)个处理单元,以执行与(M×N)个处理单元的实际物理阵列相同的处理。
21.一种包含指令的机器可读介质,所述指令在被执行时使得机器执行如权利要求11至20中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010944726.6A CN112099852A (zh) | 2018-06-08 | 2019-05-22 | 可变格式、可变稀疏矩阵乘法指令 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/003,545 | 2018-06-08 | ||
US16/003,545 US10599429B2 (en) | 2018-06-08 | 2018-06-08 | Variable format, variable sparsity matrix multiplication instruction |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010944726.6A Division CN112099852A (zh) | 2018-06-08 | 2019-05-22 | 可变格式、可变稀疏矩阵乘法指令 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110580175A true CN110580175A (zh) | 2019-12-17 |
Family
ID=65229501
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010944726.6A Pending CN112099852A (zh) | 2018-06-08 | 2019-05-22 | 可变格式、可变稀疏矩阵乘法指令 |
CN201910431218.5A Pending CN110580175A (zh) | 2018-06-08 | 2019-05-22 | 可变格式、可变稀疏矩阵乘法指令 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010944726.6A Pending CN112099852A (zh) | 2018-06-08 | 2019-05-22 | 可变格式、可变稀疏矩阵乘法指令 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10599429B2 (zh) |
EP (2) | EP3579117A1 (zh) |
CN (2) | CN112099852A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112579519A (zh) * | 2021-03-01 | 2021-03-30 | 湖北芯擎科技有限公司 | 数据运算电路和处理芯片 |
WO2022022117A1 (zh) * | 2020-07-31 | 2022-02-03 | 华为技术有限公司 | 稀疏矩阵计算方法及加速装置 |
CN114816434A (zh) * | 2022-06-28 | 2022-07-29 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019090325A1 (en) | 2017-11-06 | 2019-05-09 | Neuralmagic, Inc. | Methods and systems for improved transforms in convolutional neural networks |
US11715287B2 (en) | 2017-11-18 | 2023-08-01 | Neuralmagic Inc. | Systems and methods for exchange of data in distributed training of machine learning algorithms |
WO2021061172A1 (en) * | 2019-09-27 | 2021-04-01 | Neuralmagic Inc. | System and method of executing neural networks |
US10963787B2 (en) | 2018-05-31 | 2021-03-30 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US11216732B2 (en) | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US11449363B2 (en) | 2018-05-31 | 2022-09-20 | Neuralmagic Inc. | Systems and methods for improved neural network execution |
US10832133B2 (en) | 2018-05-31 | 2020-11-10 | Neuralmagic Inc. | System and method of executing neural networks |
US11080622B2 (en) * | 2018-08-01 | 2021-08-03 | International Business Machines Corporation | Determining sectors of a track to stage into cache by training a machine learning module |
US11062232B2 (en) * | 2018-08-01 | 2021-07-13 | International Business Machines Corporation | Determining sectors of a track to stage into cache using a machine learning module |
WO2020072274A1 (en) | 2018-10-01 | 2020-04-09 | Neuralmagic Inc. | Systems and methods for neural network pruning with accuracy preservation |
US20200183837A1 (en) * | 2018-12-07 | 2020-06-11 | Samsung Electronics Co., Ltd. | Dataflow accelerator architecture for general matrix-matrix multiplication and tensor computation in deep learning |
US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
US11544559B2 (en) | 2019-01-08 | 2023-01-03 | Neuralmagic Inc. | System and method for executing convolution in a neural network |
CN111596886A (zh) * | 2019-02-21 | 2020-08-28 | 超威半导体公司 | 混合矩阵乘法流水线 |
CN111738429B (zh) * | 2019-03-25 | 2023-10-13 | 中科寒武纪科技股份有限公司 | 一种计算装置及相关产品 |
US20200341772A1 (en) * | 2019-04-29 | 2020-10-29 | DeGirum Corporation | Efficient Architectures For Deep Learning Algorithms |
US11334647B2 (en) * | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
WO2021026225A1 (en) | 2019-08-08 | 2021-02-11 | Neuralmagic Inc. | System and method of accelerating execution of a neural network |
US11194549B2 (en) * | 2019-10-25 | 2021-12-07 | Arm Limited | Matrix multiplication system, apparatus and method |
US20210200711A1 (en) * | 2019-12-28 | 2021-07-01 | Intel Corporation | System and Method for Configurable Systolic Array with Partial Read/Write |
US11614920B2 (en) * | 2020-05-07 | 2023-03-28 | Meta Platforms, Inc. | Bypassing zero-value multiplications in a hardware multiplier |
KR20220007326A (ko) * | 2020-07-10 | 2022-01-18 | 삼성전자주식회사 | 전자 장치 및 그의 제어 방법 |
TWI746126B (zh) * | 2020-08-25 | 2021-11-11 | 創鑫智慧股份有限公司 | 矩陣乘法裝置及其操作方法 |
US11556757B1 (en) | 2020-12-10 | 2023-01-17 | Neuralmagic Ltd. | System and method of executing deep tensor columns in neural networks |
US20230010897A1 (en) * | 2021-07-06 | 2023-01-12 | Google Llc | In situ sparse matrix expansion |
US20230102279A1 (en) * | 2021-09-25 | 2023-03-30 | Intel Corporation | Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma |
US11960982B1 (en) | 2021-10-21 | 2024-04-16 | Neuralmagic, Inc. | System and method of determining and executing deep tensor columns in neural networks |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB8320362D0 (en) * | 1983-07-28 | 1983-09-01 | Secr Defence | Digital data processor |
US4603398A (en) * | 1984-02-17 | 1986-07-29 | The United States Of America As Represented By The Secretary Of The Navy | Matrix-matrix multiplication using an electrooptical systolic/engagement array processing architecture |
GB8910960D0 (en) * | 1989-05-12 | 1989-06-28 | Secr Defence | Digital processor for two's complement computations |
US8782115B1 (en) * | 2008-04-18 | 2014-07-15 | Altera Corporation | Hardware architecture and scheduling for high performance and low resource solution for QR decomposition |
US8473540B1 (en) * | 2009-09-01 | 2013-06-25 | Xilinx, Inc. | Decoder and process therefor |
US8620984B2 (en) * | 2009-11-23 | 2013-12-31 | Xilinx, Inc. | Minimum mean square error processing |
US9317482B2 (en) | 2012-10-14 | 2016-04-19 | Microsoft Technology Licensing, Llc | Universal FPGA/ASIC matrix-vector multiplication architecture |
US20160177674A1 (en) * | 2013-08-27 | 2016-06-23 | Halliburton Energy Services, Inc. | Simulating Fluid Leak-Off and Flow-Back in a Fractured Subterranean Region |
US9697176B2 (en) * | 2014-11-14 | 2017-07-04 | Advanced Micro Devices, Inc. | Efficient sparse matrix-vector multiplication on parallel processors |
US10996959B2 (en) * | 2015-01-08 | 2021-05-04 | Technion Research And Development Foundation Ltd. | Hybrid processor |
US10275247B2 (en) | 2015-03-28 | 2019-04-30 | Intel Corporation | Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices |
US9558156B1 (en) * | 2015-11-24 | 2017-01-31 | International Business Machines Corporation | Sparse matrix multiplication using a single field programmable gate array module |
US10360163B2 (en) * | 2016-10-27 | 2019-07-23 | Google Llc | Exploiting input data sparsity in neural network compute units |
US10346507B2 (en) * | 2016-11-01 | 2019-07-09 | Nvidia Corporation | Symmetric block sparse matrix-vector multiplication |
US9959247B1 (en) * | 2017-02-17 | 2018-05-01 | Google Llc | Permuting in a matrix-vector processor |
US10387122B1 (en) * | 2018-05-04 | 2019-08-20 | Olsen Ip Reserve, Llc | Residue number matrix multiplier |
-
2018
- 2018-06-08 US US16/003,545 patent/US10599429B2/en active Active
-
2019
- 2019-05-03 EP EP19172622.3A patent/EP3579117A1/en active Pending
- 2019-05-03 EP EP20198971.2A patent/EP3772000A1/en not_active Ceased
- 2019-05-22 CN CN202010944726.6A patent/CN112099852A/zh active Pending
- 2019-05-22 CN CN201910431218.5A patent/CN110580175A/zh active Pending
-
2020
- 2020-07-06 US US16/921,838 patent/US20200334038A1/en not_active Abandoned
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022022117A1 (zh) * | 2020-07-31 | 2022-02-03 | 华为技术有限公司 | 稀疏矩阵计算方法及加速装置 |
CN112579519A (zh) * | 2021-03-01 | 2021-03-30 | 湖北芯擎科技有限公司 | 数据运算电路和处理芯片 |
CN112579519B (zh) * | 2021-03-01 | 2021-05-25 | 湖北芯擎科技有限公司 | 数据运算电路和处理芯片 |
CN114816434A (zh) * | 2022-06-28 | 2022-07-29 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112099852A (zh) | 2020-12-18 |
US20200334038A1 (en) | 2020-10-22 |
US20190042250A1 (en) | 2019-02-07 |
EP3579117A1 (en) | 2019-12-11 |
US10599429B2 (en) | 2020-03-24 |
EP3772000A1 (en) | 2021-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10599429B2 (en) | Variable format, variable sparsity matrix multiplication instruction | |
US20240070226A1 (en) | Accelerator for sparse-dense matrix multiplication | |
US10620951B2 (en) | Matrix multiplication acceleration of sparse matrices using column folding and squeezing | |
US10514912B2 (en) | Vector multiplication with accumulation in large register space | |
US10963256B2 (en) | Systems and methods for performing instructions to transform matrices into row-interleaved format | |
CN111177647A (zh) | 实行16位浮点矩阵点积指令的系统和方法 | |
US20180095758A1 (en) | Systems and methods for executing a fused multiply-add instruction for complex numbers | |
US20160179523A1 (en) | Apparatus and method for vector broadcast and xorand logical instruction | |
EP3238026B1 (en) | Method and apparatus for vector index load and store | |
US20190205137A1 (en) | Methods and apparatus for multi-load and multi-store vector instructions | |
US11269630B2 (en) | Interleaved pipeline of floating-point adders | |
US11455167B2 (en) | Efficient implementation of complex vector fused multiply add and complex vector multiply | |
US20160179520A1 (en) | Method and apparatus for variably expanding between mask and vector registers | |
CN112148251A (zh) | 跳过无意义的矩阵运算的系统和方法 | |
US20230315450A1 (en) | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions | |
CN112540791A (zh) | 用于对间接加载和存储以有效访问图形应用中的压缩列表的isa支持的系统和方法 | |
US11934830B2 (en) | Method and apparatus for data-ready memory operations | |
CN112988230A (zh) | 用于将大约为一的浮点值相乘的指令的装置、方法和系统 | |
US10095517B2 (en) | Apparatus and method for retrieving elements from a linked structure | |
US20210182057A1 (en) | Apparatuses, methods, and systems for instructions to multiply values of zero | |
US9891914B2 (en) | Method and apparatus for performing an efficient scatter | |
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 |