CN112559051A - 使用脉动阵列和融合操作的深度学习实现方式 - Google Patents
使用脉动阵列和融合操作的深度学习实现方式 Download PDFInfo
- Publication number
- CN112559051A CN112559051A CN202010580261.0A CN202010580261A CN112559051A CN 112559051 A CN112559051 A CN 112559051A CN 202010580261 A CN202010580261 A CN 202010580261A CN 112559051 A CN112559051 A CN 112559051A
- Authority
- CN
- China
- Prior art keywords
- processor
- instruction
- convolutions
- source
- memory
- 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
- 238000013135 deep learning Methods 0.000 title abstract description 14
- 238000003491 array Methods 0.000 title abstract description 7
- 230000004927 fusion Effects 0.000 title abstract description 3
- 230000015654 memory Effects 0.000 claims abstract description 228
- 230000004913 activation Effects 0.000 claims abstract description 34
- 239000011159 matrix material Substances 0.000 claims description 136
- 230000006870 function Effects 0.000 claims description 56
- 238000000034 method Methods 0.000 claims description 34
- 238000011176 pooling Methods 0.000 claims description 22
- 239000013598 vector Substances 0.000 description 120
- 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 74
- 238000010586 diagram Methods 0.000 description 55
- 238000007667 floating Methods 0.000 description 50
- 238000010801 machine learning Methods 0.000 description 44
- 238000013528 artificial neural network Methods 0.000 description 40
- 238000006073 displacement reaction Methods 0.000 description 38
- 238000013527 convolutional neural network Methods 0.000 description 29
- 238000012545 processing Methods 0.000 description 27
- 238000001994 activation Methods 0.000 description 24
- 238000007792 addition Methods 0.000 description 23
- 238000004422 calculation algorithm Methods 0.000 description 22
- 238000013467 fragmentation Methods 0.000 description 17
- 238000006062 fragmentation reaction Methods 0.000 description 17
- 239000000126 substance Substances 0.000 description 15
- 238000012549 training Methods 0.000 description 15
- 238000013519 translation Methods 0.000 description 13
- 230000014616 translation Effects 0.000 description 13
- 239000000872 buffer Substances 0.000 description 12
- 230000008569 process Effects 0.000 description 10
- 230000000873 masking effect Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 9
- 238000013501 data transformation Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 239000012634 fragment Substances 0.000 description 8
- 210000002569 neuron Anatomy 0.000 description 8
- 230000001052 transient effect Effects 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 239000003607 modifier Substances 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000000644 propagated effect Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000013178 mathematical model Methods 0.000 description 3
- 229910052754 neon Inorganic materials 0.000 description 3
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 3
- 238000003909 pattern recognition Methods 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 210000000887 face Anatomy 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001427 coherent 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
- 238000013144 data compression Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000002059 diagnostic imaging 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
- 238000011068 loading method Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000006386 neutralization reaction Methods 0.000 description 1
- 230000009022 nonlinear effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 210000001525 retina Anatomy 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8046—Systolic arrays
-
- 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/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- 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/30098—Register arrangements
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/04—Architecture, e.g. interconnection topology
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- 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
-
- 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/08—Learning methods
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Advance Control (AREA)
Abstract
公开的实施例涉及使用脉动阵列和融合操作的深度学习实现方式。在一个示例中,处理器包括取得和解码电路来取得和解码指令,该指令具有字段来指定操作码以及目的地和N个源矩阵的位置,操作码指示出处理器将从存储器加载N个源矩阵,对N个源矩阵执行N个卷积以生成N个特征图,并且将N个卷积的结果存储在寄存器中以被传递到激活层,其中处理器将利用N个源矩阵的每一者的至多一个存储器加载执行N个卷积和激活层。处理器还包括调度电路来调度指令的执行以及执行电路来按照操作码执行指令。
Description
技术领域
本发明的领域概括而言涉及计算机处理器体系结构,并且更具体而言涉及使用脉动阵列(systolic array)和融合操作(fused operation)的深度学习(deep learning)实现方式。
背景技术
矩阵在诸如机器学习和其他海量数据处理之类的许多计算任务中越来越重要。深度学习体系结构,例如深度神经网络,已被应用到包括计算机视觉、话音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学和药物设计在内的领域。
不幸的是,基于深度学习的机器学习系统的广泛采用和应用面临着与计算要求、功率消耗和存储器带宽利用有关的挑战。例如,深度学习神经网络模型的大小可以是许多兆字节并且要求每秒数百万的算术操作来高效地处理。
发明内容
根据本公开的一方面,提供了一种处理器,包括:取得电路,用于取得指令;解码电路,用于对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;调度电路,用于调度所述指令的执行;以及执行电路,用于按照所述操作码执行所述指令。
根据本公开的一方面,提供了一种由处理器实现的方法,包括:利用取得电路取得指令;利用解码电路对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;利用调度电路调度所述指令的执行;并且利用执行电路按照所述操作码执行所述指令。
根据本公开的一方面,提供了一种包含指令的非暂态机器可读介质,处理器通过以下步骤来响应所述指令:利用取得电路取得指令;利用解码电路对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;利用调度电路调度所述指令的执行;并且利用执行电路按照所述操作码执行所述指令。
根据本公开的一方面,提供了一种装置,包括:用于取得指令的装置;用于对所述指令解码的装置,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;用于调度所述指令的执行的装置;以及用于按照所述操作码执行所述指令的装置。
附图说明
在附图中以示例而非限制方式图示了本发明,附图中相似的标记指示类似的要素并且其中:
图1A图示了配置的分片的实施例;
图1B图示了配置的分片的实施例;
图2图示了矩阵存储的若干个示例;
图3图示了利用矩阵(分片)操作加速器的系统的实施例;
图4和图5示出了如何利用矩阵操作加速器来共享存储器的不同实施例;
图6图示了使用分片的矩阵乘法累加操作(“TMMA”)的实施例;
图7图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图8图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图9图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图10图示了链式融合乘法累加指令的迭代的执行的子集的实施例;
图11根据一实施例图示了2的幂大小的SIMD实现方式,其中累加器使用大于到乘法器的输入的输入大小;
图12图示了利用矩阵操作电路的系统的实施例;
图13图示了支持使用分片的矩阵操作的处理器核心流水线的实施例;
图14图示了支持使用分片的矩阵操作的处理器核心流水线的实施例;
图15图示了以行主要格式和列主要格式表达的矩阵的示例;
图16图示了矩阵(分片)的使用的示例;
图17图示了矩阵(分片)的使用的方法的实施例;
图18根据一实施例图示了对分片的使用的配置的支持;
图19图示了要支持的矩阵(分片)的描述的实施例;
图20(A)-(D)图示了(一个或多个)寄存器的示例;
图21A根据一实施例图示了机器学习软件栈;
图21B-C图示了示范性深度神经网络的层;
图21D是根据一些实施例图示出卷积神经网络(CNN)多操作指令的执行的框图;
图21E是根据一些实施例图示出卷积神经网络(CNN)执行流程的框图;
图21F是根据一些实施例图示出矩阵(分片)多操作指令的执行的框图;
图22A是根据一些实施例的使用数值示例来图示卷积的执行的框图;
图22B是根据一些实施例的使用数值示例来图示填充操作的执行的框图;
图22C是根据一些实施例的使用数值示例来图示池化操作的执行的框图;
图23是根据一些实施例图示出处理器为执行矩阵(分片)多操作指令(TileMultiOp)而执行的步骤的流程图;
图24是根据一些实施例图示出TileMultiOp指令的格式的框图;
图25A-25B是根据实施例图示出通用向量友好指令格式及其指令模板的框图;
图25A是根据实施例图示出通用向量友好指令格式及其类别A指令模板的框图;
图25B是根据实施例图示出通用向量友好指令格式及其类别B指令模板的框图;
图26A是根据实施例图示出示范性特定向量友好指令格式的框图;
图26B是根据一个实施例图示出构成完整操作码字段的特定向量友好指令格式的字段的框图;
图26C是根据一个实施例图示出构成寄存器索引字段的特定向量友好指令格式的字段的框图;
图26D是根据一个实施例图示出构成增强操作字段的特定向量友好指令格式的字段的框图;
图27是根据一个实施例的寄存器体系结构的框图;
图28A是根据实施例图示出示范性有序流水线和示范性寄存器重命名、乱序(out-of-order)发出/执行流水线两者的框图;
图28B是根据实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图;
图29A-29B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一;
图29A是根据实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图;
图29B是根据实施例的图29A中的处理器核心的一部分的扩展视图;
图30是根据实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图;
图31-图34是示范性计算机体系结构的框图;
图31根据本发明的一个实施例示出了系统的框图;
图32是根据本发明的实施例的第一更具体示范性系统的框图;
图33是根据本发明的实施例的第二更具体示范性系统的框图;
图34是根据本发明的实施例的片上系统(SoC)的框图;并且
图35是根据实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但每个实施例可不一定包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。
在许多主流处理器中,应对矩阵是一个困难和/或指令密集的任务。例如,矩阵的行可被放入多个紧缩数据(例如,SIMD或向量)寄存器中,然后被独立地操作。例如,加二(add two)8x2矩阵取决于数据大小可要求加载或收集到四个紧缩数据寄存器中。然后执行与来自每个矩阵的第一行相对应的紧缩数据寄存器的第一加法并且执行与来自每个矩阵的第二行相对应的紧缩数据寄存器的第二加法。然后所得到的紧缩数据寄存器被分散回到存储器。虽然对于小矩阵这个场景可能是可接受的,但其对于更大的矩阵经常是不可接受的。
论述
本文描述了在诸如中央处理单元(central processing unit,CPU)、图形处理单元(graphic processing unit,GPU)和加速器之类的计算机硬件中支持矩阵操作的机制。矩阵操作利用表示诸如寄存器之类的存储器的一个或多个紧缩区域的2维(2-D)数据结构。在本说明书各处,这些2-D数据结构被称为分片(tile)。注意矩阵可小于分片(只使用一分片的一部分)或者利用多个分片(矩阵大于任何一个分片的大小)。在说明书各处,矩阵(分片)语言被用于指示利用分片执行的影响矩阵的操作;该矩阵是否大于任何一个分片通常是不相关的。
每个分片可被不同的操作所作用,例如本文详述的那些,包括但不限于:矩阵(分片)乘法、分片加法、分片减法、分片对角线、分片归零、分片变换、分片点积、分片广播、分片行广播、分片列广播、分片乘法、分片乘法和累加、分片移动,等等。此外,对诸如比例和/或偏置的使用之类的操作子的支持可结合这些操作使用或者支持未来的非数值应用,例如OpenCL“本地存储器”、数据压缩/解压缩,等等。本文还描述了用于执行矩阵(分片)多操作(TileMultiOp)指令的指令。
存储的各部分(例如,存储器(非易失性和易失性)、寄存器、缓存等等)被布置成不同水平和垂直维度的分片。例如,分片可具有4的水平维度(例如,矩阵的四行)和8的垂直维度(例如,矩阵的8列)。通常,水平维度与元素大小有关(例如,2、4、8、16、32、64、128比特等等)。可支持多个数据类型(单精度浮点、双精度浮点、整数等等)。
配置的分片的示范性使用
在一些实施例中,可以配置分片参数。例如,给定的分片可被配置为提供分片选项。示范性分片选项包括但不限于:分片的行的数目,分片的列的数目,分片是否有效,以及分片是否由一对相等大小的分片构成。
图1A图示了配置的分片的实施例。如图所示,应用存储器102的4kB上存储了4个1kB分片,分片t0 104、分片t1 106、分片t2 108和分片t3 110。在这个示例中,4个分片不由对构成,并且每一者具有布置成行和列的元素。分片t0 104和分片t1 106具有K行和N列的4字节元素(例如,单精度数据),其中K等于8并且N=32。分片t2 108和分片t3 110具有K行和N/2列的8字节元素(例如,双精度数据)。由于双精度操作对象是单精度的宽度的两倍,所以此配置符合用于提供分片选项的提供具有至少4kB的总存储的至少4个名称的调色板。在操作中,可利用加载和存储操作从存储器加载和向存储器存储分片。取决于使用的指令编码方案,可用应用存储器的量以及可用分片的大小、数目和配置变化。
图1B图示了配置的分片的实施例。如图所示,应用存储器122的4kB上存储了2对1kB分片,第一对是分片t4L 124和分片t4R 126,并且第二对是分片t5L 128和分片t5R130。如图所示,分片对被划分成左分片和右分片。在其他实施例中,分片对被划分成偶数分片和奇数分片。在这个示例中,4个分片的每一者具有布置成行和列的元素。分片t4L 124和分片t4R 126具有K行和N列的4字节元素(例如,单精度浮点数据),其中K等于8并且N等于32。分片t5L 128和分片t5R 130具有K行和N/2列的8字节元素(例如,双精度浮点数据)。由于双精度操作对象是单精度的宽度的两倍,所以此配置符合用于提供分片选项的提供具有至少4kB的总存储的至少2个名称的调色板。图1A的四个分片使用4个名称,每个命名一个1kB分片,而图1B中的2对分片可使用2个名称来指定成对的分片。在一些实施例中,分片指令接受成对分片的名称作为操作对象。在操作中,可利用加载和存储操作从存储器加载和向存储器存储分片。取决于使用的指令编码方案,可用应用存储器的量以及可用分片的大小、数目和配置变化。
在一些实施例中,分片参数是可定义的。例如,“调色板”(palette)用于提供分片选项。示范性选项包括但不限于:分片名称的数目、一行存储中的字节的数目、分片中的行和列的数目,等等。例如,分片的最大“高度”(行数)可被定义为:
分片最大行=体系结构存储/(调色板名称的数目*每行的字节的数目)
这样,应用可被编写成使得对名称的固定使用将能够在各实现方式间利用不同的存储大小。
分片的配置是利用分片配置(“TILECONFIG”)指令完成的,其中特定的分片使用是在选定的调色板中定义的。这个声明包括要使用的分片名称的数目、每名称(分片)的行和列的所请求数目以及在一些实施例中的每个分片的所请求数据类型。在一些实施例中,在TILECONFIG指令的执行期间执行一致性检查以确定其匹配调色板条目的限制。
示范性分片存储类型
图2图示了矩阵存储的若干个示例。在(A)中,分片被存储在存储器中。如图所示,每“行”由四个紧缩数据元素构成。为了到达下一“行”,使用步幅值。注意行可被接连存储在存储器中。跨步的存储器访问允许了在分片存储不映射底层存储器阵列行宽度时对一行到下一行的访问。
从存储器的分片加载和到存储器的分片存储通常是从应用存储器到数据的紧缩行的跨步访问。示范性TILELOAD和TILESTORE指令或者作为加载操作指令中的TILE操作对象的对应用存储器的其他指令引用在一些实施例中是可重启的,以处理(多达)2*行的页出错、未掩蔽的浮点异常和/或每指令中断。
在(B)中,矩阵被存储在由多个寄存器组成的分片中,例如紧缩数据寄存器(单指令、多数据(single instruction,multiple data,SIMD)或向量寄存器)。在这个示例中,分片被覆盖在三个物理寄存器上。通常,使用接连的寄存器,然而,不是必需要这样。
在(C)中,矩阵被存储在对于分片操作中使用的融合多累加(fused multipleaccumulate,FMA)电路而言可访问的非寄存器存储中的分片中。这个存储可在FMA内部或者与FMA相邻。此外,在下文论述的一些实施例中,存储可以是对于数据元素的,而不是整个行或分片的。
TMMA体系结构的支持参数经由CPUID来报告。在一些实施例中,信息的列表包括最大高度和最大SIMD维度。配置TMMA体系结构要求指定每个分片的维度、每个分片的元素大小和调色板识别符。这个配置是通过执行TILECONFIG指令来完成的。
TILECONFIG指令的成功执行使能了后续TILE操作子。TILERELEASEALL指令清除分片配置并且禁止TILE操作(直到下一个TILECONFIG指令执行为止)。在一些实施例中,XSAVE、XSTORE等等被用于使用分片的情境切换中。在一些实施例中,2XCR0比特被用于XSAVE中,一个用于TILECONFIG元数据,并且一个比特对应于实际分片有效载荷数据。
TILECONFIG不仅配置分片使用,而且还设置指示出程序处于配置了分片的代码区域中的状态变量。实现方式可列举对可用于分片区域的其他指令的限制,例如不使用现有寄存器集合,等等。
退出分片区域通常是利用TILERELEASEALL指令完成的。它不取任何参数并且迅速地无效所有分片(指示出数据不再需要任何保存或恢复)并且清除与在分片区域中相对应的内部状态。
在一些实施例中,分片操作将使超出分片配置指定的维度之外的任何行和任何列归零。例如,分片操作将在每行被写入时使超出配置数目的列(将元素的大小考虑在内)的数据归零。例如,对于64字节行和配置有10行和12列的分片,写入FP32元素的操作将用带有输出/结果数据的12*4字节写入前10行的每一者并且将每一行中的剩余4*4字节归零。分片操作还在前10个配置的行之后将任何行完全归零。当使用具有64字节行的1K分片时,将存在16行,因此在此示例中,后6行也将被归零。
在一些实施例中,情境恢复指令(例如,XRSTOR)在加载数据时强制实施分片的超出配置的行的数据将被维持为零。如果没有有效配置,则所有行被归零。分片数据的XRSTOR可加载列中的超出配置的那些的垃圾。XRSTOR应当不可能清除超出配置的列的数目,因为没有与分片配置相关联的元素宽度。
情境保存(例如,XSAVE)在将其写入到存储器时暴露整个TILE存储区域。如果XRSTOR将垃圾数据加载到了分片的最右部分中,则该数据将被XSAVE保存。XSAVE将对超出为每个分片指定的数目的行写入零。
在一些实施例中,分片指令是可重启的。访问存储器的操作允许页出错之后的重启。应对浮点操作的计算指令也允许未掩蔽浮点异常,其中对异常的掩蔽由控制和/或状态寄存器来控制。
为了支持在这些事件之后重启指令,指令在下文详述的启动寄存器中存储信息。
矩阵(分片)操作系统
示范性硬件支持
图3图示了利用矩阵(分片)操作加速器的系统的实施例。在此图示中,主机处理器/处理系统301向矩阵操作加速器307传达命令311(例如,矩阵操纵操作,比如算术或矩阵操纵操作,或者加载和存储操作)。然而,这样示出只是为了论述。如后文详述的,这个加速器307可以是处理核心的一部分。通常,是分片操纵操作子指令的命令311将把分片称呼为寄存器-寄存器(“reg-reg”)或寄存器-存储器(“reg-mem”)格式。诸如TILESTORE、TILELOAD、TILECONFIG等等之类的其他命令不对分片执行数据操作。命令可以是解码的指令(例如,微操作)或者宏指令来供加速器307处理。
在此示例中,连贯存储器接口303耦合到主机处理器/处理系统301和矩阵操作加速器307,使得它们可以共享存储器。图4和图5示出了如何利用矩阵操作加速器来共享存储器的不同实施例。如图4中所示,主机处理器401和矩阵操作加速器电路405共享相同的存储器403。图5图示了一实施例,其中主机处理器501和矩阵操作加速器505不共享存储器,但可访问彼此的存储器。例如,处理器501可访问分片存储器507并且像通常那样利用其主机存储器503。类似地,矩阵操作加速器505可访问主机存储器503,但更通常使用其自己的存储器507。注意这些存储器可以是不同类型的。
在一些实施例中,利用物理寄存器上的覆盖来支持分片。例如,取决于实现方式,分片可利用16个1024比特寄存器、32个512比特寄存器等等。在一些实施例中,矩阵操作利用表示诸如寄存器之类的存储器的一个或多个紧缩区域的2维(2-D)数据结构。在本说明书各处,这些2-D数据结构被称为分片或分片寄存器。
在一些实施例中,矩阵操作加速器307包括耦合到数据缓冲器305的多个FMA 309(在一些实现方式中,这些缓冲器305中的一个或多个被存储在如图所示的网格的FMA中)。数据缓冲器305缓冲从存储器加载的分片和/或要存储到存储器的分片(例如,利用tileload或tilestore指令)。数据缓冲器可例如是多个寄存器。通常,这些FMA被布置为能够读取和写入分片的链式FMA 309的网格。在此示例中,矩阵操作加速器307将利用分片T0、T1和T2执行矩阵乘法操作。分片中的至少一者被容纳在FMA网格309中。在一些实施例中,操作中的所有分片被存储在FMA网格309中。在其他实施例中,只有子集被存储在FMA网格309中。如图所示,T1被容纳,而T0和T2没有。注意A、B和C指的是这些分片的矩阵,这些矩阵可能占据或者没有占据分片的整个空间。
图6图示了使用分片的矩阵乘法累加操作(“TMMA”)的实施例。
矩阵(TILE A 601)中的行的数目匹配包括计算的时延的串行(链式)FMA的数目。实现方式可自由在更小高度的网格上再循环,但计算保持相同。
源/目的地向量来自N行的分片(TILE C 605)并且FMA 611的网格执行N向量矩阵操作,产生执行分片的矩阵乘法的完整指令。分片B 603是另一向量源并且在每一级中向FMA提供“广播”项。
在操作中,在一些实施例中,矩阵B的元素(存储在分片B 603中)散布在FMA的矩形网格上。矩阵A(存储在分片A 601中)的一行的元素被变换以与FMA的矩形网格的列维度匹配。在网格中的每个FMA处,A和B的元素被相乘并且加到传入的被加数(来自图中的上方)并且传出的总和被传递到FMA的下一行(或者最终输出)。
单个步骤的时延与K(矩阵B的行高度)成比例并且从属TMMA通常具有足够的源-目的地行(在单个分片中或者跨分片)以隐藏该时延。一实现方式也可在时间步骤间分割SIMD(紧缩数据元素)维度M(矩阵A的行高度),但这只是改变与K相乘的常数。当程序指定比TMMA列举的最大值更小的K时,一实现方式可自由用“掩蔽”或“提前退出”来实现这个。
整个TMMA的时延与N*K成比例。重复率与N成比例。每TMMA指令的MAC的数目是N*K*M。
图7图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源上操作,其中累加器是2x输入数据大小。
第一有符号源(源1 701)和第二有符号源(源2 703)各自具有四个紧缩数据元素。这些紧缩数据元素的每一者存储诸如浮点数据之类的有符号数据。第三有符号源(源3709)具有两个紧缩数据元素,其中每一者存储有符号数据。第一和第二有符号源701和703的大小是第三有符号源(初始值或先前结果)709的一半。例如,第一和第二有符号源701和703可具有32比特紧缩数据元素(例如,单精度浮点),而第三有符号源709可具有64比特紧缩数据元素(例如,双精度浮点)。
在此图示中,只示出了第一和第二有符号源701和703的两个最高有效紧缩数据元素位置和第三有符号源709的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理。
如图所示,紧缩数据元素被成对处理。例如,第一和第二有符号源701和703的最高有效紧缩数据元素位置的数据被利用乘法器电路705来相乘,并且来自第一和第二有符号源701和703的次高有效紧缩数据元素位置的数据被利用乘法器电路707来相乘。在一些实施例中,这些乘法器电路705和707被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些情境中,并行执行是利用是第三有符号源709的大小的通道来完成的。每个乘法的结果被利用加法电路711来相加。
乘法的结果的加法的结果被加到来自有符号源3 709的最高有效紧缩数据元素位置的数据(利用不同的加法器713或者相同的加法器711)。
最后,第二加法的结果或者被存储在有符号目的地715中的与从第三有符号源709使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代,如果存在下一迭代的话。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图8图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源上操作,其中累加器是2x输入数据大小。
第一有符号源(源1 801)和第二有符号源(源2 803)各自具有四个紧缩数据元素。这些紧缩数据元素的每一者存储诸如整数数据之类的有符号数据。第三有符号源(源3809)具有两个紧缩数据元素,其中每一者存储有符号数据。第一和第二有符号源801和803的大小是第三有符号源809的一半。例如,第一和第二有符号源801和803可具有32比特紧缩数据元素(例如,单精度浮点),第三有符号源809可具有64比特紧缩数据元素(例如,双精度浮点)。
在此图示中,只示出了第一和第二有符号源801和803的两个最高有效紧缩数据元素位置和第三有符号源809的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理。
如图所示,紧缩数据元素被成对处理。例如,第一和第二有符号源801和803的最高有效紧缩数据元素位置的数据被利用乘法器电路805来相乘,并且来自第一和第二有符号源801和803的次高有效紧缩数据元素位置的数据被利用乘法器电路807来相乘。在一些实施例中,这些乘法器电路805和807被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些情境中,并行执行是利用是第三有符号源(初始值或先前迭代结果)809的大小的通道来完成的。每个乘法的结果被利用加法/饱和电路813加到第三有符号源809。
加法/饱和(累加器)电路813在加法导致太大的值时保护操作对象的符号。具体地,饱和评估在多路加法和写入到目的地或下一迭代之间的无限精度结果上发生。当累加器813是浮点并且输入项是整数时,乘积和浮点累加器输入值的总和被变成无限精度值(数百比特的定点数),乘法结果和第三输入的加法被执行,并且到实际累加器类型的单次舍入被执行。
无符号饱和指的是输出值被限于该元素宽度的最大无符号数(全1)。有符号饱和指的是值被限于在该元素宽度的最小负数和最大正数之间的范围中(例如对于字节,范围是从-128(=-2^7)到127(=2^7-1))。
加法和饱和检查的结果被存储在有符号结果815中的与从第三有符号源809使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代,如果存在下一迭代的话。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图9图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是4x输入数据大小。
第一有符号源(源1 901)和第二无符号源(源2 903)各自具有四个紧缩数据元素。这些紧缩数据元素的每一者具有诸如浮点或整数数据之类的数据。第三有符号源(初始值或结果915)具有存储有符号数据的紧缩数据元素。第一和第二源901和903的大小是第三有符号源915的四分之一。例如,第一和第二源901和903可具有16比特紧缩数据元素(例如,字),并且第三有符号源915可具有64比特紧缩数据元素(例如,双精度浮点或64比特整数)。
在此图示中,示出了第一和第二源901和903的四个最高有效紧缩数据元素位置和第三有符号源915的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理,如果存在任何这样的位置的话。
如图所示,紧缩数据元素被成四元组地处理。例如,第一和第二源901和903的最高有效紧缩数据元素位置的数据被利用乘法器电路905来相乘,来自第一和第二源901和903的次高有效紧缩数据元素位置的数据被利用乘法器电路907来相乘,来自第一和第二源901和903的第三高有效紧缩数据元素位置的数据被利用乘法器电路909来相乘,并且来自第一和第二源901和903的最低有效紧缩数据元素位置的数据被利用乘法器电路911来相乘。在一些实施例中,在乘法之前,第一源901的有符号紧缩数据元素被符号扩展并且第二源903的无符号紧缩数据元素被零扩展。
在一些实施例中,这些乘法器电路905-911被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些情境中,并行执行是利用是第三有符号源915的大小的通道来完成的。每个乘法的结果被利用加法电路913来相加。
乘法的结果的加法的结果被加到来自有符号源3 915的最高有效紧缩数据元素位置的数据(利用不同的加法器917或者相同的加法器913)。
最后,第二加法的结果919或者被存储在有符号目的地中的与从第三有符号源915使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图10图示了链式融合乘法累加指令的迭代的执行的子集的实施例。具体地,这图示了目的地的一个紧缩数据元素位置的迭代的执行电路。在此实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是4x输入数据大小。
第一有符号源1001和第二无符号源1003各自具有四个紧缩数据元素。这些紧缩数据元素的每一者存储诸如浮点或整数数据之类的数据。第三有符号源1015(初始或先前结果)具有存储有符号数据的紧缩数据元素。第一和第二源的大小是第三有符号源1015(初始或先前结果)的四分之一。例如,第一和第二源可具有16比特紧缩数据元素(例如,字),并且第三有符号源1015(初始或先前结果)可具有64比特紧缩数据元素(例如,双精度浮点或64比特整数)。
在此图示中,示出了第一有符号源1001和第二无符号源1003的四个最高有效紧缩数据元素位置和第三有符号源1015的最高有效紧缩数据元素位置。当然,其他紧缩数据元素位置也将被处理,如果存在任何这样的位置的话。
如图所示,紧缩数据元素被成四元组地处理。例如,第一有符号源1001和第二无符号源1003的最高有效紧缩数据元素位置的数据被利用乘法器电路1005来相乘,来自第一有符号源1001和第二无符号源1003的次高有效紧缩数据元素位置的数据被利用乘法器电路1007来相乘,来自第一有符号源1001和第二无符号源1003的第三高有效紧缩数据元素位置的数据被利用乘法器电路1009来相乘,并且来自第一有符号源1001和第二无符号源1003的最低有效紧缩数据元素位置的数据被利用乘法器电路1011来相乘。在一些实施例中,在乘法之前,第一有符号源1001的有符号紧缩数据元素被符号扩展并且第二无符号源1003的无符号紧缩数据元素被零扩展。
在一些实施例中,这些乘法器电路1005-1011被再利用于其他紧缩数据元素位置。在其他实施例中,使用额外的乘法器电路,使得紧缩数据元素被并行处理。在一些情境中,并行执行是利用是第三有符号源1015(初始或先前结果)的大小的通道来完成的。乘法的结果的加法的结果被利用加法器/饱和电路1013加到来自第三有符号源1015(初始或先前结果)的最高有效紧缩数据元素位置的数据。
加法/饱和(累加器)电路1013在加法导致对于有符号饱和而言太大或太小的值时保护操作对象的符号。具体地,饱和评估在多路加法和写入到目的地之间的无限精度结果上发生。当累加器1013是浮点并且输入项是整数时,乘积和浮点累加器输入值的总和被变成无限精度值(数百比特的定点数),乘法结果和第三输入的加法被执行,并且到实际累加器类型的单次舍入被执行。
加法和饱和检查的结果1019被存储在有符号目的地中的与从第三有符号源1015(初始或先前结果)使用的紧缩数据元素位置相对应的紧缩数据元素位置中,或者被传递到下一迭代。在一些实施例中,写入掩码被应用到此存储,使得如果相应的写入掩码(比特)被设置,则存储发生,而如果没有设置,则存储不发生。
图11根据一实施例图示了2的幂大小的SIMD实现方式,其中累加器使用大于到乘法器的输入的输入大小。注意(到乘法器的)源和累加器值可以是有符号或无符号值。对于具有2X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的两倍大小),表格1101例示了不同的配置。对于字节大小的源,累加器使用大小为16比特的字或半精度浮点(half-precision floating-point,HPFP)值。对于字大小的源,累加器使用大小为32比特的32比特整数或单精度浮点(single-precision floating-point,SPFP)值。对于SPFP或32比特整数大小的源,累加器使用大小为64比特的64整数或双精度浮点(double-precision floating-point,DPFP)值。
对于具有4X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的四倍大小),表格1103例示了不同的配置。对于字节大小的源,累加器使用大小为32比特的32比特整数或单精度浮点(SPFP)值。对于字大小的源,累加器在一些实施例中使用大小为64比特的64比特整数或双精度浮点(DPFP)值。
对于具有8X输入大小的累加器(换言之,累加器输入值是源的紧缩数据元素大小的八倍大小),表格1105例示了一配置。对于字节大小的源,累加器使用64比特整数。
如先前所暗示的,矩阵操作电路可被包括在核心中,或者被包括为外部加速器。图12图示了利用矩阵操作电路的系统的实施例。在此图示中,多个实体与环状互连1245耦合。
多个核心,核心0 1201、核心1 1203、核心2 1205和核心N1207,提供非基于分片的指令支持。在一些实施例中,矩阵操作电路1251被设在核心1203中,并且在其他实施例中矩阵操作电路1211和1213是在环状互连1245上可访问的。
此外,提供了一个或多个存储器控制器1223-1225来代表核心和/或矩阵操作电路与存储器1233和1231通信。
图13图示了支持使用分片的矩阵操作的处理器核心流水线的实施例。分支预测和解码电路1303从存储在指令存储1301中的指令执行指令的分支预测、指令的解码和/或这两者。例如,本文详述的指令可被存储在指令存储中。在一些实现方式中,单独的电路被用于分支预测,并且在一些实施例中,至少一些指令被解码成一个或多个微操作、微代码入口点、微指令、其他指令或者使用微代码1305的其他控制信号。分支预测和解码电路1303可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。
分支预测和解码电路1303耦合到分配/重命名电路1307,分配/重命名电路1307在一些实施例中耦合到调度器电路1309。在一些实施例中,这些电路通过执行以下各项中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表),2)向解码的指令分配状态比特和标志,以及3)调度经解码的指令在指令池之外的执行电路上执行(例如,在一些实施例中利用保留站)。
调度器电路1309表示任何数目的不同调度器,包括保留站、中央指令窗口等等。调度器电路1309耦合到或者包括(一个或多个)物理寄存器文件1315。(一个或多个)物理寄存器文件1315的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)、分片,等等。在一个实施例中,(一个或多个)物理寄存器文件1315包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件1315与引退电路1317重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射图和寄存器的池;等等)。引退电路1317和(一个或多个)物理寄存器文件1315耦合到(一个或多个)执行电路1311。
虽然寄存器重命名是在乱序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还可包括分开的指令和数据缓存单元和共享的L2缓存单元,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
执行电路1311是一个或多个执行电路的集合,包括标量电路1321、向量/SIMD电路1323和矩阵操作电路1327,以及存储器访问电路1325来访问缓存1313。执行电路对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。标量电路1321执行标量操作,向量/SIMD电路1323执行向量/SIMD操作,并且矩阵操作电路1327执行本文详述的矩阵(分片)操作。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线如下:1)指令取得电路执行取得和长度解码阶段;2)分支和解码电路1303执行解码阶段;3)分配/重命名电路1307执行分配阶段和重命名阶段;4)调度器电路1309执行调度阶段;5)耦合到或者包括在调度器电路1309和分配/重命名电路1307中的(一个或多个)物理寄存器文件和存储器单元执行寄存器读取/存储器读取阶段;执行电路1311执行执行阶段;6)存储器单元和(一个或多个)物理寄存器文件单元执行写回/存储器写入阶段;7)在异常处理阶段中可涉及各种单元;并且8)引退单元和(一个或多个)物理寄存器文件单元执行提交阶段。
核心可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1390包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyperthreading技术中那样)。
图14图示了支持使用分片的矩阵操作的处理器核心流水线的实施例。分支预测和解码电路1403从存储在指令存储1401中的指令执行指令的分支预测、指令的解码和/或这两者。例如,本文详述的指令可被存储在指令存储中。在一些实现方式中,单独的电路被用于分支预测,并且在一些实施例中,至少一些指令被解码成一个或多个微操作、微代码入口点、微指令、其他指令或者使用微代码1405的其他控制信号。分支预测和解码电路1403可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。
分支预测和解码电路1403耦合到分配/重命名电路1407,分配/重命名电路1407在一些实施例中耦合到调度器电路1409。在一些实施例中,这些电路通过执行以下各项中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表),2)向解码的指令分配状态比特和标志,以及3)调度经解码的指令在指令池之外的执行电路上执行(例如,在一些实施例中利用保留站)。
调度器电路1409表示任何数目的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元调度器电路1409耦合到或者包括(一个或多个)物理寄存器文件1415。(一个或多个)物理寄存器文件1415的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)、分片,等等。在一个实施例中,(一个或多个)物理寄存器文件1415包括向量寄存器电路、写入掩码寄存器电路和标量寄存器电路。这些寄存器电路可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件1415与引退电路1417重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射图和寄存器的池;等等)。引退电路1417和(一个或多个)物理寄存器文件1415耦合到(一个或多个)执行电路1411。
虽然寄存器重命名是在乱序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还可包括分开的指令和数据缓存单元和共享的L2缓存单元,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
执行电路1411是一个或多个执行电路1427的集合和一个或多个存储器访问电路1425的集合来访问缓存1413。执行电路1427执行本文详述的矩阵(分片)操作。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线如下:1)指令取得电路执行取得和长度解码阶段;2)分支和解码电路1403执行解码阶段;3)分配/重命名电路1407执行分配阶段和重命名阶段;4)调度器电路1409执行调度阶段;5)耦合到或者包括在调度器电路1409和分配/重命名电路1407中的(一个或多个)物理寄存器文件和存储器单元执行寄存器读取/存储器读取阶段;执行电路1411执行执行阶段;6)存储器单元和(一个或多个)物理寄存器文件单元执行写回/存储器写入阶段;7)在异常处理阶段中可涉及各种单元;并且8)引退单元和(一个或多个)物理寄存器文件单元执行提交阶段。
核心可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1490包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyperthreading技术中那样)。
布局
在本说明书各处,数据是利用行主要数据布局来表达的。列主要用户应当根据其朝向来转化术语。图15图示了以行主要格式和列主要格式表达的矩阵的示例。如图所示,矩阵A是2x3矩阵。当此矩阵被以行主要格式来存储时,行的数据元素是接连的。当此矩阵被以列主要格式来存储时,列的数据元素是接连的。矩阵的一个公知属性是AT*BT=(BA)T,其中上标T表示变换。将列主要数据读取为行主要数据导致矩阵看起来像变换矩阵。
在一些实施例中,在硬件中利用行主要语义,并且列主要数据将交换操作对象顺序,结果是矩阵的变换,但对于后续从存储器的列主要读取,其是正确的、未变换的矩阵。
例如,如果有两个列主要矩阵要相乘:
输入矩阵将在线性存储器(列主要)中被存储为:
a c e b d f
以及
g h i j k l。
将这些矩阵读取为行主要,具有维度2x3和3x2,则它们看起来将是:
a c e以及g h
b d f i j
k l
交换顺序和矩阵相乘:
g h a c e ag+bh cg+dh eg+fh
i j * b d f= ai+bj ci+dj ei+fj
k l ak+bl ck+dl ek+fl
变换矩阵输出并且随后可被存储为行主要顺序:
ag+bh cg+dh eg+fh ai+bj ci+dj ei+fj ak+bl ck+dl ek+fl
并且用于后续的列主要计算中,其是正确的未变换的矩阵:
ag+bh ai+bj ak+bl
cg+dh ci+dj ck+dl
eg+fh ei+fj ek+fl
示范性使用
图16图示了矩阵(分片)的使用的示例。在此示例中,矩阵C1601包括两个分片,矩阵A1603包括一个分片,并且矩阵B1605包括两个分片。此图示出了计算矩阵乘法的算法的内部循环的示例。在此示例中,来自矩阵C1601的两个结果分片tmm0和tmm1被用于累积中间结果。来自矩阵A1603的一个分片(tmm2)在其被来自矩阵B1605的两个分片相乘时被重复使用两次。指针指向从箭头指示的方向加载新的A矩阵(分片)和两个新的B矩阵(分片)。未示出的外部循环对于C分片调整指针。
如图所示的示范性代码包括对分片配置指令的使用并且被执行来配置分片使用、加载分片、处理分片的循环、将分片存储到存储器和释放使用。
图17图示了矩阵(分片)的使用的实施例。在1701,配置分片使用。例如,TILECONFIG指令被执行来配置分片使用,包括设置每分片的行和列的数目。通常,在1703从存储器加载至少一个矩阵(分片)。在1705利用矩阵(分片)执行至少一个矩阵(分片)操作。在1707,至少一个矩阵(分片)被存储出到存储器并且情境切换可在1709发生。
示范性配置
分片配置硬件支持
如上所述,分片使用通常需要在使用之前被配置。例如,可能不需要所有行和列的完全使用。配置这些行和列在一些实施例中不仅不节省功率,而且配置可用于确定操作是否将会生成差错。例如,如果M和L不相同,则(N x M)*(L x N)形式的矩阵乘法通常将会行不通。
在利用使用分片的矩阵之前,在一些实施例中,将配置分片支持。例如,每分片多少行和列、要使用的分片等等被配置。TILECONFIG指令是对计算机本身的改进,因为其提供支持来配置计算机使用矩阵加速器(或者作为处理器核心的一部分,或者作为外部设备)。具体地,TILECONFIG指令的执行使得配置被从存储器取回并且被应用到矩阵加速器内的矩阵(分片)设置。
分片使用配置
图18根据一实施例图示了对分片的使用的配置的支持。存储器1801包含要支持的矩阵(分片)的分片描述1803。
处理器/核心1805的指令执行资源1811将分片描述1803的各方面存储到分片配置1817中。分片配置1817包括调色板表格1813来详述调色板的什么分片被配置(每个分片中的行和列的数目)和指出矩阵支持在使用中的标记。具体地,指令执行资源1811被配置为按分片配置1817的指定来使用分片。指令执行资源1811还可包括机器特定寄存器或配置寄存器来指示分片使用。诸如使用中和开始值之类的额外的值也被设置。分片配置1817利用(一个或多个)寄存器1819来存储分片使用和配置信息。
图19图示了要支持的矩阵(分片)的描述的实施例。这是在STTILECFG指令的执行时要存储的描述。在此示例中,每个字段是一字节。在字节[0]中,存储调色板ID 1901。调色板ID被用于索引调色板表格1813,调色板表格1813对每个调色板ID存储分片中的字节的数目,以及由配置定义的与此ID相关联的分片的每行的字节。
字节1存储要被存储在“startRow”寄存器1903中的值并且字节2存储要被存储在寄存器startP 1905中的值。为了支持在例如上文详述那些那样的打断事件之后重启指令,指令在这些寄存器中存储信息。startRow值指示出应当被用于重启的行。startP值在使用对时指示出行内的用于存储操作的位置,并且在一些实施例中,指示出行的低一半(在一对的较低分片中)或者行的高一半(在一对的较高分片中)。一般而言,不需要行(列)中的位置。
除了TILECONFIG和STTILECFG以外,成功执行矩阵(分片)指令将把startRow和startP两者设置为零。
在中断的矩阵(分片)指令未被重启的任何时候,让startRow和startP值归零是软件的职责。例如,未掩蔽浮点异常处理程序可决定在软件中完成该操作并且将程序计数器值改变到另一指令,通常是下一指令。在此情况下,软件异常处理程序必须在继续开始程序之前在由操作系统呈现给它的异常中将startRow和startP值归零。操作系统将随后利用恢复指令来重加载这些值。
字节3存储分片1907的对(每分片1b)的指示。
字节16-17为分片0存储行1913和列1915的数目,字节18-19为分片1存储行和列的数目,等等。换言之,每个2字节群组为一分片指定行和列的数目。如果2字节的群组未被用于指定分片参数,则它们应当具有值零。为多于实现方式极限或调色板极限的分片指定分片参数导致出错。未配置的分片被设置到具有0行、0列的初始状态。
最后,存储器中的配置通常结束于结束定界,例如几个接连的字节是全零。
示范性分片和分片配置存储
图20(A)-(D)图示了(一个或多个)分片配置寄存器的示例。图20(A)图示了多个寄存器2000,它们是分片配置1817中使用的寄存器1819的示例。如图所示,每个分片(TMM02001...TMMN 2003)具有分开的寄存器,其中每个寄存器为该特定分片存储行和列大小。StartP 2011和StartRow 2013被存储在分开的寄存器中。一个或多个状态寄存器2015被设置(例如,TILES_CONFIGURED=1)来指示出分片被配置来使用。
图20(B)图示了多个寄存器2010,它们是分片配置1817中使用的寄存器1819的示例。如图所示,每个分片对于其行和列具有分开的寄存器。例如,TMM0行配置2021、TMM0列配置2023、StartP 2011和StartRow2013被存储在分开的寄存器中。一个或多个状态寄存器2015被设置(例如,TILES_CONFIGURED=1)来指示出分片被配置来使用。
图20(C)图示了多个寄存器2020,它们是分片配置1817中使用的寄存器1819的示例。如图所示,单个寄存器将分片配置(每分片的行和列)2031、StartP 2011和StartRow2013存储为紧缩数据。一个或多个状态寄存器2015被设置(例如,TILES_CONFIGURED=1)来指示出分片被配置来使用。
图20(D)图示了多个寄存器2030,它们是分片配置1817中使用的寄存器1819的示例。如图所示,单个寄存器存储分片配置(每分片的行和列)2031。StartP和StartRow被存储在分开的寄存器2011和2013中。一个或多个状态寄存器2015被设置(例如,TILES_CONFIGURED=1)来指示出分片被配置来使用。
设想了其他组合,例如将开始寄存器组合到单个寄存器中,其中它们被分开示出,等等。
机器学习概述
机器学习算法是可基于数据的集合来学习的算法。机器学习算法的实施例可被设计为对数据集合内的高级别抽象建模。例如,图像识别算法可用于确定给定的输入属于若干个类别的哪一者;回归算法可在给定输入的情况下输出数值值;并且模式识别算法可用于生成转化的文本或者执行文本到话音和/或话音识别。
机器学习算法的示范性类型是神经网络。有许多类型的神经网络;简单类型的神经网络是前馈网络。前馈网络可实现为非循环图,其中节点被布置成层。通常,前馈网络拓扑包括输入层和输出层,它们被至少一个隐藏层分隔。隐藏层将输入层接收的输入变换成对于在输出层中生成输出有用的表示。网络节点经由边缘完全连接到相邻层中的节点,但在每层内的节点间没有边缘。在前馈网络的输入层的节点处接收的数据被经由激活函数传播(即,“前馈”)到输出层的节点,该激活函数基于分别与连接层的每个边缘相关联的系数(“权重”)计算网络中的每个相继层的节点的状态。取决于由被执行的算法表示的特定模型,神经网络算法的输出可采取各种形式。
在机器学习算法可用于对特定问题建模之前,该算法被利用训练数据集合来训练。训练神经网络涉及选择网络拓扑,使用表示被网络建模的问题的训练数据的集合,并且调整权重,直到网络模型对于训练数据集合的所有实例都以最小误差表现为止。例如,在神经网络的有监督学习训练过程期间,网络响应于表示训练数据集合中的实例的输入而产生的输出被与该实例的“正确”标签输出相比较,表示输出和“正确”标签输出之间的差异的误差信号被计算,并且与连接相关联的权重被调整以在误差信号被后向传播过网络的层时最小化该误差。当从训练数据集合的实例生成的每个输出的误差被最小化时,网络被认为“已训练”。
机器学习算法的准确性可受到用于训练算法的数据集合的质量的严重影响。训练过程可能是计算上密集的并且在传统的通用处理器上可要求大量的时间。因此,并行处理硬件被用于训练许多类型的机器学习算法。这对于优化神经网络的训练尤其有用,因为在调整神经网络中的系数时执行的计算天生适宜于并行实现方式。具体而言,许多机器学习算法和软件应用已被适应性修改来利用通用图形处理设备内的并行处理硬件。
图21A是机器学习软件栈2100的广义图。机器学习应用2102可被配置为利用训练数据集训练神经网络或者使用经训练的深度神经网络来实现机器智能。机器学习应用2102可包括对于神经网络的训练和推断功能和/或可用于在部署之前训练神经网络的专门化软件。机器学习应用2102可实现任何类型的机器智能,包括但不限于图像识别、地图创建和本地化、自主导航、话音合成、医学成像或者语言翻译。
用于机器学习应用2102的硬件加速可经由机器学习框架2104来使能。机器学习框架2104可提供机器学习基元的库。机器学习基元是机器学习算法通常执行的基本操作。没有机器学习框架2104,机器学习算法的开发者将被要求创建和优化与机器学习算法相关联的主要计算逻辑,然后随着新的并行处理器被开发而重优化计算逻辑。相反,机器学习应用2102可被配置为利用由机器学习框架2104提供的基元来执行必要的计算。示范性基元包括张量卷积、激活函数和池化,它们是在训练卷积神经网络(convolutional neuralnetwork,CNN)时执行的计算操作。机器学习框架2104也可提供基元来实现许多机器学习算法执行的基本线性代数子程序,例如矩阵和向量操作。
机器学习框架2104可处理从机器学习应用2102接收的输入数据并且生成到计算框架2106的适当输入。计算框架2106可抽象提供给GPGPU驱动器2108的底层指令以使得机器学习框架2104能够经由GPGPU硬件2110利用硬件加速,而不要求机器学习框架2104具有关于GPGPU硬件2110的体系结构的详细知识。此外,计算框架2106可在多种类型和世代的GPGPU硬件2110上为机器学习框架2104使能硬件加速。
机器学习神经网络实现方式
本文描述的实施例提供的计算体系结构可被配置为执行尤其适合于训练和部署用于机器学习的神经网络的并行处理的类型。神经网络可被概括为具有图关系的函数的网络。在机器学习中使用的有多种类型的神经网络实现方式。神经网络的一个示范性类型是前馈网络,如前所述。
神经网络的第二示范性类型是卷积神经网络(CNN)。CNN是用于处理例如图像数据这样的具有已知的网格状拓扑的数据的专门化前馈神经网络。因此,CNN通常被用于图像识别应用,但是它们也可用于其他类型的模式识别,例如话音和语言处理。CNN输入层中的节点被组织成一组“过滤器”(以视网膜中存在的感受域(receptive field)为灵感的特征检测器),并且每组过滤器的输出被传播到网络的后继层中的节点。CNN的计算包括向每个过滤器应用卷积数学操作以产生该过滤器的输出。卷积是一种由两个函数执行来产生第三函数的专门种类的数学操作,该第三函数是两个原始函数之一的经修改版本。在卷积网络术语中,到卷积的第一函数可被称为输入,而第二函数可被称为卷积核。输出可被称为特征图。例如,到卷积层的输入可以是定义输入图像的各种颜色成分的数据的多维阵列。卷积核可以是参数的多维阵列,其中参数被对神经网络的训练过程适应性修改。
递归神经网络(recurrent neural network,RNN)是包括层之间的反馈连接的前馈神经网络的家族。RNN使得能够通过在神经网络的不同部分间共享参数数据来对循序数据建模。RNN的体系结构包括循环。循环表示变量的当前值在未来时间对其自己的值的影响,因为来自RNN的输出数据的至少一部分被用作反馈来处理序列中的后续输入。此特征使得RNN对于语言处理尤其有用,这是由于可构成语言数据的可变性质引起的。
上文描述的示范性神经网络可用于执行深度学习。深度学习是使用深度神经网络的机器学习。深度学习中使用的深度神经网络是由多个隐藏层组成的人工神经网络,而不是只包括单个隐藏层的浅层神经网络。更深的神经网络一般训练起来是更计算密集的。然而,网络的额外隐藏层使能了多步骤模式识别,这相对于浅层机器学习技术产生了降低的输出误差。
深度学习中使用的深度神经网络通常包括前端网络来执行特征识别,其耦合到后端网络,该后端网络表示可基于提供给模型的特征表示来执行操作(例如,对象分类、话音识别等等)的数学模型。深度学习使得能够在不要求为模型执行手工特征工程的情况下执行机器学习。相反,深度神经网络可基于输入数据内的统计结构或相关性来学习特征。学习到的特征可被提供给可将检测到的特征映射到输出的数学模型。网络使用的数学模型一般是专门用于要执行的特定任务的,并且不同的模型将被用于执行不同的任务。
一旦构造了神经网络,就可向网络应用学习模型来训练网络执行特定任务。学习模型描述如何调整模型内的权重来降低网络的输出误差。误差的后向传播是用于训练神经网络的常见方法。输入向量被呈现给网络以便处理。利用损失函数将网络的输出与期望输出相比较并且对于输出层中的每个神经元计算误差值。误差值随后被后向传播,直到每个神经元具有大致表示其对原始输出的贡献的关联误差值为止。网络随后可利用算法(例如随机梯度下降算法)从这些误差学习,以更新神经网络的权重。
图21B-21C图示了示范性深度神经网络的层。图21B图示了卷积神经网络(CNN)内的各种层。如图所示,用于对图像处理建模的示范性CNN可接收描述输入图像的红、绿和蓝(RGB)成分的输入2112。输入2112可被多个卷积层(例如,卷积层2114、卷积层2116)处理。来自多个卷积层的输出可以可选地被一组完全连接层2118处理。完全连接层中的神经元具有到先前层中的所有激活的完全连接,如先前对于前馈网络所描述的。来自完全连接层2118的输出可用于从网络生成输出结果。不是所有CNN实现方式都利用完全连接层2118。例如,在一些实现方式中,卷积层2116为CNN生成输出。
卷积层是稀疏连接的,这不同于在完全连接层2118中存在的传统神经网络配置。传统神经网络层是完全连接的,从而每个输出单元与每个输入单元交互。然而,卷积层是稀疏连接的,因为场的卷积的输出被输入(而不是场中的每个节点的各个状态值)到后续层的节点,如图所示。与卷积层相关联的内核执行卷积操作,其输出被发送到下一层。在卷积层内执行的降维是使得CNN能够缩放来处理大图像的一个方面。
图21C图示了卷积神经网络(CNN)的卷积层内的示范性计算阶段。到CNN的卷积层2122的输入可在卷积层2124的三个阶段中被处理。这三个阶段可包括卷积阶段2126、检测器阶段2128和池化阶段2130。卷积层2124随后可向后继卷积层输出数据。网络的最终卷积层可生成输出特征图数据或者向完全连接层提供输入,以例如为到CNN的输入生成分类值。
在卷积阶段2126中,执行电路并行执行若干个卷积来产生一组线性激活。卷积阶段2126可包括仿射变换,这是可被指定为线性变换加上平移的任何变换。仿射变换包括旋转、平移、缩放和这些变换的组合。卷积阶段计算连接到输入中的特定区域的函数(例如,神经元)的输出,这些特定区域可被确定为与神经元相关联的局部区域。神经元计算神经元的权重和神经元所连接到的局部输入中的区域之间的点积。来自卷积阶段2126的输出定义被卷积层2124的后继阶段处理的一组线性激活。
线性激活可被检测器阶段2128处理。在检测器阶段2128中,每个线性激活被非线性激活函数处理。非线性激活函数增大整体网络的非线性属性,而不影响卷积层的感受域。可以使用若干种类型的非线性激活函数。一种特定类型是修正线性单元(rectifiedlinear unit,ReLU),其使用定义为f(x)=max(0,x)的激活函数,使得激活阈值处于零。可使用的其他类型的激活函数包括s形(sigmoid)函数、双曲正切(tanh)函数和柔性最大(softmax)函数。
池化阶段2130使用利用邻近输出的汇总统计来替换卷积层2124的输出的池化函数。池化函数可用于向神经网络中引入平移不变性,使得到输入的小平移不会改变池化的输出。本地平移的不变性可能在输入数据中的特征的存在比该特征的精确位置更重要的场景中是有用的。在池化阶段2130期间可使用各种类型的池化函数,包括最大池化、平均池化和12范数池化。参考图22C来图示和描述池化的实施例的数值示例。此外,一些CNN实现方式不包括池化阶段。相反,一些实现方式替换相对于先前卷积阶段具有增大的步幅的额外卷积阶段。
来自卷积层2124的输出随后可被下一层2132处理。下一层2132可以是额外卷积层或者完全连接层2118之一。例如,图21B的第一卷积层2114可输出到第二卷积层2116,而第二卷积层可输出到完全连接层2118的第一层。
矩阵(分片)多操作(TileMultiOp)指令
如上文提及的,基于深度学习的机器学习系统的广泛采用和应用面临着与计算要求、功率消耗和存储器带宽利用有关的挑战。本文公开的是用于通过使用寄存器来将第一基元的结果传递到第二和后续基元来融合多个机器学习基元(例如,卷积后跟着激活)的发明的实施例。通过融合机器学习基元,公开的实施例可通过避免将中间结果写入到存储器的需要来大幅减小存储器带宽利用和功率花费。例如,通过以1的步幅在32x 32输入矩阵上卷积5x 5卷积过滤器来执行卷积涉及超过25000个乘法。公开的实施例避免了将这25000个中间结果写回到存储器的需要。
替换的次等方案串行地实现这些机器学习基元,利用分开的显式指令或者指令的序列,将中间结果写回到存储器。这种方案比公开的实施例利用更多存储器带宽并且消耗更多功率。
从而,在一个实施例中,处理器通过利用取得电路取得指令并且利用解码电路对指令解码来实现机器学习基元。指令具有字段来指定操作码和目的地和N个源矩阵的位置。在一个示例中,操作码指示出处理器将从存储器加载N个源矩阵,对N个源矩阵的每一者执行卷积,并且将N个卷积的结果存储在寄存器中以被传递到激活层。处理器随后通过使用执行单元的脉动阵列对N个源矩阵的每一者执行卷积来生成N个特征图。有利地,处理器可利用N个源矩阵的每一者的至多一个存储器加载执行卷积和激活。换言之,处理器将中间结果存储在寄存器中,并且避免用尽存储器带宽和消耗功率。处理器利用调度电路来调度指令的执行,并且按照操作码执行指令。
一般而言,公开的实施例支持将第一机器学习基元与第二机器学习基元融合,其中融合的意思是第一基元的结果被利用寄存器来传递,以充当到第二基元的输入。
图21D是根据一些实施例图示出卷积神经网络(CNN)多操作指令的执行的框图。如图所示,系统2140将执行矩阵(分片)多操作指令2141,其包括字段来指定操作码(TileMultiOp),以及第一源、第二源、第三源和目的地矩阵(分片)的位置。操作码指示出处理器将从存储器加载三个源矩阵,对每一者执行卷积,然后执行ReLU操作。目的地位置字段是可选的,如其虚线边框所指示,因为源矩阵之一有时充当目的地。在一些实施例中,处理器将把3个卷积的结果存储在寄存器中,以被传递到激活层。
在操作中,多操作执行电路将接收三个输入矩阵,2142、2144、2146。按照操作码,处理器将在2148执行卷积和ReLU,并且将ReLU结果写入到目的地2150。
图21E是根据一些实施例图示出卷积神经网络(CNN)执行流程的框图。如图所示,执行CNN流程2150的处理器在2152接收输入矩阵(分片)。然后,处理器在2154执行卷积,在2156执行ReLU(ReLU指的是修正线性单元,激活函数),在2158执行另一卷积,在2160执行另一ReLU,在2162执行池化(参考图22C图示和描述池化的示例),在2164执行另一卷积,并且在2166执行另一ReLU,然后在2168生成完全连接层。根据一些公开的实施例,CNN执行流程2150的两个或更多个步骤是作为TileMultiOp指令的一部分执行的,将中间结果存储在寄存器中以避免存储器写回。
图21F是根据一些实施例图示出矩阵(分片)多操作指令的执行的框图。如图所示,系统2170将执行矩阵(分片)多操作指令2171(TileMultiOp),其包括字段来指定操作码(TileMultiOp),以及第一源、第二源、第三源和目的地矩阵(分片)的位置。操作码指示出处理器将从存储器加载三个源矩阵,对每一者执行卷积,对卷积的结果执行ReLU函数,执行另一卷积,然后对第二卷积的输出执行ReLU。在操作中,处理器将加载三个矩阵,X1 2172、X22174和X3 2176,通过将中间结果存储在寄存器中并且避免存储器写回来执行2178处的操作。当完成时,结果被写入到目的地2180。
图22A是根据一些实施例的使用数值示例来图示卷积的执行的框图。利用数值示例图示了输入矩阵2202和特征识别符2204。在操作中,卷积流程2200一次一个元素地在源(输入)矩阵2202上卷积特征识别符2204,每次生成特征识别符(也称为卷积核,或者卷积过滤器)的每个元素和源矩阵的感受域的相应元素的积,并且将积的和存储到特征图的相应元素中。生成的特征图2206在第一循环、第二循环和第25循环之后被示出。如图所示,卷积要花25个循环,每次执行九个乘法。根据公开的实施例,225个乘法的结果的每一者被存储在寄存器中,而不被写回到存储器。从而,公开的实施例改善存储器带宽利用率和功率消耗。
图22B是根据一些实施例的使用数值示例来图示填充操作的执行的框图。在一些实施例中,TileMultiOp指令要求执行填充,例如在卷积操作之后。如流程2220中所示,执行TileMultiOp指令的处理器将用零填充输入矩阵2222的侧面、底部和顶部。现在,当特征识别符2224在输入矩阵上卷积时,特征图2226被生成,这一次与输入矩阵是相同大小。
图22C是根据一些实施例的使用数值示例来图示池化操作的执行的框图。如图所示,执行TileMultiOp指令的处理器将执行池化,例如在ReLU操作之后。池化有时也被称为下采样。如流程2230中所示,处理器每次将在输入矩阵2232的2x 2区域上操作,每次输出每个子区域中的最大数字,以产生池化(下采样)的矩阵2234。
执行TileMultiOp指令的示范性方法
图23是根据一些实施例图示出处理器为执行矩阵(分片)多操作指令(TileMultiOp)而执行的步骤的流程图。如图所示,执行TileMultiOp指令2301的处理器在操作2305处开始流程2300,利用取得电路取得指令。在2310,处理器将利用解码电路对指令解码,该指令具有字段来指定操作码和目的地和N个源矩阵的位置,操作码指示出处理器将从存储器加载N个源矩阵,对N个源矩阵的每一者执行卷积,并且将N个卷积的结果存储在寄存器中以被传递到激活层。处理器将通过对N个源矩阵的每一者执行卷积来生成N个特征图。有利地,处理器将利用N个源矩阵的每一者的至多一个存储器加载执行卷积和激活。在一些实施例中,处理器在2315将调度对经解码的指令的执行。在2320,处理器将利用执行电路按照操作码执行指令。在一些实施例中,处理器在2325将引退和提交执行结果。操作2315和2325是可选的,如其虚线边框所指示的,因为这些操作可在不同的时间发生,或者根本不发生。
(一个或多个)示范性指令格式
图24是根据一些实施例图示出TileMultiOp指令的格式的框图。如图所示,TileMultiOp指令2400包括字段来指定操作码2402、目的地位置2404、第一源矩阵(分片)位置2406、第二矩阵(分片)位置2408和第三源矩阵(分片)位置2410。在一些实施例中,第一源矩阵(分片)位置还充当目的地位置,目的地位置因此是可选的字段,如其虚线边框所指示的。第二和第三源位置2408和2410也是可选的,因为指令可指定仅一个源矩阵。
TileMultiOp指令2400还包括若干个可选的参数来控制处理器的行为,包括M2412、K 2414和N 2416(以设置矩阵维度)、元素大小2418(四分之一字节、半字节、字节、字、双字或四字)、元素格式2420(紧缩或标量单精度或双精度浮点数据和紧缩或标量整数数据)以及掩码2422(多比特值,每个目的地元素一个比特,该比特控制该目的地元素是否要被更新,或者其是否要被掩蔽以不被更新)。在一些实施例中,掩码2422识别处理器寄存器文件中的体系结构掩码寄存器之一来充当掩码。被掩蔽的目的地元素被归零或合并,这由另一个指令字段控制,或者由软件编程的控制寄存器来控制。
操作码2402被示为包括星号,这是表达额外的前缀和/或后缀可被添加来指定指令行为。指令修饰2412、2414、2416、2418、2420和2422中的一个或多个可利用操作码2402的前缀或后缀来指定。
在一些实施例中,可选的指令修饰2412、2414、2416、2418、2420和2422中的一个或多个被编码在可选地与指令2400包括在一起的即时字段(未示出)中。在一些实施例中,可选的指令修饰2412、2414、2416、2418、2420和2422中的一个或多个是经由配置/状态寄存器(例如,XTILECONFIG)来指定的。换言之,当可选的修饰2412、2414、2416、2418、2420和2422中的任何一个或多个未被指令指定时,它们有时被利用从分片体系结构的其他部分继承的隐式参数来指定。
详细示范性系统、处理器和仿真
本文详述的是执行上述指令的硬件、软件等等的示例。例如,下面描述的是指令执行的细节方面,包括诸如取得、解码、调度、执行、引退等等的各种流水线阶段。
指令集
指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些可具有不同的比特位置,因为包括的字段更少)和/或被定义为不同地解读给定的字段。从而,ISA的每个指令被利用给定的指令格式来表达(并且如果定义了的话,被以该指令格式的指令模板中的给定一个来表达)并且包括用于指定操作和操作对象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码和操作对象字段来选择操作对象(源1/目的地和源2);并且此ADD指令在指令流中的出现在选择特定操作对象的操作对象字段中将具有特定内容。被称为高级向量扩展(Advanced VectorExtension,AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extension,VEX)编码方案的一组SIMD扩展已被发布和/或发表(例如,参见64和IA-32体系结构软件开发者手册,2014年9月;并且参见高级向量扩展编程参考,2014年10月)。
示范性指令格式
本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外,下文详述了示范性系统、体系结构和流水线。(一个或多个)指令的实施例可被在这种系统、体系结构和流水线(但不限于详述的那些)上执行。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但替换实施例只使用向量操作向量友好指令格式。
图25A-25B是根据实施例图示出通用向量友好指令格式及其指令模板的框图。图25A是根据实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图25B是根据实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,对于通用向量友好指令格式2500定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问2505指令模板和存储器访问2520指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下项目的实施例: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字节)数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。
图25A中的类别A指令模板包括:1)在无存储器访问2505指令模板内,示出了无存储器访问、完全舍入控制型操作2510指令模板和无存储器访问、数据变换型操作2515指令模板;并且2)在存储器访问2520指令模板内,示出了存储器访问、暂态2525指令模板和存储器访问、非暂态2530指令模板。图25B中的类别B指令模板包括:1)在无存储器访问2505指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作2512指令模板和无存储器访问、写入掩码控制、vsize型操作2517指令模板;并且2)在存储器访问2520指令模板内,示出了存储器访问、写入掩码控制2527指令模板。
通用向量友好指令格式2500包括下面按图25A-25B中所示的顺序列出的以下字段。
格式字段2540–此字段中的特定值(指令格式识别符值)唯一地识别向量友好指令格式,从而识别采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集是不需要的。
基本操作字段2542–其内容区分不同的基本操作。
寄存器索引字段2544–其内容直接地或者通过地址生成指定源和目的地操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可最多达三个源和一个目的地寄存器,但替换实施例可支持更多或更少的源和目的地寄存器(例如,可支持最多达两个源,其中这些源之一也充当目的地,可支持最多达三个源,其中这些源之一也充当目的地,可支持最多达两个源和一个目的地)。
修饰字段2546–其内容区分通用向量指令格式中的指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问2505指令模板和存储器访问2520指令模板。存储器访问操作读取和/或写入到存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目的地是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段2550–其内容区分除了基本操作以外还要执行多种不同操作中的哪一种。此字段是依情境而定的。在一个实施例中,此字段被划分成类别字段2568、阿尔法(alpha)字段2552和贝塔(beta)字段2554。增强操作字段2550允许了在单个指令而不是2、3或4个指令中执行共同操作群组。
缩放比例字段2560–其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段2562A–其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段2562B(注意将位移字段2562A并列在位移因子字段2562B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+缩放的位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段2574(本文中稍后描述)和数据操纵字段2554C来确定。位移字段2562A和位移因子字段2562B是可选的,因为它们不被用于无存储器访问2505指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段2564–其内容区分若干个数据元素宽度中的哪一个将被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或利用操作码的某个方面来支持数据元素宽度则不需要它。
写入掩码字段2570–其内容基于每个数据元素位置控制目的地向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目的地中的任何元素集合被保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,当归零时,向量掩码允许了目的地中的任何元素集合在任何操作(由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目的地中的元素在相应的掩码比特具有0值时被设置到0。此功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段2570允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩码字段2570的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(从而写入掩码字段2570的内容间接识别要执行的该掩蔽)的实施例,但替换实施例作为替代或附加允许掩码写入字段2570的内容直接指定要执行的掩蔽。
即时字段2572–其内容允许对即时(immediate)的指定。此字段是可选的,因为在不支持即时的通用向量友好格式的实现方式中其不存在并且在不使用即时的指令中其不存在。
类别字段2568–其内容区分指令的不同类别。参考图25A-25B,此字段的内容在类别A和类别B指令之间进行选择。在图25A-25B中,圆角方形用于指示特定的值存在于一字段中(例如,图25A-25B中分别用于类别字段2568的类别A 2568A和类别B 2568B)。
类别A的指令模板
在类别A的非存储器访问2505指令模板的情况下,阿尔法字段2552被解读为RS字段2552A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作2510和无存储器访问数据变换型操作2515指令模板分别指定舍入2552A.1和数据变换2552A.2),而贝塔字段2554区分指定类型的操作中的哪一个要被执行。在无存储器访问2505指令模板中,缩放比例字段2560、位移字段2562A和位移因子字段2562B不存在。
无存储器访问指令模板–完全舍入控制型操作
在无存储器访问完全舍入控制型操作2510指令模板中,贝塔字段2554被解读为舍入控制字段2554A,其(一个或多个)内容提供静态舍入。虽然在描述的实施例中舍入控制字段2554A包括抑制所有浮点异常(suppress all floating-point exception,SAE)字段2556和舍入操作控制字段2558,但替换实施例可支持可将这两个概念编码到同一字段中或者只具有这些概念/字段的一者或另一者(例如,可只具有舍入操作控制字段2558)。
SAE字段2556–其内容区分是否禁用异常事件报告;当SAE字段2556的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段2558–其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段2558允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段2558的内容覆盖该寄存器值。
无存储器访问指令模板–数据变换型操作
在无存储器访问数据变换型操作2515指令模板中,贝塔字段2554被解读为数据变换字段2554B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配(swizzle)、广播)。
在类别A的存储器访问2520指令模板的情况下,阿尔法字段2552被解读为逐出提示字段2552B,其内容区分要使用逐出提示中的哪一个(在图25A中,对于存储器访问暂态2525指令模板和存储器访问非暂态2530指令模板分别指定暂态2552B.1和非暂态2552B.2),而贝塔字段2554被解读为数据操纵字段2554C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问2520指令模板包括缩放比例字段2560,并且可选地包括位移字段2562A或者位移因子字段2562B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量掩码的内容来规定。
存储器访问指令模板–暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板–非暂态
非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段2552被解读为写入掩码控制(Z)字段2552C,其内容区分由写入掩码字段2570控制的写入掩蔽应当是合并还是归零。
在类别B的非存储器访问2505指令模板的情况下,贝塔字段2554的一部分被解读为RL字段2557A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作2512指令模板和无存储器访问、写入掩码控制、VSIZE型操作2517指令模板分别指定舍入2557A.1和向量长度(VSIZE)2557A.2),而贝塔字段2554的其余部分区分指定类型的操作中的哪一个要被执行。在无存储器访问2505指令模板中,缩放比例字段2560、位移字段2562A和位移因子字段2562B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作2510指令模板中,贝塔字段2554的其余部分被解读为舍入操作字段2559A并且异常事件报告被禁止(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段2559A–正如舍入操作控制字段2558一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段2559A允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段2550的内容覆盖该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作2517指令模板中,贝塔字段2554的其余部分被解读为向量长度字段2559B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问2520指令模板的情况下,贝塔字段2554的一部分被解读为广播字段2557B,其内容区分是否要执行广播型数据操纵操作,而贝塔字段2554的其余部分被解读为向量长度字段2559B。存储器访问2520指令模板包括缩放比例字段2560,并且可选地包括位移字段2562A或者位移因子字段2562B。
对于通用向量友好指令格式2500,完整操作码字段2574被示为包括格式字段2540、基本操作字段2542和数据元素宽度字段2564。虽然示出了其中完整操作码字段2574包括所有这些字段的一个实施例,但完整操作码字段2574在不支持所有这些字段的实施例中只包括这些字段中的一些。完整操作码字段2574提供操作代码(操作码)。
增强操作字段2550、数据元素宽度字段2564和写入掩码字段2570允许了在通用向量友好指令格式中基于每个指令来指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本发明的范围内的)。另外,单个处理器可包括多个核心,所有这些核心都支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或乱序核心。当然,来自一个类别的特征在不同的实施例中也可在另一类别中实现。以高级别语言编写的程序将被置于(例如,被即时编译或静态编译到)多种不同的可执行形式中,包括:1)只具有由目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有基于当前执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。
示范性特定向量友好指令格式
图26A是根据实施例图示出示范性特定向量友好指令格式的框图。图26A示出了在如下意义上特定的特定向量友好指令格式2600:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式2600可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。图示了来自图26A的字段映射到的来自图25A-25B的字段。
应当理解,虽然出于说明目的在通用向量友好指令格式2500的情境中参考特定向量友好指令格式2600描述了实施例,但除非有声明,否则本发明不限于特定向量友好指令格式2600。例如,通用向量友好指令格式2500对于各种字段设想了多种可能的大小,而特定向量友好指令格式2600被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段2564在特定向量友好指令格式2600中被示为一比特字段,但本发明不限于此(也就是说,通用向量友好指令格式2500设想了数据元素宽度字段2564的其他大小)。
特定向量友好指令格式2600包括按图26A中所示的顺序的下面列出的以下字段。
EVEX前缀2602(字节0-3)–被编码为四字节形式。
格式字段2540(EVEX字节0,比特[7:0])-第一字节(EVEX字节0)是格式字段2540并且其包含0x62(在一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字段。
REX字段2605(EVEX字节1,比特[7-5])-由EVEX.R比特字段(EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特[6]–X)和EVEX.B比特字段(EVEX字节1,比特[5]–B)构成。EVEX.R、EVEX.X和EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码(1s complement)形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特编码(rrr、xxx和bbb),从而Rrrr、Xxxx和Bbbb可通过添加EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段2610A–这是REX’字段2610的第一部分并且是用于对扩展32寄存器集合的高16或低16编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在一个实施例中,此比特以及如下所示的其他比特被以比特反转格式来存储以与BOUND指令相区分(在公知的x8632比特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器编码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR形成的。
操作码映射字段2615(EVEX字节1,比特[3:0]–mmmm)–其内容编码了暗示的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段2564(EVEX字节2,比特[7]–W)-由符号EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。
EVEX.vvvv 2620(EVEX字节2,比特[6:3]-vvvv)-EVEX.vvvv的作用可包括以下各项:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被保留并且应当包含1111b。从而,EVEX.vvvv字段2620编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同EVEX比特字段被用于将指定符大小扩展到32寄存器。
EVEX.U 2568类别字段(EVEX字节2,比特[2]-U)–如果EVEX.U=0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B或者EVEX.U1。
前缀编码字段2625(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前缀编码,从而不要求扩展。
阿尔法字段2552(EVEX字节3,比特[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示)–如前所述,此字段是依情境而定的。
贝塔字段2554(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)–如前所述,此字段是依情境而定的。
REX’字段2610B–这是REX’字段2610的剩余部分并且是可用于对扩展32寄存器集合的高16或低16编码的EVEX.V’比特字段(EVEX字节3,比特[3]-V’)。此比特被以比特反转格式来存储。值1被用于对低16寄存器编码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写入掩码字段2570(EVEX字节3,比特[2:0]-kkk)-其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在一个实施例中,特定值EVEX.kkk=000具有特殊行为,暗示着没有写入掩码被用于特定指令(这可按多种方式实现,包括使用硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。
真实操作码字段2630(字节4)也被称为操作码字节。操作码的一部分在此字段中指定。
MOD R/M字段2640(字节5)包括MOD字段2642、Reg字段2644和R/M字段2646。如前所述,MOD字段2642的内容区分存储器访问和非存储器访问操作。Reg字段2644的作用可被总结成两个情形:编码目的地寄存器操作对象或者源寄存器操作对象或者被作为操作码扩展来对待并且不被用于编码任何指令操作对象。R/M字段2646的作用可包括以下各项:编码引用存储器地址的指令操作对象或者编码目的地寄存器操作对象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)-如前所述,包括SIB.ss 2652、SIB.xxx 2654和SIB bbb 2656的SIB 2650的内容被用于存储器地址生成。SIB.xxx 2654和SIB.bbb 2656–先前已对于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段2562A(字节7-10)-当MOD字段2642包含10时,字节7-10是位移字段2562A,并且其工作方式与传统32比特位移(disp32)相同并且在字节粒度上工作。
位移因子字段2562B(字节7)-当MOD字段2642包含01时,字节7是位移因子字段2562B。此字段的位置与传统x86指令集8比特位移(disp8)的相同,其在字节粒度上工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段2562B是对disp8的重解读;当使用位移因子字段2562B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来确定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移假定有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段2562B代替了传统x86指令集8比特位移。从而,位移因子字段2562B被按与x86指令集8比特位移相同的方式编码(因此在ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节地址偏移量)。即时字段2572如前所述那样操作。
完整操作码字段
图26B是根据一个实施例图示出构成完整操作码字段2574的特定向量友好指令格式2600的字段的框图。具体而言,完整操作码字段2574包括格式字段2540、基本操作字段2542和数据元素宽度(W)字段2564。基本操作字段2542包括前缀编码字段2625、操作码映射字段2615和真实操作码字段2630。
寄存器索引字段
图26C是根据一个实施例图示出构成寄存器索引字段2544的特定向量友好指令格式的字段2600的框图。具体而言,寄存器索引字段2544包括REX字段2605、REX'字段2610、MODR/M.reg字段2644、MODR/M.r/m字段2646、VVVV字段2620、xxx字段2654和bbb字段2656。
增强操作字段
图26D是根据一个实施例图示出构成增强操作字段2550的特定向量友好指令格式2600的字段的框图。当类别(U)字段2568包含0时,其表示EVEX.U0(类别A 2568A);当其包含1时,其表示EVEX.U1(类别B 2568B)。当U=0并且MOD字段2642包含11时(表示无存储器访问操作),阿尔法字段2552(EVEX字节3,比特[7]–EH)被解读为rs字段2552A。当rs字段2552A包含1时(舍入2552A.1),贝塔字段2554(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段2554A。舍入控制字段2554A包括一比特SAE字段2556和两比特舍入操作字段2558。当rs字段2552A包含0时(数据变换2552A.2),贝塔字段2554(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段2554B。当U=0并且MOD字段2642包含00、01或10时(表示存储器访问操作),阿尔法字段2552(EVEX字节3,比特[7]–EH)被解读为逐出提示(eviction hint,EH)字段2552B并且贝塔字段2554(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据操纵字段2554C。
当U=1时,阿尔法字段2552(EVEX字节3,比特[7]–EH)被解读为写入掩码控制(Z)字段2552C。当U=1并且MOD字段2642包含11时(表示无存储器访问操作),贝塔字段2554的一部分(EVEX字节3,比特[4]–S0)被解读为RL字段2557A;当其包含1(舍入2557A.1)时,贝塔字段2554的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操作字段2559A,而当RL字段2557A包含0(VSIZE 2557A.2)时,贝塔字段2554的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字段2559B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段2642包含00、01或10时(表示存储器访问操作),贝塔字段2554(EVEX字节3,比特[6:4]-SSS)被解读为向量长度字段2559B(EVEX字节3,比特[6-5]-L1-0)和广播字段2557B(EVEX字节3,比特[4]-B)。
示范性寄存器体系结构
图27是根据一个实施例的寄存器体系结构2700的框图。在图示的实施例中,存在32个512比特宽的向量寄存器2710;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式2600如以下表格中所示在这些覆盖的寄存器文件上操作。
换言之,向量长度字段2559B在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量长度字段2559B的指令模板在最大向量长度上操作。另外,在一个实施例中,特定向量友好指令格式2600的类别B指令模板在紧缩或标量单/双精度浮点数据和紧缩或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器2715–在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器2715的大小是16比特。如前所述,在一个实施例中,向量掩码寄存器k0无法被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xFFFF,实际上对于该指令禁用了写入掩蔽。
通用寄存器2725–在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来引用。
标量浮点栈寄存器文件(x87栈)2745,其上化名了MMX紧缩整数平坦寄存器文件2750–在图示的实施例中,x87栈是用于利用x87指令集扩展对32/64/80比特浮点数据执行标量浮点操作的八元素栈;而MMX寄存器被用于对64比特紧缩整数数据执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作对象。
替换实施例可使用更宽或更窄的寄存器。此外,替换实施例可使用更多、更少或不同的寄存器文件和寄存器。
示范性核心体系结构、处理器和计算机体系结构
处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用乱序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用乱序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一晶粒上包括描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和乱序核心框图
图28A是根据实施例图示出示范性有序流水线和示范性寄存器重命名、乱序发出/执行流水线两者的框图。图28B是根据实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。图28A-28B中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名、乱序发出/执行流水线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图28A中,处理器流水线2800包括取得阶段2802、长度解码阶段2804、解码阶段2806、分配阶段2808、重命名阶段2810、调度(也称为调遣或发出)阶段2812、寄存器读取/存储器读取阶段2814、执行阶段2816、写回/存储器写入阶段2818、异常处理阶段2822和提交阶段2824。
图28B示出了处理器核心2890包括耦合到执行引擎单元2850的前端单元2830,并且两者都耦合到存储器单元2870。核心2890可以是精简指令集计算(reduced instructionset computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心或者混合或替换核心类型。作为另外一个选项,核心2890可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processingunit,GPGPU)核心、图形核心,等等。
前端单元2830包括分支预测单元2832,其耦合到指令缓存单元2834,指令缓存单元2834耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)2836,指令TLB2836耦合到指令取得单元2838,指令取得单元2838耦合到解码单元2840。解码单元2840(或解码器)可对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元2840可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read onlymemory,ROM),等等。在一个实施例中,核心2890包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元2840中或者以其他方式在前端单元2830内)。解码单元2840耦合到执行引擎单元2850中的重命名/分配器单元2852。
执行引擎单元2850包括耦合到引退单元2854和一组一个或多个调度器单元2856的重命名/分配器单元2852。(一个或多个)调度器单元2856表示任何数目的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元2856耦合到(一个或多个)物理寄存器文件单元2858。物理寄存器文件单元2858的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元2858包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元2858与引退单元2854重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射图和寄存器的池;等等)。引退单元2854和(一个或多个)物理寄存器文件单元2858耦合到(一个或多个)执行集群2860。(一个或多个)执行集群2860包括一组一个或多个执行单元2862和一组一个或多个存储器访问单元2864。执行单元2862可对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个)调度器单元2856、(一个或多个)物理寄存器文件单元2858和(一个或多个)执行集群2860被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有(一个或多个)存储器访问单元2864)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是乱序发出/执行,并且其余的是有序的。
存储器访问单元2864的集合耦合到存储器单元2870,存储器单元2870包括数据TLB单元2872,数据TLB单元2872耦合到数据缓存单元2874,数据缓存单元2874耦合到第2级(L2)缓存单元2876。在一个示范性实施例中,存储器访问单元2864可包括加载单元、存储地址单元和存储数据单元,其中每一者耦合到存储器单元2870中的数据TLB单元2872。指令缓存单元2834进一步耦合到存储器单元2870中的第2级(L2)缓存单元2876。L2缓存单元2876耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可如下实现流水线2800:1)指令取得2838执行取得和长度解码阶段2802和2804;2)解码单元2840执行解码阶段2806;3)重命名/分配器单元2852执行分配阶段2808和重命名阶段2810;4)(一个或多个)调度器单元2856执行调度阶段2812;5)(一个或多个)物理寄存器文件单元2858和存储器单元2870执行寄存器读取/存储器读取阶段2814;执行集群2860执行执行阶段2816;6)存储器单元2870和(一个或多个)物理寄存器文件单元2858执行写回/存储器写入阶段2818;7)在异常处理阶段2822中可涉及各种单元;并且8)引退单元2854和(一个或多个)物理寄存器文件单元2858执行提交阶段2824。
核心2890可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心2890包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyperthreading技术中那样)。
虽然寄存器重命名是在乱序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元2834/2874和共享的L2缓存单元2876,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
具体示范性有序核心体系结构
图29A-29B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。
图29A是根据实施例的单个处理器核心及其与片上互连网络2902以及与第2级(L2)缓存2904的其本地子集的连接的框图。在一个实施例中,指令解码器2900支持具有紧缩数据指令集扩展的x86指令集。L1缓存2906允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元2908和向量单元2910使用分开的寄存器集合(分别是标量寄存器2912和向量寄存器2914)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存2906读回,但替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集2904是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集2904的直接访问路径。处理器核心读取的数据被存储在其L2缓存子集2904中并且可被迅速访问,与其他处理器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储在其自己的L2缓存子集2904中并且在必要时被从其他子集冲出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每个方向上是1012比特宽的。
图29B是根据实施例的图29A中的处理器核心的一部分的扩展视图。图29B包括L1缓存2906的L1数据缓存2906A部分,以及关于向量单元2910和向量寄存器2914的更多细节。具体而言,向量单元2910是16宽向量处理单元(vector processing unit,VPU)(参见16宽ALU 2928),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元2920调配寄存器输入,利用数值转换单元2922A-B进行的数值转换,以及利用复制单元2924对存储器输入的复制。写入掩码寄存器2926允许断言结果向量写入。
图30是根据实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器3000的框图。图30中的实线框图示了具有单个核心3002A、系统代理3010和一组一个或多个总线控制器单元3016的处理器3000,而虚线框的可选添加图示了具有多个核心3002A-N、系统代理单元3010中的一组一个或多个集成存储器控制单元3014和专用逻辑3008的替换处理器3000。
从而,处理器3000的不同实现方式可包括:1)其中专用逻辑3008是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心3002A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心或者两者的组合)的CPU;2)其中核心3002A-N是主要打算用于图形和/或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心3002A-N是大量的通用有序核心的协处理器。从而,处理器3000可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器,等等。处理器可实现在一个或多个芯片上。处理器3000可以是一个或多个基片的一部分和/或利用若干个工艺技术中的任何一者实现在一个或多个基片上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元3006以及耦合到该组集成存储器控制器单元3014的外部存储器(未示出)。该组共享缓存单元3006可包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元3012互连专用逻辑3008(集成图形逻辑是专用逻辑的一个示例并且在本文中也被称为专用逻辑)、该组共享缓存单元3006和系统代理单元3010/(一个或多个)集成存储器控制器单元3014,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元3006和核心3002A-N之间维持一致性。
在一些实施例中,核心3002A-N中的一个或多个能够进行多线程处理。系统代理3010包括协调和操作核心3002A-N的那些组件。系统代理单元3010可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括调控核心3002A-N和专用逻辑3008的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心3002A-N就体系结构指令集而言可以是同质的或者异质的;也就是说,核心3002A-N中的两个或更多个可能够执行同一指令集,而其他的可只能够执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图31-图34是示范性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的许多种系统或电子设备一般是适当的。
现在参考图31,其中示出了根据本发明的一个实施例的系统3100的框图。系统3100可包括一个或多个处理器3110、3115,它们耦合到控制器中心3120。在一个实施例中,控制器中心3120包括图形存储器控制器中心(graphics memory controller hub,GMCH)3190和输入/输出中心(Input/Output Hub,IOH)3150(它们可在分开的芯片上);GMCH 3190包括与存储器3140和协处理器3145耦合的存储器和图形控制器;IOH 3150将输入/输出(I/O)设备3160耦合到GMCH 3190。或者,存储器和图形控制器的一者或两者被集成在处理器内(如本文所述),存储器3140和协处理器3145直接耦合到处理器3110,并且控制器中心3120与IOH 3150在单个芯片中。
额外的处理器3115的可选性在图31中用虚线表示。每个处理器3110、3115可包括本文描述的处理核心中的一个或多个并且可以是处理器3000的某个版本。
存储器3140可例如是动态随机访问存储器(dynamic random-access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者的组合。对于至少一个实施例,控制器中心3120经由多点分支总线(例如前端总线(frontside bus,FSB))、点到点接口(例如QuickPath互连(QuickPath Interconnect,QPI))或者类似的连接3195与(一个或多个)处理器3110、3115通信。
在一个实施例中,协处理器3145是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中心3120可包括集成的图形加速器。
在物理资源3110、3115之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。
在一个实施例中,处理器3110执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器3110将这些协处理器指令识别为应当由附接的协处理器3145执行的类型。因此,处理器3110在协处理器总线或其他互连上向协处理器3145发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器3145接受和执行接收到的协处理器指令。
现在参考图32,其中示出了根据本发明的实施例的第一更具体示范性系统3200的框图。如图32中所示,多处理器系统3200是点到点互连系统,并且包括经由点到点互连3250耦合的第一处理器3270和第二处理器3280。处理器3270和3280的每一者可以是处理器3000的某个版本。在一个实施例中,处理器3270和3280分别是处理器3110和3115,而协处理器3238是协处理器3145。在另一实施例中,处理器3270和3280分别是处理器3110和协处理器3145。
处理器3270和3280被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元3272和3282。处理器3270还包括点到点(P-P)接口3276和3278作为其总线控制器单元的一部分;类似地,第二处理器3280包括P-P接口3286和3288。处理器3270、3280可利用P-P接口电路3278、3288经由点到点(P-P)接口3250交换信息。如图32中所示,IMC 3272和3282将处理器耦合到各自的存储器,即存储器3232和存储器3234,存储器3232和存储器3234可以是在本地附接到各个处理器的主存储器的一部分。
处理器3270、3280可各自利用点到点接口电路3276、3294、3286、3298经由个体P-P接口3252、3254与芯片集3290交换信息。芯片集3290可以可选地经由高性能接口3292与协处理器3238交换信息。在一个实施例中,协处理器3238是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片集3290可经由接口3296耦合到第一总线3216。在一个实施例中,第一总线3216可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本发明的范围不限于此。
如图32中所示,各种I/O设备3214可耦合到第一总线3216,以及将第一总线3216耦合到第二总线3220的总线桥3218。在一个实施例中,一个或多个额外的处理器3215,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线3216。在一个实施例中,第二总线3220可以是低引脚数(low pin count,LPC)总线。各种设备可耦合到第二总线3220,这些设备例如包括键盘和/或鼠标3222、通信设备3227和存储单元3228,例如盘驱动器或者其他大容量存储设备,它们在一个实施例中可包括指令/代码和数据3230。另外,音频I/O3224可耦合到第二总线3220。注意其他体系结构是可能的。例如,取代图32的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。
现在参考图33,其中示出了根据本发明的实施例的第二更具体示范性系统3300的框图。图32和图33中的相似元素带有相似的标号,并且图32的某些方面被从图33中省略以避免模糊图33的其他方面。
图33图示出处理器3270、3280可分别包括集成存储器和I/O控制逻辑(“CL”)3372和3382。从而,CL 3372、3382包括集成存储器控制器单元并且包括I/O控制逻辑。图33图示出不仅存储器3232、3234耦合到CL 3372、3382,而且I/O设备3314也耦合到控制逻辑3372、3382。传统I/O设备3315耦合到芯片集3290。
现在参考图34,其中示出了根据本发明的实施例的SoC 3400的框图。图30中的相似元素带有相似的标号。另外,虚线框是更高级SoC上的可选特征。在图34中,(一个或多个)互连单元3402耦合到:应用处理器3410,其包括一组一个或多个核心3002A-N,和(一个或多个)共享缓存单元3006,其中核心3002A-N包括缓存单元3004A-N;系统代理单元3010;(一个或多个)总线控制器单元3016;(一个或多个)集成存储器控制器单元3014;一组或一个或多个协处理器3420,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(static random access memory,SRAM)单元3430;直接存储器访问(directmemory access,DMA)单元3432;以及显示单元3440,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器3420包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的机制的实施例可以用硬件、软件、固件或者这种实现方案的组合来实现。实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码,例如图32中所示的代码3230,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器(例如,数字信号处理器(digital signalprocessor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或者微处理器)的系统。
程序代码可以用高级过程式或面向对象的编程语言实现来与处理系统通信。如果希望,程序代码也可以用汇编或机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令实现,该逻辑当被机器读取时使得该机器制造逻辑来执行本文描述的技术。这种被称为“IP核”的表示可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制造机器中。
这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compact diskrewritable,CD-RW)和磁光盘),半导体设备,例如只读存储器(read-only memory,ROM),随机访问存储器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(HardwareDescription Language,HDL)。这种实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或以其他方式转换到要被核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者一部分在处理器上一部分在处理器外。
图35是根据实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,指令转换器可以用软件、固件、硬件或者其各种组合来实现。图35示出了高级别语言3502的程序可被利用x86编译器3504来编译以生成x86二进制代码3506,x86二进制代码3506可由具有至少一个x86指令集核心3516的处理器原生执行。具有至少一个x86指令集核心3516的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)英特尔x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本来执行与具有至少一个x86指令集核心的英特尔处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的英特尔处理器基本上相同的结果。x86编译器3504表示可操作来生成x86二进制代码3506(例如,目标代码)的编译器,x86二进制代码3506在带有或不带有额外的链接处理的情况下可被在具有至少一个x86指令集核心的处理器3516上执行。类似地,图35示出了高级别语言3502的程序可被利用替换指令集编译器3508来编译以生成替换指令集二进制代码3510,替换指令集二进制代码3510可由没有至少一个x86指令集核心的处理器3514(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器3512用于将x86二进制代码3506转换成可由没有x86指令集核心的处理器3514原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码3510相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器3512表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码3506的软件、固件、硬件或者其组合。
进一步示例
示例1提供了一种示范性处理器,包括:取得电路,用于取得指令;解码电路,用于对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;调度电路,用于调度所述指令的执行;以及执行电路,用于按照所述操作码执行所述指令。
示例2包括如示例1所述的示范性处理器的实质,其中所述处理器将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
示例3包括如示例1所述的示范性处理器的实质,其中所述激活层包括修正线性单元(ReLU)、双曲正切函数、S形函数和柔性最大函数中的一者。
示例4包括如示例1所述的示范性处理器的实质,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
示例5包括如示例1所述的示范性处理器的实质,其中所述操作码还要求所述处理器对所述N个卷积的结果执行池化以便对所述N个特征图的每一者下采样。
示例6包括如示例1所述的示范性处理器的实质,其中所述操作码还要求所述处理器执行完全连接层。
示例7包括如示例1所述的示范性处理器的实质,其中所述操作码还要求所述处理器用零填充所述N个源矩阵的每一者,使得所述N个特征图的每一者具有与所述N个源矩阵的相应一者相同的维度。
示例8包括如示例1所述的示范性处理器的实质,其中所述操作码还要求所述处理器通过对所述N个特征图的每一者执行额外卷积来生成N个额外特征图,所述N个额外卷积的结果将被存储在寄存器中以被传递到所述激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积、所述N个额外卷积和所述激活层。
示例9提供了一种示范性的由处理器实现的方法,包括:利用取得电路取得指令;利用解码电路对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;利用调度电路调度所述指令的执行;并且利用执行电路按照所述操作码执行所述指令。
示例10包括如示例9所述的示范性的由处理器实现的方法的实质,其中所述处理器将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
示例11包括如示例9所述的示范性的由处理器实现的方法的实质,其中所述激活层包括修正线性单元(ReLU)、双曲正切函数、S形函数和柔性最大函数中的一者。
示例12包括如示例9所述的示范性的由处理器实现的方法的实质,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
示例13包括如示例9所述的示范性的由处理器实现的方法的实质,其中所述操作码还要求所述处理器对所述N个卷积的结果执行池化以便对所述N个特征图的每一者下采样。
示例14包括如示例9所述的示范性的由处理器实现的方法的实质,其中所述操作码还要求所述处理器执行完全连接层。
示例15包括如示例9所述的示范性的由处理器实现的方法的实质,其中所述操作码还要求所述处理器用零填充所述N个源矩阵的每一者,使得所述N个特征图的每一者具有与所述N个源矩阵的相应一者相同的维度。
示例16包括如示例9所述的示范性的由处理器实现的方法的实质,其中所述操作码还要求所述处理器通过对所述N个特征图的每一者执行额外卷积来生成N个额外特征图,所述N个额外卷积的结果将被存储在寄存器中以被传递到所述激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积、所述N个额外卷积和所述激活层。
示例17提供了一种包含指令的示范性非暂态机器可读介质,处理器通过以下步骤来响应所述指令:利用取得电路取得指令;利用解码电路对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;利用调度电路调度所述指令的执行;并且利用执行电路按照所述操作码执行所述指令。
示例18包括如示例17所述的示范性非暂态机器可读介质的实质,其中所述处理器将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
示例19包括如示例17所述的示范性非暂态机器可读介质的实质,其中所述激活层包括修正线性单元(ReLU)、双曲正切函数、S形函数和柔性最大函数中的一者。
示例20包括如示例17所述的示范性非暂态机器可读介质的实质,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
Claims (26)
1.一种处理器,包括:
取得电路,用于取得指令;
解码电路,用于对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;
调度电路,用于调度所述指令的执行;以及
执行电路,用于按照所述操作码执行所述指令。
2.如权利要求1所述的处理器,其中所述执行电路将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
3.如权利要求1或2所述的处理器,其中所述激活层包括修正线性单元、双曲正切函数、S形函数和柔性最大函数中的一者。
4.如权利要求1或3所述的处理器,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
5.如权利要求1或4所述的处理器,其中所述操作码还要求所述处理器对所述N个卷积的结果执行池化以便对所述N个特征图的每一者下采样。
6.如权利要求1或5所述的处理器,其中所述操作码还要求所述处理器执行完全连接层。
7.如权利要求1或6所述的处理器,其中所述操作码还要求所述处理器用零填充所述N个源矩阵的每一者,使得所述N个特征图的每一者具有与所述N个源矩阵的相应一者相同的维度。
8.如权利要求1或7所述的处理器,其中所述操作码还要求所述处理器通过对所述N个特征图的每一者执行额外卷积来生成N个额外特征图,所述N个额外卷积的结果将被存储在寄存器中以被传递到所述激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积、所述N个额外卷积和所述激活层。
9.一种由处理器实现的方法,包括:
利用取得电路取得指令;
利用解码电路对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;
利用调度电路调度所述指令的执行;并且
利用执行电路按照所述操作码执行所述指令。
10.如权利要求9所述的由处理器实现的方法,其中所述执行电路将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
11.如权利要求9或10所述的由处理器实现的方法,其中所述激活层包括修正线性单元、双曲正切函数、S形函数和柔性最大函数中的一者。
12.如权利要求9或11所述的由处理器实现的方法,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
13.如权利要求9或12所述的由处理器实现的方法,其中所述操作码还要求所述处理器对所述N个卷积的结果执行池化以便对所述N个特征图的每一者下采样。
14.如权利要求9或13所述的由处理器实现的方法,其中所述操作码还要求所述处理器执行完全连接层。
15.如权利要求9或14所述的由处理器实现的方法,其中所述操作码还要求所述处理器用零填充所述N个源矩阵的每一者,使得所述N个特征图的每一者具有与所述N个源矩阵的相应一者相同的维度。
16.如权利要求9或15所述的由处理器实现的方法,其中所述操作码还要求所述处理器通过对所述N个特征图的每一者执行额外卷积来生成N个额外特征图,所述N个额外卷积的结果将被存储在寄存器中以被传递到所述激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积、所述N个额外卷积和所述激活层。
17.一种包含指令的非暂态机器可读介质,处理器通过以下步骤来响应所述指令:
利用取得电路取得指令;
利用解码电路对所述指令解码,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出所述处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;
利用调度电路调度所述指令的执行;并且
利用执行电路按照所述操作码执行所述指令。
18.如权利要求17所述的非暂态机器可读介质,其中所述执行电路将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
19.如权利要求17或18所述的非暂态机器可读介质,其中所述激活层包括修正线性单元、双曲正切函数、S形函数和柔性最大函数中的一者。
20.如权利要求17所述的非暂态机器可读介质,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
21.一种装置,包括:
用于取得指令的装置;
用于对所述指令解码的装置,所述指令具有字段来指定操作码以及目的地和N个源矩阵的位置,所述操作码指示出处理器将从存储器加载所述N个源矩阵,对所述N个源矩阵执行N个卷积以生成N个特征图,并且将所述N个卷积的结果存储在寄存器中以被传递到激活层,其中所述处理器将利用所述N个源矩阵的每一者的至多一个存储器加载执行所述N个卷积和所述激活层;
用于调度所述指令的执行的装置;以及
用于按照所述操作码执行所述指令的装置。
22.如权利要求21所述的装置,其中用于执行的装置将通过一次一个元素地在源矩阵上卷积特征识别符来执行所述N个卷积的每一者,每次生成所述特征识别符的每个元素和所述源矩阵的感受域的相应元素的积,并且将所述积的和存储到所述特征图的相应元素中。
23.如权利要求21或22所述的装置,其中所述激活层包括修正线性单元、双曲正切函数、S形函数和柔性最大函数中的一者。
24.如权利要求21或23所述的装置,其中N等于三,并且所述N个源矩阵的元素包括红、绿和蓝像素值。
25.如权利要求21或24所述的装置,其中所述操作码还要求所述处理器对所述N个卷积的结果执行池化以便对所述N个特征图的每一者下采样。
26.如权利要求21或25所述的装置,其中所述操作码还要求所述处理器执行完全连接层。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/582,433 US20210089316A1 (en) | 2019-09-25 | 2019-09-25 | Deep learning implementations using systolic arrays and fused operations |
US16/582,433 | 2019-09-25 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112559051A true CN112559051A (zh) | 2021-03-26 |
Family
ID=71092434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010580261.0A Pending CN112559051A (zh) | 2019-09-25 | 2020-06-23 | 使用脉动阵列和融合操作的深度学习实现方式 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20210089316A1 (zh) |
EP (1) | EP3798928A1 (zh) |
CN (1) | CN112559051A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113344183A (zh) * | 2021-06-03 | 2021-09-03 | 沐曦集成电路(上海)有限公司 | 一种在计算系统中实现卷积运算的方法及计算系统 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10671349B2 (en) * | 2017-07-24 | 2020-06-02 | Tesla, Inc. | Accelerated mathematical engine |
US11893393B2 (en) | 2017-07-24 | 2024-02-06 | Tesla, Inc. | Computational array microprocessor system with hardware arbiter managing memory requests |
US11561791B2 (en) | 2018-02-01 | 2023-01-24 | Tesla, Inc. | Vector computational unit receiving data elements in parallel from a last row of a computational array |
WO2020191920A1 (en) * | 2019-03-25 | 2020-10-01 | Huawei Technologies Co., Ltd. | Storing complex data in warp gprs |
KR102260882B1 (ko) * | 2019-05-29 | 2021-06-08 | 아주대학교산학협력단 | 순차적인 이미지 기반의 상호작용력 측정 방법 및 장치 |
US11842169B1 (en) | 2019-09-25 | 2023-12-12 | Amazon Technologies, Inc. | Systolic multiply delayed accumulate processor architecture |
US11816446B2 (en) * | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
US11467806B2 (en) | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
CN110991619A (zh) * | 2019-12-09 | 2020-04-10 | Oppo广东移动通信有限公司 | 神经网络处理器、芯片和电子设备 |
US11500680B2 (en) * | 2020-04-24 | 2022-11-15 | Alibaba Group Holding Limited | Systolic array-friendly data placement and control based on masked write |
US11308027B1 (en) | 2020-06-29 | 2022-04-19 | Amazon Technologies, Inc. | Multiple accumulate busses in a systolic array |
CN113076521B (zh) * | 2021-06-03 | 2021-09-21 | 沐曦集成电路(上海)有限公司 | 一种基于gpgpu可重构架构的方法及计算系统 |
US11675592B2 (en) * | 2021-06-17 | 2023-06-13 | International Business Machines Corporation | Instruction to query for model-dependent information |
US11880682B2 (en) | 2021-06-30 | 2024-01-23 | Amazon Technologies, Inc. | Systolic array with efficient input reduction and extended array performance |
US20230129750A1 (en) | 2021-10-27 | 2023-04-27 | International Business Machines Corporation | Performing a floating-point multiply-add operation in a computer implemented environment |
US20230185873A1 (en) * | 2021-12-10 | 2023-06-15 | Intel Corporation | Method and apparatus for separable convolution filter operations on matrix multiplication arrays |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10474458B2 (en) * | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US10186011B2 (en) * | 2017-04-28 | 2019-01-22 | Intel Corporation | Programmable coarse grained and sparse matrix compute hardware with advanced scheduling |
-
2019
- 2019-09-25 US US16/582,433 patent/US20210089316A1/en not_active Abandoned
-
2020
- 2020-06-11 EP EP20179527.5A patent/EP3798928A1/en active Pending
- 2020-06-23 CN CN202010580261.0A patent/CN112559051A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113344183A (zh) * | 2021-06-03 | 2021-09-03 | 沐曦集成电路(上海)有限公司 | 一种在计算系统中实现卷积运算的方法及计算系统 |
Also Published As
Publication number | Publication date |
---|---|
US20210089316A1 (en) | 2021-03-25 |
EP3798928A1 (en) | 2021-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3798928A1 (en) | Deep learning implementations using systolic arrays and fused operations | |
US20230236834A1 (en) | Systems and methods for performing 16-bit floating-point matrix dot product instructions | |
US11675590B2 (en) | Systems and methods for performing instructions to transform matrices into row-interleaved format | |
CN110955453A (zh) | 用于执行矩阵压缩和解压缩指令的系统和方法 | |
CN110968346A (zh) | 用于执行用于快速元素解包到二维寄存器中的指令的系统 | |
CN113050990A (zh) | 用于矩阵操作加速器的指令的装置、方法和系统 | |
CN114153498A (zh) | 用于加载片寄存器对的系统和方法 | |
CN110909883A (zh) | 用于执行指定三元片逻辑操作的指令的系统和方法 | |
CN114625418A (zh) | 用于执行快速转换片并且将片用作一维向量的指令的系统 | |
CN113849224A (zh) | 用于移动数据的指令的装置、方法和系统 | |
CN112148251A (zh) | 跳过无意义的矩阵运算的系统和方法 | |
US20200210188A1 (en) | Systems and methods for performing matrix row- and column-wise permute instructions | |
US20220100508A1 (en) | Large-scale matrix restructuring and matrix-scalar operations | |
CN111752618A (zh) | 浮点加法器的交错流水线 | |
CN110909882A (zh) | 用于执行水平铺块操作的系统和方法 | |
US11972230B2 (en) | Matrix transpose and multiply | |
CN114691217A (zh) | 用于8位浮点矩阵点积指令的装置、方法和系统 | |
CN114675883A (zh) | 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 | |
CN111752605A (zh) | 使用浮点乘法-累加结果的模糊-j位位置 | |
US20210406016A1 (en) | Matrix data scatter and gather by row | |
CN114675888A (zh) | 用于加载矩阵操作加速器瓦片的指令的装置、方法和系统 | |
CN112149050A (zh) | 用于增强的矩阵乘法器架构的装置、方法和系统 | |
CN110826722A (zh) | 用于通过排序来生成索引并基于排序对元素进行重新排序的系统、装置和方法 |
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 |