CN108268320A - 用于网络规模k均值群集的硬件加速器架构和模板 - Google Patents
用于网络规模k均值群集的硬件加速器架构和模板 Download PDFInfo
- Publication number
- CN108268320A CN108268320A CN201711282647.8A CN201711282647A CN108268320A CN 108268320 A CN108268320 A CN 108268320A CN 201711282647 A CN201711282647 A CN 201711282647A CN 108268320 A CN108268320 A CN 108268320A
- Authority
- CN
- China
- Prior art keywords
- sparse
- matrix
- tile
- supersparsity
- tiles
- 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 claims abstract description 477
- 230000015654 memory Effects 0.000 claims abstract description 193
- 238000012545 processing Methods 0.000 claims abstract description 118
- 238000000034 method Methods 0.000 claims description 85
- 238000004422 calculation algorithm Methods 0.000 claims description 60
- 238000003860 storage Methods 0.000 claims description 53
- 238000013523 data management Methods 0.000 claims description 21
- 238000000926 separation method Methods 0.000 claims description 16
- 230000006399 behavior Effects 0.000 claims description 6
- 239000013598 vector Substances 0.000 description 255
- 239000000872 buffer Substances 0.000 description 78
- 238000010586 diagram Methods 0.000 description 32
- 238000013461 design Methods 0.000 description 27
- 238000004458 analytical method Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 18
- 239000013001 matrix buffer Substances 0.000 description 18
- 238000005516 engineering process Methods 0.000 description 17
- 230000014509 gene expression Effects 0.000 description 16
- 230000002776 aggregation Effects 0.000 description 14
- 238000004220 aggregation Methods 0.000 description 14
- 230000000903 blocking effect Effects 0.000 description 12
- 230000008859 change Effects 0.000 description 12
- 238000009826 distribution Methods 0.000 description 12
- 238000010801 machine learning Methods 0.000 description 12
- 230000006835 compression Effects 0.000 description 11
- 238000007906 compression Methods 0.000 description 11
- 238000005457 optimization Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 238000007792 addition Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 9
- 230000001788 irregular Effects 0.000 description 9
- 230000004048 modification Effects 0.000 description 9
- 238000012986 modification Methods 0.000 description 9
- 239000006185 dispersion Substances 0.000 description 7
- 238000011068 loading method Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 238000013519 translation Methods 0.000 description 7
- 230000011218 segmentation Effects 0.000 description 6
- 241001409283 Spartina mottle virus Species 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 241001269238 Data Species 0.000 description 4
- 230000009471 action Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000007704 transition Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000005538 encapsulation Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000012935 Averaging Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000009833 condensation Methods 0.000 description 2
- 230000005494 condensation Effects 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000006116 polymerization reaction Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000406668 Loxodonta cyclotis Species 0.000 description 1
- 208000010378 Pulmonary Embolism Diseases 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 241000428919 Sweet potato mosaic virus Species 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000007621 cluster analysis Methods 0.000 description 1
- 230000019771 cognition Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- PCHJSUWPFVWCPO-UHFFFAOYSA-N gold Chemical compound [Au] PCHJSUWPFVWCPO-UHFFFAOYSA-N 0.000 description 1
- 239000010931 gold Substances 0.000 description 1
- 229910052737 gold Inorganic materials 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000006317 isomerization reaction Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000006911 nucleation Effects 0.000 description 1
- 238000010899 nucleation Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000005086 pumping Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000003756 stirring Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000032258 transport Effects 0.000 description 1
- 238000012384 transportation and delivery Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
- 239000002699 waste material Substances 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2237—Vectors, bitmaps or matrices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
-
- 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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/232—Non-hierarchical techniques
- G06F18/2321—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
- G06F18/23213—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
Abstract
本发明涉及用于网络规模k均值群集的硬件加速器架构和模板。描述了用于群集的硬件加速器架构。一种硬件加速器包括稀疏瓦片和非常稀疏/超稀疏瓦片。一个或多个稀疏瓦片执行用于涉及矩阵的群集任务的操作。每一个稀疏瓦片包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作。所述非常稀疏/超稀疏瓦片中的每一个执行用于涉及所述矩阵的群集任务的操作,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
Description
技术领域
本公开总体上涉及电子器件,并且更具体地,实施例涉及用于诸如网络规模k均值群集之类的群集任务的硬件加速器架构和模板。
背景技术
近年来,来自机器学习的相对新生的领域的算法已经被广泛地应用于许多类型的实际应用,导致诸如自动驾驶车辆、改进的因特网搜索引擎、话音、音频和/或视觉识别系统、人类健康数据和基因组分析、推荐系统、欺诈检测系统等之类的技术。这些算法的使用的增长已经部分地被由人类和非人类二者产生的数据的量和类型的大幅增加所加速。随着可用于分析的数据的量已经飞涨,对机器学习的兴趣也已经飞涨。
在许多不同情境中,普遍使用大矩阵来实现机器学习算法。这些矩阵中的许多矩阵是“稀疏”矩阵,这是因为它们具有显著数目的“空”或“背景”值——例如,零值。例如,社交图可以被建模为具有与在数据集中存在人同样多的行和列的矩阵(例如,“邻近性矩阵”),其中矩阵的单元中的元素表示与每一对人之间的连接有关的一些信息。
当存储和利用稀疏矩阵时,使用可利用矩阵的稀疏结构的专门算法和数据结构是有用的(并且有时是严格必要的)。这是因为:随着由于大量的零的存在而实际上“浪费”处理和储存资源,使用规则的密集矩阵结构和算法执行矩阵操作将在被应用于大的稀疏矩阵时相当低效。因此,可以容易地压缩稀疏数据以要求显著更少的储存,并且可以实现特定算法和计算架构以适应这些经压缩的结构。
然而,包括许多机器学习算法的涉及矩阵操控的算法往往在计算上是昂贵的,这是由于它们可能涉及利用巨大量的数据执行巨大数目的非平凡操作。由此,尽可能高效地实现这些算法是极为重要的,这是由于任何小的低效性因计算的大规模而被迅速放大。
例如,集群分析(其也被称作群集)是以下述这样的方式对对象集合进行成组的任务:相比于其他集群中的那些对象,相同组(或“集群”)中的对象更类似于彼此。群集可以采用多种不同算法,但典型地涉及:分析大的多维数据集,其常常被表示为矩阵:以及执行涉及数据的多种计算(例如,距离、密度)。由于计算以及常常大量的数据,许多群集算法耗费长时间来执行,这可能阻止在将要求近实时更新的许多应用中使用群集。
相应地,可增强涉及稀疏矩阵数据的这些操作的性能的技术和处理架构是强烈期望的。
附图说明
可以通过参照以下描述和用于图示一些实施例的附图来最佳地理解本发明。在附图中:
图1是图示了根据一些实施例的用于网络规模k均值群集的硬件加速器架构的框图。
图2是图示了根据一些实施例的数据和在该数据内识别的示例性集群的框图。
图3是图示了可根据一些实施例实现的用于小批量k均值群集的示例性算法的框图。
图4是图示了示例性稀疏矩阵、非常稀疏矩阵和超稀疏矩阵的框图。
图5是图示了根据一些实施例的执行网络规模k均值群集的硬件加速器的附加部件的框图。
图6是图示了根据一些实施例的用于利用硬件加速器架构发起网络规模k均值群集的流程的流程图。
图7是图示了根据一些实施例的用于利用硬件加速器架构执行网络规模k均值群集的另一流程的流程图。
图8图示了根据一些实施例的其中加速器通过高速缓存一致性接口而通信耦合到多个核的示例性实现方式。
图9图示了根据一些实施例的加速器的另一视图。
图10图示了根据一些实施例的由处理元件执行的示例性操作集合。
图11a描绘了根据一些实施例的稀疏矩阵A与向量x之间的产生向量y的乘法的示例。
图11b图示了根据一些实施例的其中每一个值被存储为(值,行索引)对的矩阵A的CSR表示。
图11c图示了根据一些实施例的使用(值,列索引)对的矩阵A的CSC表示。
图12a、12b和12c图示了每一个计算模式的伪代码,其中:
图12a图示了根据一些实施例的面向行的稀疏矩阵密集向量乘法(spMdV_csr)。
图12b图示了根据一些实施例的面向列的稀疏矩阵稀疏向量乘法(spMspC_csc)。
图12c图示了根据一些实施例的扩缩和更新操作(scale_update)。
图13图示了根据一些实施例的用于数据管理单元和处理元件的一个实现方式的处理流程。
图14a突出显示了根据一些实施例的用于spMspV_csc和scale_update操作的路径。
图14b图示了根据一些实施例的用于spMdV_csr操作的路径。
图15a-15b示出了将图表表示为邻近性矩阵的示例。
图15c图示了根据一些实施例的顶点程序。
图15d图示了根据一些实施例的用于执行顶点程序的示例性程序代码。
图15e示出了根据一些实施例的广义稀疏矩阵向量乘法(GSPMV)公式表示。
图16图示了根据一些实施例的用于GSPMV的设计框架的一个实现方式。
图17示出了根据一些实施例的用于GSPMV的架构模板的一个实现方式。
图18图示了根据一些实施例的每一个加速器瓦片的操作的总结。
图19a图示了根据一些实施例的对模板的一个实现方式的可定制参数进行总结的表。
图19b图示了根据一些实施例的框架的一个实现方式的调谐考虑,该框架执行自动调谐,以确定要用于定制硬件架构模板的最佳设计参数,以便针对输入顶点程序和(可选地)图表数据而优化它。
图20图示了根据一些实施例的压缩行储存(CRS,有时缩写为CSR)稀疏矩阵格式。
图21示出了根据一些实施例的使用CRS数据格式的稀疏矩阵-密集向量乘法的一个实现方式中涉及的示例性步骤。
图22图示了根据一些实施例的包括加速器逻辑管芯和DRAM管芯的一个或多个堆叠的加速器的一个实现方式。
图23图示了根据一些实施例的通过DRAM管芯的堆叠从顶部视角取向的加速器逻辑芯片的一个实现方式。
图24提供了根据一些实施例的包含两个缓冲器、两个64比特乘法-加法算术逻辑单元(ALU)和控制逻辑的点积引擎(DPE)的高级概览。
图25图示了根据一些实施例的用于大稀疏矩阵计算的成块方案。
图26图示了根据一些实施例的块描述符的格式。
图27图示了根据一些实施例的在具有仅一个堆叠动态随机存取存储器(DRAM)数据通道和四字数据突发的系统上将块描述符用于适合于单个点积引擎的缓冲器内的两行矩阵。
图28图示了根据一些实施例的点积引擎中的硬件的一个实现方式。
图29图示了根据一些实施例的进行捕获的匹配逻辑3020单元的内容。
图30示出了根据一些实施例的支持稀疏矩阵-稀疏向量乘法的点积引擎设计的细节。
图31图示了根据一些实施例的使用具体值的示例多遍方法。
图32示出了根据一些实施例的可以如何组合上面描述的稀疏-密集和稀疏-稀疏点积引擎。
图33是根据一些实施例的寄存器架构的框图。
图34A是图示了根据一些实施例的示例性按序流水线和示例性寄存器重命名乱序发出/执行流水线二者的框图。
图34B是图示了根据一些实施例的要包括在处理器中的按序架构核示例性实施例和示例性寄存器重命名乱序发出/执行架构核二者的框图。
图35A-B图示了更具体示例性按序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)之一:
图35A是根据一些实施例的单个处理器核连同其到管芯上互连网络的连接和其局部2级(L2)高速缓存子集的框图。
图35B是根据一些实施例的图35A中的处理器核的一部分的扩展视图。
图36是根据一些实施例的可具有多于一个核、可具有集成存储器控制器以及可具有集成图形的处理器的框图。
图37-40是示例性计算机架构的框图:
图37示出了根据一些实施例的系统的框图。
图38是根据一些实施例的第一更具体示例性系统的框图。
图39是根据一些实施例的第二更具体示例性系统的框图。
图40是根据一些实施例的SoC的框图。
图41是根据一些实施例的将使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令进行对比的框图。
具体实施方式
以下描述描述了用于群集(诸如网络规模k均值群集)的硬件加速器架构。在该描述中,可以阐述许多具体细节(诸如逻辑实现、系统部件的类型和相互关系等)以便提供对一些实施例的更透彻理解。然而,本领域技术人员将领会的是,可以在没有这种具体细节的情况下实践本发明。在其他实例中,未详细示出控制结构、门级电路和/或全软件指令序列,以便不使本发明模糊。本领域技术人员在有所包括的描述的情况下将能够实现适当功能而无需不适当的实验。
说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示了:所描述的实施例可以包括特定特征、结构或特性,但可能不是每个实施例都必然包括该特定特征、结构或特性。此外,这种短语不必然指代相同实施例。此外,当结合实施例描述特定特征、结构或特性时,主张的是,结合其他实施例(不论是否被显式地描述)影响这种特征、结构或特性处于本领域技术人员的认知内。
本文可以使用具有虚线边界(例如,大虚线、小虚线、点线和点)的括起来的文本和框以图示将附加特征添加到本发明实施例的可选操作。然而,这种标记法不应当被理解成意味着这些是仅有选项或可选操作和/或具有实线边界的框在本发明的某些实施例中不是可选的。
遍及该描述,在附图标记(对应于所图示的实体)的结尾处使用字母字符不意在指示必然地必须存在任何特定数目的该实体,而仅指示该实体是潜在地许多类似实体之一。例如,处理元件506A-506Z包括“A”和“Z”字母后缀二者,这意味着可能存在两个处理元件、三个处理元件、十六个处理元件等。此外,如上面描述的那样,虚线的使用指示了:实体中的一个或多个可能是可选的;因此,在一些实施例中,可以利用仅一个稀疏瓦片112A,而在其他实施例中,可以利用多个稀疏瓦片112A-112N。附加地,针对不同实体将不同字母字符用作参考后缀不意在指示必须存在不同数目的这些实体。例如,尽管稀疏瓦片112A-112N和存储器单元116A-116M包括不同字母后缀(即,“N”和“M”),但在各种实施例中可能存在相同数目(或不同数目)的这些字母后缀。类似地,针对不同实体将相同字母字符用作参考后缀不意在指示必须存在相同数目的这些实体,尽管在一些实施例中可能存在相同数目的这些实体。
本文公开的实施例提供了一种用于高效地执行网络规模k均值群集的异构硬件加速器架构。在一些实施例中,加速器可以利用稀疏瓦片和非常稀疏/超稀疏瓦片二者,以通过使稀疏瓦片的集合执行用于矩阵的稀疏的部分的操作且使非常稀疏/超稀疏瓦片的集合执行用于矩阵的非常稀疏或超稀疏的部分的操作,来执行矩阵中的数据的k均值群集。
在一些实施例中,可以根据使规则的“稀疏”矩阵部分能够被极为高效地处理的第一架构来对稀疏瓦片进行架构,并且在一些实施例中,可以根据使非常稀疏或超稀疏矩阵部分能够被极为高效地处理的第二架构来对非常稀疏/超稀疏瓦片进行架构。
可以对由(一个或多个)稀疏瓦片和(一个或多个)非常稀疏/超稀疏瓦片生成的输出(或结果)进行组合,以产生原始请求的k均值群集操作的最终结果。相应地,利用分离的矩阵处理架构(经由瓦片)的实施例可以提供与使用仅一个这种架构的解决方案相比的实质性能提高和与通用矩阵处理系统相比的极大性能提高。
此外,本文公开的实施例提供了可以用于显著地改进基于现场可编程门阵列(FPGA)的系统上的k均值群集(例如,具有小批量和投影梯度优化)的处理效率的可定制硬件加速器架构模板。
图1是图示了根据一些实施例的用于网络规模k均值群集的硬件加速器架构100的框图。图1图示了高级别处的示例性硬件加速器101的各种部件,以虑及清楚和容易理解。图1包括与一个或多个存储器单元116A-116M耦合(例如,使用一个或多个互连件)的一个或多个稀疏瓦片112A-112N,其中针对(一个或多个)存储器单元116A-116M与(一个或多个)稀疏瓦片112A-112N之间的高带宽数据传送而优化接口和/或存储器。
图1还包括与一个或多个存储器单元118A-118M耦合(例如,使用一个或多个互连件)的一个或多个非常稀疏/超稀疏瓦片114A-114N,其中针对存储器单元118A-118M与(一个或多个)非常稀疏/超稀疏瓦片114A-114N之间的低时延、随机、高度并行的数据传送而优化接口/存储器。
图1还图示了群集计算子系统(CCS)130,包括跨瓦片精简引擎132和最接近中心确定单元134(也被称作最接近集群确定单元),与(一个或多个)稀疏瓦片112A-112N和(一个或多个)非常稀疏/超稀疏瓦片114A-114N通信耦合。在一些实施例中,CCS 130可以用于在执行某些操作(诸如,用于执行k均值群集的操作)时支持(一个或多个)稀疏瓦片112A-112N和(一个或多个)非常稀疏/超稀疏瓦片114A-114N。
在一些实施例中,(一个或多个)稀疏瓦片112A-112N、(一个或多个)非常稀疏/超稀疏瓦片114A-114N和CCS 130均可以被实现在相同微芯片或硬件处理器上,该相同微芯片或硬件处理器可以是加速器设备(或者是其一部分)。
在一些实施例中,加速器101可以接收执行涉及一个或多个矩阵的数据的一个或多个计算任务的请求(或命令)。例如,中央处理单元(CPU)可以将执行机器学习任务(诸如执行群集、找到矩阵的点积、执行矩阵乘法等)的指令卸载到加速器101。
在一些实施例中,加速器101利用提供用于执行群集的增强处理的架构100。图2是图示了根据一些实施例的数据205和在该数据内识别的示例性集群215A-215C的框图。群集是非监督式方法(即,不要求加标签的“训练”数据),其中过程可以识别相似数据点的组并将这些数据点“群集”成集群。例如,以二维格式将数据集205示为包括多个点。群集算法可以分析该数据的各方面并自动找到用于创建在某个方面中类似的这些数据点的组的方式。相应地,可以如经群集的数据210的2维描绘中所示的那样确定集群215A-215C的一个可能集合。为了执行这种群集,许多算法使用以矩阵(或类似数据结构)的形式存在的数据集并迭代地扫描通过这些数据点,从而将数据点指派且可能重新指派给不同集群,直到达到结束条件(即,停滞)。
一种非常流行且公知的群集算法被称作“k均值”群集,其是将数据非监督地群集成集群集合,其中集合的数目被称作“k”。现代的基于网络的应用或者关于或涉及经由网络而可用的数据的应用将k均值群集操作用于许多种场景,诸如新闻聚合、搜索结果成组等。在这些部署中的许多部署中,由于网络上的信息的不断改变的性质,可能需要频繁地更新群集,以便提供“当前”结果。相应地,能够尽可能高效地执行这种操作是至关重要的。
存在k均值算法的若干变型。对于网络规模应用,典型地,数据集是非常大的稀疏矩阵,其中矩阵的行可以表示数据样本(例如,网页)并且列表示特征(例如,出现在网页中的字的属性)。特别好地适于这种数据集的一种k均值算法变型将k均值算法修改成包括小批量以及投影梯度优化,分别地,其与原始k均值算法相比将计算成本降低几个量级并引发附加的稀疏性。该k均值变型的使用可以被称作网络规模k均值群集。
例如,图3是图示了可根据一些实施例实现的用于小批量k均值群集的示例性算法的框图。使用伪代码而示出的该算法300包括对流行k均值群集算法的两个修改,以解决针对在面向用户的网络应用中遇到的时延、可扩缩性和稀疏性的极端要求。第一,引入了“小批量”优化,其与经典批量算法相比将计算成本降低几个量级,同时产生比在线随机梯度下降(SGD)更好的解决方案。第二,引入了“投影梯度下降”优化,其提供了提高的稀疏性,这意味着集群之间的差异可以被更容易且准确地识别。
特别地,该伪代码算法300包括将再次关于图5引用的行号1-15。该算法300随机指派数据点作为中心集合(在行2处),且从行4-15执行多(“t”)次迭代以改善数据点到“k”数目的集群的指派。在行5处,从数据集X中选择多(“b”)个样本,并且从行6-8,将这些样本数据点中的每一个“指派”给其最接近于的中心。从行9-14,对于这些样本数据点中的每一个,递增针对其当前指派的中心的计数器(在行11处),针对该中心更新每中心的学习速率(在行12处),并且采取“梯度步长”以基于经更新的学习速率来移动中心。在结尾处,数据点中的每一个被指派给“k”个集群之一。
在许多情况下,被群集的数据集(常被表示为矩阵)是“稀疏的”,因为它们包括大量的“空”(或零)值。这些数据集也常常是偏态的,使得这些数据集的某些部分比其他部分更稀疏或更不稀疏。因此,稀疏矩阵数据集可能具有偏态的非零分布,其中,例如,矩阵的一部分是稀疏的(例如,针对每列或行具有特定阈值数目的非零)并且其他部分是非常稀疏的(例如,针对每列或行具有仅几个非零)或超稀疏的(例如,具有空列或行,使得非零的数目可以小于矩阵中的行和列的数目)。
此外,偏态的非零分布可能由遵循幂律分布的自然图表产生,诸如其中图表具有几个“流行”节点,该几个“流行”节点具有到其他节点的许多边,而其他节点中的大多数具有仅几个边。此外,在矩阵列和行分别表示特征和样本的机器学习数据集中,典型的是,一些特征将比其他特征更频繁地出现,从而导致跨列的偏态非零。类似地,在推荐系统中使用的用户/项目矩阵中,一些用户和/或项目比其他用户和/或项目更流行。因此,流行用户/项目将形成总体稀疏矩阵中的“较密集”行/列。
对于“稀疏”矩阵连同“非常稀疏”和“超稀疏”矩阵的进一步讨论,我们转至图4,图4是图示了根据一些实施例的示例性稀疏矩阵405、非常稀疏矩阵410和超稀疏矩阵415的框图。
出于该描述的目的,可以在不同类型的稀疏矩阵之间进行区分。存在用于将数据结构(例如,矩阵、图表)标示为稀疏的多种方式。例如,如果nnz=O(n),则图表可以被称作稀疏的,其中nnz是图表中的边的数目并且n是顶点的数目。
用于在稀疏矩阵与非稀疏(或“密集”)矩阵之间进行辨别的另一种方式基于矩阵的元素(或矩阵的部分)中多少为零。如本文所使用,“稀疏”矩阵或向量是下述矩阵或向量:其中,区中的大量元素为零,使得该区中零的数目/百分比满足或超过阈值量(例如,大于10%为零、25%或更多为零等)。因此,在一些场景中,当其元素中至少一半为零时,矩阵或向量可以是稀疏的,尽管在其他场景中,阈值可以不同——例如,如果其元素中至少百分之三十为零、其元素中百分之六十为零等,则矩阵或向量是稀疏的。类似地,“密集”矩阵或向量是其中特定空间中的非零元素的数目不超过该阈值的矩阵或向量。
可以基于零值元素的数目除以元素的总数(例如,对于m×n矩阵,为m×n)来定义矩阵/向量的“稀疏性”。因此,在一个实现方式中,如果其稀疏性高于指定阈值,则矩阵/向量被视为“稀疏的”。
“稀疏”矩阵和向量的类别可以进一步被分解成子段,例如“规则”稀疏矩阵、“非常稀疏”矩阵和“超稀疏”矩阵。
例如,一些文献将稀疏数据结构的子集定义为当对于图表而言条件nnz<n成立(这在数值线性代数中相当罕见,但常发生在图表上的计算中,特别是在并行图表计算中)时是“超稀疏的”。换句话说,超稀疏矩阵可以是下述矩阵:其中,矩阵元素的极大比为零,使得其稀疏性大于特定阈值。当然,用于确定矩阵是否超稀疏的阈值可以基于特定应用而不同。例如,当矩阵的稀疏性为至少80%或90%或95%或97%或99%或99.5%等时,矩阵可以被视为超稀疏的。
被视为“非常稀疏”矩阵的另一类别的稀疏矩阵可以被定义为满足针对“规则”稀疏矩阵的阈值但不满足要被视为“超稀疏”矩阵的稀疏性阈值。因此,“非常稀疏”矩阵可以是具有满足或超过第一阈值(例如,“规则”稀疏阈值)但不满足或超过第二阈值(例如,超稀疏阈值)的稀疏性的矩阵。再一次,精确公式表示可以基于特定应用而变化,但在一些实施例中,“规则”稀疏矩阵可以是具有50-70%(即,最小阈值50%和最大阈值75%)稀疏性的矩阵,“非常稀疏”矩阵可以是具有大于70%但小于98%的稀疏性的矩阵,并且超稀疏矩阵可以是具有大于98%的稀疏性的矩阵。作为另一示例,规则稀疏矩阵可以是具有25-75%之间的稀疏性的矩阵,非常稀疏矩阵可以是具有75-95%的稀疏性的矩阵,并且超稀疏矩阵可以是具有超过95%的稀疏性的矩阵。因此,应当理解,存在许多不同方式来对准特定阈值。
相应地,在图4中,图示了示例性稀疏矩阵405的小部分(40000×40000)以传达大量的其值是零(这里,56个值中的25个),而示例性“非常稀疏”矩阵410的小部分包括更多零值(这里,56个值中的44个),而超稀疏矩阵415的所图示的小部分包括非常大量的零(这里,56个值中的54个)。假定这里示出的零和非零的分布完美地代表这些矩阵中的其余矩阵,则所涉及的稀疏性阈值的一个可能分解可以是:“规则”稀疏矩阵是至少20%稀疏但小于50%稀疏,“非常稀疏”矩阵是至少50%稀疏但不大于90%稀疏,并且“超稀疏”矩阵是大于90%稀疏。
除了基于其稀疏性比率来对矩阵的稀疏进行分类外,在一些场景中,稀疏类型(或类别)可以(整体或部分地)基于某个数目的行或列是否完全为空。例如,在一些实施例中,非常稀疏或超稀疏矩阵可以被定义为包括特定数目的为空的行和/或列的矩阵。稀疏类型的该确定可以与矩阵的特定稀疏性比率无关(例如,在一些情况下,具有非常大的稀疏性比率的矩阵可能在其不具有必备阈值数目的空行和/或列的情况下没有资格成为非常稀疏或超稀疏矩阵),或者该确定可以是稀疏性比率和行/列空性准则二者的组合或其中任一个。
转回到图1,由于网络规模k均值群集算法典型地利用矩阵和向量操作(以及其他操作),因此一些实施例使用包括针对k均值算法所需的附加功能的显式支持的矩阵/向量加速器架构100(例如,群集支持单元136A-136M(CSU)和/或CCS 130)。此外,实施例可以将该架构实现为可定制硬件模板,可以从中导出经优化的定制实例(即,给定设计参数,则该模板可以输出架构的寄存器传送语言(RTL)实现)。
为了易于理解,我们现在呈现架构100的示例性使用的高级概览。在图1中,利用梯度背景示出了所图示的矩阵102(例如,表示要群集的数据集),在该梯度背景中,具有较深阴影的左侧指示矩阵102的总体上稀疏的部分(或量),这意味着这些部分可以具有小的不稀疏的子部分,但是作为整体,这些部分典型地比不稀疏更稀疏,包括阈值数目的稀疏行/列等。类似地,所图示的矩阵102的具有较浅阴影的右侧指示矩阵102的总体上“非常稀疏”和/或“超稀疏”的部分(或量)。
存在各种技术,其中,对于许多不同矩阵操作,可以以“块”(或“组块”)分离地处理/操作矩阵的子部分,并且可以组合(或聚合)这些块的个体处理的结果以产生合适结果。
相应地,在圆“2”处,加速器可以执行矩阵分割,以将矩阵102拆分成稀疏块106A-106N的集合和非常稀疏/超稀疏块108A-108M的集合。因此,加速器可以确定矩阵的块边界,使得矩阵的具有类似性质的部分被置于相同块中。加速器的各种部件可以执行该分割,包括但不限于控制单元(未图示)或者瓦片中的一个或多个(稀疏或非常稀疏/超稀疏)。此外,在一些实施例中,与加速器分离的设备可以执行分割,诸如外部控制单元、中央处理单元(CPU)等。
在各种实施例中,稀疏块106A-106N中的每一个的大小可以相同或不同,非常稀疏/超稀疏块108A-108M集合中的每一个块的大小可以相同或不同,并且稀疏块106A-106N和非常稀疏/超稀疏块108A-108M的大小可以相同或不同。
附加地,非常稀疏/超稀疏块108A-108M的集合和稀疏块106A-106N的集合中的块的数目可以相同或不同,并且每一个集合内包括的矩阵数据的量可以相同或不同。例如,如所图示的那样,稀疏块106A-106N中的每一个的大小大于非常稀疏/超稀疏块108A-108M的大小。
然而,在一些实施例中,特定块的大小可以基于将对其执行动作的特定类型的瓦片的性质而选择,这将在本文中稍后更加详细地讨论。
在由圆“2”表示的分割期间,在一些实施例中,加速器还可以执行优化以改进块的处理效率。作为示例,在一些实施例中使用的一个优化包括针对每一个块改变矩阵格式(或表示)。例如,在一些实施例中,每一个超稀疏块以双倍压缩的格式(例如,如下面所讨论,双倍压缩稀疏列(DCSC)格式)重新格式化,并且在一些实施例中,可以以面向行的格式将所识别的“瘦”且高的矩阵块(例如,具有少量列但许多行)重新格式化成矩阵表示以避免存储器分散。在一些实施例中,其他优化可以包括:优化块的调度以用于处理以及产生供异构架构使用的调度暗示。
在此时,在一些实施例中,加速器可以使一个或多个稀疏瓦片112A-112N使用稀疏块106A-106N的集合执行用于群集的操作,且进一步使该一个或多个非常稀疏/超稀疏瓦片114A-114N使用非常稀疏/超稀疏块108A-108M执行用于群集的操作。在一些实施例中,这包括:在圆“3A”处,使稀疏块106A-106N(以原始矩阵格式存在、以压缩矩阵格式存在等)被置于一个或多个存储器单元116A-116M中;以及在圆“3B”处,使非常稀疏/超稀疏块108A-108M被置于一个或多个存储器单元118A-118M中。再一次,在一些实施例中,这些操作(在圆“3A”和“3B”处)可以由加速器执行,但在其他实施例中,它们可以由不同的设备(例如,外部控制单元、CPU)执行。
在圆“4A”和“4B”处,加速器然后可以使(一个或多个)稀疏瓦片112A-112N开始使用已针对高带宽而优化的存储器接口120对稀疏块106A-106N操作,且使(一个或多个)非常稀疏/超稀疏瓦片114A-114N开始使用已针对低时延、随机、短和/或并行的请求而优化的存储器接口122对非常稀疏/超稀疏块108A-108M操作。下面将呈现与这些特定架构有关的细节。然而,利用使用全部两种类型的瓦片的该异构架构,(一个或多个)稀疏瓦片112A-112N和(一个或多个)非常稀疏/超稀疏瓦片114A-114N二者可以高效地处理其相应块,以产生可被组合以创建针对原始请求的计算任务的最终结果的结果。
在许多系统中,“原始”矩阵可以被存储为二维阵列。阵列中的每一个条目表示矩阵的元素ai,j且通过两个索引i(典型地,行索引)和j(典型地,列索引)而访问。对于m×n矩阵,以该格式存储矩阵所需的存储器的量与m×n稍微成比例,尽管还需要存储附加数据(例如,矩阵的维度、数据结构“簿记”数据)。
在稀疏矩阵的情况下,可以通过仅存储非零条目来获得显著的存储器精简。已经开发各种数据结构以恰做到这一点,并且可以利用这些结构中的不同结构,基于非零条目的数目和分布,这可能导致在与基本的基于阵列的方法相比时存储器中的显著节省。然而,折衷发生在下述各项中:访问个体元素可能变得更复杂(例如,要求由于遵循指针、计算存储器地址等所致的附加存储器访问);以及可能需要附加数据结构以能够以无损方式恢复原始矩阵。
例如,存在许多不同压缩矩阵格式,包括但不限于压缩稀疏列(CSC)、压缩稀疏行(CSR)、关键字词典(DOK)、列表的列表(LL)、双倍压缩稀疏列(DCSC)等。将关于图11b和图11c进一步详细地呈现CSC和CSR的示例;然而,我们现在将简要讨论它们。
在CSC中,可以使用我们将称为“colptr”的数据结构(例如,阵列、列表、向量)来表示矩阵(例如,6×4矩阵,具有6个行和4个列),该数据结构包括四个值,每一个值表示矩阵的列并存储指向该列内的一个或多个元素的指针。每一个元素可以具有两个数据元素:第一个数据元素是矩阵中存储的特定值;以及第二个数据元素是该值在其存储在矩阵中时的索引。例如,指向“col0”(第一列)的列指针可以包括:三个元素——(7, 1)、(6, 3)和(2,4)——其指示值“7”存储在行[1](即,第二行)中,值“6”存储在行[3]中,并且值“2”存储在行[4]中。当然,在许多实现方式中,还可以存储和利用附加“簿记”类型数据(和/或数据结构)(例如,以便给元素的开始/结尾划界、针对特定列给元素的结尾划界),这将在本文中稍后进一步详细地讨论。
为了使用CSC格式的矩阵执行矩阵计算,必须首先从存储器加载“colptr”(“列指针”的简称)数据结构(即,指针/存储器地址)的值,并且必须遵循(例如,经由来自存储器的另一加载)这些指针以找到每一个对应列的特定元素。附加地,列的每一个元素可以或可以不邻接地存储在存储器中,这可能要求附加的指针追寻。例如,对于具有三个元素的特定列,这些元素可以或可以不存储在邻接存储器位置处,并且因此,可能存在附加簿记数据(例如,数据结构的下层结构数据,其可以是指针),该附加簿记数据虑及要确定的这些元素的位置。相应地,为了执行该操作,可能需要存在数据从存储器的若干“加载”——元数据/指针的加载和/或表示矩阵的值的实际元素的加载。
类似于CSC格式,CSR格式的矩阵使用类似表示,但取而代之,根据行而不是列来布置矩阵的值。因此,CSR格式的矩阵可以使用“rowptr”(“行指针”的简称)数据结构,其包括指向每一行的元素的指针。
普遍利用的另一矩阵表示是DCSC格式,其为利用指针的另一层的CSC的进一步压缩(例如,双倍压缩)的版本,其中,列指针结构中的重复可以被消除。例如,“JC”阵列(其平行于列指针阵列)提供列号,并且列指针阵列被压缩以避免CSC格式的重复。因此,DCSC表示可以被视为稀疏列的稀疏阵列,而CSC表示是稀疏列的密集阵列。
相应地,存在多种低级矩阵表示,其可以用于执行储存高效的矩阵操作,尽管可能以一些管理和利用开销(例如,指针追寻、附加加载)为代价。这些矩阵表示中的许多矩阵表示特别有益于供具有显著量的非零值的稀疏矩阵使用。
相应地,可以开发各种计算架构以优化以某些压缩格式存储的稀疏矩阵的性能。
有趣的观察结果是:尽管普遍利用的各种矩阵表示提供了存储和使用稀疏矩阵的显著益处,但对于稀疏矩阵的子集,这些矩阵表示引入了显著开销和低效性。
因此,一些类型的稀疏矩阵——尤其是具有许多(或几乎所有)非零的那些稀疏矩阵——未被先前的架构非常高效地处理。此外,已经确定:特定架构尽管对于稀疏数据而言极为高效,但可能在处理非常稀疏或超稀疏数据时被分离的架构胜过。相应地,如本文所描述,实施例可以使用异构架构,其包括用于对稀疏数据高效操作的(一个或多个)稀疏瓦片112A-112N和用于对非常稀疏/超稀疏数据高效操作的(一个或多个)非常稀疏/超稀疏瓦片114A-114N。可以将这两种类型的瓦片与附加部件(例如CSU 136A-136M、CCS 130)进行组合以实现极为高效的k均值群集。
对于进一步细节,我们转至图5,图5是图示了根据一些实施例的执行网络规模k均值群集的硬件加速器的附加部件的框图。该架构包括执行图3中所示的k均值算法300的计算的异构处理瓦片,每一个异构处理瓦片包括一个或多个处理元件506A-506Z。为了促进稀疏的、非常稀疏的、超稀疏的和/或这些中的两个或更多个的组合的输入数据集,该架构包括“热”和“冷”处理瓦片二者——即,(一个或多个)稀疏瓦片112A-112N和(一个或多个)非常稀疏/超稀疏瓦片114A-114N。处理元件506A-506Z中的每一个可以包括对执行操作的一个或多个指令加以执行的电路,且可以是或可以不是处理器核的一部分。因此,处理元件可以被认为是一种类型的硬件处理器或硬件处理器的一个部分。
作为快速概览,“热”瓦片(即,(一个或多个)稀疏瓦片112A-112N)可以用于处理(来自图3的)输入矩阵X的块,其中列(即,特征)不是非常稀疏的。因为矩阵X(且因此,M)的特征在该情况下不是非常稀疏的,所以存在被操作的密集C矩阵元素的大量重用(如图3中的行7和13那样)。因此,密集集群矩阵C列的可重用子集可以被保存在芯片上RAM中,该芯片上RAM可以包括每处理元件专用的RAM、被处理元件共享的单个RAM等。然后,DMU 510可以在从(一个或多个)存储器单元116A-116M到PE 506A-506Z(例如,在PE的寄存器内)的“x”个随机样本(稀疏矩阵M的行)中成流。PE 506A-506Z然后可以使用被保存在RAM 508中的“C”元素来执行距离计算和扩缩-更新操作(图3中的行7和13),这可以包括CCS 130的使用。
“冷”瓦片(即,(一个或多个)非常稀疏/超稀疏瓦片114A-114N)可以用于处理非常稀疏或超稀疏矩阵块,其中不存在算法300的“C”矩阵元素的许多重用。在该情况下,DMU516的聚集/分散单元518可以在“C”元素保持处于存储器系统(即,(一个或多个)存储器单元118A-118M)中时在这些“C”元素上操作。相应地,针对来自存储器系统的聚集/分散性能而优化这些“冷”瓦片。
在一些实施例中,瓦片被扩展成包括针对k均值算法300所需的其他操作(诸如,保持跟踪样本到中心映射(使用X2C RAM 502A-502B)、对多少样本属于每一个集群进行计数(使用V[]中心503A-503B或“中心值集合”)以及执行学习速率计算(使用学习速率计算器504A-504B),其涉及/对应于图3中的变量x2c、v[]和ncal)的硬件支持。实施例进一步包括CCS 130,CCS 130包括针对“精简”(或聚合)跨瓦片的数据(使用跨瓦片精简引擎134和/或瓦片上精简单元(RU)512A-512B)和对于数据元素找到最接近集群c(使用最接近中心确定单元132)的硬件支持。
我们现在更加详细地考虑图5的架构。该框图图示了根据一些实施例的硬件处理器的部件。硬件处理器可以是可执行已被另一硬件处理器(例如,CPU经由一个或多个互连件/总线/等等)卸载的操作的加速器设备。本文中稍后关于稍后的图来呈现与加速器以及用于处理稀疏矩阵的该架构有关的进一步细节。
加速器101可以包括控制单元560(或与外部控制单元560通信),控制单元560可以执行关于图1以及稍后关于图6等描述的矩阵分割操作。控制单元560可以以直接的方式以多种方式实现,这可以是经由硬件电路、软件模块、或者软件和硬件二者的组合。
作为一个示例,控制单元560可以包括矩阵分割引擎,该矩阵分割引擎可以包括矩阵性质分析引擎、块分割引擎和/或优化引擎。矩阵性质分析引擎可以执行如本文描述的初始矩阵分析,包括:确定矩阵是否是稀疏的(作为整体)和/或确定矩阵是否具有偏态的非零分布。例如,矩阵性质分析引擎可以分析诸如每行和/或列的非零的数目之类的矩阵性质或者有助于确定是否(以及如何)将矩阵分割成块的其他性质。在一些实施例中,块分割引擎可以基于由矩阵性质分析引擎执行的分析来作出分割决策,使得具有类似性质的矩阵的部分被放置在一起,这可以包括:识别各种稀疏块106A-106N和非常稀疏/超稀疏块108A-108M的矩阵内的边界。
加速器101还可以包括:一个或多个硬件调度器(未图示),其可以动态地和静态地(例如,使用上述调度暗示)确定瓦片上的矩阵块的处理调度,以改进系统的总体效率(例如,通过最小化跨瓦片的负载不平衡)。
稀疏瓦片
加速器101包括一个或多个“稀疏”瓦片112A-112N。稀疏瓦片112A-112N中的每一个包括一个或多个处理元件(PE)506A-506Z,尽管在许多实施例中每一个瓦片包括多个PE。PE506A-506Z可以被认为类似于处理器核,并且关于稍后的图更加详细地呈现其细节。
每一个稀疏瓦片(例如,稀疏瓦片112A)还可以包括随机存取存储器(RAM)508(例如,芯片上高速缓存)以及数据管理单元(DMU)510,其经由针对高带宽数据传送而优化的存储器接口120来提供对一个或多个(可能瓦片外)存储器单元116A-116M(例如,存储操作中所涉及的矩阵)的访问。
该加速器101可以利用多种技术以优化稀疏矩阵操作的执行效率。首先,在一些实施例中,加速器101可以将矩阵分割成足够小块,使得针对每一个块而操作的每一个向量子集可以适合在(一个或多个)芯片上RAM 508中,使得其可以以不规则/随机的方式本地高效访问且当针对矩阵块中的非零元素而操作时被重用。因此,在一些实施例中,可以针对非常快的低时延更新将“X”向量和/或“Y”向量(例如,分别为矩阵操作的第二操作数和矩阵操作数的结果)在芯片上保存在RAM 508中。
其次,在一些实施例中,加速器101可以对来自(一个或多个)(可能芯片外)存储器单元116A-116M的稀疏块106A-106N的行(或列)的非零进行成流,以使可用的大存储器带宽饱和。如上所解释的那样,可以针对在芯片上保存的向量子集应用所成流的非零中的每一个。因此,在一些实施例中,可以通过高带宽连接对稀疏块106A-106N的值进行成流,以供处理元件506A-506Z处理(与供处理元件506A-506Z使用个体随机访问来请求形成对照)。
相应地,这些技术对于其中每块存在充足量的非零的稀疏矩阵尤其有效。然而,该架构对于非常稀疏和超稀疏矩阵而言不那么有效。这是由于以下原因:
首先,因为非常稀疏/超稀疏矩阵具有非常少的非零,所以其引起相对较高的成块开销(例如,由于行或列指针所致)。这意味着:相对于实际非零矩阵元素的处理,处理“簿记”数据(例如不同数据结构、指针等)以及作出对它们的存储器访问存在更大开销。
附加地,因为非常稀疏/超稀疏矩阵具有每列(或行)非常少的非零,所以访问列(或行)涉及作出大量的小(或“短”)存储器访问。这对于优化存储器访问以成为高带宽(例如,以时延为代价)的架构而言不是高效的。这还意味着:在被操作的向量上存在较少数据重用。对于超稀疏矩阵,当使用双倍压缩格式(例如,DCSC)以更高效地表示空行/列时,还存在提高量的附加短读取。
此外,暴露出从必须访问列(或行)指针到访问列(或行)的非零的任何数据依赖性,这是因为存在极少非零要被访问和处理,其可能潜在地隐藏对下一列(或行)指针的访问。这导致性能受相对较大的存储器时延负面影响。因此,(一个或多个)非常稀疏/超稀疏瓦片114A-114N可以用于处理非常稀疏/超稀疏块108A-108M的集合。
非常稀疏/超稀疏瓦片
相应地,根据一些实施例,该架构可以利用(一个或多个)非常稀疏/超稀疏瓦片114A-114N执行涉及非常稀疏/超稀疏矩阵的操作。该架构可以显著地改进针对加速器101的非常稀疏/超稀疏矩阵数据(即,非常稀疏/超稀疏块108A-108M)的处理效率,这可以以多种方式(例如,使用专用集成电路(ASIC)、现场可编程门阵列(FPGA)等)实现。
如图5中所示,加速器101包括一个或多个非常稀疏/超稀疏瓦片114A-114N,每一个瓦片包括一个或多个处理元件506A-506Z(其可以与处理元件506A-506Z相同或不同)和DMU 516。DMU 516可以经由针对具有高并行性(例如,使用重度堆积(heavily banked)的存储器)的低时延随机访问(例如,与(一个或多个)稀疏瓦片112A-112N的高带宽访问(诸如成流)形成对照)而优化的存储器接口122来提供一个或多个处理元件506A-506Z对一个或多个(可能瓦片外)存储器单元118A-118M的访问。在一些实施例中,DMU 516可以包括:聚集-分散单元518,执行聚集和分散(例如,经由遵循指针的不规则访问等)而可能无需涉及请求一个或多个处理元件506A-506Z。
使用该架构,加速器101被优化以用于利用能够处置并行小/短随机存储器访问的低时延存储器子系统处理大矩阵块(例如,其可以由矩阵分割阶段生成)。
在一些实施例中,加速器101可以通过使用大块来最小化成块开销,即使这意味着针对矩阵块而操作的向量子集也变大。
在一些实施例中,加速器101因而可以使用更大的向量子集,其可以被保存在(一个或多个)存储器单元118A-118M中(与如(一个或多个)稀疏瓦片112A-112N所进行且在图5中示出的那样将其带到RAM 508上形成对照)。因此,DMU 516可以被适配(例如,经由聚集/分散单元518)成高效地处置对该向量子集的并行聚集/分散(即,不规则)存储器访问。
可选地,在一些实施例中,DMU 516可以包括:相对小的芯片上高速缓存520,捕获在该向量子集中可用的适度数据重用。例如,当访问矩阵的列的值时,在一些情况下,可能存在邻接存储器位置中存储的列的若干值。因此,取决于存储器系统的粒度(例如,针对读取而返回的数据的大小/量)和矩阵值的大小(例如,值/索引的数据类型),存储器访问可能返回下一个所需值/索引。例如,如果值和索引(表示矩阵的元素)在大小方面均为4字节,则16字节存储器访问可以检索两个元素,其中的第二个可能是下一个所需元素,这提供了空间局部性的益处。
在一些实施例中,还针对低时延而优化DMU 516,以限制对列(或行)指针追寻依赖性的暴露以及支持针对短矩阵列(或行)而调整的并行存储器短访问。
因此,根据一些实施例,存储器118A-118M被适配用于低时延、并行、短、不规则的访问,即使这以减小的带宽为代价。为了实现这些特征,存在可使用的对本领域技术人员来说已知的许多存储器优化(更小的行、窄的预取缓冲器等)。
在一些实施例中,由于这些非常稀疏/超稀疏矩阵操作是存储器密集的,因此操作中所涉及的PE 506A-506Z的数目可以被最小化以匹配于能够从存储器单元118A-118M带来的数据的速率。
因此,使用该异构架构的实施例可以使用该非常稀疏/超稀疏瓦片114A-114N来执行与稀疏瓦片112A-112N相同的矩阵操作,但以针对非常稀疏或超稀疏数据的更好执行效率执行该矩阵操作。
除了其他以外,这由使用短、不规则、低时延的存储器访问而对非常稀疏/超稀疏块108A-108M的访问产生,而如图5中所示的(一个或多个)稀疏瓦片112A-112N的架构(其提供针对“规则”稀疏矩阵的高效稀疏矩阵计算)可以对稀疏块106A-106N的行(或列)的非零元素进行成流,和/或定位/重用在芯片上存储器(例如,RAM 508)中(例如,通过对矩阵数据适当成块)操作的向量子集。
再一次,可以例如基于存储器连接技术(即,提供低时延并行随机访问的存储器的时延和/或带宽)来具体选择PE 506A-506Z的数目。例如,可以执行仿真建模以确定PE506A-506Z的最优量,以适当地使存储器饱和,以不会未充分利用PE 506A-506Z的存储器或集合。
K均值操作和支持
如本文所描述,该架构可以包括针对执行k均值群集的附加硬件支持。为了易于理解,k均值算法300的行将关于这些行可以如何/在何处由具有圆形号码的如图5中所示的稀疏瓦片112A执行而讨论。
然而,应当理解,这些行可以由(一个或多个)非常稀疏/超稀疏瓦片114A-114N执行,尽管如通过本公开显而易见的那样,一些方面将是不同的。作为一个示例,可以如上所描述的那样在稀疏瓦片112A内存储和操作“C”矩阵的元素,而“C”矩阵的元素可以被存储在存储器单元118A中而不是由(一个或多个)非常稀疏/超稀疏瓦片114A-114N来“高速缓存”(除了可能将它们临时存储在寄存器中等等)。然而,还可以存在其他差异,如通过该描述变得显而易见的那样。
由于算法的行1更倾向于是不可执行的注释,因此行2对“C”矩阵进行初始化,且可以由PE 506A-506Z(在(一个或多个)RAM 508中)执行。涉及清除每中心的计数器的行3可以由CSU 136A(具体地,V[]中心503A数据结构/储存器)执行。
涉及从“X”中随机选择“b”个样本的行4-6(或5-6)可以由DMU 510通过从(一个或多个)存储器单元116A-116M访问“X”来执行。
涉及确定与x最接近的中心且然后对该中心进行高速缓存的行7可以通过PE506A-506Z、使用RAM 508、精简单元512A(用于执行多个距离类型计算)将部分距离值550发送到CCS 130的跨瓦片精简引擎134而执行,跨瓦片精简引擎134可以执行跨来自其他瓦片的数据的相同计算,并且然后,最接近中心确定单元132可以确定最接近的中心,并将该最接近的中心“C”555提供回到CSU 136A以用于存储(例如,存储在X2C RAM 502A)。
(一个或多个)精简单元512A-512B连同CCS 130的跨瓦片精简引擎134一起可以包括用于某些“精简”操作的硬件,这些“精简”操作例如是使用已知精简架构来执行求和,该已知精简架构包括但不限于:仅以加法器为代价而利用精简树(即,以特定方式布置的加法器);或者如果性能不那么关键,则通过实现代之以执行多次迭代以实现相同结果的更少加法器。因此,精简单元512A、跨瓦片精简系统134以及CCS 130(以及可能地,最接近中心确定单元132)均可以是作为加速器的部分的硬件块。
作为控制类型代码段的行8-9可以再一次处于DMU 510的控制下,并且然后,涉及得到针对x(例如,来自X2C RAM 502A)的经高速缓存的中心以及得到(并更新)每中心的计数(例如,来自V[]中心单元503A)的行10-12可以涉及CSU 136A。类似地,在行12处更新每中心的学习速率还可以涉及CSU 136A的学习速率计算器504A。例如,学习速率计算器504A可以包括用于执行划分或对划分操作进行近似的硬件逻辑——例如,用于完全划分、充当近似的比特移位等的逻辑。
涉及通过执行计算且更新“C”值来采取梯度步长的行13可以涉及PE 506A-506Z和(一个或多个)RAM 508。作为控制块的结尾的行14-15可以再一次由DMU 510执行。
硬件模板
如上所指示,实施例可以将该异构架构实现为可定制硬件模板,可以从中导出经优化的定制实例(即,给定设计参数,则模板可以输出架构的寄存器传送语言(RTL)实现),该可定制硬件模板可以用于显著改进基于现场可编程门阵列(FPGA)的系统上的k均值群集(例如,具有小批量和投影梯度优化)的处理效率。这种模板可以被认为描述该架构的许多可能实例的子集,并且这允许特定实例基于参数而生成。
在一些实施例中,存在针对该硬件模板的许多用户可指定定制参数。例如,在一些实施例中,所涉及的瓦片的数目和类型是模板参数,这允许用户利用针对用户的目标使用情况而优化的瓦片的特定混合来对加速器进行实例化。其他模板参数的几个示例包括PE的数目、储存器结构(例如,RAM)的大小等。
作为另一示例,在一些实施例中,参数可以包括充当将操作的矩阵的类型/大小/复杂度的样本的示例性矩阵。利用这种样本矩阵,实施例可以分析其特性/属性(例如,行/列的数目、空行/列的数目、总体稀疏性、矩阵有多偏态等)并生成应当最佳地服务于该类型的矩阵的所推荐的架构。
因此,给定目标的基于FPGA的系统、感兴趣的k均值参数(例如,图3的k、b、t、X)和输入数据集的性质(例如,X的非零分布),则硬件模板可以被定制成产生要在目标的基于FPGA的系统上部属的经优化的硬件实现实例(例如,以RTL Verilog),以非常高效地执行k均值群集。本文稍后关于稍后的图来提供涉及硬件模板的进一步细节。
示例性流程
图6是图示了根据一些实施例的用于利用硬件加速器架构发起群集(例如,网络规模k均值群集)的流程600的流程图。
将参照其他图的示例性实施例来描述该流程图和其他流程图中的操作。然而,应当理解,流程图的操作可以由除参照其他图而讨论的那些实施例外的实施例执行,并且参照这些其他图而讨论的实施例可以执行与参照流程图而讨论的那些操作不同的操作。在一些实施例中,该流程600由图1或图5的加速器101执行。在一些实施例中,流程600可以由控制单元560执行,控制单元560可以是加速器的部分或处于加速器外部。
流程600包括:在框605处,确定涉及矩阵的群集任务(例如,网络规模k均值群集)要被执行。该确定可以基于一个或多个计算任务到加速器的卸载等。
在一些实施例中,流程600经由箭头607A直接继续到框615,框615包括:将矩阵分割成第一多个块和第二多个块。第一多个块包括矩阵的稀疏的部分,并且第二多个块包括矩阵的非常稀疏或超稀疏的部分。在一些实施例中,框615包括:分析矩阵的零和/或非零的量和/或位置,以确定矩阵的部分是小于还是大于某些阈值(例如,定义什么是稀疏、什么是非常稀疏和什么是超稀疏的界限的阈值)。在一些实施例中,框615包括根据该分析来识别矩阵内的块的边界,并且在一些实施例中,框615包括基于这些块来执行一个或多个优化——例如,改变块中的一个或多个的矩阵表示/格式、将暗示提供给硬件调度器等。
流程600可以继续进行到框620,框620包括:使一个或多个稀疏瓦片使用第一多个块执行用于群集任务的操作;以及使一个或多个超稀疏/非常稀疏瓦片使用第二多个块执行用于群集任务的操作。在一些实施例中,框620包括将块拷贝到与该一个或多个稀疏瓦片和该一个或多个超稀疏/非常稀疏瓦片相对应的存储器单元,但在一些实施例中,框620包括将块的标识符(例如,存储器位置)提供给(一个或多个)稀疏瓦片和(一个或多个)非常稀疏/超稀疏瓦片。
在框605之后,在一些实施例中,流程600可以可选地经由箭头607B继续到可选的决策框610,决策框610包括确定矩阵是否“一般”稀疏(总体上)和具有偏态的非零分布。在一些实施例中,框610可以包括分析矩阵的零和/或非零值的数目和位置,且可以包括确定在矩阵的一侧处相比于另一侧(例如,相反侧)是否非零的更高频率存在更多出至少阈值量。
如果矩阵是稀疏的且具有偏态的非零分布,则流程600可以经由箭头612A继续到框615,并且此后,流程可以继续到框620。然而,如果矩阵不是稀疏的和/或不具有偏态的非零分布,则流程600可以可选地经由箭头612B继续到另一决策框625。
决策框625包括:确定矩阵是否是稀疏的(作为整体)或者其是否是非常稀疏或超稀疏的(作为整体)。如果都不是,则流程600可以终止(未图示)或仅流到框630(例如,使仅稀疏瓦片处理整个矩阵)。
如果矩阵被发现为稀疏的,则流程600可以经由箭头627A继续到框630,框630包括:使一个或多个稀疏瓦片使用“整个”矩阵(其可以是例如仅非零或者可以是零和非零二者)执行用于群集任务的操作。如果在框625处确定矩阵作为整体是非常稀疏或超稀疏的,则流程600可以经由箭头627B继续到框635,框635包括:使一个或多个非常稀疏/超稀疏瓦片使用矩阵执行用于群集任务的操作。
图7是图示了根据一些实施例的用于利用硬件加速器架构执行群集(例如,网络规模k均值群集)的另一流程700的流程图。流程700可以例如由图1或图5中描绘的加速器执行。附加地,流程700可以可选地在图6的框620之后(或响应于图6的框620)执行。
流程700包括:在框705处,由硬件加速器的一个或多个稀疏瓦片执行用于涉及矩阵的群集任务的操作,其中稀疏瓦片中的每一个包括:第一多个处理单元,对矩阵的已被通过高带宽接口从第一存储器单元成流到该一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作。流程700还包括:在框710处,由硬件加速器的一个或多个非常稀疏/超稀疏瓦片执行用于涉及矩阵的群集任务的操作,其中非常稀疏/超稀疏瓦片中的每一个包括:第二多个处理单元,对矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
示例
根据一些实施例,一种硬件加速器包括:一个或多个稀疏瓦片,执行用于涉及矩阵的群集任务的操作,所述稀疏瓦片中的每一个包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及一个或多个非常稀疏/超稀疏瓦片,执行用于涉及所述矩阵的群集任务的操作,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
在一些实施例中,所述硬件加速器进一步包括控制单元,所述控制单元:确定涉及所述矩阵的群集任务要被执行;以及将所述矩阵分割成所述第一多个块和所述第二多个块,其中所述第一多个块包括所述矩阵的稀疏的一个或多个部分,并且其中所述第二多个快包括数据的非常稀疏或超稀疏的另一个或多个部分。在一些实施例中,所述硬件加速器进一步:使所述一个或多个稀疏瓦片使用所述第一多个块执行操作;以及进一步使所述一个或多个非常稀疏/超稀疏瓦片使用所述第二多个块执行操作。在一些实施例中,执行操作的所述一个或多个稀疏瓦片更新所述一个或多个稀疏瓦片的一个或多个随机存取存储器内的中心值的集合。在一些实施例中,执行操作的所述一个或多个稀疏瓦片进一步:由所述一个或多个稀疏瓦片的一个或多个数据管理单元将所述矩阵的多个行的值通过所述高带宽接口从所述第一存储器单元成流到第一多个处理元件的本地存储器。在一些实施例中,执行操作的所述一个或多个稀疏瓦片进一步:由第一多个处理元件使用所成流的值中的至少一些和与所述一个或多个稀疏瓦片分离的群集计算子系统执行多个距离计算。在一些实施例中,执行操作的所述一个或多个稀疏瓦片进一步:由第一多个处理元件使用中心值的集合执行一个或多个扩缩更新操作。在一些实施例中,执行操作的所述一个或多个非常稀疏/超稀疏瓦片:在操作期间通过所述低时延接口更新所述第二存储器单元内的中心值的集合。在一些实施例中,执行操作的所述一个或多个非常稀疏/超稀疏瓦片进一步:由所述一个或多个非常稀疏/超稀疏瓦片的一个或多个数据管理单元通过使用随机访问请求、通过所述低时延接口从所述第二存储器单元检索所述矩阵的多个行的值。在一些实施例中,所述一个或多个非常稀疏/超稀疏瓦片中的每一个和所述一个或多个稀疏瓦片中的每一个在执行相应操作时:将部分距离值提供给与所述一个或多个稀疏瓦片分离且与所述一个或多个非常稀疏/超稀疏瓦片分离的群集计算子系统;以及从所述群集计算子系统获得最接近中心标识符。
根据一些实施例,一种用于高效地执行群集的硬件加速器中的方法包括:由所述硬件加速器的一个或多个稀疏瓦片执行用于涉及矩阵的群集任务的操作,所述稀疏瓦片中的每一个包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及由所述硬件加速器的一个或多个非常稀疏/超稀疏瓦片执行用于涉及所述矩阵的群集任务的操作,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
在一些实施例中,所述方法进一步包括:由所述硬件加速器确定涉及矩阵的群集任务要被执行;以及由所述硬件加速器将所述矩阵分割成所述第一多个块和所述第二多个块,其中所述第一多个块包括所述矩阵的稀疏的一个或多个部分,并且其中所述第二多个块包括所述矩阵的非常稀疏或超稀疏的另一个或多个部分。在一些实施例中,所述方法进一步包括:使硬件处理器的所述一个或多个稀疏瓦片使用所述第一多个块执行操作;以及进一步使硬件处理器的所述一个或多个非常稀疏/超稀疏瓦片使用所述第二多个块执行操作。在一些实施例中,执行操作包括:由所述一个或多个稀疏瓦片中的每一个的第一多个处理元件更新所述一个或多个稀疏瓦片的一个或多个随机存取存储器内的中心值的集合。在一些实施例中,执行操作进一步包括:由所述一个或多个稀疏瓦片的一个或多个数据管理单元将所述矩阵的多个行的值通过所述高带宽接口从所述第一存储器单元成流到第一多个处理元件的本地存储器。在一些实施例中,执行操作进一步包括:由所述一个或多个稀疏瓦片中的每一个的第一多个处理元件使用所成流的值中的至少一些和与所述一个或多个稀疏瓦片分离的群集计算子系统执行多个距离计算。在一些实施例中,执行操作进一步包括:由所述一个或多个稀疏瓦片中的每一个的第一多个处理元件使用中心值的集合执行一个或多个扩缩更新操作。
在一些实施例中,执行操作包括:由所述一个或多个非常稀疏/超稀疏瓦片中的每一个的第二多个处理元件通过所述低时延接口更新所述第二存储器单元内的中心值的集合。在一些实施例中,执行操作进一步包括:由所述一个或多个非常稀疏/超稀疏瓦片的一个或多个数据管理单元通过使用随机访问请求、通过所述低时延接口从所述第二存储器单元检索所述矩阵的多个行的值。在一些实施例中,执行操作和执行操作中的每一个进一步包括:将部分距离值提供给与所述一个或多个稀疏瓦片分离且与所述一个或多个非常稀疏/超稀疏瓦片分离的群集计算子系统;以及从所述群集计算子系统获得最接近集群标识符。
根据一些实施例,一种系统包括:第一存储器单元;第二存储器单元;一个或多个稀疏瓦片,执行用于涉及矩阵的群集任务的操作,所述稀疏瓦片中的每一个包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及一个或多个非常稀疏/超稀疏瓦片,执行用于涉及所述矩阵的群集任务的操作,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
根据一些实施例,一种硬件加速器包括:第一装置,执行用于涉及矩阵的群集任务的操作,所述第一装置中的每一个包括第二装置,所述第二装置对所述矩阵的已被通过高带宽接口从第三装置成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及第四装置,执行用于涉及所述矩阵的群集任务的操作,所述第四装置中的每一个包括第五装置,所述第五装置对所述矩阵的已通过低时延接口从第六装置随机访问的第二多个块进行操作。
本文公开的实施例利用电子设备。电子设备使用机器可读介质(也被称为计算机可读介质)存储和传输(内部地和/或通过网络与其他电子设备)代码(其由软件指令组成且有时被称作计算机程序代码或计算机程序)和/或数据,该机器可读介质诸如是机器可读储存介质(例如,磁盘、光盘、只读存储器(ROM)、闪存设备、相变存储器)和机器可读传输介质(也被称为载体)(例如,电信号、光信号、无线电信号、声信号或其他形式的传播信号——诸如载波、红外信号)。因此,电子设备(例如,计算机)包括硬件和软件,诸如耦合到一个或多个机器可读储存介质的一个或多个处理器的集合,该一个或多个机器可读储存介质存储用于在处理器的集合上执行的代码和/或存储数据。例如,电子设备可以包括非易失性存储器,该非易失性存储器包含代码,这是由于即使当电子设备被关闭时(当功率被移除时),非易失性存储器也可以存留代码/数据,并且在电子设备被开启时,典型地将代码的要由该电子设备的(一个或多个)处理器执行的那部分从较慢非易失性存储器拷贝到该电子设备的易失性存储器(例如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))。典型电子设备还包括集合或者一个或多个物理网络接口,其与其他电子设备建立网络连接(以使用传播信号来发射和/或接收代码和/或数据)。可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。
示例性加速器架构
概览
在一些实现方式中,加速器耦合到处理器核或其他处理元件,以加速某些类型的操作,诸如图形操作、机器学习操作、模式分析操作和(如下面详细描述的那样)稀疏矩阵乘法操作,仅举几例。加速器可以通过总线或其他互连件(例如,点对点互连件)通信耦合到处理器/核,或者可以集成在与处理器相同的芯片上且通过内部处理器总线/互连件通信耦合到核。不论加速器连接的方式如何,处理器核都可以将某些处理任务分配给加速器(例如,以指令或微操作的序列的形式),加速器包括用于高效地处理这些任务的专用电路/逻辑。
图8图示了其中加速器800通过高速缓存一致性接口830通信耦合到多个核810-811的示例性实现方式。核810-811中的每一个包括:转译后备缓冲器812-813,用于存储虚拟到物理地址转译;以及一个或多个高速缓存814-815(例如,L1高速缓存、L2高速缓存等),用于对数据和指令进行高速缓存。存储器管理单元820管理由核810-811对系统存储器850的访问,系统存储器850可以是动态随机存取存储器DRAM。可以在处理器核810-811之间共享以及经由高速缓存一致性接口830与加速器800共享诸如L3高速缓存之类的共享高速缓存826。在一个实现方式中,核ATA1010T-1011、MMU 820和高速缓存一致性接口830集成在单个处理器芯片上。
所图示的加速器800包括数据管理单元805,数据管理单元805具有高速缓存807和调度器806,调度器806用于调度到多个处理元件801-802、N的操作。在所图示的实现方式中,每一个处理元件具有其自身的本地存储器803-804、N。如下面详细描述的那样,每一个本地存储器803-804、N可以被实现为堆叠DRAM。
在一个实现方式中,高速缓存一致性接口830在核810-811与加速器800之间提供高速缓存一致性连接性,从而有效地将加速器视为核810-811的对等端。例如,高速缓存一致性接口830可以实现高速缓存一致性协议,以确保由加速器800访问/修改且在加速器高速缓存807和/或本地存储器803-804、N中存储的数据与在核高速缓存810-811、共享高速缓存826和系统存储器850中存储的数据一致。例如,高速缓存一致性接口830可以参与由核810-811和MMU 820用于检测共享高速缓存826和本地高速缓存814-815内的高速缓存线的状态的窥探机制,且可以充当代理,从而响应于由处理元件801-802、N对高速缓存线的访问和试图修改而提供窥探更新。附加地,当高速缓存线被处理元件801-802、N修改时,如果高速缓存线存储在共享高速缓存826或本地高速缓存814-815内,则高速缓存一致性接口830可以更新高速缓存线的状态。
在一个实现方式中,数据管理单元1005包括:存储器管理电路,提供加速器800对系统存储器850和共享高速缓存826的访问。附加地,数据管理单元805可以将更新提供给高速缓存一致性接口830并按需从高速缓存一致性接口830接收更新(例如,以确定对高速缓存线的状态改变)。在所图示的实现方式中,数据管理单元805包括:调度器806,用于调度要由处理元件801-802、N执行的指令/操作。为了执行其调度操作,调度器806可以评估指令/操作之间的依赖性,以确保按一致次序执行指令/操作(例如,以确保第一指令在依赖于来自第一指令的结果的第二指令之前执行)。可以在处理元件801-802、N上并行执行不相互依赖的指令/操作。
用于矩阵和向量操作的加速器架构
图9图示了加速器800和先前描述的其他部件的另一视图,该其他部件包括数据管理单元805、多个处理元件801-N和快速芯片上储存器900(例如,在一个实现方式中使用堆叠本地DRAM而实现)。在一个实现方式中,加速器800是硬件加速器架构,并且处理元件801-N包括用于执行矩阵*向量和向量*向量操作的电路,该操作包括用于稀疏/密集矩阵的操作。特别地,处理元件801-N可以包括针对面向列和行的矩阵处理的硬件支持,且可以包括针对“扩缩和更新”操作(诸如,在机器学习(ML)算法中使用的操作)的微架构支持。
所描述的实现方式执行矩阵/向量操作,其是通过下述操作来优化的:将频繁使用、随机访问、潜在稀疏(例如,聚集/分散)的向量数据保存在快速芯片上储存器900中,并将大的不频繁使用的矩阵数据维持在每当可能时就以成流方式访问的芯片外存储器(例如,系统存储器850)中,并暴露矩阵块内/间的并行性以提高。
处理元件801-N的实现方式处理稀疏矩阵、密集矩阵、稀疏向量和密集向量的不同组合。如本文所使用,“稀疏”矩阵或向量是其中大多数元素为零的矩阵或向量。相比之下,“密集”矩阵或向量是其中大多数元素为非零的矩阵或向量。可以基于零值元素的数目除以元素的总数(例如,对于m×n矩阵,为m×n)来定义矩阵/向量的“稀疏性”。在一个实现方式中,如果矩阵/向量的稀疏性高于指定阈值,则该矩阵/向量被视为“稀疏的”。
在图10中的表中图示了由处理元件801-N执行的操作的示例性集合。特别地,操作类型包括使用稀疏矩阵的第一乘法1000、使用密集矩阵的第二乘法1001、扩缩和更新操作1002m以及点积操作1003。针对下述各项提供列:第一输入操作数1010和第二输入操作数1011(其中每一个可以包括稀疏或密集矩阵/向量);输出格式1013(例如,密集向量或标量);矩阵数据格式(例如,压缩稀疏行、压缩稀疏列、面向行等);以及操作标识符1014。
在一些当前工作量中找到的运行时主导计算模式包括以面向行和面向列的方式矩阵与向量的乘法的变化。它们在公知的矩阵格式上工作:压缩稀疏行(CSR)和压缩稀疏列(CSC)。图11a描绘了稀疏矩阵A与向量x之间的产生向量y的乘法的示例。图11b图示了其中每一个值被存储为(值,行索引)对的矩阵A的CSR表示。例如,针对行0的(3,2)指示了:对于行0,值3存储在元素位置2中。图11c图示了使用(值,列索引)对的矩阵A的CSC表示。
图12a、12b和12c图示了每一个计算模式的伪代码,其在下面详细描述。特别地,图12a图示了面向行的稀疏矩阵密集向量乘法(spMdV_csr);图12b图示了面向列的稀疏矩阵稀疏向量乘法(spMspC_csc);以及图12c图示了扩缩和更新操作(scale_update)。
A. 面向行的稀疏矩阵密集向量乘法(spMdV_csr)
这是在许多应用领域(诸如高性能计算)中重要的公知计算模式。这里,对于矩阵A的每一行,执行该行与向量x的点积,并且将结果存储在行索引所指向的y向量元素中。该计算被用在执行跨样本集合(即,矩阵的行)的分析的机器学习(ML)算法中。其可以被用在诸如“小批量”之类的技术中。还存在下述情况:其中,ML算法仅执行稀疏向量与密集向量的点积(即,spMdV_csr循环的迭代),诸如在学习算法的随机变型中。
可影响该计算上的性能的已知因素是在点积计算中随机访问稀疏x向量元素的需要。对于传统服务器系统,当x向量是大的时,这将导致对存储器或末级高速缓存的不规则访问(聚集)。
为了解决这一点,处理元件的一个实现方式将矩阵A划分成列块并将x向量划分成多个子集(每一个子集对应于A矩阵列块)。块大小可以被选择成使得x向量子集可以在芯片上适合。因此,对其的随机访问可以被定位在芯片上。
B. 面向列的稀疏矩阵稀疏向量乘法(spMspV_csc)
将稀疏矩阵与稀疏向量相乘的该模式不如spMdV_csr那么公知。然而,其在一些ML算法中是重要的。其是当算法在特征集合上工作时使用的,该特征集合被表示为数据集中的矩阵列(因此,针对面向列的矩阵访问的需要)。
在该计算模式中,矩阵A的每一列被读取且与向量x的对应非零元素相乘。结果被用于更新部分点积,该部分点积被保存在y向量处。在已经处理与非零x向量元素相关联的所有列之后,y向量将包含最终点积。
尽管对矩阵A的访问是规则的(即,在A的列中成流),但为了更新部分点积而对y向量的访问是不规则的。要访问的y元素取决于被处理的A向量元素的行索引。为了解决这一点,可以将矩阵A划分成行块。因此,可以将向量y划分成与这些块相对应的子集。这样,当处理矩阵行块时,其仅需要不规则地访问(聚集/分散)其y向量子集。通过适当地选择块大小,可以将y向量子集保存在芯片上。
C. 扩缩和更新(scale_update)
该模式典型地被ML算法用于将扩缩因子应用于矩阵中的每一个样本并将它们精简成权重集合,每一个权重对应于特征(即,A中的列)。这里,x向量包含扩缩因子。对于矩阵A的每一行(以CSR格式),从x向量读取针对该行的扩缩因子,且然后将针对该行的扩缩因子应用于该行中A的每一个元素。结果被用于更新y向量的元素。在已经处理所有行之后,y向量包含经精简的权重。
类似于在先计算模式,当y是大的时,对y向量的不规则访问可能影响性能。将矩阵A划分成列块并将y向量划分成与这些块相对应的多个子集可以有助于将不规则访问定位在每一个y子集内。
一个实现方式包括可高效地执行上面讨论的计算模式的硬件加速器1000。加速器1000是可与通用处理器集成的硬件IP块,该通用处理器类似于在现有的基于加速器的解决方案中找到的那些处理器(例如,IBM® PowerEN、Oracle® M7)。在一个实现方式中,加速器800通过与处理器共享的互连来独立地访问存储器850以执行计算模式。其支持驻留于芯片外存储器中的任何任意大的矩阵数据集。
图13图示了数据管理单元805和处理元件801-802的一个实现方式的处理流程。在该实现方式中,数据管理单元805包括处理元件调度器1301、读取缓冲器1302、写入缓冲器1303和精简单元1304。每一个PE 801-802包括输入缓冲器1305-1306、乘法器1307-1308、加法器1309-1310、本地RAM 1321-1322、总和寄存器1311-1312和输出缓冲器1313-1314。
加速器支持上面讨论的矩阵成块方案(即,行和列成块)以支持任何任意大的矩阵数据。加速器被设计成处理矩阵数据的块。每一个块被进一步划分成由PE 801-802并行处理的子块。
在操作中,数据管理单元805从存储器子系统读取矩阵行或列到其读取缓冲器1302中,读取缓冲器1302然后被PE调度器1301跨PE 801-802动态分布以用于处理。其还将结果从其写入缓冲器1303写入到存储器。
每一个PE 801-802负责处理矩阵子块。PE包含:芯片上RAM 1321-1322,用于存储需要被随机访问的向量(即,如上所描述,x或y向量的子集)。其还包含:包括乘法器1307-1308和加法器1309-1310的浮点乘法-累积(FMA)单元以及输入缓冲器1305-1306内的解包逻辑,用于从输入数据提取矩阵元素;以及总和寄存器1311-1312,用于保存经累积的FMA结果。
加速器的一个实现方式实现了极端效率,这是因为:(1)其将不规则访问(聚集/分散)数据放置在芯片上PE RAM 1321-1322中;(2)其利用硬件PE调度器1301以确保PE被很好地利用;以及(3)不同于利用通用处理器,加速器仅由对于稀疏矩阵操作而言必需的硬件资源构成。总体上,加速器将向其提供的可用存储器带宽高效地转换成性能。
可以通过在加速器块中采用更多PE以并行处理多个矩阵子块和/或采用更多加速器块(每一个加速器块具有PE的集合)以并行处理多个矩阵块来进行性能的扩缩。下面考虑这些选项的组合。PE和/或加速器块的数目应当被调谐以匹配于存储器带宽。
可以通过软件库(类似于Intel® Math Kernel Library(数学内核库))来对加速器800的一个实现方式进行编程。这种库准备存储器中的矩阵数据,利用与计算有关的信息(例如,计算类型、指向矩阵数据的存储器指针)设置加速器800中的控制寄存器,并启动加速器。然后,加速器独立地访问存储器中的矩阵数据,执行计算,并将结果写回到存储器以供软件消耗。
加速器通过将其PE设置到适当的数据路径配置来处置不同计算模式,如图14a-14b中所描绘。特别地,图14a突出显示了用于spMspV_csc和scale_update操作的路径(使用点线),并且图14b图示了用于spMdV_csr操作的路径。下面详述执行每一个计算模式的加速器操作。
对于spMspV_csc,由DMU 805将初始y向量子集加载到PE的RAM 1321中。其然后从存储器读取x向量元素。对于每一个x元素,DMU 805对来自存储器的对应矩阵列的元素进行成流,并将它们供给到PE 801。每一个矩阵元素包含值(A.val)和索引(A.idx),该索引指向要从PE的RAM 1321读取的y元素。DMU 1005还提供x向量元素(x.val),由乘法-累积(FMA)单元将该x向量元素与A.val相乘。结果被用于更新A.idx所指向的PE的RAM中的y元素。注意,即使未被我们的工作量使用,加速器也通过处理所有矩阵列而不是仅子集来支持与密集x向量的逐列乘法(spMdV_csc)(由于x是密集的)。
Scale_update操作类似于spMspV_csc,只是DMU 805读取以CSR格式而不是CSC格式表示的A矩阵的行。对于spMdV_csr,将x向量子集加载到PE的RAM 1321中。DMU 805在来自存储器的矩阵行元素(即,{A.val, A.idx}对)中成流。A.idx用于从RAM 1321读取适当x向量元素,由FMA将该x向量元素与A.val相乘。结果被累积到总和寄存器1312中。每当PE看到指示行结尾的标记时,总和寄存器都被写入到输出缓冲器,该标记由DMU 805供给。这样,每一个PE产生其所负责的行子块的总和。为了产生行的最终总和,由所有PE产生的子块总和由DMU中的精简单元1304(参见图13)加在一起。最终总和被写入到输出缓冲器1313-1314,DMU 1005然后将其写入到存储器。
图表数据处理
在一个实现方式中,本文描述的加速器架构被配置成处理图表数据。图表分析学依赖于图表算法以提取与被表示为图表的数据之间的关系有关的知识。图表数据(来自诸如社交媒体之类的源)的激增已经导致针对图表分析学的强烈需求和图表分析学的广泛使用。由此,能够尽可能高效地进行图表分析学是至关重要的。
为了解决该需要,一个实现方式自动地将用户定义的图表算法映射到针对给定输入图表算法而定制的硬件加速器架构“模板”。加速器可以包括上面描述的架构,且可以被实现为FPGA/ASIC,FPGA/ASIC可以以极端效率执行。总的来说,一个实现方式包括:
(1)基于广义稀疏矩阵向量乘法(GSPMV)加速器的硬件加速器架构模板。其支持任意图表算法,这是因为已经示出图表算法可以用公式表示为矩阵操作。
(2)将广泛使用的“以顶点为中心”图表编程抽象映射和调谐到架构模板的自动方法。
存在现有的稀疏矩阵乘法硬件加速器,但它们不支持可定制性以允许图表算法的映射。
设计框架的一个实现方式操作如下。
(1)用户将图表算法指定为遵循以顶点为中心图表编程抽象的“顶点程序”。该抽象这里由于其流行性而被选择为示例。顶点程序不暴露硬件细节,所以没有硬件专门知识的用户(例如,数据科学家)可以创建它。
(2)连同(1)中的图表算法一起,框架的一个实现方式接受以下输入:
a. 要生成的目标硬件加速器的参数(例如,芯片上RAM的最大量)。这些参数可以由用户提供,或者当以现有系统(例如,特定FPGA板)为目标时从已知参数的现有库获得。
b. 设计优化目的(例如,最大性能、最小面积)。
c. 目标图表数据的性质(例如,图表的类型)或图表数据自身。这是可选的,且用于辅助自动调谐。
(3)给定上面的输入,则框架的一个实现方式执行自动调谐以确定要应用于硬件模板的定制的集合,以针对输入图表算法而优化,将这些参数映射到架构模板上以在可合成RTL中产生加速器实例,并针对从输入图表算法规范导出的功能和性能软件模型进行对所生成的RTL的功能和性能证实。
在一个实现方式中,上面描述的加速器架构被扩展成通过下述操作来支持顶点程序的执行:(1)使其成为可定制的硬件模板;以及(2)支持顶点程序所需的功能。基于该模板,描述了一种设计框架,用于将用户供给的顶点程序映射到硬件模板,以产生针对顶点程序而优化的可合成的RTL(例如,Verilog)实现实例。该框架还执行自动证实和调谐,以确保所产生的RTL是正确的且经优化的。存在针对该框架的多个使用情况。例如,可以在FPGA平台(例如,Xeon-FPGA)中部署所产生的可合成RTL以高效地执行给定的顶点程序。或者,其可以被进一步改善以产生ASIC实现方式。
已经示出,图表可以被表示为邻近性矩阵,并且图表处理可以用公式表示为稀疏矩阵操作。图15a-15b示出了将图表表示为邻近性矩阵的示例。矩阵中的每一个非零表示图表中的两个节点之间的边。例如,行0列2中的1表示从节点A到C的边。
用于描述图表数据上的计算的最流行模型之一是顶点编程模型。一个实现方式支持从Graphmat软件框架的顶点编程模型变型,其将顶点程序用公式表示为广义稀疏矩阵向量乘法(GSPMV)。如图15c中所示,顶点程序由下述各项构成:与图表中的边/顶点相关联的数据类型(edata/vdata)、与跨图表中的顶点而发送的消息相关联的数据类型(mdata)和与临时数据相关联的数据类型(tdata)(在程序代码的顶部分中图示);以及使用读取和更新图表数据的预定义API的无状态的用户定义的计算函数(如程序代码的底部分中图示)。
图15d图示了用于执行顶点程序的示例性程序代码。边数据被表示为邻近性矩阵A(如在图15b中那样),顶点数据被表示为向量y,并且消息被表示为稀疏向量x。图15e示出了GSPMV公式表示,其中SPMV中的multiply()和add()操作被用户定义的PROCESS_MSG()和REDUCE()推广。
这里,一个观察结果是:执行顶点程序所需的GSPMV变型执行稀疏矩阵A(即,邻近性矩阵)与稀疏向量x(即,消息)的面向列的乘法,以产生输出向量y(即,顶点数据)。该操作被称作col_spMspV(先前关于上面的加速器而描述)。
设计框架。在图16中示出了框架的一个实现方式,其包括模板映射部件1611、证实部件1612和自动调谐部件1613。其输入是用户指定的顶点程序1601、设计优化目标1603(例如,最大性能、最小面积)和目标硬件设计约束1602(例如,芯片上RAM的最大量、存储器接口宽度)。作为用于辅助自动调谐的可选输入,该框架还接受图表数据性质1604(例如,类型=自然图表)或样本图表数据。
给定这些输入,则该框架的模板映射部件1611将输入顶点程序映射到硬件加速器架构模板,并产生被优化以用于执行顶点程序1601的加速器实例的RTL实现1605。自动调谐部件1613执行自动调谐1613以针对给定设计目的而优化所生成的RTL,同时满足硬件设计约束。此外,证实部件1612针对从输入导出的功能和性能模型自动证实所生成的RTL。连同RTL一起产生证实测试台1606和调谐报告1607。
广义稀疏矩阵向量乘法(GSPMV)硬件架构模板
在图17中示出了用于GSPMV的架构模板的一个实现方式,其基于上面描述的加速器架构(参见例如图13和关联的文本)。图17中图示的许多部件是可定制的(如利用灰线突出显示)。在一个实现方式中,用于支持顶点程序的执行的架构已经被扩展如下。
如图17中所图示,在每一个PE内部提供了可定制逻辑块,以支持顶点程序所需的PROCESS_MSG() 1910、REDUCE() 1711、APPLY 1712和SEND_MSG() 1713。附加地,一个实现方式提供可定制芯片上储存器结构和封包/解包逻辑1705以支持用户定义的图表数据(即,vdata、edata、mdata、tdata)。图17中图示的数据管理单元805包括PE调度器1301(用于如上所描述的那样调度PE)、辅助缓冲器1701(用于存储活动列、x数据)、读取缓冲器1302、用于控制对系统存储器的访问的存储器控制器1703、以及写入缓冲器1304。附加地,在图17中所示的实现方式中,旧的和新的vdata和tdata被存储在本地PE存储器1321内。各种控制状态机可以被修改成支持执行顶点程序,从而遵守由图15d和15e中的算法指定的功能。
在图18中总结了每一个加速器瓦片的操作。在1801处,将y向量(vdata)加载到PERAM 1321。在1802处,将x向量和列指针加载到辅助缓冲器1701。在1803处,对于每一个x向量元素,在(edata)中对A列进行成流,并且PE执行PROC_MSG() 1710和REDUCE() 1711。在1804处,PE执行APPLY() 1712。在1805处,PE执行SEND_MSG() 1713,从而产生消息,并且数据管理单元805将它们作为x向量写入存储器中。在1806处,数据管理单元805将存储在PERAM 1321中的经更新的y向量(vdata)写回到存储器。上面的技术符合图15d和15e中所示的顶点程序执行算法。为了提高性能,该架构允许增加设计中的瓦片中的PE的数目和/或瓦片的数目。这样,该架构可以利用图表中的多级并行性(即,跨子图表(跨邻近性矩阵的块)或在每一个子图表内)。图19a中的表总结了模板的一个实现方式的可定制参数。还可能跨瓦片指派非对称参数以用于优化(例如,一个瓦片比另一瓦片具有更多PE)。
自动映射、证实和调谐
调谐。基于输入,该框架的一个实现方式执行自动调谐以确定要用于定制硬件架构模板的最佳设计参数,以便针对输入顶点程序和(可选地)图表数据而优化它。存在许多调谐考虑,其在图19b中的表中总结。如所图示的那样,这些包括数据的位置、图表数据大小、图表计算函数、图表数据结构、图表数据访问属性、图表数据类型和图表数据模式。
模板映射。在该阶段中,该框架采取由调谐阶段确定的模板参数,并通过“填充”在模板的可定制部分中来产生加速器实例。可以使用现有的高级合成(HLS)工具将用户定义的计算函数(例如,图15c)从输入规范映射到适当的PE计算块。储存器结构(例如,RAM、缓冲器、高速缓存)和存储器接口是使用其对应的设计参数来实例化的。可以从数据类型规范(例如,图15a)自动生成封包/解包逻辑。还基于所提供的设计参数(例如,PE调度方案)来生成控制有限状态机(FSM)的部分。
证实。在一个实现方式中,然后自动证实由模板映射产生的加速器架构实例(可合成RTL)。为了做到这一点,该框架的一个实现方式导出顶点程序的功能模型以用作“黄金”参考。生成测试台,以将该黄金参考的执行与架构实例的RTL实现的仿真进行比较。该框架还通过将RTL仿真与分析性能模型和循环准确软件仿真器进行比较来执行性能证实。其报告运行时故障并精确指明设计的影响性能的瓶颈。
用于处理稀疏数据的加速器架构
引言
稀疏数据集——值大多数为零的向量或矩阵——上的计算对越来越多数目的商业上重要的应用来说是关键的,但典型地在现今的CPU上运行时实现峰值性能的仅几个百分比。在科学计算领域中,稀疏矩阵计算已经是线性求解器的关键内核达几十年。最近,机器学习和图表分析学的爆炸性增长已经将稀疏计算移至主流中。稀疏矩阵计算对许多机器学习应用来说是核心的,且形成许多图表算法的核心。
稀疏矩阵计算往往是受存储器带宽限制的,而不是受计算限制的,从而使CPU改变难以改进其性能。它们针对每矩阵数据元素执行极少操作,且常常在重用任何数据之前在整个矩阵上迭代,从而使高速缓存低效。附加地,许多稀疏矩阵算法包含显著数目的取决于数据的聚集和分散(诸如在稀疏矩阵-向量乘法中找到的result[row] += matrix[row][i].value * vector[matrix[row][i].index]操作),其难以预测和降低预取器的有效性。
为了比传统微处理器实现更好的稀疏矩阵性能,系统必须提供比当前CPU和非常能量高效的计算架构显著更高的存储器带宽。增大存储器带宽使得可能改进性能,但DRAM访问的高能量/比特成本限制了可用于处理该带宽的功率的量。在没有能量高效的计算架构的情况下,系统可能发现其自身处于下述位置中:在不超出其功率预算的情况下,不能够处理来自高带宽存储器系统的数据。
一个实现方式包括用于稀疏矩阵计算的加速器,该稀疏矩阵计算使用堆叠DRAM以提供下述带宽:稀疏矩阵算法要求该带宽与定制计算架构组合以便以能量高效的方式处理该带宽。
稀疏矩阵概览
许多应用创建数据集,其中绝大多数的值为零。有限元素方法将对象建模为点的网状物,其中每一个点的状态是该网状物中其附近的点的状态的函数。在数学上,这变成被表示为下述矩阵的等式系统:在该矩阵中,每一行描述了一个点的状态,并且该行中的值对于不直接影响该行所描述的点的状态的所有点而言为零。图表可以被表示为邻近性矩阵,其中矩阵中的每一个元素{i,j}给出了图表中的顶点i和j之间的边的权重。由于大多数顶点连接到图表中的其他顶点的仅小部分,因此邻近性矩阵中的绝大多数元素为零。在机器学习中,典型地使用由许多样本构成的数据集来训练模型,每一个样本包含特征集合(系统或对象的状态的观察结果)和用于该特征集合的模型的期望输出。非常普遍的是,大多数样本仅包含可能特征的小子集(例如当特征表示可能存在于文档中的不同字时),从而再一次创建其中大多数值为零的数据集。
其中大多数值为零的数据集被描述为“稀疏的”,并且非常普遍的是,稀疏数据集极为稀疏,从而在小于1%的其元素中具有非零值。常常使用仅指定矩阵中的非零元素的值的数据结构将这些数据集表示为矩阵。尽管这增加了表示每一个非零元素所需的空间的量,但由于指定元素的位置及其值二者是有必要的,因此如果矩阵足够稀疏,则总体空间(存储器)节省可以是相当大的。例如,稀疏矩阵的最直接表示之一是坐标列表(COO)表示,其中每一个非零由{行索引,列索引,值}元组指定。尽管这使每一个非零值所需的储存量增至三倍,但如果矩阵中仅1%的元素具有非零值,则COO表示将占据密集表示(表示矩阵中的每一个元素的值的表示)将占据的空间的仅3%。
图20图示了最普遍的稀疏矩阵格式之一:压缩行储存(CRS,有时缩写为CSR)格式。在CRS格式中,矩阵2000由三个阵列描述:值阵列2001,其包含非零元素的值;索引阵列2002,其指定矩阵的其行内的每一个非零元素的位置;以及行起始阵列2003,其指定矩阵的每一行在索引和值的列表中何处起始。因此,示例矩阵的第二行的第一非零元素可以在索引和值阵列中的位置2处找到,且由元组{0,7}描述,从而指示该元素出现在行内的位置0处且具有值7。其他普遍使用的稀疏矩阵格式包括:压缩稀疏列(CSC),其对CRS来说是列优先对偶(dual);以及ELLPACK,其将矩阵的每一行表示为非零值的固定宽度列表及其索引,当行具有比矩阵中的最长行更少的非零元素时用显式的零填充。
稀疏矩阵上的计算具有与其密集矩阵对等物相同的结构,但稀疏数据的性质往往使它们比其密集矩阵对等物带宽密集得多。例如,矩阵-矩阵乘法的稀疏和密集变型二者通过针对所有i、j计算Ci,j = Ai,·B,j来找到C = A·B。在密集矩阵-矩阵计算中,这导致相当大的数据重用,这是因为A的每一个元素参与N个乘法-加法操作(假定N×N矩阵),B的每一个元素也是。只要针对高速缓存位置而对矩阵-矩阵乘法成块,该重用就使计算具有低字节/操作比(bytes/op ratio)且为受计算限制的。然而,在稀疏变型中,A的每一个元素仅参与与在B的对应行中存在非零值一样多的乘法-加法操作,而B的每一个元素仅参与与在A的对应列中存在非零元素一样多的乘法-加法。随着矩阵的稀疏增大,字节/操作比也增大,从而使许多稀疏矩阵-矩阵计算的性能受存储器带宽限制,而不管下述事实:密集矩阵-矩阵乘法是典型的受计算限制的计算之一。
四个操作组成了现今的应用中所见的稀疏矩阵计算的大部分:稀疏矩阵-密集向量乘法(SpMV);稀疏矩阵-稀疏向量乘法;稀疏矩阵-稀疏矩阵乘法;以及松弛/平滑器操作,诸如在Intel对高性能共轭梯度基准的实现中使用的高斯-塞德尔(Gauss-Seidel)平滑器。这些操作共享了使稀疏矩阵加速器变得实际的两个特性。第一,它们由向量点积主导,这使得可能实现简单硬件,该简单硬件可以实现所有四个重要计算。例如,通过采取矩阵中的每一行与向量的点积来执行矩阵-向量乘法,而矩阵-矩阵乘法采取一个矩阵的每一行与另一个矩阵的每一列的点积。第二,应用一般在相同矩阵上执行多个计算,诸如,支持向量机器算法在训练模型的情况下执行的相同矩阵与不同向量的数千个乘法。相同矩阵的该重复使用使在程序执行期间向/从加速器传送矩阵和/或以简化硬件的任务的方式重新格式化矩阵变得实际,这是由于可以跨每一个矩阵上的许多操作而摊销数据传送/变换的成本。
稀疏矩阵计算典型地实现了它们运行在其上的系统的峰值性能的仅百分之几。为了示范这为什么发生,图21示出了使用CRS数据格式的稀疏矩阵-密集向量乘法的实现中所涉及的步骤2101-2104。第一,在2101处,从存储器读出表示矩阵的行的数据结构,这通常涉及容易预测和预取的顺序读取的集合。第二,在2102处,使用矩阵行中的非零元素的索引以聚集向量的对应元素,这要求多个取决于数据的难以预测的存储器访问(聚集操作)。此外,这些存储器访问常常触摸每一个所引用的高速缓存线中的仅一个或两个字,从而当向量在高速缓存中不适合时导致显著的浪费的带宽。
第三,在2103处,处理器计算矩阵行的非零元素和向量的对应元素的点积。最后,在2104处,将点积的结果写入到结果向量中,结果向量也是顺序地访问的,并且程序继续进行到矩阵的下一行。注意,这是计算的概念性/算法视图,并且程序所执行的操作的精确序列将取决于处理器的ISA和向量宽度。
该示例说明了稀疏矩阵计算的多个重要特性。假定32比特数据类型并且矩阵和向量均在高速缓存中不适合,则计算输出行的第一个元素要求从DRAM读取36个字节,但对于7.2:1的字节/操作比,仅五个计算指令(三个乘法和两个加法)。
然而,存储器带宽不是对高性能稀疏矩阵计算的仅有挑战。如图21所示,SpMV中对向量的访问是取决于数据且难以预测的,从而暴露了对应用的向量访问的时延。如果向量在高速缓存中不适合,则SpMV性能变得对DRAM时延以及带宽敏感,除非处理器提供了足够的并行性以便即使当许多线程暂停从而等待数据时也使DRAM带宽饱和。
因此,用于稀疏矩阵计算的架构必须提供若干事物以变得有效。其必须实现高存储器带宽以满足稀疏计算的字节/操作需要。其还必须支持出于可能在高速缓存中不适合的大向量的高带宽聚集。最后,尽管执行足够的算术操作/仅次于跟上DRAM带宽不是其自身的和其自身中的挑战,但该架构必须以能量高效的方式执行那些操作和它们所要求的所有存储器访问,以便保持处于系统功率预算内。
实现方式
一个实现方式包括一种加速器,其被设计成提供高稀疏矩阵性能所必需的三个特征:高存储器带宽;出于大向量的高带宽聚集;以及能量高效的计算。如图22中所图示,加速器的一个实现方式包括加速器逻辑管芯2205以及DRAM管芯的一个或多个堆叠2201-2204。下面更详细描述的堆叠DRAM以低能量/比特提供高存储器带宽。例如,堆叠DRAM被期望以2.5pJ/bit递送256-512 GB/sec,而LPDDR4 DIMM仅被期望递送68 GB/sec且将具有12 pJ/bit的能量成本。
加速器堆叠的底部处的加速器逻辑芯片2205是针对稀疏矩阵计算的需要而定制的,且能够消耗由DRAM堆叠2201-2204供应的带宽,同时仅花费2-4瓦的功率,其中能量消耗与堆叠的带宽成比例。保守地,针对本申请的其余部分假定273 GB/sec的堆叠带宽(WIO3堆叠的期望带宽)。基于更高带宽堆叠的设计将结合更多并行性,以便消耗存储器带宽。
图23图示了通过DRAM管芯2201-2204的堆叠从顶部视角取向的加速器逻辑芯片2205的一个实现方式。向着图的中心的堆叠DRAM通道块2305表示将逻辑芯片2205连接到DRAM 2201-2204的硅通孔,而存储器控制器块1310包含针对DRAM通道生成控制信号的逻辑。尽管在图中示出了八个DRAM通道2305,但在加速器芯片上实现的通道的实际数目将取决于所使用的堆叠DRAM而变化。正在开发的大多数堆叠DRAM技术提供了四个或八个通道。
点积引擎(DPE)2320是该架构的计算元件。在图23中所示的特定实现方式中,八个DPE的每一个集合与向量高速缓存2315相关联。图24提供了包含两个缓冲器2405-2406、两个64比特乘法-加法ALU 2410和控制逻辑2400的DPE的高级概览。在计算期间,芯片控制单元2400将正在处理的数据的组块成流到缓冲存储器2405-2406中。一旦每一个缓冲器为满,DPE的控制逻辑就顺序通过缓冲器,从而计算它们所包含的向量的点积并将结果写出到DPE的结果锁存器2410,结果锁存器2410在菊花链中与其他DPE的结果锁存器连接,以将计算的结果写回到堆叠DRAM 2201-2204。
在一个实现方式中,加速器逻辑芯片2405以大致1GHz和0.65V操作,以最小化功率消耗(尽管可以针对不同应用而修改特定操作频率和电压)。基于14nm设计研究的分析示出了32-64 KB缓冲器在该电压处满足该频率规范,尽管可能要求强ECC以防止软差错。可以以一半的基本时钟速率操作乘法-加法单元,以便满足关于0.65V供给电压和浅流水线的定时。具有两个ALU提供了每DPE一个双精度乘法-加法/循环的吞吐量。
以273 GB/秒以及1.066 MHz的时钟速率,DRAM堆叠2201-2204针对每逻辑芯片时钟周期递送256个字节的数据。假定阵列索引和值是至少32比特的量,这转译成每循环32个稀疏矩阵元素(4个字节的索引+4个字节的值=8个字节/元素),从而要求芯片执行每循环32个乘法-加法以跟上。(这是用于矩阵-向量乘法并假定向量高速缓存中的高命中率,使得100%的堆叠DRAM带宽用于取得矩阵。)图23中所示的64个DPE提供了2-4倍的所需计算吞吐量,从而即使在ALU 2410未被使用100%的时间的情况下也允许芯片以峰值堆叠DRAM带宽处理数据。
在一个实现方式中,向量高速缓存2315在矩阵-向量乘法中对向量的元素进行高速缓存。这显著地提高了下面描述的矩阵成块方案的效率。在一个实现方式中,每一个向量高速缓存块包含32-64KB的高速缓存,用于八通道架构中的256-512KB的总容量。
芯片控制单元2301管理计算的流程并处置与加速器中的其他堆叠和与系统中的其他插座的通信。为了降低复杂度和功率消耗,点积引擎从不从存储器请求数据。取而代之,芯片控制单元2301管理存储器系统,从而发起将适当数据块推送到DPE中的每一个的传送。
在一个实现方式中,多堆叠加速器中的堆叠经由使用图中所示的邻域连接2331实现的KTI链路2330的网络来彼此通信。芯片还提供了用于与多插座系统中的(一个或多个)其他插座通信的三个附加KTI链路。在多堆叠加速器中,堆叠的封装外KTI链路2330中的仅一个将是活动的。将通过封装上KTI网络将以其他堆叠上的存储器为目标的KTI事务路由到适当堆叠。
实现稀疏矩阵操作
在该节中,我们描述在加速器的一个实现方式上实现稀疏矩阵-密集向量和稀疏矩阵-稀疏向量乘法所需的技术和硬件。该设计还被扩展成支持矩阵-矩阵乘法、松弛操作和其他重要函数,以创建支持所有关键稀疏矩阵操作的加速器。
尽管稀疏-稀疏和稀疏-密集矩阵-向量乘法执行相同基本算法(采取矩阵中的每
一行和向量的点积),但在当向量是稀疏的时相比于当其是密集的时如何实现该算法方面
存在显著差异,这在下表1中总结。
稀疏-稀疏SpMV | 稀疏-密集SpMV | |
向量的大小 | 典型地是小的 | 常常是大的(矩阵大小的5-10%) |
向量元素的位置 | 不可预测 | 由索引确定 |
每矩阵元素的操作的数目 | 不可预测 | 固定的 |
表1。
在稀疏矩阵-密集向量乘法中,向量的大小是固定的且等于矩阵中的列的数目。由于在科学计算中找到的许多矩阵对每行大致10个非零元素求平均,因此稀疏矩阵-密集向量乘法中的向量占据矩阵自身5-10%那么多的空间并不是不常见的。另一方面,稀疏向量常常相当短,从而包含与矩阵的行类似的数目的非零值,这使它们在芯片上存储器中高速缓存要容易得多。
在稀疏矩阵-密集向量乘法中,向量中的每一个元素的位置由其索引确定,从而使下述操作变得可行:聚集与矩阵的区中的非零值相对应的向量元素;以及预计算需要针对矩阵将乘以的任何密集向量而聚集的向量元素的集合。然而,稀疏向量中的每一个元素的位置是不可预测的,且取决于向量中的非零元素的分布。这使得有必要检查稀疏向量和矩阵的非零元素以确定矩阵中的哪些非零对应于向量中的非零值。
将矩阵和向量中的非零元素的索引进行比较是有帮助的,这是因为计算稀疏矩阵-稀疏向量点积所需的指令/操作的数目是不可预测的且取决于矩阵和向量的结构。例如,考虑采取矩阵行与单个非零元素的点积和向量与许多非零元素的点积。如果行的非零比向量中的非零中的任一个具有更低索引,则点积仅要求一个索引比较。如果行的非零比向量中的非零中的任一个具有更高索引,则计算点积要求将行的非零的索引与向量中的每个索引进行比较。这假定通过向量的线性搜索,这是惯例。诸如二进制搜索之类的其他搜索将在最差的情况下更快,但将在行和向量中的非零重叠的普遍情况下添加显著开销。相比之下,执行稀疏矩阵-密集向量乘法所需的操作的数目是固定的,且由矩阵中的非零值的数目确定,从而使得容易预测计算所需的时间的量。
由于这些差异,加速器的一个实现方式使用相同的高级算法以实现稀疏矩阵-密集向量和稀疏矩阵-稀疏向量乘法,在向量如何跨点积引擎而分布和如何计算点积方面有差异。因为加速器意图用于大稀疏矩阵计算,所以不能假定矩阵或向量将在芯片上存储器中适合。取而代之,一个实现方式使用图25中概述的成块方案。
特别地,在该实现方式中,加速器会将矩阵划分成被大小调整为在芯片上存储器中适合的固定大小数据块2501-2502,且会将块中的行与向量相乘,以在继续进行到下一个块之前生成输出向量的组块。该方法提出了两个挑战。第一,稀疏矩阵的每一行中的非零的数目在数据集之间较宽地变化,在所研究的数据集中从像1那么低变化到像46000那么高。这使将一个行或甚至固定数目的行指派给每一个点积引擎变得不实际。因此,一个实现方式将矩阵数据的固定大小组块指派给每一个点积引擎,并处置组块包含多个矩阵行的情况以及跨多个组块拆分单个行的情况。
第二个挑战是:针对矩阵的每一个块从堆叠DRAM取得整个向量有可能浪费显著量的带宽(即,取得向量元素,针对该向量元素,在块中不存在对应的非零)。这对于稀疏矩阵-密集向量乘法而言特别成问题,在稀疏矩阵-密集向量乘法中,向量可以是稀疏矩阵的大小的显著小部分。为了解决这一点,一个实现方式针对矩阵中的每一个块2501-2502构造取得列表2511-2512,其列出了与块中的非零值相对应的向量2510元素的集合,且仅在对块进行处理时取得那些元素。尽管取得列表还必须从堆叠DRAM取得,但已经确定,针对大多数块的取得列表将是块的大小的小部分。还可以使用诸如游程长度编码之类的技术以减小取得列表的大小。
因此,加速器上的矩阵-向量乘法将涉及以下操作序列:
1. 从DRAM堆叠取得矩阵数据的块并跨点积引擎而分发它;
2. 基于矩阵数据中的非零元素来生成取得列表;
3. 从堆叠DRAM取得该取得列表中的每一个向量元素并将其分发给点积引擎;
4. 计算块中的行与向量的点积并将结果写回到堆叠DRAM;以及
5. 与计算并行地,取得矩阵数据的下一个块并重复直到整个矩阵已经被处理。
当加速器包含多个堆叠时,可以将矩阵的“分区”静态地指派给不同堆叠,并且然后可以在每一个分区上并行地执行成块算法。该成块和广播方案具有下述优势:所有存储器引用源自于中央控制单元,这极大地简化了芯片上网络的设计,这是由于网络不必在点积引擎与存储器控制器之间路由不可预测的请求和回应。其还通过针对给定块所需的每一个向量元素仅发出一个存储器请求来节省能量,这与使个体点积引擎针对它们要求以执行它们的计算部分的向量元素发出存储器请求形成对照。最后,从经组织的索引列表向外取得向量元素使得容易以最大化堆叠DRAM中的页面命中且因而最大化带宽使用率的方式调度那些取得所要求的存储器请求。
实现稀疏矩阵-密集向量乘法
在本文描述的加速器实现方式上实现稀疏矩阵-密集向量乘法时的一个挑战是:将从存储器成流的向量元素匹配到每一个点积引擎的缓冲器中的矩阵元素的索引。在一个实现方式中,向量的256个字节(32-64个元素)每循环到达点积引擎,并且每一个向量元素可以对应于点积引擎的矩阵缓冲器中的非零中的任一个,这是由于矩阵数据的固定大小块被取得到每一个点积引擎的矩阵缓冲器中。
针对每一个循环执行这么多比较将在面积和功率方面过分昂贵。取而代之,一个实现方式利用下述事实:许多稀疏矩阵应用重复地将相同矩阵乘以相同或不同向量,并使用图26中所示的格式来预计算每一个点积引擎将需要以处理矩阵的其组块的取得列表的元素。在基线CRS格式中,矩阵由下述各项描述:定义其行内的每一个非零值的位置的索引的阵列2602;包含每一个非零的值的阵列2603;以及指示每一行在索引和值阵列中何处起始的阵列2601。为此,一个实现方式添加标识每一个点积引擎需要捕获向量数据的哪些突发的块描述符的阵列2605,以便执行总体计算的其小部分。
如图26中所示,每一个块描述符由八个16比特值和突发描述符的列表构成。第一16比特值向硬件告知多少个突发描述符处于块描述符中,而其余七个标识了针对除第一个外的所有堆叠DRAM数据通道的突发描述符列表内的起始点。这些值的数目将取决于堆叠DRAM所提供的数据通道的数目而改变。每一个突发描述符包含:24比特突发计数,其向硬件告知其需要注意哪个数据突发;以及“所需字”比特向量,其标识突发内的包含点处理引擎所需的值的字。
一个实现方式中所包括的另一个数据结构是矩阵缓冲器索引(MBI)的阵列2604,针对矩阵中的每非零有一个MBI。每一个MBI给出了与非零相对应的密集向量元素将存储在相关点积引擎的向量值缓冲器(参见例如图28)中的位置。当执行稀疏矩阵-密集向量乘法时,矩阵缓冲器索引而不是原始矩阵索引被加载到点积引擎的矩阵索引缓冲器2604中,且充当用于在计算点积时查找对应向量值的地址。
图27图示了在具有仅一个堆叠DRAM数据通道和四字数据突发的系统上这如何对于在单个点积引擎的缓冲器内适合的两行矩阵而言有效。在图的左侧示出了包括行起始值2701、矩阵索引2702和矩阵值2703的原始CRS表示。由于两个行在列{2, 5, 6}和{2, 4, 5}中具有非零元素,因此要求向量的元素2、4、5和6以计算点积。块描述符反映了这一点,从而指示第一个四字突发的字2(向量的元素2)以及第二个四字突发的字0、1和2(向量的元素4-6)是必需的。由于向量的元素2是点积引擎所需的向量的第一个字,因此其将去往向量值缓冲器中的位置0中。向量的元素4将去往位置1中,依此类推。
矩阵缓冲器索引阵列数据2704保持向量值缓冲器内的位置,其中硬件将找到与矩阵中的非零相对应的值。由于矩阵索引阵列中的第一个条目具有值“2”,因此矩阵缓冲器索引阵列中的第一个条目得到值“0”,对应于向量的元素2将存储在向量值缓冲器中的位置。类似地,不论“4”出现在矩阵索引阵列中何处,“1”都将出现在矩阵缓冲器索引中,矩阵索引阵列中的每一个“5”将具有矩阵缓冲器索引中的对应“2”,并且矩阵索引阵列中的每一个“6”将对应于矩阵缓冲器索引中的“3”。
本发明的一个实现方式执行当矩阵被加载到加速器上时支持出于密集向量的快速聚集所需的预计算,从而利用下述事实:多堆叠加速器的总带宽比用于将数据从CPU传送到加速器的KTI链路的带宽大得多。取决于相同矩阵索引的多个拷贝多久出现在被映射到点积引擎上的矩阵的组块内,该预计算信息增加了保持矩阵多达75%所需的存储器的量。然而,因为当执行矩阵-向量乘法时取得16比特矩阵缓冲器索引阵列而不是矩阵索引阵列,所以从堆叠DRAM向外取得的数据的量常常将小于在原始CRS表示中,特别是对于使用64比特索引的矩阵。
图28图示了使用该格式的点积引擎中的硬件的一个实现方式。为了执行矩阵-向量乘法,将矩阵的组成块的组块拷贝到矩阵索引缓冲器3003和矩阵值缓冲器3005中(拷贝矩阵缓冲器索引而不是原始矩阵索引)并且将相关块描述符拷贝到块描述符缓冲器3002中。然后,使用取得列表以从密集向量加载所需元素并将它们广播到点积引擎。每一个点积引擎对在每一个数据通道上经过的向量数据的突发的数目进行计数。当给定数据通道上的计数匹配于在突发描述符中指定的值时,匹配逻辑3020捕获所指定的字并将它们存储在其向量值缓冲器3004中。
图29示出了进行该捕获的匹配逻辑3020单元的内容。当计数器匹配于突发描述符中的值时,锁存器3105在数据通道的线上捕获值。移位器3106从突发3101向外提取所需的字3102,并将它们路由到大小匹配于向量值缓冲器中的行的行缓冲器3107中的正确位置。当突发计数3101等于内部计数器3104时,生成加载信号。当行缓冲器填满时,其存储在向量值缓冲器3004中(通过复用器3108)。以该方式将来自多个突发的字组装到行中减少了向量值缓冲器需要支持的写入/循环的数目,从而减小了其大小。
一旦已经在向量值缓冲器中捕获向量的所有所需元素,点积引擎就使用ALU 3010来计算(一个或多个)所需点积。控制逻辑3001顺序地步进通过矩阵索引缓冲器3003和矩阵值缓冲器3004,每循环一个元素。矩阵索引缓冲器3003的输出被用作在下一个循环上针对向量值缓冲器3004的读取地址,而矩阵值缓冲器3004的输出被锁存以使得其与来自向量值缓冲器3004的对应值同时到达ALU 3010。例如,使用来自图27的矩阵,在点积计算的第一个循环上,硬件将从矩阵索引缓冲器3003向外读取矩阵缓冲器索引“0”,连同来自矩阵值缓冲器3005的值“13”。在第二个循环上,来自矩阵索引缓冲器3003的值“0”充当针对向量值缓冲器3004的地址,从而取得向量元素“2”的值,该值然后在循环3上与“13”相乘。
行起始比特向量2901中的值向硬件告知何时矩阵的行结束并且新的行开始。当硬件到达行的结尾时,其将针对该行的所累积的点积放置在其输出锁存器3011中,并开始针对下一行累积点积。在组装输出向量以用于写回的菊花链中连接每一个点积引擎的点积锁存器。
实现稀疏矩阵-稀疏向量乘法
在稀疏矩阵-稀疏向量乘法中,向量往往比在稀疏矩阵-密集向量乘法中占据小得多的存储器,但是因为其是稀疏的,所以不可能直接取得与给定索引相对应的向量元素。取而代之,必须搜索向量,从而使仅将每一个点积引擎所需的元素路由到该点积引擎变得不实际,并且使计算向每一个点积引擎指派的矩阵数据的点积所需的时间的量变得不可预测。由于这一点,针对稀疏矩阵-稀疏向量乘法的取得列表仅指定矩阵块中的最低和最高非零元素的索引,并且那些点之间的向量的所有非零元素必须被广播到点积引擎。
图30示出了支持稀疏矩阵-稀疏向量乘法的点积引擎设计的细节。为了处理矩阵数据的块,将点积引擎的矩阵组块的索引(不是在稀疏-密集乘法中使用的矩阵缓冲器索引)和值写入到矩阵索引和值缓冲器中,对块进行处理所需的向量的区的索引和值亦如此。点积引擎控制逻辑3040然后顺序通过索引缓冲器3002-3003,索引缓冲器3002-3003将四个索引的块输出到4×4比较器3020。4×4比较器3020将来自向量3002的索引中的每一个与来自矩阵3003的索引中的每一个进行比较,并将任何匹配的缓冲器地址输出到匹配索引队列3030中。匹配索引队列3030的输出驱动矩阵值缓冲器3005和向量值缓冲器3004的读取地址输入,矩阵值缓冲器3005和向量值缓冲器3004将与匹配相对应的值输出到乘法-加法ALU3010中。该硬件允许点积引擎每循环消耗至少四个以及多达八个索引,只要匹配索引队列3030具有空的空间即可,从而减少了当索引匹配稀少时对数据块进行处理所需的时间的量。
如稀疏矩阵-密集向量点积引擎那样,行起始3001的比特向量标识了起始矩阵的新行的矩阵缓冲器3092-3003中的条目。当遇到这种条目时,控制逻辑3040重置到向量索引缓冲器3002的开始,并开始检查来自其最低值的向量索引,从而将它们与矩阵索引缓冲器3003的输出进行比较。类似地,如果到达向量的结尾,则控制逻辑3040前进到矩阵索引缓冲器3003中的下一行的开始,并重置到向量索引缓冲器3002的开始。“完成”输出向芯片控制单元通知何时点积引擎已经完成处理数据块或向量的区以及准备好继续进行到下一个。为了简化加速器的一个实现方式,控制逻辑3040直到所有点积引擎已经完成处理之前不会继续进行到下一个块/区。
在许多情况下,向量缓冲器将是足够大的,以保持对块进行处理所需的所有稀疏向量。在一个实现方式中,取决于32比特或64比特值被使用,提供针对1024或2048个向量元素的缓冲器空间。
当向量的所需元素在向量缓冲器中不适合时,可以使用多遍方法。控制逻辑3040会将向量的完整缓冲器广播到每一个点积引擎中,这将开始迭代通过其矩阵缓冲器中的行。当点积引擎在到达行的结尾之前到达向量缓冲器的结尾时,其会将当前行位置比特向量3011中的比特设置成指示当向量的下一个区到达时其应当在何处恢复处理行,其会将其已经累积的部分点积保存在矩阵值缓冲器3005的与行的起始相对应的位置中,除非行的起始具有比到目前为止已处理的向量索引中的任一个更高的索引值,并且其会前进到下一行。在矩阵缓冲器中的所有行已经被处理之后,点积引擎会断言其完成信号以请求向量的下一个区,且会重复该过程直到整个向量已经被读取。
图31图示了使用具体值的示例。在计算的起始3101处,已经将矩阵的四元素组块写入到矩阵缓冲器3003、3005中,并且已经将向量的四元素区写入到向量缓冲器3002、3004中。行起始3001和当前行位置比特向量3011二者均具有值“1010”,从而指示点积引擎的矩阵组块包含两个行,其中一个起始于矩阵缓冲器中的第一个元素处并且其中一个起始于第三个元素处。
当第一个区被处理时,组块中的第一行在索引3处看到索引匹配,计算矩阵和向量缓冲器的对应元素的积(4×1=4),并将该值写入到矩阵值缓冲器3005的与行的起始相对应的位置中。第二行在索引1处看到一个索引匹配,计算向量和矩阵的对应元素的积,并将结果(6)写入到矩阵值缓冲器3005中与其起始相对应的位置处。当前行位置比特向量的状态改变到“0101”,从而指示每一行的第一个元素已经被处理并且计算应当以第二个元素恢复。点积引擎然后断言其完成线以发信号通知其针对向量的另一个区而准备好。
当点积引擎处理向量的第二个区时,其看到行1在索引4处具有索引匹配,计算矩阵和向量的对应值的积(5×2=10),将该值加到在第一向量区被处理之后保存的部分点积,并输出结果(14)。第二行在索引7处找到匹配,并输出结果38,如图中所示。以该方式保存部分点积和计算的状态避免了对可能不能与向量的稍后区中的索引匹配的矩阵的元素进行处理的冗余工作(因为按升序利用索引对向量进行排序),而无需用于部分积的显著量的额外储存器。
统一点积引擎设计
图32示出了如何组合上面描述的稀疏-密集和密集-密集点积引擎以产生可处置全部两种类型的计算的点积引擎。给定两个设计之间的相似性,则仅有的所需改变既要实例化稀疏-密集点积引擎的匹配逻辑3211,又要实例化密集-密集点积引擎的比较器3220和匹配索引队列3230,连同确定哪些模块驱动缓冲器3004-3005的读取地址和写入数据输入的复用器3250以及选择矩阵值缓冲器的输出或矩阵值缓冲器的锁存输出是否被发送到乘法-加法ALU 3010的复用器3251的集合。在一个实现方式中,这些复用器由控制单元3040中的配置比特控制,该配置比特是在矩阵-向量乘法的开始处设置的,且遍及该操作保持处于相同配置中。
指令集
指令集可以包括一个或多个指令格式。给定指令格式可以定义各种字段(例如,比特的数目、比特的位置)以除了其他以外指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码)。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段典型地按相同次序,但至少一些具有不同比特位置,这是因为存在更少的字段被包括)和/或被定义成具有以不同方式解释的给定字段。因此,指令集架构(ISA)的每一个指令是使用给定指令格式(并且如果被定义的话,在该指令格式的指令模板中给定的一个指令模板中)来表达的,且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有具体操作码和指令格式,该指令格式包括用于指定该操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地和源2);并且该ADD指令在指令流中的出现将具有选择具体操作数的操作数字段中的具体内容。被称作高级向量扩展(AVX)(AVX1和AVX2)且使用向量扩展(VEX)编码方案的单指令多数据(SIMD)扩展的集合已经被发行和/或发布(例如,参见Intel® 64和IA-32架构软件开发者的手册,2014年9月;以及参见Intel®高级向量扩展编程参考,2014年10月)。
本文描述的(一个或多个)指令的实施例可以以不同格式体现。附加地,下面详述示例性系统、架构和流水线。(一个或多个)指令的实施例可以在这种系统、架构和流水线上执行,但不限于所详述的那些。
示例性寄存器架构
图33是根据本发明的一个实施例的寄存器架构3300的框图。在所图示的实施例中,存在512比特宽的32个向量寄存器3310;这些寄存器被称作zmm0至zmm31。较低16个zmm寄存器的较低次序256个比特覆盖在寄存器ymm0-16上。较低16个 zmm寄存器的较低次序128个比特(ymm寄存器的较低次序128个比特)覆盖在寄存器xmm0-15上。
写入掩码寄存器3315——在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每一个在大小方面为64个比特。在可替换实施例中,写入掩码寄存器3315在大小方面为16个比特。在本发明的一个实施例中,向量掩码寄存器k0不能被用作写入掩码;当通常将指示k0的编码用于写入掩码时,其选择硬连线写入掩码0xFFFF,从而针对该指令有效地禁用写入掩蔽。
通用寄存器3325——在所图示的实施例中,存在十六个64比特通用寄存器,其连同现有x86寻址模式一起被用于寻址存储器操作数。这些寄存器是通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来引用的。
标量浮点堆叠寄存器文件(x87堆叠)3345,在其上别名为MMX封包整型平坦寄存器文件3350——在所图示的实施例中,x87堆叠是用于使用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素堆叠;而MMX寄存器用于在64比特封包整型数据上执行操作以及保持在MMX和XMM寄存器之间执行的一些操作的操作数。
本发明的可替换实施例可以使用更宽或更窄的寄存器。附加地,本发明的可替换实施例可以使用更多、更少或不同寄存器文件和寄存器。
示例性核架构、处理器和计算机架构
可以以不同方式、出于不同目的以及在不同处理器中实现处理器核。例如,这种核的实现方式可以包括:1)通用按序核,意图用于通用计算;2)高性能通用乱序核,意图用于通用计算;3)专用核,主要意图用于图形和/或科学(吞吐量)计算。不同处理器的实现方式可以包括:1)CPU,包括意图用于通用计算的一个或多个通用按序核和/或意图用于通用计算的一个或多个通用乱序核;以及2)协处理器,包括主要意图用于图形和/或科学(吞吐量)的一个或多个专用核。这种不同处理器导致不同计算机系统架构,其可以包括:1)与CPU分离的芯片上的协处理器;2)与CPU相同的封装中的分离管芯上的协处理器;3)与CPU相同的管芯上的协处理器(在该情况下,这种协处理器有时被称作专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者被称作专用核);以及4)可在相同管芯上包括所描述的CPU(有时被称作(一个或多个)应用核或(一个或多个)应用处理器)、上面描述的协处理器和附加功能的芯片上的系统。接下来描述示例性核架构,接着描述示例性处理器和计算机架构。
示例性核架构
按序和乱序核框图
图34A是图示了根据本发明的实施例的示例性按序流水线和示例性寄存器重命名乱序发出/执行流水线二者的框图。图34B是图示了根据本发明的实施例的要包括在处理器中的按序架构核示例性实施例和示例性寄存器重命名乱序发出/执行架构核二者的框图。图34A-B中的实线框图示了按序流水线和按序核,而虚线框的可选添加图示了寄存器重命名乱序发出/执行流水线和核。给定按序方面是乱序方面的子集,则将描述乱序方面。
在图34A中,处理器流水线3400包括取得级3402、长度解码级3404、解码级3406、分配级3408、重命名级3410、调度(也被称作分派或发出)级3412、寄存器读取/存储器读取级3414、执行级3416、写回/存储器写入级3418、异常处置级3422和提交级3424。
图34B示出了包括耦合到执行引擎单元3450的前端单元3430的处理器核3490,前端单元3430和执行引擎单元3450二者均耦合到存储器单元3470。核3490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、甚长指令字(VLIW)核、或者混合或可替换核类型。作为又一选项,核3490可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等等。
前端单元3430包括耦合到指令高速缓存单元3434的分支预测单元3432,指令高速缓存单元3434耦合到指令转译后备缓冲器(TLB)3436,指令转译后备缓冲器(TLB)3436耦合到指令取得单元3438,指令取得单元3438耦合到解码单元3440。解码单元3440(或解码器)可以对指令进行解码,并作为输出而生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令解码、或以其他方式反映原始指令、或从原始指令导出。解码单元3440可以是使用各种不同机制来实现的。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核3490包括存储针对某些宏指令的微代码(例如,在解码单元3440中或以其他方式在前端单元3430内)的微代码ROM或其他介质。解码单元3440耦合到执行引擎单元3450中的重命名/分配器单元3452。
执行引擎单元3450包括耦合到引退单元3454以及一个或多个调度器单元3456的集合的重命名/分配器单元3452。(一个或多个)调度器单元3456表示包括预留站、中央指令窗口等的任何数目的不同调度器。(一个或多个)调度器单元3456耦合到(一个或多个)物理寄存器文件(一个或多个)单元3458。(一个或多个)物理寄存器文件单元3458中的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同数据类型,诸如标量整型、标量浮点、封包整型、封包浮点、向量整型、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器文件单元3458包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件(一个或多个)单元3458被引退单元3454重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池;等等)。引退单元3454和(一个或多个)物理寄存器文件(一个或多个)单元3458耦合到(一个或多个)执行集群3460。(一个或多个)执行集群3460包括一个或多个执行单元3462的集合和一个或多个存储器访问单元3464的集合。执行单元3462可以执行各种操作(例如,移位、加法、减法、乘法)以及在各种类型的数据(例如,标量浮点、封包整型、封包浮点、向量整型、向量浮点)上执行。尽管一些实施例可以包括专用于具体功能或功能集合的多个执行单元,但其他实施例可以包括仅一个执行单元或全部执行所有功能的多个执行单元。(一个或多个)调度器单元3456、(一个或多个)物理寄存器文件(一个或多个)单元3458和(一个或多个)执行集群3460被示作可能多个,这是因为某些实施例针对某些类型的数据/操作创建分离的流水线(例如,标量整型流水线、标量浮点/封包整型/封包浮点/向量整型/向量浮点流水线、和/或存储器访问流水线,每一个具有其自身的调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群——并且在分离的存储器访问流水线的情况下,实现某些实施例,其中该流水线的仅执行集群具有(一个或多个)存储器访问单元3464)。还应当理解,在使用分离的流水线的情况下,这些流水线中的一个或多个可以是乱序发出/执行,并且剩余流水线可以是按序的。
存储器访问单元3464的集合耦合到存储器单元3470,存储器单元3470包括数据TLB单元3472,数据TLB单元3472耦合到数据高速缓存单元3474,数据高速缓存单元3474耦合到2级(L2)高速缓存单元3476。在一个示例性实施例中,存储器访问单元3464可以包括加载单元、存储地址单元和存储数据单元,其中每一个耦合到存储器单元3470中的数据TLB单元3472。指令高速缓存单元3434进一步耦合到存储器单元3470中的2级(L2)高速缓存单元3476。L2高速缓存单元3476耦合到一个或多个其他级高速缓存且最终耦合到主存储器。
作为示例,示例性寄存器重命名乱序发出/执行核架构可以实现流水线3400如下:1)指令取得单元3438执行取得和长度解码级3402和3404;2)解码单元3440执行解码级3406;3)重命名/分配器单元3452执行分配级3408和重命名级3410;4)(一个或多个)调度器单元3456执行调度级3412;5)(一个或多个)物理寄存器文件(一个或多个)单元3458和存储器单元3470执行寄存器读取/存储器读取级3414;执行集群3460执行执行级3416;6)存储器单元3470和(一个或多个)物理寄存器文件(一个或多个)单元3458执行写回/存储器写入级3418;7)各种单元可以在异常处置级3422中涉及;以及8)引退单元3454和(一个或多个)物理寄存器文件(一个或多个)单元3458执行提交级3424。
核3490可以支持一个或多个指令集(例如,x86指令集(具有已利用较新的版本添加的一些扩展);Sunnyvale, CA的MIPS Technologies的MIPS指令集;Sunnyvale, CA的ARMHoldings的ARM指令集(具有诸如NEON之类的可选附加扩展)),其包括本文描述的(一个或多个)指令。在一个实施例中,核3490包括用于支持封包数据指令集扩展(例如,AVX1、AVX2)从而允许使用封包数据执行由许多多媒体应用使用的操作的逻辑。
应当理解,核可以支持多线程(执行操作或线程的两个或更多个并行集合),且可以以多种方式这样做,该多种方式包括时间切片多线程、同时多线程(其中单个物理核针对该物理核同时多线程的线程中的每一个提供逻辑核)或其组合(例如,时间切片取得和解码以及此后的同时多线程,诸如在Intel® Hyperthreading技术中)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,寄存器重命名可以被用在按序架构中。尽管处理器的所图示的实施例还包括分离的指令和数据高速缓存单元3434/3474以及共享L2高速缓存单元3476,但可替换实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和处于核和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存可以处于核和/或处理器外部。
具体示例性按序核架构
图35A-B图示了更具体的示例性按序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)之一。取决于应用,逻辑块通过高带宽互连网络(例如,环状网络)与某种固定功能逻辑、存储器I/O接口和其他必要的I/O逻辑通信。
图35A是根据本发明的实施例的单个处理器核连同其到管芯上互连网络3502的连接和其局部2级(L2)高速缓存子集3504的框图。在一个实施例中,指令解码器3500支持具有封包数据指令集扩展的x86指令集。L1高速缓存3506允许低时延访问将存储器高速缓存到标量和向量单元中。尽管在一个实施例中(为了简化设计)标量单元3508和向量单元3510使用分离的寄存器集合(分别地,标量寄存器3512和向量寄存器3514)并且它们之间传送的数据被写入到存储器且然后从1级(L1)高速缓存350读回,但本发明的可替换实施例可以使用不同的方法(例如,使用单个寄存器集合或者包括允许在两个寄存器文件之间传送数据而不被写入和读回的通信路径)。
局部L2高速缓存子集3504是被划分成分离局部子集的全局L2高速缓存的一部分,每处理器核一个局部子集。每一个处理器核具有到其自身的局部L2高速缓存子集3504的直接访问路径。由处理器核读取的数据存储在其L2高速缓存子集3504中,并且,可以与其他处理器核访问其自身的局部L2高速缓存子集并行地快速访问该数据。如果必要的话,由处理器核写入的数据存储在其自身的L2高速缓存子集3504中且从其他子集冲掉。环状网络确保针对共享数据的一致性。环状网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每一个环状数据路径是每方向1012比特宽。
图35B是根据本发明的实施例的图35A中的处理器核的一部分的扩展视图。图35B包括L1高速缓存3504的L1数据高速缓存3506A部分以及与向量单元3510和向量寄存器3514有关的更多细节。具体地,向量单元3510是16宽向量处理单元(VPU)(参见16宽ALU 3528),其执行整型、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用搅和单元3520搅和寄存器输入、利用数值转换单元3522A-B的数值转换和利用复制单元3524而在存储器输入上的复制。写入掩码寄存器3526允许断定所得到的向量写入。
图36是根据本发明的实施例的可具有多于一个核、可具有集成存储器控制器以及可具有集成图形的处理器3600的框图。图36中的实线框图示了具有单个核3602A、系统代理3610、一个或多个总线控制器单元3616的集合的处理器3600,而虚线框的可选添加图示了具有多个核3602A-N、系统代理单元3610中的一个或多个集成存储器控制器单元3614的集合和专用逻辑3608的可替换处理器3600。
因此,处理器3600的不同实现方式可以包括:1)CPU,其中专用逻辑3608是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且核3602A-N是一个或多个通用核(例如,通用按序核、通用乱序核、这两者的组合);2)协处理器,其中核3602A-N是大量的专用核,主要意图用于图形和/或科学(吞吐量);以及3)协处理器,其中核3602A-N是大量的通用按序核。因此,处理器3600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器等等。处理器可以被实现在一个或多个芯片上。处理器3600可以是一个或多个衬底的部分和/或可以使用多种工艺技术中的任一种而被实现在一个或多个衬底上,这些工艺技术诸如例如是BiCMOS、互补金属氧化物半导体(CMOS)或负沟道金属氧化物半导体(NMOS)。
存储器层级包括核内的一级或多级高速缓存、集合或者一个或多个共享高速缓存单元3606、以及耦合到集成存储器控制器单元3614的集合的外部存储器(未示出)。共享高速缓存单元3606的集合可以包括一个或多个中级高速缓存(诸如2级(L2)、3级(L3)、4级(L4)或其他级高速缓存)、末级高速缓存(LLC)和/或其组合。尽管在一个实施例中基于环的互连单元3612将专用逻辑3608(例如,集成图形逻辑)、共享高速缓存单元3606的集合和系统代理单元3610/(一个或多个)集成存储器控制器单元3614互连,但可替换实施例可以使用用于将这种单元互连的任何数目的公知技术。在一个实施例中,在一个或多个高速缓存单元3606与核3602A-N之间维持一致性。
在一些实施例中,核3602A-N中的一个或多个能够进行多线程。系统代理3610包括协调和操作核3602A-N的那些部件。系统代理单元3610可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核3602A-N和集成图形逻辑3608的功率状态所需的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核3602A-N可以在架构指令集方面是同构或异构的;也就是说,核3602A-N中的两个或更多个可能能够执行相同指令集,而其他核可能能够执行该指令集的仅子集或不同的指令集。
示例性计算机架构
图37-40是示例性计算机架构的框图。本领域中已知的用于膝上型电脑、台式电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是合适的。一般地,如本文公开的能够结合处理器和/或其他执行逻辑的极多种系统或电子设备一般是合适的。
现在参照图37,示出了根据本发明的一个实施例的系统3700的框图。系统3700可以包括一个或多个处理器3710、3715,其耦合到控制器中枢3720。在一个实施例中,控制器中枢3720包括图形存储器控制器中枢(GMCH)3790和输入/输出中枢(IOH)3750(其可以处于分离的芯片上);GMCH 3790包括存储器3740和协处理器3745耦合到的存储器和图形控制器;IOH 3750将输入/输出(I/O)设备3760耦合到GMCH 3790。可替换地,存储器和图形控制器中的一个或全部两个集成在处理器内(如本文所描述),存储器3740和协处理器3745直接耦合到处理器3710以及具有IOH 3750的单个芯片中的控制器中枢3720。
在图37中用虚线标示了附加处理器3715的可选性质。每一个处理器3710、3715可以包括本文描述的处理核中的一个或多个且可以是处理器3600的某种版本。
存储器3740可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢3720经由多点分支总线(诸如前侧总线(FSB))、点对点接口(诸如快速路径互连(QPI, QuickPath Interconnect))或类似连接3795与(一个或多个)处理器3710、3715通信。
在一个实施例中,协处理器3745是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。在一个实施例中,控制器中枢3720可以包括集成图形加速器。
在物理资源(例如,处理器3710、3715)之间可以存在包括架构、微架构、热、功率消耗特性等等的有价值的度量范围方面的多种差异。
在一个实施例中,处理器3710执行对一般类型的数据处理操作进行控制的指令。在指令内嵌入的可以是协处理器指令。处理器3710将这些协处理器指令识别为属于应当由所附着的协处理器3745执行的类型。相应地,处理器3710在协处理器总线或其他互连件上向协处理器3745发出这些协处理器指令(或表示协处理器指令的控制信号)。(一个或多个)协处理器3745接受和执行所接收的协处理器指令。
现在参照图38,示出了根据本发明的实施例的第一更具体示例性系统3800的框图。如图38中所示,多处理器系统3800是点对点互连系统,且包括经由点对点互连件3850耦合的第一处理器3870和第二处理器3880。处理器3870和3880中的每一个可以是处理器3600的某种版本。在本发明的一个实施例中,处理器3870和3880分别是处理器3710和3715,而协处理器3838是协处理器3745。在另一实施例中,处理器3870和3880分别是处理器3710、协处理器3745。
示出了处理器3870和3880,分别包括集成存储器控制器(IMC)单元3872和3882。处理器3870还包括点对点(P-P)接口3876和3878作为其总线控制器单元的一部分;类似地,第二处理器3880包括P-P接口3886和3888。处理器3870、3880可以经由点对点(P-P)接口3850使用P-P接口电路3878、3888来交换信息。如图38中所示,IMC 3872和3882将处理器耦合到相应存储器,即存储器3832和存储器3834,其可以是本地附着到相应处理器的主存储器的部分。
处理器3870、3880中的每一个可以经由个体P-P接口3852、3854使用点对点接口电路3876、3894、3886、3898来与芯片集3890交换信息。芯片集3890可以可选地经由高性能接口3892来与协处理器3838交换信息。在一个实施例中,协处理器3838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器,GPGPU、嵌入式处理器等等。
共享高速缓存(未示出)可以包括在两个处理器中的任一个中或在全部两个处理器外,但经由P-P互连件与处理器连接,使得如果处理器被置于低功率模式中,则任一个或全部两个处理器的本地高速缓存信息可以存储在共享高速缓存中。
芯片集3890可以经由接口3896耦合到第一总线3816。在一个实施例中,第一总线3816可以是外围部件互连(PCI)总线或者诸如高速PCI总线或另一第三代I/O互连总线之类的总线,尽管本发明的范围不如此受限。
如图38中所示,各种I/O设备3814可以耦合到第一总线3816,连同将第一总线3816耦合到第二总线3820的总线桥3818。在一个实施例中,一个或多个附加处理器3815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)耦合到第一总线3816。在一个实施例中,第二总线3820可以是低管脚计数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线3820,包括例如键盘和/或鼠标3822、通信设备3827以及可包括指令/代码和数据3830的储存单元3828,诸如盘驱动器或其他大容量储存设备。此外,音频I/O 3824可以耦合到第二总线3820。注意,其他架构是可能的。例如,取代图38的点对点架构,系统可以实现多点分支总线或其他这种架构。
现在参照图39,示出了根据本发明的实施例的第二更具体示例性系统3900的框图。图38和39中的相似元件具有相似的附图标记,并且,已经从图39省略了图38的某些方面以便避免使图39的其他方面模糊。
图39图示了处理器3870、3880可以分别包括集成存储器和I/O控制逻辑(“CL”)3872和3882。因此,CL 3872、3882包括集成存储器控制器单元且包括I/O控制逻辑。图39图示了不仅存储器3832、3834耦合到CL 3872、3882,而且I/O设备3914也耦合到控制逻辑3872、3882。传统I/O设备3915耦合到芯片集3890。
现在参照图40,示出了根据本发明的实施例的SoC 4000的框图。图36中的类似元件具有相似的附图标记。而且,虚线框在更高级的SoC上是可选特征。在图40中,(一个或多个)互连单元4002耦合到:应用处理器4010,其包括一个或多个核3602A-N的集合和(一个或多个)共享高速缓存单元3606,该一个或多个核3602A-N包括高速缓存单元3604A-N;系统代理单元3610;(一个或多个)总线控制器单元3616;(一个或多个)集成存储器控制器单元3614;集合或者一个或多个协处理器4020,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元4030;直接存储器访问(DMA)单元4032;以及显示单元4040,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器4020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
本文公开的机制的实施例可以以硬件、软件、固件、或这样的实现方法的组合实现。本发明的实施例可以被实现为在包括至少一个处理器、储存器系统(包括易失性和非易失性存储器和/或储存器元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
可以应用程序代码(诸如,图38中图示的代码3830)以输入执行本文描述的功能且生成输出信息的指令。可以以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如是数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
可以以高级过程编程语言或面向对象的编程语言实现程序代码,以与处理系统通信。如果期望的话,还可以以汇编或机器语言实现程序代码。事实上,本文描述的机制在范围方面不限于任何特定编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令实现,该机器可读介质表示处理器内的各种逻辑,该各种逻辑在由机器读取时使该机器制造执行本文描述的技术的逻辑。被称为“IP核”的这种表示可以存储在有形机器可读介质上且被供给到各种客户或制造设施以加载到实际上制作逻辑或处理器的制造机器中。
这种机器可读储存介质可以包括而不限于由机器或设备制造或形成的物件的非瞬变有形布置,其包括:诸如硬盘之类的储存介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、致密盘可重写(CD-RW)和磁光盘;半导体设备,诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM);磁或光卡;或者适于存储电子指令的任何其他类型的介质。
相应地,本发明的实施例还包括非瞬变有形机器可读介质,其包含指令或包含设计数据,诸如硬件描述语言(HDL),该设计数据定义本文描述的结构、电路、装置、处理器和/或系统特征。这种实施例还可以被称作程序产品。
模拟(包括二进制转译、代码变形等)
在一些情况下,可以使用指令转换器以将指令从源指令集转换成目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、动态二进制转译,包括动态编译)、变形、模拟或以其他方式转换成要由核执行的一个或多个其他指令。指令转换器可以以软件、硬件、固件或其组合实现。指令转换器可以处于处理器上、处于处理器外、或者部分处于处理器上且部分处于处理器外。
图41是根据本发明的实施例的将使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令进行对比的框图。在所图示的实施例中,指令转换器是软件指令转换器,尽管可替换地,指令转换器可以以软件、固件、硬件或其各种组合实现。图41示出了可以使用x86编译器4104来编译以高级语言4102存在的程序,以生成可由具有至少一个x86指令集核4116的处理器本机执行的x86二进制代码4106。具有至少一个x86指令集核4116的处理器表示下述任何处理器:其可以通过兼容地执行或以其他方式处理下述各项来执行与具有至少一个x86指令集核的 Intel®处理器基本上相同的功能以便实现与具有至少一个x86指令集核的 Intel®处理器基本上相同的结果:(1)Intel® x86指令集核的指令集的实质部分;或者(2)目标为在至少一个x86指令集核的Intel®处理器上运行的应用或其他软件的对象代码版本。x86编译器4104表示可操作成生成x86二进制代码4106(例如,对象代码)的编译器,x86二进制代码4106可以在具有或没有附加链接处理的情况下可在具有至少一个x86指令集核4116的处理器上执行。类似地,图41示出了可以使用可替换的指令集编译器4108来编译以高级语言4102存在的程序,以生成可由没有至少一个x86指令集核4114的处理器(例如,具有执行Sunnyvale, CA的MIPS Technologies的MIPS指令集和/或执行Sunnyvale, CA的ARM Holdings的ARM指令集的核的处理器)本机执行的可替换的指令集二进制代码4110。指令转换器4112用于将x86二进制代码4106转换成可由没有x86指令集核4114的处理器本机执行的代码。该经转换的代码不太可能与可替换的指令集二进制代码4110相同,这是因为有该能力的指令转换器难以制作;然而,经转换的代码将完成一般操作且由来自可替换指令集的指令组成。因此,指令转换器4112表示下述软件、固件、硬件或其组合:其通过模拟、仿真或任何其他过程来允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码4106。
尽管图中的流程图示出了由某些实施例执行的操作的特定次序,但应当理解,这种次序是示例性的。因此,可替换实施例可以按不同的次序执行操作、组合某些操作、重叠某些操作等。
附加地,尽管已经就若干实施例而言描述了本发明,但本领域技术人员将认识到,本发明不限于所描述的实施例,可以在所附权利要求的精神和范围内以修改和更改实施。因此,该描述应被视为说明性的而非限制性的。
Claims (22)
1.一种高效地执行网络规模k均值群集的硬件加速器,包括:
一个或多个稀疏瓦片,执行用于涉及矩阵的k均值群集任务的第一操作集合,所述稀疏瓦片中的每一个包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及
一个或多个非常稀疏/超稀疏瓦片,执行用于涉及所述矩阵的k均值群集任务的第二操作集合,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
2.如权利要求1所述的硬件加速器,进一步包括控制单元,所述控制单元:
确定涉及所述矩阵的k均值群集任务要被执行;以及
将所述矩阵分割成所述第一多个块和所述第二多个块,其中所述第一多个块包括所述矩阵的稀疏的一个或多个部分,并且其中所述第二多个块包括数据的非常稀疏或超稀疏的另一个或多个部分。
3.如权利要求2所述的硬件加速器,其中所述控制单元进一步:
使所述一个或多个稀疏瓦片使用所述第一多个块执行所述第一操作集合,且进一步使所述一个或多个非常稀疏/超稀疏瓦片使用所述第二多个块执行所述第二操作集合。
4.如权利要求1所述的硬件加速器,其中执行所述第一操作集合的所述一个或多个稀疏瓦片:
更新所述一个或多个稀疏瓦片的一个或多个随机存取存储器内的中心值的集合。
5.如权利要求4所述的硬件加速器,其中执行所述第一操作集合的所述一个或多个稀疏瓦片进一步:
由所述一个或多个稀疏瓦片的一个或多个数据管理单元将所述矩阵的多个行的值通过所述高带宽接口从所述第一存储器单元成流到第一多个处理元件的本地存储器。
6.如权利要求5所述的硬件加速器,其中执行所述第一操作集合的所述一个或多个稀疏瓦片进一步:
由所述第一多个处理元件使用所成流的值中的至少一些和与所述一个或多个稀疏瓦片分离的群集计算子系统执行多个距离计算。
7.如权利要求5所述的硬件加速器,其中执行所述第一操作集合的所述一个或多个稀疏瓦片进一步:
由所述第一多个处理元件使用中心值的集合执行一个或多个扩缩-更新操作。
8.如权利要求1所述的硬件加速器,其中执行所述第二操作集合的所述一个或多个非常稀疏/超稀疏瓦片:
在所述第二操作集合期间通过所述低时延接口更新所述第二存储器单元内的中心值的集合。
9.如权利要求8所述的硬件加速器,其中执行所述第二操作集合的所述一个或多个非常稀疏/超稀疏瓦片进一步:
由所述一个或多个非常稀疏/超稀疏瓦片的一个或多个数据管理单元通过使用随机访问请求、通过所述低时延接口从所述第二存储器单元检索所述矩阵的多个行的值。
10.如权利要求1至9中任一项所述的硬件加速器,其中所述一个或多个非常稀疏/超稀疏瓦片中的每一个和所述一个或多个稀疏瓦片中的每一个在分别执行所述第一操作集合和所述第二操作集合时:
将部分距离值提供给与所述一个或多个稀疏瓦片分离且与所述一个或多个非常稀疏/超稀疏瓦片分离的群集计算子系统;以及
从所述群集计算子系统获得最接近集群标识符。
11.一种用于高效地执行网络规模k均值群集的硬件加速器中的方法,包括:
由所述硬件加速器的一个或多个稀疏瓦片执行用于涉及矩阵的k均值群集任务的第一操作集合,所述稀疏瓦片中的每一个包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及
由所述硬件加速器的一个或多个非常稀疏/超稀疏瓦片执行用于涉及所述矩阵的k均值群集任务的第二操作集合,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
12.如权利要求11所述的方法,进一步包括:
由所述硬件加速器确定涉及矩阵的k均值群集任务要被执行;以及
由所述硬件加速器将所述矩阵分割成所述第一多个块和所述第二多个块,其中所述第一多个块包括所述矩阵的稀疏的一个或多个部分,并且其中所述第二多个块包括所述矩阵的非常稀疏或超稀疏的另一个或多个部分。
13.如权利要求12所述的方法,进一步包括:
使硬件处理器的所述一个或多个稀疏瓦片使用所述第一多个块执行所述第一操作集合,且进一步使硬件处理器的所述一个或多个非常稀疏/超稀疏瓦片使用所述第二多个块执行所述第二操作集合。
14.如权利要求11所述的方法,其中执行所述第一操作集合包括:
由所述一个或多个稀疏瓦片中的每一个的第一多个处理元件更新所述一个或多个稀疏瓦片的一个或多个随机存取存储器内的中心值的集合。
15.如权利要求14所述的方法,其中执行所述第一操作集合进一步包括:
由所述一个或多个稀疏瓦片的一个或多个数据管理单元将所述矩阵的多个行的值通过所述高带宽接口从所述第一存储器单元成流到所述第一多个处理元件的本地存储器。
16.如权利要求15所述的方法,其中执行所述第一操作集合进一步包括:
由所述一个或多个稀疏瓦片中的每一个的第一多个处理元件使用所成流的值中的至少一些和与所述一个或多个稀疏瓦片分离的群集计算子系统执行多个距离计算。
17.如权利要求15所述的方法,其中执行所述第一操作集合进一步包括:
由所述一个或多个稀疏瓦片中的每一个的第一多个处理元件使用中心值的集合执行一个或多个扩缩-更新操作。
18.如权利要求11所述的方法,其中执行所述第二操作集合包括:
由所述一个或多个非常稀疏/超稀疏瓦片中的每一个的第二多个处理元件通过所述低时延接口更新所述第二存储器单元内的中心值的集合。
19.如权利要求18所述的方法,其中执行所述第二操作集合进一步包括:
由所述一个或多个非常稀疏/超稀疏瓦片的一个或多个数据管理单元通过使用随机访问请求、通过所述低时延接口从所述第二存储器单元检索所述矩阵的多个行的值。
20.如权利要求11至19中任一项所述的方法,其中执行所述第一操作集合和执行所述第二操作集合中的每一个进一步包括:
将部分距离值提供给与所述一个或多个稀疏瓦片分离且与所述一个或多个非常稀疏/超稀疏瓦片分离的群集计算子系统;以及
从所述群集计算子系统获得最接近集群标识符。
21.一种高效地执行网络规模k均值群集的系统,包括:
一个或多个稀疏瓦片,执行用于涉及矩阵的k均值群集任务的第一操作集合,所述稀疏瓦片中的每一个包括第一多个处理单元,所述第一多个处理单元对所述矩阵的已被通过高带宽接口从第一存储器单元成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及
一个或多个非常稀疏/超稀疏瓦片,执行用于涉及所述矩阵的k均值群集任务的第二操作集合,所述非常稀疏/超稀疏瓦片中的每一个包括第二多个处理单元,所述第二多个处理单元对所述矩阵的已通过低时延接口从第二存储器单元随机访问的第二多个块进行操作。
22.一种高效地执行网络规模k均值群集的硬件加速器,包括:
第一装置,执行用于涉及矩阵的k均值群集任务的第一操作集合,所述第一装置中的每一个包括第二装置,所述第二装置对所述矩阵的已被通过高带宽接口从第三装置成流到所述一个或多个稀疏瓦片的一个或多个随机存取存储器的第一多个块进行操作;以及
第四装置,执行用于涉及所述矩阵的k均值群集任务的第二操作集合,所述第四装置中的每一个包括第五装置,所述第五装置对所述矩阵的已通过低时延接口从第六装置随机访问的第二多个块进行操作。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/396,515 US20180189675A1 (en) | 2016-12-31 | 2016-12-31 | Hardware accelerator architecture and template for web-scale k-means clustering |
US15/396515 | 2016-12-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108268320A true CN108268320A (zh) | 2018-07-10 |
Family
ID=60673628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711282647.8A Pending CN108268320A (zh) | 2016-12-31 | 2017-11-30 | 用于网络规模k均值群集的硬件加速器架构和模板 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20180189675A1 (zh) |
EP (1) | EP3343392B1 (zh) |
CN (1) | CN108268320A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109461113A (zh) * | 2018-10-11 | 2019-03-12 | 中国人民解放军国防科技大学 | 一种面向数据结构的图形处理器数据预取方法及装置 |
CN113330421A (zh) * | 2018-11-08 | 2021-08-31 | 莫维迪乌斯有限公司 | 点积计算器及其操作方法 |
CN114528101A (zh) * | 2022-02-14 | 2022-05-24 | 贵州电网有限责任公司 | 一种应用于电力边缘计算的神经网络的结构化动态量化方法 |
CN116187408A (zh) * | 2023-04-23 | 2023-05-30 | 成都甄识科技有限公司 | 稀疏加速单元、计算方法及稀疏神经网络硬件加速系统 |
Families Citing this family (67)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US11469772B2 (en) * | 2017-04-11 | 2022-10-11 | Joshua Huang | Method, system and program product for mask-based compression of a sparse matrix |
US10360163B2 (en) | 2016-10-27 | 2019-07-23 | Google Llc | Exploiting input data sparsity in neural network compute units |
US9959498B1 (en) | 2016-10-27 | 2018-05-01 | Google Llc | Neural network instruction set architecture |
US10175980B2 (en) | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10474375B2 (en) | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10146738B2 (en) | 2016-12-31 | 2018-12-04 | Intel Corporation | Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data |
US10180928B2 (en) * | 2016-12-31 | 2019-01-15 | Intel Corporation | Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions |
US10997052B2 (en) * | 2017-05-01 | 2021-05-04 | Dell Products L.P. | Methods to associate workloads to optimal system settings based upon statistical models |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10445451B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10387319B2 (en) | 2017-07-01 | 2019-08-20 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features |
US11474555B1 (en) * | 2017-08-23 | 2022-10-18 | Xilinx, Inc. | Data-driven platform characteristics capture and discovery for hardware accelerators |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10324689B2 (en) * | 2017-11-21 | 2019-06-18 | Intel IP Corporation | Scalable memory-optimized hardware for matrix-solve |
US11494655B2 (en) * | 2017-12-08 | 2022-11-08 | International Business Machines Corporation | Random matrix hardware for machine learning |
US10565134B2 (en) | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator |
US10445250B2 (en) * | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with a configurable spatial accelerator |
US10970080B2 (en) | 2018-02-08 | 2021-04-06 | Marvell Asia Pte, Ltd. | Systems and methods for programmable hardware architecture for machine learning |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US11176104B2 (en) * | 2018-04-16 | 2021-11-16 | Bank Of America Corporation | Platform-independent intelligent data transformer |
US10929779B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Architecture to support synchronization between core and inference engine for machine learning |
US10891136B1 (en) * | 2018-05-22 | 2021-01-12 | Marvell Asia Pte, Ltd. | Data transmission between memory and on chip memory of inference engine for machine learning via a single data gathering instruction |
US10929778B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Address interleaving for machine learning |
US11016801B1 (en) | 2018-05-22 | 2021-05-25 | Marvell Asia Pte, Ltd. | Architecture to support color scheme-based synchronization for machine learning |
US10997510B1 (en) | 2018-05-22 | 2021-05-04 | Marvell Asia Pte, Ltd. | Architecture to support tanh and sigmoid operations for inference acceleration in machine learning |
US10929760B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Architecture for table-based mathematical operations for inference acceleration in machine learning |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US10459866B1 (en) | 2018-06-30 | 2019-10-29 | Intel Corporation | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator |
CN109034968B (zh) * | 2018-07-18 | 2021-11-05 | 江苏中润普达信息技术有限公司 | 一种基于粒子群算法的艺术品推荐方法 |
US11048630B2 (en) * | 2018-11-27 | 2021-06-29 | International Business Machines Corporation | Symmetrical multi-processing node |
CN109992960B (zh) * | 2018-12-06 | 2021-09-10 | 北京奇艺世纪科技有限公司 | 一种伪造参数检测方法、装置、电子设备及存储介质 |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
CN109919826B (zh) * | 2019-02-02 | 2023-02-17 | 西安邮电大学 | 一种用于图计算加速器的图数据压缩方法及图计算加速器 |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US11127167B2 (en) * | 2019-04-29 | 2021-09-21 | Nvidia Corporation | Efficient matrix format suitable for neural networks |
US11379556B2 (en) * | 2019-05-21 | 2022-07-05 | Arm Limited | Apparatus and method for matrix operations |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11042371B2 (en) * | 2019-09-11 | 2021-06-22 | International Business Machines Corporation | Plausability-driven fault detection in result logic and condition codes for fast exact substring match |
US10996951B2 (en) | 2019-09-11 | 2021-05-04 | International Business Machines Corporation | Plausibility-driven fault detection in string termination logic for fast exact substring match |
FR3105659B1 (fr) * | 2019-12-18 | 2022-06-24 | Commissariat Energie Atomique | Procédé et dispositif de codage binaire de signaux pour implémenter des opérations MAC numériques à précision dynamique |
US11907713B2 (en) | 2019-12-28 | 2024-02-20 | Intel Corporation | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
US20210256092A1 (en) * | 2020-02-19 | 2021-08-19 | Nvidia Corporation | Application programming interface to accelerate matrix operations |
CN111506517B (zh) * | 2020-03-05 | 2022-05-17 | 杭州电子科技大学 | 一种基于访问局部性的闪存页级地址映射方法及其系统 |
US20220198306A1 (en) * | 2020-12-23 | 2022-06-23 | Intel Corporation | Baum-Welch Accelerator |
CN113114733B (zh) * | 2021-03-24 | 2022-07-08 | 重庆邮电大学 | 基于能量收集的分布式任务卸载和计算资源的管理方法 |
CN113326479A (zh) * | 2021-05-28 | 2021-08-31 | 哈尔滨理工大学 | 一种基于fpga的k均值算法的实现方法 |
CN114265593B (zh) * | 2021-12-09 | 2022-11-22 | 北京奕斯伟计算技术股份有限公司 | 指令调度方法、装置、设备及计算机可读存储介质 |
CN114201287B (zh) * | 2022-02-17 | 2022-05-03 | 湖南迈曦软件有限责任公司 | 一种基于cpu+gpu异构平台协同处理数据的方法 |
CN117149778B (zh) * | 2023-10-30 | 2024-01-16 | 之江实验室 | 稀疏张量运算加速方法、系统、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853491A (zh) * | 2010-04-30 | 2010-10-06 | 西安电子科技大学 | 基于并行稀疏谱聚类的sar图像分割方法 |
CN102141976A (zh) * | 2011-01-10 | 2011-08-03 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
CN104137060A (zh) * | 2011-12-30 | 2014-11-05 | 英特尔公司 | 高速缓存协处理单元 |
CN104508682A (zh) * | 2012-08-03 | 2015-04-08 | 柯达阿拉里斯股份有限公司 | 使用群组稀疏性分析来识别关键帧 |
-
2016
- 2016-12-31 US US15/396,515 patent/US20180189675A1/en not_active Abandoned
-
2017
- 2017-11-30 CN CN201711282647.8A patent/CN108268320A/zh active Pending
- 2017-12-14 EP EP17207532.7A patent/EP3343392B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853491A (zh) * | 2010-04-30 | 2010-10-06 | 西安电子科技大学 | 基于并行稀疏谱聚类的sar图像分割方法 |
CN102141976A (zh) * | 2011-01-10 | 2011-08-03 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
CN104137060A (zh) * | 2011-12-30 | 2014-11-05 | 英特尔公司 | 高速缓存协处理单元 |
CN104508682A (zh) * | 2012-08-03 | 2015-04-08 | 柯达阿拉里斯股份有限公司 | 使用群组稀疏性分析来识别关键帧 |
Non-Patent Citations (4)
Title |
---|
DAN ZOU ET AL.: ""Implementation of parallel sparse Cholesky factorization on GPU"", 《PROCEEDINGS OF 2012 2ND INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE AND NETWORK TECHNOLOGY》 * |
ERIKO NURVITADHI ET AL.: ""Hardware accelerator for analytics of sparse data"", 《2016 DESIGN, AUTOMATION & TEST IN EUROPE CONFERENCE & EXHIBITION (DATE)》 * |
QIULING ZHU ET AL.: ""Accelerating sparse matrix-matrix multiplication with 3D-stacked logic-in-memory hardware"", 《2013 IEEE HIGH PERFORMANCE EXTREME COMPUTING CONFERENCE (HPEC)》 * |
YU JIN ET AL.: ""A High Performance Implementation of Spectral Clustering on CPU-GPU Platforms"", 《2016 IEEE INTERNATIONAL PARALLEL AND DISTRIBUTED PROCESSING SYMPOSIUM WORKSHOPS (IPDPSW)》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109461113A (zh) * | 2018-10-11 | 2019-03-12 | 中国人民解放军国防科技大学 | 一种面向数据结构的图形处理器数据预取方法及装置 |
CN109461113B (zh) * | 2018-10-11 | 2021-07-16 | 中国人民解放军国防科技大学 | 一种面向数据结构的图形处理器数据预取方法及装置 |
CN113330421A (zh) * | 2018-11-08 | 2021-08-31 | 莫维迪乌斯有限公司 | 点积计算器及其操作方法 |
CN113330421B (zh) * | 2018-11-08 | 2024-01-16 | 莫维迪乌斯有限公司 | 点积计算器及其操作方法 |
CN114528101A (zh) * | 2022-02-14 | 2022-05-24 | 贵州电网有限责任公司 | 一种应用于电力边缘计算的神经网络的结构化动态量化方法 |
CN116187408A (zh) * | 2023-04-23 | 2023-05-30 | 成都甄识科技有限公司 | 稀疏加速单元、计算方法及稀疏神经网络硬件加速系统 |
CN116187408B (zh) * | 2023-04-23 | 2023-07-21 | 成都甄识科技有限公司 | 稀疏加速单元、计算方法及稀疏神经网络硬件加速系统 |
Also Published As
Publication number | Publication date |
---|---|
EP3343392B1 (en) | 2021-11-10 |
US20180189675A1 (en) | 2018-07-05 |
EP3343392A1 (en) | 2018-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108268320A (zh) | 用于网络规模k均值群集的硬件加速器架构和模板 | |
CN108268424A (zh) | 用于处理具有偏斜非零分布的稀疏矩阵数据的异构硬件加速器架构 | |
CN108268283A (zh) | 用于利用约简操作来支持数据并行循环的计算引擎架构 | |
CN108268422A (zh) | 用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构 | |
Zeng et al. | GraphACT: Accelerating GCN training on CPU-FPGA heterogeneous platforms | |
CN108268423A (zh) | 实现用于具有写到读依赖关系的稀疏线性代数运算的增强的并行性的微架构 | |
US20220121917A1 (en) | Hardware accelerator template and design framework for implementing recurrent neural networks | |
TWI650707B (zh) | 處理器,其運作方法與電腦程式產品 | |
TWI662485B (zh) | 裝置,運作裝置之方法與其電腦程式產品 | |
CN110018850A (zh) | 用于可配置空间加速器中的多播的设备、方法和系统 | |
TW201826115A (zh) | 具有陣列寬度可分段之旋轉器之神經網路單元 | |
CN106447036A (zh) | 执行随机舍入的神经网络单元 | |
CN108564169A (zh) | 硬件处理单元、神经网络单元和计算机可用介质 | |
CN108804139A (zh) | 可编程设备及其操作方法和计算机可用介质 | |
CN108805276A (zh) | 处理器、用于操作处理器的方法和计算机可用介质 | |
CN110474645A (zh) | 用于压缩浮点数据的系统 | |
CN108805275A (zh) | 可编程设备及其操作方法和计算机可用介质 | |
Saavedra et al. | Mining discriminative k-mers in DNA sequences using sketches and hardware acceleration | |
Mahram | FPGA acceleration of sequence analysis tools in bioinformatics | |
Tao | FPGA-Based Graph Convolutional Neural Network Acceleration | |
Arram | FPGA acceleration of DNA sequencing analysis and storage | |
Kara | Specialized Hardware Solutions for In-Database Analytics and Machine Learning | |
Darche | Microprocessor 1: Prolegomena-Calculation and Storage Functions-Models of Computation and Computer Architecture | |
Nag | Enabling Near Data Processing for Emerging Workloads | |
Min et al. | A flexible and customizable architecture for the relaxation labeling algorithm |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180710 |
|
RJ01 | Rejection of invention patent application after publication |