用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构的制作方法

文档序号:14911110发布日期:2018-07-10 23:26阅读:440来源:国知局
本公开一般涉及电子器件,以及更具体来说,实施例涉及用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构。
背景技术
:仅仅在过去的数年中,来自机器学习的相对新兴领域的算法广泛地应用于许多类型的实际应用,从而产生诸如自动推进的交通工具、改进因特网搜索引擎、语音、音频和/或视觉识别系统、人类健康数据和基因组分析、推荐系统、诈骗检测系统等的技术。这些算法的使用的增长部分通过由人类和非人类所产生的数据量和类型的近来增加来推动。因此,随着可用于分析的增加数据量猛涨,对机器学习的兴趣也猛涨。在许多不同的上下文中,机器学习算法通常使用大矩阵来实现。此外,这些矩阵的许多矩阵是“稀疏”矩阵,因为它们具有相当数量的“空”或“背景”值—例如零值。例如,社交图表能够建模为矩阵(例如“邻接矩阵”),其具有与数据集中存在的人同样多的行和列,其中矩阵单元中的元素表示与每对人之间的连接有关的某种信息。当存储和利用稀疏矩阵时,使用专门算法和数据结构(其能够利用矩阵的稀疏结构)是有用的(并且有时严格来说是必要的)。这是因为,使用规则密集矩阵结构和算法来执行矩阵运算在应用于大的稀疏矩阵时将是相当低效的,因为处理和存储资源因大量零的存在而实际上“被浪费”。因此,稀疏数据能够易于压缩以要求显著小的存储装置,以及具体来说能够实现算法和计算架构来适应(fitin)这些压缩结构。但是,涉及矩阵操纵的算法(其包含许多机器学习算法)趋向于是计算昂贵的,因为它们能够涉及执行具有庞大数据量的庞大数量的非平凡运算。因此,尽可能有效地实现这些算法是极为重要的,因为任何小低效因计算的大规模而迅速扩大。相应地,强烈预期能够增强涉及稀疏矩阵数据的这些类型的运算的执行的技术和处理架构。本发明提供一组技术方案,如下。1.一种硬件加速器,包括:一个或多个片,其中每个片包含:多个处理元件(PE),其用来执行涉及由存储器所存储的、作为第一操作数的一个或多个非常或超稀疏矩阵的矩阵运算;以及数据管理单元(DMU),其用来提供对所述存储器的所述多个PE访问,所述存储器经由接口用来与所述硬件加速器耦合,所述接口被优化以提供对数据的低等待时间、并行随机访问;其中所述多个PE经由所述DMU通过下列步骤来执行所述矩阵运算:在通过发出对指针值的随机访问读请求来识别所述一个或多个矩阵的值的位置之后发出对所述值的随机访问读请求的第一集合;发出对用作第二操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合;以及发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。2.如技术方案1所述的硬件加速器,其中,所述DMU包括高速缓存,其用来存储响应于对所述一个或多个矩阵的值的随机访问读请求的所发出的第一集合而返回的数据。3.如技术方案1所述的硬件加速器,其中,所述存储器是也被硬件处理器所利用的系统存储器。4.如技术方案1所述的硬件加速器,其中,所述硬件加速器要响应于由硬件处理器所发出的一个或多个任务的卸载而执行所述矩阵运算。5.如技术方案1所述的硬件加速器,其中,所述一个或多个矩阵按照压缩格式来存储。6.如技术方案1所述的硬件加速器,其中,所述矩阵运算包含乘法运算。7.如技术方案1所述的硬件加速器,其中,所述矩阵运算包含换算和更新运算、乘法运算和点积运算。8.一种在硬件加速器中用于执行关于非常稀疏或超稀疏矩阵的矩阵运算的方法,包括:由一个或多个片的多个处理元件(PE)的一个或多个PE在通过发出对指针值的随机访问读请求来识别一个或多个非常稀疏或超稀疏矩阵的值的位置之后经由一个或多个数据管理单元(DMU)向存储器发出对所述值的随机访问读请求的第一集合,其中所述一个或多个DMU经由接口来访问所述存储器,所述接口被优化以提供对数据的低等待时间、并行随机访问;由所述一个或多个PE经由所述一个或多个DMU来发出对用作操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合;以及由所述一个或多个PE经由所述一个或多个DMU来发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。9.如技术方案8所述的方法,其中,所述DMU包括高速缓存,其用来存储响应于对所述一个或多个矩阵的值的随机访问读请求的所发出的第一集合而返回的数据。10.如技术方案8所述的方法,其中,所述存储器是也被硬件处理器所利用的系统存储器。11.如技术方案8所述的方法,其中,发出请求的第一集合、请求的第二集合和请求的第三集合响应于由硬件处理器到所述硬件加速器的一个或多个任务的卸载而发生。12.如技术方案8所述的方法,其中,所述一个或多个矩阵按照压缩格式来存储。13.如技术方案8所述的方法,其中,所述矩阵运算包含乘法运算。14.如技术方案8所述的方法,其中,所述矩阵运算包含换算和更新运算、乘法运算和点积运算。15.一种系统,包括:存储器;一个或多个片,其中每个片包含:多个处理元件(PE),其用来执行涉及由所述存储器所存储的、作为第一操作数的一个或多个非常或超稀疏矩阵的矩阵运算;以及数据管理单元(DMU),其用来提供对所述存储器的所述多个PE访问,所述存储器经由接口与所述硬件加速器耦合,所述接口被优化以提供对数据的低等待时间、并行随机访问;其中所述多个PE经由所述DMU通过下列步骤来执行所述矩阵运算:在通过发出对指针值的随机访问读请求来识别所述一个或多个矩阵的值的位置之后发出对所述值的随机访问读请求的第一集合;发出对用作第二操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合;以及发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。16.如技术方案15所述的系统,其中,所述DMU包括高速缓存,其用来存储响应于对所述一个或多个矩阵的值的随机访问读请求的所发出的第一集合而返回的数据。17.如技术方案15所述的系统,其中,所述存储器是也被硬件处理器所利用的系统存储器。18.如技术方案15所述的系统,其中,所述系统要响应于由硬件处理器所发出的一个或多个任务的卸载而执行所述矩阵运算。19.如技术方案15所述的系统,其中,所述一个或多个矩阵按照压缩格式来存储。20.如技术方案15所述的系统,其中,所述矩阵运算包含换算和更新运算、乘法运算和点积运算。附图说明通过参照用来图示一些实施例的以下描述和附图,可以最好地理解本发明。附图中:图1是图示矩阵、向量和示范压缩矩阵表示的框图。图2是图示示范压缩矩阵表示的框图。图3是图示按照一些实施例的示范稀疏矩阵、非常稀疏矩阵和超稀疏矩阵的框图。图4是图示按照一些实施例、包含对稀疏矩阵运算所优化的硬件处理器的系统的框图。图5是图示按照一些实施例、包含对非常稀疏和超稀疏矩阵运算所优化的硬件处理器的系统的框图。图6是图示按照一些实施例、用于执行非常稀疏或超稀疏矩阵运算的流程的流程图。图7图示按照一些实施例、其中加速器经过高速缓存相干接口在通信上耦合到多个核的示范实现。图8图示按照一些实施例的加速器的另一个视图。图9图示按照一些实施例、由处理元件所执行的示范运算集合。图10a描绘按照一些实施例、用来产生向量y的稀疏矩阵A相对于向量x之间的乘法的示例。图10b图示按照一些实施例、其中每个值作为(值、行索引)对来存储的矩阵A的CSR表示。图10c图示使用(值、列索引)对的矩阵A的CSC表示。图11a、图11b和图11c图示每个计算模式的伪代码,其中:图11a图示按照一些实施例的行定向(oriented)稀疏矩阵密集向量相乘(spMdV_csr)。图11b图示按照一些实施例的列定向稀疏矩阵稀疏向量相乘(spMspC_csc)。图11c图示按照一些实施例的换算(scale)和更新运算(scale_update)。图12图示按照一些实施例的数据管理单元和处理元件的一个实现的处理流程。图13a突出显示按照一些实施例的spMspV_csc和scale_update操作的路径。图13b图示按照一些实施例的spMdV_csr操作的路径。图14a示出示范图表。图14b示出表示作为邻接矩阵的图14a的图表的示例。图14c图示按照一些实施例的顶点程序。图14d图示按照一些实施例、用于运行顶点程序的示范程序代码。图14e示出按照一些实施例的广义稀疏矩阵向量相乘(GSPMV)公式。图15图示按照一些实施例的GSPMV的设计框架的一个实现。图16示出按照一些实施例的GSPMV的架构模板的一个实现。图17图示按照一些实施例的每个加速器片(tile)的操作的概括。图18a图示按照一些实施例、概括模板的一个实现的可定制参数的表。图18b图示按照一些实施例、执行自动调谐以确定用来定制硬件架构模板、以便对输入顶点程序和(可选的)图表数据对它进行优化的最佳设计参数的框架的一个实现的调谐考虑。图19图示按照一些实施例的压缩行存储稀疏矩阵格式。图20示出按照一些实施例、在使用CRS数据格式的稀疏矩阵-密集向量乘法的实现中涉及的示范步骤。图21图示按照一些实施例、包含加速器逻辑管芯和DRAM管芯的多个叠层中的一个的加速器的一个实现。图22图示按照一些实施例、从经过DRAM管芯的叠层的顶部透视所定向的加速器逻辑芯片的一个实现。图23提供按照一些实施例、包含两个缓冲器、两个64位乘加算术逻辑单元(ALU)和控制逻辑的点积引擎(DPE)的高级概览。图24图示按照一些实施例的大稀疏矩阵计算的分块(blocking)方案。图25图示根据一些实施例的块描述符的格式。图26图示按照一些实施例、块描述符对于在具有仅一个堆叠动态随机存取存储器(DRAM)数据通道和四字数据突发(burst)的系统上的单个点积引擎的缓冲器内适合的二行矩阵的使用。图27图示按照一些实施例的点积引擎中的硬件的一个实现。图28图示按照一些实施例、进行捕获的匹配逻辑3020单元的内容。图29图示按照一些实施例、用来支持稀疏矩阵-稀疏向量乘法的点积引擎设计的细节。图30图示按照一些实施例、使用特定值的计算的示例。图31图示按照一些实施例、上述稀疏-密集和稀疏-稀疏点积引擎如何能够相结合以产生能够操控两种类型的计算的点积引擎。图32是按照一些实施例的寄存器架构的框图。图33A是图示按照一些实施例的示范有序管线和示范寄存器重命名、无序发出/运行管线的框图。图33B是图示按照一些实施例、要包含在处理器中的有序架构核和示范寄存器重命名、无序发出/运行架构核的框图。图34A-B图示更具体的示范有序核架构的框图,该核将是芯片中的若干逻辑块中的一个(包含相同类型和/或不同类型的其他核):图34A是按照一些实施例、单个处理器核连同其到管芯上互连网络的连接并且连同其等级2(L2)高速缓存的本地子集的框图。图34B是按照一些实施例、图34A中的处理器核的部分的展开图。图35是按照一些实施例、可具有多于一个核、可具有集成存储器控制器并且可具有集成图形的处理器的框图。图36-39是示范计算机架构的框图。图36示出按照一些实施例的系统的框图。图37是按照一些实施例的第一更具体示范系统的框图。图38是按照一些实施例的第二更具体示范系统的框图。图39是按照一些实施例的SoC的框图。图40是按照一些实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。具体实施方式以下描述描述了用于有效地执行涉及非常稀疏和超稀疏矩阵数据的操作的硬件加速器架构。在本描述中,可提出诸如系统组件的逻辑实现、类型和相互关系等的大量具体细节,以便提供对一些实施例的更透彻理解。然而,由本领域的技术人员将领会的是,在没有这类具体细节的情况下,可实施本发明。在其他情况下,没有详细示出控制结构、门级电路和/或完全软件指令序列,以免使本发明模糊。通过所包含的描述,本领域的技术人员将能够实现适当的功能性而无需不适当实验。说明书中对“一个实施例”、“实施例”、“示例实施例”等的提及指示所述的实施例可包含特定特征、结构或特性,但每一个实施例可能不一定都包含该特定特征、结构或特性。此外,这类短语不一定表示相同的实施例。此外,在结合实施例来描述特定特征、结构或特性时,无论是否明确描述,均认为结合其他实施例来影响这种特征、结构或特性正是在本领域的技术人员的知识之内。加括号文本以及具有虚线边界(例如长划线、短划线、点划线和点)的框在本文中可用来图示可选操作,其对本发明的实施例添加附加特征。但是,这种符号不应当被理解为意味着这些是仅有选项或者可选操作,和/或具有实线边界的框在本发明的某些实施例中不是可选的。贯穿本描述,参考数字(对应于所图示的实体)末尾处的字母符号的使用不是意味着指示那个实体的任何特定数字必须一定存在,而只是指示该实体是潜在的许多类似实体中的一个。例如,处理元件406A-406Z包含“A”和“Z”字母后缀,其意味着能够存在两个处理元件、三个处理元件、十六个处理元件等。此外,如上所述,虚线的使用指示实体的一个或多个能够是可选的;因此,在一些实施例中,可以利用仅一个稀疏片404A,而在其他实施例中,可利用多个稀疏片404A-404N。另外,不同字母符号作为不同实体的参考后缀的使用不是意味着指示必须存在这些实体的不同数字。例如,虽然稀疏片404A-404N和存储器单元412A-412M包含不同字母后缀—即“N”和“M”,但是在各个实施例中能够存在这些的相同数字(或不同数字)。如上所指示,许多不同种类的矩阵运算对机器学习以及在其他域中是重要的,包含但不限于实现使用矩阵运算的图表计算(例如广度优先搜索)、生物科学建模、高性能计算、计算机视觉、计算机图形等的系统。在这些应用中,利用极大矩阵是相当普遍的,并且使所涉及矩阵成为稀疏也是普遍的。在许多系统中,矩阵作为二维阵列来存储。阵列中的各条目表示矩阵的元素ai,j,并且通过两个索引I(通常为行索引)和j(通常为列索引)来访问。对于m×n矩阵,按照这个格式存储矩阵所要求的存储器量与m×n略微成比例,但是附加数据也需要被存储(例如矩阵的维度、数据结构“簿记”数据)。在稀疏矩阵的情况下,显著存储器减少能够通过仅存储非零条目来获得。开发了各种数据结构来只这样做,以及能够利用这些结构的不同结构,其基于非零条目的数量和分布在与基于基本阵列的方式相比时能够引起存储器的显著节省。但是,折衷发生,因为访问个别元素能够变得更为复杂(例如,因后面的指针、计算存储器地址等而要求附加存储器访问),以及可需要附加数据结构以便能够按照真正无损方式来恢复原始矩阵。例如,图1是图示矩阵运算中可涉及的矩阵102和向量104/106以及示范压缩矩阵表示108/122的框图。此图图示两个不同压缩矩阵格式—压缩稀疏列(CSC)108和压缩稀疏行(CSR)122,但是许多格式存在,包含但不限于密钥词典(DOK)、列表的列表(LL)、双倍压缩稀疏列(DCSC,其在图2中图示)等。第一CSC示例100图示用作矩阵运算的第一操作数的矩阵‘A’102、用作矩阵运算的第二操作数的第一向量‘X’104以及用作矩阵运算的结果的向量‘Y’。这个示例包含6×4矩阵‘A’102(即,6行和4列)、4元素向量‘X’104(其也能够被认为是4×1矩阵)以及6元素向量‘Y’106。但是,如通篇所述,利用矩阵和矩阵运算的许多现代应用可利用大许多的矩阵/向量,其能够包含数百、数千、数万、数十万、数百万等的维度。因此,本文所提出的示例为了便于理解而有意简化,并且要理解,本文所提出的技术和架构可以可适用于“小”矩阵以及大许多的矩阵。在这个CSC示例100中,矩阵‘A’102能够使用CSC格式108来表示,其中这里称作“colptr”的数据结构(例如阵列、列表、向量)包含四个值,其各表示矩阵102的一列,并且存储到该列内的一个或多个元素的指针。每个元素示为具有两个数据元素:第一个是矩阵中存储的值,以及第二个是那个值在它存储于矩阵中时的索引。如所图示,指向“col0”(第一列)的列指针包含三个元素:(7,1)、(6,3)和(2,4)—指示值“7”存储在行[1](即,第二行)中,值“6”存储在行[3]中,以及值“2”存储在行[4]中。当然,在许多实现中,还可存储和利用附加“簿记”类型数据(和/或数据结构)(例如以划分元素的开始/结束,划分特定列的元素的结束),这在本文中稍后将进一步详细论述。在这个CSC示例100中,图示矩阵乘法的一个子步骤,其中矩阵102的第三列(即,具有为2的索引的列)的每个值与向量104内的第三值(或者具有为2的索引的元素)相乘。这产生输出向量‘Y’106—“3”(矩阵‘A’102的第三列的第一值)乘以“4”(向量‘X’104的第三值)为“12”,其存储在输出向量‘Y’106的第一值中。要使用矩阵‘A’102当它按照CSC格式108来存储时来执行这个计算,“colptr”数据结构的值(即,指针/存储器地址)必须首先从存储器来加载,并且必须跟随(例如经由从存储器的另一个加载)这些指针,以查找每个对应列的特定元素。另外,列的每个元素可以或者可以不毗连地存储在存储器中,这能够要求附加指针追踪(chasing)。例如,对于“col2”,三个所图示的元素可能没有存储在毗连存储器位置处,并且因此可能存在附加簿记数据(例如数据结构的基础结构数据,其能够是指针),其允许这些元素的位置被确定。因此,要执行这个操作,可需要从存储器的数据的若干“加载”—元数据/指针的加载和/或表示矩阵102的值的实际元素的加载。矩阵存储格式的另一个简化示例示为CSR示例120,其示出另一个操作数矩阵‘A’、操作数向量‘x’和输出向量‘y’。这个示例中的矩阵A的CSR格式122与上述CSC格式108类似,但是矩阵的值改为按照行而不是列来排列。因此,CSR格式122包含到每行的值的指针的“rowptr”结构。这个示例再次被简化,因为它没有示出用来实现矩阵A的CSR格式122的基础结构数据/元数据,并且因而再次要理解,为了使处理器访问矩阵的值,可要求充分数量的存储器加载。作为矩阵存储结构的另外的示例以及作为结果所引入的开销(overhead),来看图2,其是图示示范压缩矩阵表示的框图。图2首先图示稀疏9×9矩阵的非零元素的表格格式200表示。在这种情况下,列“A.I”存储指示值的行的值,“A.J”指示值的列,以及“A.V”指示值本身。因此,9×9矩阵仅包函四个非零元素,并且因而可获益于按照压缩格式来存储。相应地,常用的CSC数据结构220(对于矩阵‘A’200)的一个实现图示为利用包含j+1条目的列指针阵列(“CP”),其中这些条目的一些指向“IR”(行)阵列条目,其对应于“NUM”(值)阵列条目。值得注意,因一些空列而在CP阵列中存在一些重复,并且此外,要求充分数量的存储器读取以遍历矩阵的值。常用的附加矩阵表示也在图2中示出—DCSC数据结构240,其是CSC的进一步压缩形式,其中消除CP中的重复。而是仅表示具有至少一个非零的列连同其列索引。在这个示例中,“JC”阵列(其与CP阵列平行)提供列编号,并且压缩CP阵列,以避免CSC格式的重复。因此,DCSC表示能够被看作是稀疏列的稀疏阵列,而CSC表示是稀疏列的密集阵列。相应地,存在多种低级矩阵表示,其共同用于矩阵运算(其以一些管理和利用开销(例如指针追踪、附加加载)为代价是存储有效的)。这些矩阵表示再次供与具有充分量的非零值的稀疏矩阵一起使用是特别有用的。但是,感兴趣观测在于,虽然上述矩阵表示提供用于存储和使用稀疏矩阵的显著有益效果,但是对于这些稀疏矩阵的子集,这些矩阵表示引入显著开销和低效。因此,一些类型的稀疏矩阵—特别是具有许多(或者几乎全部)非零的那些稀疏矩阵—采用当前架构没有非常有效地处理。例如,图3是图示按照一些实施例的示范稀疏矩阵、非常稀疏矩阵和超稀疏矩阵的框图。为了本描述的目的,能够在不同类型的稀疏矩阵之间加以区分。如在文献中已知,存在将矩阵表示为稀疏的多种方式。例如,如果nnz=O(n),则图表可称作是稀疏的,其中nnz是图表中的边的数量,以及n是顶点的数量。区分稀疏与非稀疏(或“密集”)矩阵的另一种方式基于矩阵元素中的多少为零。如本文所使用的,“稀疏”矩阵或向量是其中元素中的许多(或者大部分)为零的矩阵或向量。因此,在一些情形中,矩阵或向量在其元素的至少一半为零时可以是稀疏的,但是在其他情形中,阈值能够是不同的,例如矩阵或向量是稀疏的,如果其元素的至少25%为零、其元素的60%为零等的话。类似地,“密集”矩阵或向量是其中元素中的许多或者大部分为非零的矩阵或向量。矩阵/向量的“稀疏性”可基于零值元素的数量除以元素的总数(例如,对于m×n矩阵的m×n)来定义。因此,在一个实现中,矩阵/向量被认为是“稀疏的”,如果其稀疏性高于指定阈值。“稀疏”矩阵和向量的类别还能够分解为子段—例如“规则”稀疏矩阵、“非常稀疏”矩阵和“超稀疏”矩阵。例如,一些文献在对于图表nnz<n(其在数值线性代数中相当罕见,但是在对图表的计算中、特别是在并行图表计算中经常发生)时将稀疏数据结构的子集定义为“超稀疏”。换句话说,超稀疏矩阵可以是其中矩阵元素的极大比率为零的矩阵。当然,用于确定矩阵是否为超稀疏的阈值基于特定应用能够有所不同。例如,当矩阵的稀疏性为至少80%或90%或95%或97%或99%或者99.5%等时,矩阵可被认为是超稀疏的。被认为是“非常稀疏”矩阵的稀疏矩阵的另外的类别能够定义为满足“规则”稀疏矩阵的阈值,但是不满足被认为是“超稀疏”矩阵的稀疏性阈值。精确公式再次可基于应用而改变,但是在一些实施例中,“规则”稀疏矩阵能够是具有为50-70%(即,最小阈值为50%而最大阈值为70%)的稀疏性的矩阵,“非常稀疏”矩阵能够是具有大于70%但小于98%的稀疏性的矩阵,以及超稀疏矩阵能够是具有大于98%的稀疏性的矩阵。作为另一个示例,规则稀疏矩阵能够是具有25-75%之间的稀疏性的矩阵,非常稀疏矩阵能够是具有75-95%的矩阵,以及超稀疏矩阵能够是具有超过95%的稀疏性的矩阵。因此要理解,存在对齐特定阈值的许多不同方式。相应地,图示示范“规则”稀疏矩阵305的一小部分(40000×40000),以传达其充分数量的值为零(在这里为56个值中的25个),而示范“非常稀疏”矩阵310的小部分包含更多零值(在这里为56个值中的44个),而超稀疏矩阵315的所图示的小部分包含非常大的数量零(在这里为56个值中的54个)。除了基于其稀疏性比率来分类矩阵的稀疏之外,在一些情形中,稀疏类型(或类别)能够(完全或部分)基于任何行或列是否完全是空的。例如在一些实施例中,非常稀疏或超稀疏矩阵可定义为包括为空的特定数量的行和/或列的矩阵。稀疏类型的这个确定可与矩阵的特定的稀疏性比率无关(例如,在一些情况下,具有极大稀疏性比率的矩阵可能取得非常或超稀疏矩阵的资格,如果它没有必要阈值数量的空行和/或列的话),或者确定可以是稀疏性比率和行/列空标准的组合或者任一个。图4是图示按照一些实施例、包含对稀疏矩阵运算所优化的硬件处理器402的系统400的框图。硬件处理器402能够是加速器装置,其能够执行由另一个硬件处理器401(例如经由一个或多个互连/总线等416)所卸载的操作。与加速器以及用于处理稀疏矩阵的这个架构有关的另外的细节在本文中稍后针对后续附图提出。硬件处理器402包含一个或多个“稀疏”片404A-404N。稀疏片404A-404N的每个包含一个或多个处理元件(PE)406A-406Z,但是在许多实施例中,每片包含多个PE。PE406A-406Z能够被认为与处理器核类似,并且针对后续附图更详细提出。处理元件406A-406Z的每个可包括运行一个或多个指令以执行操作的电路系统,并且可以是或者可以不是处理器核的组成部分。因此,处理元件可被认为是一种类型的硬件处理器或者硬件处理器的一个部分。每个稀疏片(例如稀疏片404A)还能够包含随机存取存储器408(例如芯片上高速缓存)以及数据管理单元(DMU)410,其经由存储器接口414(其对高带宽数据传递被优化)来提供对一个或多个片外存储器单元412A-412M(例如存储运算中涉及的矩阵)的访问。这个硬件处理器402能够利用多种技术来优化稀疏矩阵运算的运行效率。首先,在一些实施例中,硬件处理器402能够将矩阵划分为足够小的块,使得相对于每个块所操作的每个向量子集能够适应芯片上RAM408,使得它能够按照不规则/随机方式本地有效地访问,并且当相对于矩阵块中的非零元素来操作时再使用。因此,在一些实施例中,“X”向量104和/或“Y”向量106(图1所示)能够在RAM408中保持在芯片上以供极快速低等待时间更新。其次,在一些实施例中,硬件处理器402能够流播来自(一个或多个)芯片外存储器单元412A-412M的矩阵的行(或列)的非零,以使可用存储器带宽饱和。流播的非零的每个能够相对于芯片上保持的向量子集来应用,如上面所解释。因此,在一些实施例中,图1的矩阵‘A’102的值能够通过高带宽连接来流播,以便由处理元件406A-406Z来处理。这些技术对于稀疏矩阵特别适用,其中每个块存在充分量的非零。但是,这个架构对于非常稀疏和超稀疏矩阵不是那么有效。这归因于下列原因:首先,因为非常/超稀疏矩阵具有极少非零,所以它引起较高分块开销(例如因行或列指针)。这意味着,相对于实际非零矩阵元素的处理,对处理“簿记”数据(例如不同的数据结构、指针等)以及进行对其的存储器访问存在较大开销。另外,因为非常/超稀疏矩阵每列(或行)具有极少非零,所以访问列(或行)涉及进行大量小(或“短”)存储器访问。这对于使优化存储器访问的架构成为高带宽(例如以等待时间为代价)不是有效的。这还意味着,对相对其所操作的向量存在较少数据再使用。对于超稀疏矩阵,当使用双倍压缩格式(例如图2的DCSC240)更有效地表示空行/列时,还存在提高数量的附加短读取。此外,从访问列(或行)指针到访问列(或行)的非零的任何数据相关性更加被暴露,因为存在要访问和处理的较少非零,其能够潜在地隐藏对下一个列(或行)指针的访问。这引起性能被较大存储器等待时间消极地影响。相应地,用于执行涉及非常和/或超稀疏矩阵的稀疏矩阵运算的备用架构在图5中示出,图5是图示按照一些实施例、包含对非常稀疏和超稀疏矩阵运算所优化的硬件处理器502(例如加速器装置)的系统500的框图。利用这个架构的实施例能够急剧改进非常/超稀疏矩阵数据的处理效率,并且能够通过多种方式、例如使用专用集成电路(ASIC)、现场可编程门阵列(FPGA)等实现。如图5所示,硬件处理器502包含一个或多个非常/超稀疏片504A-504N,各包含一个或多个处理元件406A-406Z和DMU510。DMU510能够以高并行性(例如使用重堆积存储器)经由存储器接口514(其对低等待时间随机访问(例如,与图4的高带宽访问、例如流播相反)被优化)来提供对一个或多个片外存储器单元512A-512M的一个或多个处理元件406A-406Z访问。在一些实施例中,DMU510能够包含聚集-分散单元512,其用来执行聚集(例如经由后续指针的不规则访问等)和分散,而也许无需涉及请求一个或多个处理元件406A-406Z。使用这个架构,硬件处理器502采用能够操控并行小/短不规则存储器访问的低等待时间存储器子系统对处理大矩阵块被优化。在一些实施例中,硬件处理器502能够通过使用大块来使分块开销为最小,即使意味着相对于矩阵块所操作的向量子集也变大。在一些实施例中,硬件处理器502因而能够使用较大向量子集,其能够保持在(一个或多个)存储器单元512A-512M中(与如同图4中一样将其带到RAM408上相反)。因此,DMU410能够适合(例如经由聚集/分散单元512)有效地操控对这个向量子集的并行聚集/分散(即,不规则)存储器访问。可选地,在一些实施例中,DMU510能够包含比较小的芯片上高速缓存514,其用来捕获这个向量子集中可用的适度数据再使用。例如,当访问矩阵的列的值时,在一些情况下,可存在存储于毗连存储器位置中的列的若干值。因此,取决于存储器系统的粒度(例如对读取所返回的数据的大小/量)和矩阵值的大小(例如值/索引的数据类型),存储访问也许可能返回下一个所需值/索引。例如,如果值和索引(表示矩阵的元素)的大小各为4字节,则16字节存储器访问可检索两个元素,其中的第二个可能是下一个所需元素,其提供空间局域性的有益效果。在一些实施例中,DMU510也对低等待时间被优化,以限制对列(或行)指针追踪相关性的暴露以及支持适合于短矩阵列(或行)的并行存储器短访问。因此,按照一些实施例,存储器单元512A-512M适合于低等待时间、并行、短、不规则访问,即使这以减少带宽为代价来达到。要实现这些特征,存在为本领域的技术人员已知的、能够使用的许多存储器优化(较小行、窄预取缓冲器等)。在一些实施例中,由于这些矩阵运算是存储器密集的,所以运算中涉及的PE406A-406Z的数量能够被最小化,以匹配从存储器单元512A-512M所带来的数据速率。因此,使用这个架构的一些实施例能够如同图4的先前架构中一样、但是当所涉及矩阵数据集实际上是非常稀疏或超稀疏时以更好的运行效率来操控稀疏矩阵运算的集合。这产生于使用短、不规则、低等待时间存储器访问来访问矩阵值等,而图4的架构(其提供“规则”稀疏矩阵的有效稀疏矩阵计算)利用流播矩阵的行(或列)的非零元素,和/或例如经过对矩阵数据适当分块来局部化/再使用芯片上存储器中相对其所操作的向量子集。PE106A-406Z的数量能够例如基于存储器连接技术(即,提供低等待时间并行随机访问的存储器的等待时间和/或带宽)来具体选择。例如,能够执行模拟建模,以确定PE406A-406Z的最佳量,以便使存储器正确饱和以免对PE406A-406Z的存储器或集合利用不足。图6是图示按照一些实施例、用于执行非常稀疏或超稀疏矩阵运算的流程600的流程图。将参照其他附图的示范实施例来描述这个及其他流程图的操作。但是应当理解,流程图的操作能够通过除了参照其他附图所述实施例之外的实施例来执行,并且参照这些其他附图所述的实施例能够执行与参照流程图所述操作不同的操作。在一些实施例中,这个流程600由图5的硬件处理器502(例如硬件加速器)来执行。流程600包含在框605处由一个或多个片的多个处理元件(PE)的一个或多个PE在通过发出对指针值的随机访问读请求来识别一个或多个非常稀疏或超稀疏矩阵的值的位置之后经由一个或多个数据管理单元(DMU)向存储器发出对值的随机访问读请求的第一集合。一个或多个DMU经由接口(其被优化以提供对数据的低等待时间、并行随机访问)来访问存储器。流程600还包含在框610处由一个或多个PE经由一个或多个DMU来发出对用作操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合。流程600还包含在框615处由一个或多个PE经由一个或多个DMU来发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。示例按照一些实施例,硬件加速器包括一个或多个片,其中每个片包含:多个处理元件(PE),其用来执行涉及作为第一操作数、由存储器所存储的一个或多个非常或超稀疏矩阵的矩阵运算;以及数据管理单元(DMU),其用来提供对存储器的多个PE访问,存储器经由接口(其被优化以提供对数据的低等待时间、并行随机访问)用来与硬件加速器耦合;其中多个PE经由DMU通过下列步骤来执行矩阵运算:在通过发出对指针值的随机访问读请求来识别一个或多个矩阵的值的位置之后发出对值的随机访问读请求的第一集合;发出对用作第二操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合;以及发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。在一些实施例中,DMU包括高速缓存,其用来存储响应于对一个或多个矩阵的值的随机访问读请求的所发出的第一集合而返回的数据。在一些实施例中,存储器是也由硬件处理器所利用的系统存储器。在一些实施例中,硬件加速器要响应于由硬件处理器所发出的一个或多个任务的卸载而执行矩阵运算。在一些实施例中,一个或多个矩阵按照压缩格式来存储。在一些实施例中,矩阵运算包含乘法运算。在一些实施例中,矩阵运算包含换算和更新运算、乘法运算和点积运算。按照一些实施例,一种在硬件加速器中用于执行关于非常稀疏或超稀疏矩阵的矩阵运算的方法包括:由一个或多个片的多个PE的一个或多个处理元件(PE)在通过发出对指针值的随机访问读请求来识别一个或多个非常稀疏或超稀疏矩阵的值的位置之后经由一个或多个数据管理单元(DMU)向存储器发出对值的随机访问读请求的第一集合,其中一个或多个DMU经由接口(其被优化以提供对数据的低等待时间、并行随机访问)来访问存储器;由一个或多个PE经由一个或多个DMU来发出对用作操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合;以及由一个或多个PE经由一个或多个DMU来发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。在一些实施例中,DMU包括高速缓存,其用来存储响应于对一个或多个矩阵的值的随机访问读请求的所发出的第一集合而返回的数据。在一些实施例中,存储器是也由另一个硬件处理器所利用的系统存储器。在一些实施例中,发出请求的第一集合、请求的第二集合和请求的第三集合响应于由另一个处理器到硬件加速器的一个或多个任务的卸载而发生。在一些实施例中,一个或多个矩阵按照压缩格式来存储。在一些实施例中,矩阵运算包含乘法运算。在一些实施例中,矩阵运算包含换算和更新运算、乘法运算和点积运算。按照一些实施例,一种系统包括存储器和一个或多个片,其中每个片包含:多个处理元件(PE),其用来执行涉及作为第一操作数、由存储器所存储的一个或多个非常或超稀疏矩阵的矩阵运算;以及数据管理单元(DMU),其用来提供对存储器的多个PE访问,存储器经由接口(其被优化以提供对数据的低等待时间、并行随机访问)与硬件加速器耦合。多个PE经由DMU通过下列步骤来执行矩阵运算:在通过发出对指针值的随机访问读请求来识别一个或多个矩阵的值的位置之后发出对值的随机访问读请求的第一集合;发出对用作第二操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合;以及发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合。在一些实施例中,DMU包括高速缓存,其用来存储响应于对一个或多个矩阵的值的随机访问读请求的所发出的第一集合而返回的数据。在一些实施例中,存储器是也由另一个硬件处理器所利用的系统存储器。在一些实施例中,该系统要响应于由另一个硬件处理器所发出的一个或多个任务的卸载而执行矩阵运算。在一些实施例中,一个或多个矩阵按照压缩格式来存储。在一些实施例中,矩阵运算包含乘法运算。在一些实施例中,矩阵运算包含换算和更新运算、乘法运算和点积运算。按照一些实施例,一种用来执行关于非常稀疏或超稀疏矩阵的矩阵运算的硬件加速器包括:第一部件,包含:第二部件,其用来执行涉及作为第一操作数、由第三部件所存储的一个或多个非常或超稀疏矩阵的矩阵运算;以及第四部件,其用来提供对第三部件的第二部件访问,第三部件要经由接口(其被优化以提供对数据的低等待时间、并行随机访问)与硬件加速器耦合;其中第二部件通过在通过发出对指针值的随机访问读请求来识别一个或多个矩阵的值的位置之后发出对值的随机访问读请求的第一集合,发出对用作第二操作数的一个或多个向量的第一集合的值的随机访问读请求的第二集合,并且发出对用作结果的一个或多个向量的第二集合的值的随机访问写请求的第三集合,经由第四部件来执行矩阵运算。本文所公开的实施例利用电子装置。一种电子装置使用机器可读媒体(又称作计算机可读媒体)(例如机器可读存储媒体(例如磁盘、光盘、只读存储器(ROM)、闪速存储器装置、相变存储器)和机器可读传输媒体(又称作载体)(例如电、光、无线电、声或其他形式的传播信号—例如载波、红外信号))来(内部和/或通过网络与其他电子装置一起)存储和传送代码(其由软件指令组成,并且其有时称作计算机程序代码或计算机程序)和/或数据。因此,电子装置(例如计算机)包含硬件和软件,例如耦合到一个或多个机器可读存储媒体的一个或多个处理器的集合,以存储代码供处理器集合上运行和/或存储数据。例如,电子装置可包含其中包含代码的非易失性存储器,因为非易失性存储器甚至在电子装置关断时(当去除功率时)也能够保持代码/数据,并且当电子装置接通时,将要由那个电子装置的(一个或多个)处理器来运行的代码的那个部分通常从较慢的非易失性存储器复制到那个电子装置的易失性存储器(例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))中。典型电子装置还包含一个或多个物理网络接口的集合,以建立与其他电子装置的网络连接(以便使用传播信号来传送和接收代码和/或数据)。实施例的一个或多个部分可使用软件、固件和/或硬件的不同组合来实现。示范加速器架构概述在一些实现中,加速器耦合到处理器核或其他处理元件,以加速某些类型的操作,例如图形运算、机器学习运算、模式分析运算和(如以下详细描述)稀疏矩阵乘法运算,只列举几个例子。加速器可通过总线或其他互连(例如点对点互连)在通信上耦合到处理器/核,或者可集成在与处理器相同的芯片上并且通过内部处理器总线/互连在通信上耦合到核。不管以其连接加速器的方式,处理器核可向加速器(其包含用于有效处理这些任务的专用电路系统/逻辑)分配某些处理任务(例如采取指令或μop序列的形式)。图7图示其中加速器700经过高速缓存相干接口730在通信上耦合到多个核710-711的示范实现。核710-711的每个包含用于存储虚拟到物理地址转换的转换后备缓冲器712-713以及用于缓存(caching)数据和指令的一个或多个高速缓存714-715(例如L1高速缓存、L2高速缓存等)。存储器管理单元720管理由核710-711对系统存储器750(其可以是动态随机存取存储器DRAM)的访问。共享高速缓存726、例如L3高速缓存可在处理器核710-711之间共享,并且经由高速缓存相干接口730与加速器700共享。在一个实现中,核ATA1010T-1011、MMU720和高速缓存相干接口730集成在单个处理器芯片上。所图示的加速器700包含数据管理单元705,其具有高速缓存707和调度器AT006,其用于对多个处理元件701-702、N调度操作。在所图示的实现中,每个处理元件具有其自己的本地存储器703-704、N。如以下详细描述,每个本地存储器703-704、N可实现为堆叠DRAM。在一个实现中,高速缓存相干接口730提供核710-711与加速器700之间的高速缓存相干连通性,实际上将加速器看作是核710-711的对等体。例如,高速缓存相干接口730可实现高速缓存相干性协议,以确保由加速器700所访问/修改并且在加速器高速缓存707和/或本地存储器703-704、N中存储的数据与核高速缓存710-711、共享高速缓存726和系统存储器750中存储的数据是相干的。例如,高速缓存相干接口730可参与由核710-711和MMU720用来检测共享高速缓存726和本地高速缓存714-715内的高速缓存线的状态的窥探(snooping)机制,并且可充当代理,从而响应于由处理元件701-702、N对高速缓存线的访问和尝试修改而提供窥探更新。另外,当高速缓存线由处理元件701-702、N来修改时,高速缓存相干接口730可更新高速缓存线的状态,如果它们存储于共享高速缓存726或本地高速缓存714-715内的话。在一个实现中,数据管理单元1005包含提供对系统存储器750和共享高速缓存726的加速器700访问的存储器管理电路系统。另外,数据管理单元705可提供对高速缓存相干接口730的更新,并且根据需要从高速缓存相干接口730接收更新(例如以确定对高速缓存线的状态变化)。在所图示的实现中,数据管理单元705包含调度器706,其用于调度要由处理元件701-702、N所运行的指令/操作。要执行其调度操作,调度器706可评估指令/操作之间的相关性,以确保指令/操作按照相干顺序来运行(例如,以确保第一指令在第二指令(其取决于来自第一指令的结果)之前运行)。不是相互依赖的指令/操作可在处理元件701-702、N上并行地运行。用于矩阵和向量运算的加速器架构图8图示先前所述的加速器700和其他组件(包含数据管理单元705、多个处理元件701-N和快速芯片上存储装置800(例如在一个实现中使用堆叠本地DRAM所实现))的另一个视图。在一个实现中,加速器700是硬件加速器架构,以及处理元件701-N包含用于执行矩阵*向量和向量*向量运算(包含稀疏/密集矩阵的运算)的电路系统。具体来说,处理元件701-N可包含对列和行定向矩阵处理的硬件支持,并且可包含对例如机器学习(ML)算法中使用的“换算和更新”运算的微架构支持。所述实现执行矩阵/向量运算,其通过在快速芯片上存储装置800中保持频繁使用、随机访问的潜在稀疏(例如聚集/分散)向量数据而在芯片外存储器(例如系统存储器750)中保持大的不频繁使用的矩阵数据、在一切可能的地方按照流播方式访问并且暴露要按比例扩大(scaleup)的矩阵内/间块并行性来优化。处理元件701-N的实现处理稀疏矩阵、密集矩阵、稀疏向量和密集向量的不同组合。如本文所使用的,“稀疏”矩阵或向量是其中元素中的大部分为零的矩阵或向量。相反,“密集”矩阵或向量是其中元素中的大部分为非零的矩阵或向量。矩阵/向量的“稀疏性”可基于零值元素的数量除以元素的总数(例如,对于m×n矩阵的m×n)来定义。在一个实现中,矩阵/向量被认为是“稀疏的”,如果其稀疏性高于指定阈值的话。由处理元件701-N所执行的运算的示范集合在图9的表中图示。具体来说,运算类型包含使用稀疏矩阵的第一相乘900、使用密集矩阵的第二相乘901、换算和更新运算902m以及点积运算903。为第一输入操作数910和第二输入操作数911(其各可包含稀疏或密集矩阵/向量)、输出格式913(例如密集向量或标量)、矩阵数据格式(例如压缩稀疏行、压缩稀疏列、行定向等)以及运算标识符914提供列。存在于一些当前工作负荷的运行时主导计算模式包含矩阵乘法相对于向量按照行定向和列定向方式的变化。它们在众所周知的矩阵格式上进行工作:压缩稀疏行(CSR)和压缩稀疏列(CSC)。图10a描绘产生向量y的稀疏矩阵A相对于向量x之间的乘法的示例。图10b图示其中每个值作为(值、行索引)对来存储的矩阵A的CSR表示。例如,row0的(3,2)指示值3存储在行0的元素位置2中。图10c图示使用(值、列索引)对的矩阵A的CSC表示。图11a、图11b和图11c图示每个计算模式的伪代码,这在下面详细描述。具体来说,图11a图示行定向稀疏矩阵密集向量相乘(spMdV_csr);图11b图示列定向稀疏矩阵稀疏向量相乘(spMspC_csc);以及图11c图示换算和更新运算(scale_update)。A.行定向稀疏矩阵密集向量乘法(spMdV_csr)这是众所周知的计算模式,其在许多应用域、例如高性能计算中是重要的。在这里,对于矩阵A的每行,执行那个行相对于向量x的点积,并且结果存储在通过行索引所指向的y向量元素中。这个计算用于机器学习(ML)算法中,其执行跨样本集合(即,矩阵的行)的分析。它可用于例如“微程序组(mini-batch)”的技术中。还存在一些情况,其中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)中的处理器类似)相集成。在一个实现中,加速器700经过与处理器共享的互连独立访问存储器750,以执行计算模式。它支持驻留在芯片外存储器中的任何任意大的矩阵数据集。图12图示数据管理单元705和处理元件701-702的一个实现的处理流程。在这个实现中,数据管理单元705包含处理元件调度器1201、读缓冲器1202、写缓冲器1203和简化单元1204。每个PE701-702包含输入缓冲器1205-1206、乘法器1207-1208、加法器1209-1210、本地RAM1221-1222、和寄存器1211-1212和输出缓冲器1213-1214。加速器支持上述矩阵分块方案(即,行和列分块),以支持任何任意大的矩阵数据。加速器设计成处理矩阵数据块。每个块进一步分为子块,其由PE701-702并行地处理。在操作中,数据管理单元705将矩阵行或列从存储器子系统读入到其读缓冲器1202中,其然后由PE调度器1201动态地跨PE701-702分布以供处理。它还将结果从其写缓冲器1203写到存储器。每个PE701-702负责处理矩阵子块。PE包含芯片上RAM1221-1222,以存储需要随机访问的向量(即,x或y向量的子集,如上所述)。它还包含:浮点乘累加(FMA)单元,其包含乘法器1207-1208、以及加法器1209-1210和输入缓冲器1205-1206内的解包(unpack)逻辑,以便从输入数据中提取矩阵元素;以及和寄存器1211-1212,以保持累加FMA结果。加速器的一个实现实现极端效率,因为:(1)它将不规则访问(聚集/分散)数据放入芯片上PERAM1221-1222中;(2)它利用硬件PE调度器1201来确保完全利用PE;以及(3)与对通用处理器不同,加速器仅由硬件资源(其对稀疏矩阵运算是必不可少的)来组成。总体上,加速器将提供给它的可用存储器带宽有效地转换为性能。能够通过采用加速器块中的更多PE并行地处理多个矩阵子块,和/或采用更多加速器块(各具有PE集合)并行地处理多个矩阵块,进行性能的换算。下面考虑这些选项的组合。应当调谐PE和/或加速器块的数量,以匹配存储器带宽。加速器700的一个实现能够经过软件资料库(与Intel®MathKernelLibrary类似)来编程。这种资料库准备存储器中的矩阵数据,采用与计算有关的信息(例如计算类型、到矩阵数据的存储器指针)来设置加速器700中的控制寄存器,并且启动加速器。加速器然后独立访问存储器中的矩阵数据,执行计算,并且将结果回写到存储器以供软件消耗。加速器通过将其PE设置成适当数据路径配置来操控不同的计算模式,如图13a-13b所描绘。具体来说,图13a突出显示spMspV_csc和scale_update运算的路径(使用虚线),以及图13b图示spMdV_csr运算的路径。下面详述执行每个计算模式的加速器操作。对于spMspV_csc,初始y向量子集由DMU705加载到PE的RAM1221中。它然后从存储器中读取x向量元素。对于每个x元素,DMU705从存储器流播对应矩阵列的元素,并且将其提供给PE701。每个矩阵元素包含值(A.val)和索引(A.idx),其指向要从PE的RAM1221中读取的y元素。DMU1005还提供x向量元素(x.val),其由乘累加(FMA)单元相对于A.val相乘。结果用来更新PE的RAM中通过A.idx所指向的y元素。注意,即使没有被工作负荷所使用,但是加速器通过处理所有矩阵列而不仅仅是子集(因为x是密集的),也支持相对于密集x向量的逐列乘法(spMdV_csc)。scale_update运算与spMspV_csc类似,除了DMU705读取按照CSR格式而不是CSC格式所表示的A矩阵的行。对于spMdV_csr,x向量子集加载到PE的RAM1221中。DMU705在矩阵行元素(即,{A.val,A.idx}对)中从存储器流播。A.idx用来从RAM1221中读取适当的x向量元素,其由FMA相对于A.val相乘。结果累加到和寄存器1212中。和寄存器在每次PE看到指示行结束的标记(其由DMU705提供)时被写到输出缓冲器。这样,每个PE产生它负责的行子块的和。要产生该行的最终和,由所有PE所产生的子块和由DMU中的简化单元1204相加在一起(参见图12)。最终和写到输出缓冲器1213-1214,DMU1005然后将其写到存储器。图表数据处理在一个实现中,本文所述的加速器架构配置成处理图表数据。图表分析依靠图表算法来提取与表示为图表的数据之间的关系有关的知识。图表数据(来自例如社交媒体的来源)的增生导致对图表分析的强烈需求和图表分析的广泛使用。因此,能够尽可能有效地进行图表分析是至关重要的。要解决这个需要,一个实现将用户定义图表算法自动映射到硬件加速器架构“模板”,其对给定输入图表算法来定制。加速器可包括上述架构,并且可实现为FPGA/ASIC,其能够以极端效率运行。总之,一个实现包含:(1)硬件加速器架构模板,其基于广义稀疏矩阵向量相乘(GSPMV)加速器。它支持任意图表算法,因为它已经表明图表算法能够公式化为矩阵运算。(2)用来将广泛使用的“顶点中心的”图表编程抽象映射和调谐到架构模板。存在现有稀疏矩阵相乘硬件加速器,但是它们不支持可定制性以允许图表算法的映射。设计框架的一个实现操作如下。(1)用户将图表算法指定为接着顶点中心的图表编程抽象的“顶点程序”。这个抽象因其通俗性而在这里被选择作为示例。顶点程序没有暴露硬件细节,因此没有硬件专业知识的用户(例如数据科学家)能够创建它。(2)连同(1)中的图表算法一起,框架的一个实现接受下列输入:a.要生成的目标硬件加速器的参数(例如芯片上RAM的最大量)。这些参数可由用户提供,或者在针对现有系统(例如特定FPGA板)时从已知参数的现有资料库来得到。b.设计优化目标(例如最大性能、最小面积)。c.目标图表数据的性质(例如图表的类型)或者图表数据本身。这是可选的,并且用来帮助自动调谐。(3)给定上述输入,框架的一个实现执行自动调谐,以便确定应用于硬件模板的定制集合以对输入图表算法进行优化,将这些参数映射到架构模块上以产生可合成RTL中的加速器实例,并且进行相对于从输入图表算法规范所得出的功能和性能软件模型的所生成的RTL的功能和性能验证。在一个实现中,上述加速器架构通过下列步骤扩展成支持顶点程序的运行:(1)使它成为可定制硬件模板;以及(2)支持由顶点程序所需的功能性。基于这个模板,设计框架描述成将用户供应的顶点程序映射到硬件模板,以产生对顶点程序所优化的可合成RTL(例如Verilog)实现实例。该框架还执行自动验证和调谐,以确保所产生的RTL是正确和优化的。对于这个框架存在多种使用情况。例如,所产生的可合成的RTL能够部署在FPGA平台(例如Xeon-FPGA)中,以便有效地运行给定顶点程序。或者它能够进一步细化,以产生ASIC实现。已经表明,图表能够表示为邻接矩阵,以及图表处理能够公式化为稀疏矩阵运算。图14a-14b示出将图表表示为邻接矩阵的示例。矩阵中的每个非零表示图表中的两个节点之间的边。例如,行0列2中的1表示从节点A到C的边。用于描述对图表数据的计算的最普遍模型中的一个是顶点编程模型。一个实现支持来自Graphmat软件框架的顶点编程模型变体,其将顶点程序公式化为广义稀疏矩阵向量相乘(GSPMV)。如图14c所示,顶点程序由与图表中的边/顶点关联的数据(edata/vdata)、跨图表中的顶点所发送的消息(mdata)和临时数据(tdata)的类型(在程序代码的顶部中图示)以及使用预定义API的无状态用户定义计算函数(其读取和更新图表数据)(如程序代码的底部中所图示)来组成。图14d图示用于运行顶点程序的示范程序代码。边数据表示为邻接矩阵A(如同图14b中一样),顶点数据表示为向量y,以及消息表示为稀疏向量x。图14e示出GSPMV公式,其中SPMV中的multiply()和add()运算通过用户定义PROCESS_MSG()和REDUCE()来一般化。这里的一个观察在于,运行顶点程序所需的GSPMV变体执行稀疏矩阵A(即,邻接矩阵)相对于稀疏向量x(即,消息)的列定向乘法,以产生输出向量y(即,顶点数据)。这个运算称作col_spMspV(先前针对上述加速器所述)。设计框架。框架的一个实现在图15中示出,其包含模板映射组件1511、验证组件1512和自动调谐组件1513。其输入是用户指定顶点程序1501、设计优化目标1503(例如最大性能、最小面积)和目标硬件设计约束1502(例如芯片上RAM的最大量、存储器接口宽度)。作为帮助自动调谐的可选输入,该框架还接受图表数据性质1504(例如类型=自然图表)或者简单图表数据。给定这些输入,框架的模板映射组件1511将输入顶点程序映射到硬件加速器架构模板,并且产生为运行顶点程序1501所优化的加速器实例的RTL实现1505。自动调谐组件1513执行自动调谐1513,以优化给定设计目标的所生成的RTL,同时满足硬件设计约束。此外,验证组件1512相对于从输入所得出的功能和性能模型自动验证所生成的RTL。验证测试台1506和调谐报告1507连同RTL一起产生。广义稀疏矩阵向量相乘(GSPMV)硬件架构模板GSPMV的架构模板的一个实现在图16中示出,其基于上述加速器架构(参见例如图12及关联文本)。图16所图示的组件中的许多是可定制的(如采用灰线条突出显示)。在一个实现中,支持顶点程序的运行的架构扩展如下。如图16所图示,在每个PE内部提供可定制逻辑块,以支持由顶点程序所需的PROCESS_MSG()1910、REDUCE()1611、APPLY1612和SEND_MSG()1613。另外,一个实现提供可定制芯片上存储结构和打包/解包逻辑1605,以支持用户定义图表数据(即,vdata、edata、mdata、tdata)。图16所图示的数据管理单元705包含PE调度器1201(用于调度如上所述的PE)、辅助缓冲器1601(用于存储有效列、x数据)、读缓冲器1202、用于控制对系统存储器的访问的存储器控制器1603以及写缓冲器1204。另外,在图16所示的实现中,旧和新的vdata和tdata存储在本地PE存储器1221内。可修改各种控制状态机以支持运行顶点程序,遵守由图14d和图14e中的算法所指定的功能性。图17中概括各加速器片的操作。在1701处,将y向量(vdata)加载到PERAM1221。在1702处,将x向量和列指针加载到辅助缓冲器1601。在1703处,对于每个x向量元素,A列在(edata)中流播,并且PE运行PROC_MSG()1610和REDUCE()1611。在1704处,PE运行APPLY()1612。在1705处,PE运行SEND_MSG()1613,从而产生消息,以及数据管理单元705将其作为x向量写入存储器中。在1706处,数据管理单元705将PERAM1221中存储的所更新的y向量(vdata)回写到存储器。上述技术符合图14d和图14e所示的顶点程序运行算法。要按比例扩大性能,该架构允许增加片中的PE的数量和/或设计中的片的数量。这样,该架构能够利用图表中的多级并行性(即,跨子图表(跨邻接矩阵的块)或者在每个子图表内)。图18a的表概括模板的一个实现的可定制参数。还有可能的是,跨片指配不对称参数以供优化(例如,具有比另一个片要多的PE的一个片)。自动映射、验证和调谐调谐。基于输入,框架的一个实现执行自动调谐以确定用来定制硬件架构模板、以便对输入顶点程序和(可选的)图表数据对它进行优化的最佳设计参数。存在许多调谐考虑,其在图18b的表中概括。如所图示,这些包含数据的局域性、图表数据大小、图表计算函数、图表数据结构、图表数据访问属性、图表数据类型和图表数据模式。模板映射。在这个阶段中,框架获取通过调谐阶段所确定的模板参数,并且通过“填充”在模板的可定制部分中来产生加速器实例。用户定义计算函数(例如图14c)可使用现有高级合成(HLS)工具从输入指定映射到适当PE计算块。存储结构(例如RAM、缓冲器、高速缓存)和存储器接口使用其对应设计参数来例示。打包/解包逻辑可从数据类型指定(例如图14a)自动生成。控制有限状态机(FSM)的部分也基于所提供的设计参数(例如PE调度方案)来生成。验证。在一个实现中,然后自动验证由模板映射所产生的加速器架构实例(可合成的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)表示,其中每个非零通过{rowindex,columnindex,value}元组来指定。虽然这三倍于每个非零值所要求的存储量,但是如果矩阵中的元素只有1%具有非零值,则COO表示将占据密集表示(表示矩阵中的每个元素的值的密集表示)会占领的空间的仅3%。图19图示最常用稀疏矩阵格式中的一个、压缩行存储(CRS,有时缩写为CSR)格式。在CRS格式中,矩阵1900通过三个阵列来描述:值阵列1901,其包含非零元素的值;索引阵列1902,其指定每个非零元素在矩阵的其行内的位置;以及行起始阵列1903,其指定矩阵的每行在索引和值的列表中开始的位置。因此,示例矩阵的第二行的第一非零元素能够在索引和值阵列中的位置2找到,并且通过元组{0,7}来描述,指示元素在行内的位置0出现并且具有值7。其他常用稀疏矩阵格式包含:压缩稀疏列(CSC),其是CRS的列多数双倍的;以及ELLPACK,其将矩阵的每行表示为非零值及其索引的固定宽度列表,从而在行具有比矩阵中的最长行要少的非零元素时采用显式零进行填塞。对稀疏矩阵的计算具有与其密集矩阵对等体相同的结构,但是稀疏数据的性质趋向于使它们比其密集矩阵对等体更为带宽敏感。例如,矩阵-矩阵乘法的稀疏和密集变体通过对全部i,j计算Ci,j=Ai,•B,j来查找C=A•B。在密集矩阵-矩阵计算中,这引起充分数据再使用,因为A的每个元素参与N个乘-加运算(假定N×N矩阵),B的每个元素也这样。只要矩阵-矩阵乘法因高速缓存局域性而被分块,则这个再使用使计算具有低字节/op比率,并且是计算受限的。但是,在稀疏变体中,A的每个元素仅参与与B的对应行中存在的非零值同样多的乘-加运算,而B的每个元素仅参与与A的对应列中存在的非零元素同样多的乘-加。随着矩阵的稀疏增加,字节/op比率也增加,从而使许多稀疏矩阵-矩阵计算的性能受到存储器带宽限制,尽管密集矩阵-矩阵乘法是规范计算限定计算中的一个的事实。四个运算组成当今应用中看到的稀疏矩阵计算的大部分:稀疏矩阵-密集向量乘法(SpMV),稀疏矩阵-稀疏向量乘法,稀疏矩阵-稀疏矩阵乘法,以及松弛/平滑器运算,例如用于Intel的高性能共轭梯度基准的实现中使用的高斯-赛德尔平滑器。这些运算共享使稀疏矩阵加速器成为实用的两个特性。首先,它们通过向量点积来支配,这使得有可能实现能够实现全部四个重要计算的简单硬件。例如,矩阵-向量乘法通过获取矩阵中的每行与向量的点积来执行,而矩阵-矩阵乘法获取一个矩阵的每行与另一矩阵的每列的点积。其次,应用一般对同一矩阵执行多个计算,例如支持向量机算法在训练模型的情况下执行的同一矩阵与不同向量的数千个乘法。同一矩阵的这个重复使用使得在程序运行期间来往于加速器传递矩阵和/或按照简化硬件任务的方式重新格式化矩阵成为实用的,因为数据传递/变换的成本能够跨对每个矩阵的许多运算分摊(amortize)。稀疏矩阵计算通常仅取得它们运行于其上的系统的峰值性能的几个百分数。要证明这种情况发生的原因,图20示出使用CRS数据格式的稀疏矩阵-密集向量乘法的实现中涉及的步骤2001-2004。首先,在2001处,从存储器读出表示矩阵的行的数据结构,这通常涉及易于预测和预取的依次读取的集合。其次,在2002处,矩阵行中的非零元素的索引用来聚集向量的对应元素,这要求多个数据相关的难以预测存储器访问(聚集运算)。此外,这些存储器访问常常仅接触每个引用高速缓存线中的一个或两个字,从而在向量不适应高速缓存时引起明显浪费带宽。第三,在2003处,处理器计算矩阵行的非零元素和向量的对应元素的点积。最后,在2004处,点积的结果写入结果向量,其也被依次访问,以及程序进行到矩阵的下一行。注意,这是计算的概念/算法视图,以及程序运行的操作的准确序列将取决于处理器的ISA和向量宽度。这个示例图示稀疏矩阵计算的多个重要特性。假定32位数据类型并且既没有矩阵也没有向量适应高速缓存,对于7.2:1的字节/op比率,计算输出行的第一元素要求从DRAM读取36字节,但是只有五个计算指令(三个相乘和两个相加)。但是,存储器带宽不是高性能稀疏矩阵计算的唯一难题。如图20所示,对SpMV中的向量的访问是数据相关的并且难以预测的,从而向应用暴露向量访问的等待时间。如果向量不适应高速缓存,则SpMV性能变得对DRAM等待时间以及带宽是敏感的,除非处理器甚至在许多线程停顿等待数据时也提供足够并行性以便使DRAM带宽饱和。因此,稀疏矩阵计算的架构必须提供成为有效的若干方面。它必须输送高存储器带宽以满足稀疏计算的字节/op需要。它还必须支持来自可能不适应高速缓存的大向量的高带宽聚集。最后,虽然执行足够算术运算/秒以跟上DRAM带宽就其本身而言不是难题,但是该架构必须按照能量有效方式来执行那些运算以及它们要求的全部存储器访问,以便保持在系统功率预算之内。实现一个实现包括加速器,其设计成提供高稀疏矩阵性能所必需的三个特征:高存储器带宽、来自大向量的高带宽聚集和能量有效计算。如图21所图示,加速器的一个实现包含加速器逻辑管芯2105以及DRAM管芯的多个叠层2101-2104的一个。堆叠DRAM(其在下文更详细描述)以低能量/位来提供高存储器带宽。例如,预计堆叠DRAM以2.5pJ/位输送256-512GB/秒,而仅预计LPDDR4DIMM输送68GB/秒,并且将具有12pJ/位的能量成本。在加速器叠层的底部处的加速器逻辑芯片2105对稀疏矩阵计算的需要来定制,并且能够消耗由DRAM叠层2101-2104所提供的带宽,同时仅消耗2-4片特功率,其中能量消耗与叠层的带宽成比例。保守来说,对这个应用的其余部分消耗273GB/秒的叠层带宽(WIO3的预计带宽)。基于更高带宽叠层的设计将结合更大并行性,以便消耗存储器带宽。图22图示从经过DRAM管芯2101-2104的叠层的顶部透视所定向的加速器逻辑芯片2105的一个实现。朝简图中心的叠层DRAM通道块2205表示将逻辑芯片2105连接到DRAM2101-2104的硅通孔,而存储器控制器块1210包含生成DRAM通道的控制信号的逻辑。虽然图中示出八个DRAM通道2205,但是在加速器芯片上实现的通道的实际数量将根据所使用的堆叠DRAM而改变。所开发的叠层DRAM技术的大多数提供四个或者八个通道。点积引擎(DPE)2220是架构的计算元件。在图22所示的具体实现中,八个DPE的每个集合与向量高速缓存2215关联。图23提供包含两个缓冲器2305-2306、两个64位乘-加ALU2310和控制逻辑2300的DPE的高级概览。在计算期间,芯片控制单元2300将所处理的数据组块(chunk)流播到缓冲存储器2305-2306中。一旦每个缓冲器是满的,DPE的控制逻辑依次经过缓冲器,计算它们包含的向量的点积并且将结果写出到DPE的结果锁存器2310,其与其他DPE的结果锁存器菊花链连接,以便将计算结果回写到叠层DRAM2101-2104。在一个实现中,加速器逻辑芯片2405工作在大约1GHz和0.65V,以便使功率消耗为最小(但是对不同应用可修改具体工作频率和电压)。基于14nm设计研究的分析表明,32-64KB缓冲器满足在那个电压下的这个频率规范,但是可能要求强ECC以防止软差错。乘-加单元可工作在基本时钟速率的一半,以便满足对0.65V供应电压和浅管线的定时。具有两个ALU提供每DPE的一个双精度乘-加/周期的吞吐量。在273GB/秒和1.066MHz的时钟速率,DRAM叠层2101-2104每逻辑芯片时钟周期输送数据的256字节。假定阵列索引和值为至少32位量,这转化成每周期32个稀疏矩阵元素(索引的4字节+值的4字节=8字节/元素),从而要求芯片每周期执行32个乘加以跟上步伐。(这用于矩阵-向量乘法,并且假定向量高速缓存中的高命中率,使得100%的叠层DRAM带宽用来取矩阵。)图22所示的64DPE提供2-4x所要求的计算吞吐量,从而允许芯片以峰值叠层DRAM带宽来处理数据,即使ALU2310不是100%时间使用。在一个实现中,向量高速缓存2215缓存矩阵-向量乘法中的向量的元素。这显著增加以下所述的矩阵分块方案的效率。在一个实现中,对于八通道架构中的256-512KB的总容量,每个向量高速缓存块包含高速缓存的32-64KB。芯片控制单元2201管理计算流程,并且操控与加速器中的其他叠层以及与系统中的其他套接字(socket)的通信。要降低复杂度和功率消耗,点积引擎从不向存储器请求数据。芯片控制单元2201而是管理存储器系统,发起将适当数据块推送到每个DPE的传递。在一个实现中,多叠层加速器中的叠层经由KTI链路2230(其使用图中所示的相邻连接2231来实现)的网络彼此通信。芯片还提供三个附加KTI链路,其用来与多套接字系统中的其他(一个或多个)套接字进行通信。在多叠层加速器中,叠层的封装外KTI链路2230中只有一个将是有效的。针对其他叠层上的存储器的KTI事务将通过封装上KTI网络来路由到适当叠层。实现稀疏矩阵运算在这一小节中,描述在加速器的一个实现上实现稀疏矩阵-密集向量和稀疏矩阵-稀疏向量乘法所要求的技术和硬件。这个设计还扩展成支持矩阵-矩阵乘法、松弛运算和其他重要功能,以创建支持全部关键稀疏矩阵运算的加速器。虽然稀疏-稀疏和稀疏-密集矩阵-向量乘法运行相同基本算法(获取矩阵和向量中的每行的点积),但是当向量是稀疏的时与它是密集的时相比,在如何实现这个算法方面存在显著差异,其在下表1中概括。稀疏-稀疏SpMV稀疏-密集SpMV向量的大小通常小通常大(矩阵大小的5-10%)向量元素的位置不可预测通过索引所确定每矩阵元素的操作数量不可预测固定表1在稀疏矩阵-密集向量乘法中,向量的大小是固定的,并且等于矩阵中的列数。由于见于科学计算中的许多矩阵平均为每行大约10个非零元素,所以稀疏矩阵-密集向量乘法中的向量占据与矩阵本身一样多的空间的5-10%是常见的。另一方面,稀疏向量常常相当短,包含与矩阵的行类似数量的非零值,这使它们更易于在芯片上存储器中缓存。在稀疏矩阵-密集向量乘法中,向量中的每个元素的位置通过其索引来确定,从而使得聚集与矩阵的区域中的非零值对应的向量元素,并且预先计算需要对矩阵将与其相乘的任何密集向量所聚集的向量元素的集合成为可行的。但是,稀疏向量中的每个元素的位置是不可预测的,并且取决于向量中的非零元素的分布。这使得必需检查稀疏向量和矩阵的非零元素,以确定矩阵中的哪些非零对应于向量中的非零值。有帮助的是,比较矩阵和向量中的非零元素的索引,因为计算稀疏矩阵-稀疏向量点积所要求的指令/运算的数量是不可预测的并且取决于矩阵和向量的结构。例如,考虑进行矩阵行与单个非零元素以及向量与许多非零元素的点积。如果行的非零具有比向量中的非零的任何要低的索引,则点积仅要求一个索引比较。如果行的非零具有比向量中的非零的任何要高的索引,则计算点积要求将行的非零的索引与向量中的每一个索引进行比较。这采取经过向量的线性搜索,这是一般惯例。其他搜索、例如二元搜索在最坏情况下将是更快的,但是在普通情况下(其中行和向量中的非零重叠)将增加显著开销。相比之下,执行稀疏矩阵-密集向量乘法所要求的运算的数量是固定的,并且通过矩阵中的非零值的数量来确定,从而使得易于预测计算所要求的时间量。由于这些差异,加速器的一个实现使用相同高级算法来实现稀疏矩阵-密集向量和稀疏矩阵-稀疏向量乘法,其具有在向量如何跨点积引擎分布以及如何计算点积中的差异。因为加速器意图用于大稀疏矩阵计算,所以无法假定矩阵或者向量将适应芯片上存储器。一个实现而是使用图24概述的分块方案。具体来说,在这个实现中,加速器将矩阵分为数据2401-2402的固定大小块(其确定大小成适应芯片上存储器),并且将块中的行与向量相乘,以便在进行到下一块之前生成输出向量组块。这种方式造成两个难题。首先,在所研究的数据集中,稀疏矩阵的每行中的非零的数量在数据集之间从低至一到高达46000广泛地改变。这使得将一个或者甚至固定数量的行指配给每个点积引擎是不切实际的。因此,一个实现将矩阵数据的固定大小组块指配给每个点积引擎,并且操控其中组块包含多个矩阵行的情况以及其中单行跨多个组块分离的情况。第二难题在于,从矩阵的每个块的叠层DRAM取整个向量具有浪费大量带宽的可能性(即,取块中对其没有对应非零的向量元素)。这对稀疏矩阵-密集向量乘法特别是问题,其中向量能够是稀疏矩阵的大小的相当一部分。要解决这个问题,一个实现构成矩阵中的每个块2401-2402的取列表2411-2412,其列出与块中的非零值对应的向量2410元素的集合,并且在处理块时仅取那些元素。虽然取列表也必须从叠层DRAM取出,但是已经确定大多数块的取列表将是块的大小的一小部分。例如运行长度编码的技术也可用来减小取列表的大小。因此,加速器上的矩阵-向量乘法将涉及下列操作序列:1.从DRAM叠层取矩阵数据块,并且将它跨点积引擎分布;2.基于矩阵数据中的非零元素来生成取列表;3.从叠层DRAM取出取列表中的每个向量元素,并且将它分布到点积引擎;4.计算块中的行与向量的点积,并且将结果写出到叠层DRAM;以及5.与计算并行地,取矩阵数据的下一块,并且重复进行到已经处理整个矩阵。当加速器包含多个叠层时,矩阵的“分区”可静态指配给不同叠层,并且分块算法然后可在每个分区上并行运行。这个分块和广播方案的优点在于,所有存储器引用都源自中央控制单元,这极大地简化芯片上网络的设计,因为网络不必在点积引擎与存储器控制器之间路由不可预测请求和应答。它还通过仅发出对给定块需要的每个向量元素的一个存储器请求(与使个别点积引擎发出对它们要求以执行其计算部分的向量元素的存储器请求相反)来节省能量。最后,按照使堆叠DRAM中的页面命中(pagehit)并且因而使带宽使用为最大的方式,从索引的所组织列表中取向量元素使得易于调度那些取要求的存储器请求。实现稀疏矩阵-密集向量乘法实现本文所述的加速器实现上的稀疏矩阵-密集向量乘法中的一个难题是将从存储器所流播的向量元素匹配到每个点积引擎的缓冲器中的矩阵元素的索引。在一个实现中,向量的256字节(32-64个元素)每周期到达点积引擎,以及每个向量元素能够对应于点积引擎的矩阵缓冲器中的非零的任何,因为矩阵数据的固定大小块被取到每个点积引擎的矩阵缓冲器中。每个周期执行许多比较在面积和功率方面将是极为昂贵的。一个实现而是利用如下事实:许多稀疏矩阵应用将同一矩阵与相同或不同的向量重复相乘,并且预先计算每个点积引擎使用图25所示格式来处理其矩阵组块将需要的取列表的元素。在基准CRS格式中,矩阵通过索引2502的阵列(其定义其行内的每个非零值的位置)、包含每个非零值2503的阵列以及阵列2501(其指示每行在索引和值阵列中开始的位置)来描述。为此,一个实现添加块描述符2505的阵列,其识别每个点积引擎需要捕获向量数据的哪些突发,以执行总体计算的其部分。如图25所示,每个块描述符由八个16位值和突发描述符的列表来组成。第一16位值告知硬件关于多少突发描述符处于块描述符中,而其余七个对除了第一个之外的全部叠层DRAM数据通道识别突发描述符列表内的起始点。这些值的数量将根据堆叠DRAM提供的数据通道的数量而变化。每个突发描述符包含24位突发计数(其告知硬件关于它需要关注哪一个数据突发)和“所需的字”位向量(其识别突发内包含点处理引擎需要的值的字)。一个实现中包含的其他数据结构是矩阵缓冲器索引(MBI)2504的阵列,矩阵中的每个非零一个MBI。每个MBI给出与非零对应的密集向量元素将在相关点积引擎的向量值缓冲器中存储的位置(参见例如图27)。当执行稀疏矩阵-密集向量乘法时,矩阵缓冲器索引而不是原始矩阵索引被加载到点积引擎的矩阵索引缓冲器2504,并且在计算点积时用作用来查找对应向量值的地址。图26图示这在仅具有一个堆叠DRAM数据通道和四字数据突发的系统上对适合在单个点积引擎的缓冲器内的二行矩阵如何工作。包含行起始值2601、矩阵索引2602和矩阵值2603的原始CRS表示在图的左边示出。由于两行在列{2,5,6}和{2,4,5}中具有非零元素,所以要求向量的元素2、4、5和6以计算点积。块描述符反应这种情况,指示要求第一四字突发的字2(向量的元素2)和第二四字突发的字0、1和2(向量的元素4-6)。由于向量的元素2是点积引擎需要的向量的第一字,所以它将进入向量值缓冲器的位置0。向量的元素4将进入位置1,依此类推。矩阵缓冲器索引阵列数据2604保持向量值缓冲器内的该位置,其中硬件将查找与矩阵中的非零对应的值。由于矩阵索引阵列中的第一条目具有值“2”,所以矩阵缓冲器索引阵列中的第一条目获得值“0”,对应于向量的元素2在向量值缓冲器中将存储的位置。类似地,无论“4”在矩阵索引阵列中出现在什么位置,“1”将出现在矩阵缓冲器索引中,矩阵索引阵列中的每个“5”将具有矩阵缓冲器索引中的对应“2”,以及矩阵索引阵列中的每个“6”将对应于矩阵缓冲器索引中的“3”。本发明的一个实现在矩阵被加载到加速器时执行支持来自密集向量的快速聚集所要求的预先计算,从而利用如下事实:多叠层加速器的总带宽比用来将数据从CPU传递给加速器的KTI链路的带宽要大得多。这个预先计算信息将保持矩阵所要求的存储器量增加多达75%,这取决于同一矩阵索引的多个副本在映射到点积引擎上的矩阵组块内出现的频度。但是,因为在执行矩阵-向量乘法时取16位矩阵缓冲器索引阵列而不是矩阵索引阵列,所以从叠层DRAM所取的数据量将通常比原始CRS表示中要小,特别是对于使用64位索引的矩阵。图27图示使用这个格式的点积引擎中的硬件的一个实现。要执行矩阵-向量乘法,组成块的矩阵组块复制到矩阵索引缓冲器3003和矩阵值缓冲器3005(复制矩阵缓冲器索引而不是原始矩阵索引),以及相关块描述符复制到块描述符缓冲器3002。然后,取列表用来从加载来自密集向量的所要求元素,并且向点积引擎广播它们。每个点积引擎对每个数据通道上经过的向量数据的突发数量进行计数。当给定数据通道上的计数匹配突发描述符中指定的值时,匹配逻辑3020捕获所指定字,并且将它们存储在其向量值缓冲器3004中。图28示出进行这个捕获的匹配逻辑3020单元的内容。当计数器匹配突发描述符中的值时,锁存器3105捕获数据通道的线上的值。移位器3106从突发3101提取所要求的字3102,并且将它们路由到线缓冲器3107中的正确位置,其大小匹配向量值缓冲器中的行。当突发计数3101等于内部计数器3104时,生成加载信号。当线缓冲器装满时,它存储在向量值缓冲器3004中(经过复用器3108)。把来自多个突发的字按照这种方式集合为线减少向量值缓冲器需要支持的写入数量/周期,从而减少其大小。一旦在向量值缓冲器中捕获了向量的全部所要求元素,点积引擎使用ALU3010来计算所要求的(一个或多个)点积。控制逻辑3001每周期一个元素地依次单步调试矩阵索引缓冲器3003和矩阵值缓冲器3004。矩阵索引缓冲器3003的输出在下一周期上用作向量值缓冲器3004的读地址,而矩阵值缓冲器3004的输出被锁存,使得它在与来自向量值缓冲器3004的对应值相同的时间到达ALU3010。例如,使用来自图26的矩阵,在点积计算的第一周期上,硬件将从矩阵索引缓冲器3003中读取矩阵缓冲器索引“0”连同来自矩阵值缓冲器3005的值“13”。在第二周期上,来自矩阵索引缓冲器3003的值“0”充当向量值缓冲器3004的地址,从而取向量元素“2”的值,其然后在周期3上与“13”相乘。行起始位向量2901中的值告知硬件关于矩阵的行结束和新行开始的时间。当硬件到达行结束时,它将行的累加点积放入其输出锁存器3011中,并且开始累加下一行的点积。每个点积引擎的点积锁存器按照集合用于回写的输出向量的菊花链来连接。实现稀疏矩阵-稀疏向量乘法在稀疏矩阵-稀疏向量乘法中,向量趋向于占据比稀疏矩阵-密集向量乘法中要少得多的存储器,但是因为它是稀疏的,所以不可能直接取与给定索引对应的向量元素。而是必须搜索向量,从而使得仅将每个点积引擎需要的元素路由到点积引擎是不切实际的,并且使计算指配给每个点积引擎的矩阵数据的点积所要求的时间量是不可预测的。因此,稀疏矩阵-稀疏向量乘法的取列表仅指定矩阵块中的最低和最高非零元素的索引,以及必须向点积引擎广播那些点之间的向量的全部非零元素。图29示出支持稀疏矩阵-稀疏向量乘法的点积引擎设计的细节。要处理矩阵数据块,点积引擎的矩阵组块的索引(不是稀疏-密集乘法中使用的矩阵缓冲器索引)和值被写入矩阵索引和值缓冲器,正如处理块所要求的向量的区域的索引和值那样。点积引擎控制逻辑2940然后依次经过索引缓冲器2902-2903,其向4×4比较器2920输出四个索引块。4×4比较器2920把来自向量2902的索引的每个与来自矩阵2903的索引的每个进行比较,并且将任何匹配的缓冲器地址输出到匹配索引队列2930中。匹配索引队列2930的输出驱动矩阵值缓冲器2905和向量值缓冲器2904的读地址输入,其将与匹配对应的值输出到乘-加ALU2910中。这个硬件允许点积引擎每周期消耗至少四个以及多至八个索引,只要匹配索引队列2930具有空的空间,从而在索引匹配为稀少时减少处理数据块所要求的时间量。如同稀疏矩阵-密集向量点积引擎那样,行起始2901的位向量识别矩阵缓冲器2992-2903中开始矩阵的新行的条目。当遇到这种条目时,控制逻辑2940重置到向量索引缓冲器ATA3202的开始,并且从其最低值开始检查向量索引,将它们与矩阵索引缓冲器2903的输出进行比较。类似地,如果到达向量结束,则控制逻辑2940前进到矩阵索引缓冲器2903中的下一行的开始,并且重置到向量索引缓冲器2902的开始。“完成”输出通知芯片控制单元关于点积引擎完成了处理数据块或向量的区域并且准备好进行下一个的时间。要简化加速器的一个实现,控制逻辑2940将不会进行到下一个块/区域,直到全部点积引擎完成了处理。在许多情况下,向量缓冲器将足够大以保存处理块所要求的全部稀疏向量。在一个实现中,提供1024或2048个向量元素的缓冲器空间,这取决于使用32位还是64位值。当向量的所要求元素没有适应向量缓冲器时,可使用多遍方式。控制逻辑2940将向量的满缓冲器广播到每个点积引擎中,其将开始经过其矩阵缓冲器中的行进行迭代。当点积引擎在到达行结束之前到达向量缓冲器的结束时,它将在当前行位置位向量2911中设置位,以指示它在向量的下一区域到达时应当恢复处理该行的位置,将在与行的开始对应的矩阵值缓冲器2905的位置中保存它已经累加的部分点积,除非行的开始具有比迄今已经处理的向量索引的任何要高的索引值,并且将前进到下一行。在处理了矩阵缓冲器中的全部行之后,点积引擎将断言其完成信号以请求向量的下一区域,并且将重复进行该过程,直到读取了整个向量。图30图示使用特定值的示例。在计算3001开始时,矩阵的四元素组块已经写入矩阵缓冲器2903、2905中,以及向量的四元素区域已经写入向量缓冲器2902、2904中。行开始2901和当前行位置位向量2911均具有值“1010”,指示点积引擎的矩阵组块包含两行,其中一行开始于矩阵缓冲器中的第一元素,以及其中一行开始于第三个。当处理第一区域时,组块中的第一行在索引3处看到索引匹配,计算矩阵和向量缓冲器的对应元素的乘积(4×1=4),并且将那个值写入与行的开始对应的矩阵值缓冲器2905的位置中。第二行在索引1处看到一个索引匹配,计算向量和矩阵的对应元素的乘积,并且将结果(6)写入矩阵值缓冲器2905中与其开始对应的位置处。当前行位置位向量的状态改变成“0101”,指示处理了每行的第一元素,并且计算应当对第二元素进行恢复。点积引擎然后断言其完成线,以发信号通知关于它对向量的另一个区域准备就绪。当点积引擎处理向量的第二区域时,它看到行1在索引4处具有索引匹配,计算矩阵和向量的对应值的乘积(5×2=10),将那个值加入部分点积(其在处理第一向量区域之后被保存),并且输出结果(14)。第二行在索引7发现匹配,并且输出结果38,如图所示。这样保存计算的部分点积和状态避免处理矩阵的元素(其不能够可能匹配向量的后续区域中的索引(因为向量采用按升序的索引来分类))的冗余工作,而没有要求用于部分乘积的显著额外存储量。统一点积引擎设计图31示出上述稀疏-密集和稀疏-稀疏点积引擎如何相结合以产生能够操控两种类型的计算的点积引擎。给定两个设计之间的类似性,唯一要求的变化是要例示稀疏-密集点积引擎的匹配逻辑3111以及稀疏-稀疏点积引擎的比较器3120和匹配索引队列3130连同复用器3150(其确定哪些模块驱动缓冲器2904-2905的读地址和写数据输入)和复用器3151(其选择向乘-加ALU2910发送矩阵值缓冲器的输出还是矩阵值缓冲器的锁存输出)的集合。在一个实现中,这些复用器通过控制单元2940中的配置位(其在矩阵-向量乘法的开始处设置)来控制,并且在整个操作中保持在相同配置中。指令集指令集可包含一个或多个指令格式。给定指令格式可定义各种字段(例如位数、位的位置),以指定要执行的操作(例如操作码)以及要在其上执行那个操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如掩码)等等。一些指令格式通过指令模板的定义(或者子格式)进一步分解。例如,给定指令格式的指令模板可定义成具有指令格式字段的不同子集(所包含的字段通常按照相同顺序,但是至少一些具有不同的位位置,因为存在包含的更少字段),和/或定义成具有以不同方式所解释的给定字段。因此,ISA的每个指令使用给定指令格式来表达(以及如果被定义,则在那种指令格式的指令模块的给定模块中),并且包含用于指定操作和操作数的字段。例如,示范ADD指令具有特定操作码和指令格式,其包含指定那个操作码的操作码字段以选择操作数(源1/目的地和源2)的操作数字段;以及这个ADD指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。称作高级向量扩展(AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案的SIMD扩展集合已经发布和/或发表(例如参见Intel®64和IA-32架构软件开发人员手册,2014年9月;并且参见Intel®高级向量扩展编程参考,2014年10月)。示范寄存器架构图32是按照本发明的一个实施例的寄存器架构3200的框图。在所图示的实施例中,存在512位宽的32个向量寄存器3210;这些寄存器作为zmm0至zmm31来参考。下16个zmm寄存器的低阶256位覆盖于寄存器ymm0-16。下16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖于寄存器xmm0-15。写入屏蔽寄存器3215–在所图示的实施例中,存在8个写入屏蔽寄存器(k0至k7),每个的大小为64位。在备选实施例中,写入屏蔽寄存器3215的大小为16位。如先前所述,在本发明的一个实施例中,向量屏蔽寄存器k0不能用作写入掩码;当正常指示k0的编码用于写入掩码时,它选择0xFFFF的硬连线写入掩码,从而有效地禁用那个指令的写入掩码。通用寄存器3225–在所图示的实施例中,存在16个64位通用寄存器,其连同现有x86寻址模式一起用来对存储器操作数进行寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来参考。标量浮点栈寄存器堆(x87栈)3245(在其上被混叠MMX打包整数平面寄存器堆3250)–在所图示的实施例中,x87栈是八元素栈,其用来使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作;而MMX寄存器用来对64位打包整数数据执行操作,以及保存在MMX与XMM寄存器之间执行的一些操作的操作数。本发明的备选实施例可使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少或不同的寄存器堆和寄存器。示范核架构、处理器和计算机架构处理器核可按照不同方式为了不同目的并且在不同的处理器中实现。例如,这类核的实现可包含:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)主要意图用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包含:1)CPU,包含意图用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核;以及2)协处理器,包含主要意图用于图形和/或科学(吞吐量)的一个或多个专用核。这类不同的处理器引起不同的计算机系统架构,其可包含:1)与CPU分开的芯片上的协处理器;2)与CPU相同的封装中的单独芯片上的协处理器;3)与CPU相同的管芯上的协处理器(在所述情况下,这种协处理器有时称作专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者称作专用核);以及4)可在相同管芯上包含所述CPU(有时称作应用核或应用处理器)、上述协处理器和附加功能性的芯片上的系统。接下来描述示范核架构,后面是示范处理器和计算机架构的描述。示范核架构有序和无序核框图图33A是图示按照本发明的实施例、示范有序管线和示范寄存器重命名、无序发出/运行管线的框图。图33B是图示按照本发明的实施例、要包含在处理器中的有序架构核和示范寄存器重命名、无序发出/运行架构核的框图。图33A-B中的实线框示出有序管线和有序核,而虚线框的可选附加图示寄存器重命名、无序发出/运行管线和核。给定有序方面是无序方面的子集,将描述无序方面。图33A中,处理器管线3300包含取级3302、长度解码级3304、解码级3306、分配级3308、重命名级3310、调度(又称作分发或发出)级3312、寄存器读/存储器读级3314、运行级3316、回写/存储器写级3318、异常处理级3322和提交级3324。图33B示出包含耦合到运行引擎单元3350并且均耦合到存储器单元3370的前端单元3330的处理器核3390。核3390可以是简化指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或备选核类型。作为又一个选项,核3390可以是专用核(例如比如网络或通信核)、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。前端单元3330包含耦合到指令高速缓存单元3334的分支预测单元3332,指令高速缓存单元3334耦合到指令转换后备(looaside)缓冲器(TLB)3336,指令转换后备缓冲器(TLB)3336耦合到指令取单元3338,指令取单元3338耦合到解码单元3340。解码单元3340(或解码器)可对指令进行解码,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令来解码或得出或者以其他方式反映原始指令。解码单元3340可使用各种不同的机制来实现。适当机制的示例包含但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核3390包含微代码ROM或其他媒体,其存储某些宏指令的微代码(例如在解码单元3340中或者以别的方式在前端单元3330内)。解码单元3340耦合到运行引擎单元3350中的重命名/分配器单元3352。运行引擎单元3350包含重命名/分配器单元3352,其耦合到引退单元3354和一个或多个调度器单元3356的集合。(一个或多个)调度器单元3356表示任何数量的不同调度器,包含保留站、中心指令窗口等。(一个或多个)调度器单元3356耦合到(一个或多个)物理寄存器堆单元3358。(一个或多个)物理寄存器堆单元3358的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要运行的下一个指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元3358包括向量寄存器单元、写入屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。(一个或多个)物理寄存器堆单元3358被引退单元3354重叠,以图示可实现寄存器重命名和无序运行的各种方式(例如使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元3354和(一个或多个)物理寄存器堆单元3358耦合到(一个或多个)运行集群3360。(一个或多个)运行集群3360包含一个或多个运行单元3362的集合和一个或多个存储器访问单元3364的集合。运行单元3362可执行各种操作(例如移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)来执行。虽然一些实施例可包含专用于特定功能或功能集合的多个运行单元,但是其他实施例可以仅包含一个运行单元或多个图形单元,其全部执行全部功能。(一个或多个)调度器单元3356、(一个或多个)物理寄存器堆单元3358和(一个或多个)运行集群3360示为可能是多个,因为某些实施例创建某些类型的数据/操作的单独管线(例如标量整数管线、标量浮点/打包整数/打包浮点/向量整数/向量浮点管线和/或存储器访问管线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或运行集群—以及在单独存储器访问管线的情况下,实现其中只有这个管线的运行集群具有(一个或多个)存储器访问单元3364的某些实施例)。还应当理解,在使用单独管线的情况下,这些管线的一个或多个可以是无序发出/运行,而其余的是有序的。存储器访问单元3364的集合耦合到存储器单元3370,其包含耦合到数据高速缓存单元3374(其耦合到等级2(L2)高速缓存单元3376)的数据TLB单元3372。在一个示范实施例中,存储器访问单元3364可包含加载单元、存储地址单元和存储数据单元,其各耦合到存储器单元3370中的数据TLB单元3372。指令高速缓存单元3334还耦合到存储器单元3370中的等级2(L2)高速缓存单元3376。L2高速缓存单元3376耦合到一个或多个其他等级的高速缓存,并且最终耦合到主存储器。作为示例,示范寄存器重命名、无序发出/运行核架构可按如下所述实现管线3300:1)指令取3338执行取和长度解码级3302和3304;2)解码单元3340执行解码级3306;3)重命名/分配器单元3352执行分配级3308和重命名级3310;4)(一个或多个)调度器单元3356执行调度级3312;5)(一个或多个)物理寄存器堆单元3358和存储器单元3370执行寄存器读/存储器读级3314;运行集群3360执行运行级3316;6)存储器单元3370和(一个或多个)物理寄存器堆单元3358执行回写/存储器写级3318;7)各种单元可涉及在异常处理级3322中;以及8)引退单元3354和(一个或多个)物理寄存器堆单元3358执行提交级3324。核3390可支持一个或多个指令集(例如x86指令集(其中具有随较新版本已经添加的一些扩展);MIPSTechnologiesofSunnyvale,CA的MIPS指令集;ARMHoldingsofSunnyvale,CA的ARM指令集(其中具有可选附加扩展、例如NEON)),包含本文所述的(一个或多个)指令。在一个实施例中,核3390包含支持打包数据指令集扩展的逻辑(例如AVX1、AVX2),由此允许由许多多媒体应用所使用的操作使用打包数据来执行。应当理解,核可支持多线程运行(运行操作或线程的两个或更多并行集合),并且可按照多种方式这样做,包含时间切片多线程运行、同时多线程运行(其中单个物理核为物理核同时多线程运行的线程的每个提供逻辑核)或者其组合(例如,例如在Intel®超线程运行技术中的时间切片取和解码以及此后的同时多线程运行)。虽然在无序运行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。虽然处理器的所图示的实施例还包含单独指令和数据高速缓存单元3334/3374和共享L2高速缓存单元3376,但是备选实施例可具有用于指令和数据的单个内部高速缓存,例如比如等级1(L1)内部高速缓存或者多级内部高速缓存。在一些实施例中,系统可包含内部高速缓存以及核和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以是核和/或处理器外部的。特定示范有序核架构图34A-B图示更具体的示范有序核架构的框图,所述核将是芯片中的若干逻辑块其中之一(包含相同类型和/或不同类型的其他核)。逻辑块经过具有某种固定功能逻辑、存储器I/O接口和其他必要I/O逻辑(这取决于应用)的高带宽互连网络(例如环形网络)进行通信。图34A是按照本发明的实施例、单个处理器核连同其到管芯上互连网络3402的连接并且连同其等级2(L2)高速缓存3404的本地子集的框图。在一个实施例中,指令解码器3400支持具有打包数据指令集扩展的x86指令集。L1高速缓存3406允许对标量和向量单元中的高速缓冲存储器的低等待时间访问。虽然在一个实施例中(为了简化设计),标量单元3408和向量单元3410使用单独寄存器组(分别为标量寄存器3412和向量寄存器3414),以及在它们之间所传递的数据被写到存储器并且然后从等级1(L1)高速缓存3406读回,但是本发明的备选实施例可使用不同方式(例如使用单个寄存器组,或者包含允许数据在两个寄存器堆之间来传递而无需被写入和读回的通信路径)。L2高速缓存3404的本地子集是全局L2高速缓存(其划分为单独本地子集,每处理器核一个)的部分。每个处理器核具有到L2高速缓存3404的其自己的本地子集的直接访问路径。由处理器核所读取的数据存储在其L2高速缓存子集3404中,并且能够与访问其自己的本地L2高速缓存子集的其他处理器核并行地快速访问。由处理器核所写入的数据存储在其自己的L2高速缓存子集3404中,并且如果必要的话则从其他子集来冲刷。环形网络确保共享数据的相干性。环形网络是双向的,以便允许诸如处理器核、L2高速缓存和其他逻辑块的代理在芯片内彼此通信。每个环形数据路径每方向为1012位宽。图34B是按照本发明的实施例、图34A中的处理器核的部分的展开图。图34B包含L1高速缓存3404的L1数据高速缓存3406A部分以及与向量单元3410和向量寄存器3414有关的更多细节。具体来说,向量单元3410是16宽向量处理单元(VPU)(参见16宽ALU3428),其运行整数、单精度浮动和双精度浮动指令的一个或多个。VPU支持在存储器输入上采用混合单元3420来混合寄存器输入、采用数字转换单元3422A-B的数字转换以及采用复制单元3424的复制。写入掩码寄存器3426允许断言所得到的向量写。图35是按照本发明的实施例、可具有多于一个核、可具有集成存储器控制器并且可具有集成图形的处理器3500的框图。图35中的实线框图示具有单个核3502A、系统代理3510、一个或多个总线控制器单元3516的集合的处理器3500,而虚线框的可选附加图示具有多个核3502A-N、系统代理单元3510中的一个或多个集成存储器控制器单元3514的集合和专用逻辑3508的备选处理器3500。因此,处理器3500的不同实现可包含:1)具有作为集成图形和/或科学(吞吐量)逻辑(其可包含一个或多个核)的专用逻辑3508和作为一个或多个通用核(例如通用有序核、通用无序核、两者的组合)的核3502A-N的CPU;2)具有作为主要意图用于图形和/或科学(吞吐量)的大量专用核的核3502A-N的处理器;以及3)具有作为大量通用有序核的核3502A-N的协处理器。因此,处理器3500可以是通用处理器、协处理器或专用处理器,例如比如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协处理器(包含30个或以上核)、嵌入式处理器等。处理器可在一个或多个芯片上实现。处理器3500可以是一个或多个衬底的一部分和/或可使用多种工艺技术的任何、例如比如BiCMOS、CMOS或NMOS在一个或多个衬底上实现。存储器分级结构包含核内的一级或多级高速缓存、一个或多个共享高速缓存单元3506的集合以及耦合到集成存储器控制器单元3514的集合的外部存储器(未示出)。共享高速缓存单元3506的集合可包含一个或多个中间级高速缓存,例如等级2(L2)、等级3(L3)、等级4(L4)或者其他等级的高速缓存、最后等级的高速缓存(LLC)和/或它们的组合。虽然在一个实施例中,基于环形的互连单元3512互连专用逻辑3508(例如集成图形逻辑)、共享高速缓存单元3506的集合和系统代理单元3510/(一个或多个)集成存储器控制器单元3514,但是备选实施例可将任何数量的众所周知技术用于互连这类单元。在一个实施例中,在一个或多个高速缓存单元3506与核3502A-N之间保持相干性。在一些实施例中,核3502A-N的一个或多个具有多线程化(multithreading)的能力。系统代理3510包含协调和操作核3502A-N的那些组件。系统代理单元3510可包含例如功率控制单元(PCU)和显示器单元。PCU可以是或者包含用于调节核3502A-N和集成图形逻辑3508的功率状态所需的逻辑和组件。显示器单元用于驱动一个或多个外部连接的显示器。核3502A-N在架构指令集方面可以是同构或异构的;也就是说,核3502A-N的两个或更多可以能够运行相同指令集,而其他核可以能够仅运行那个指令集的子集或者不同的指令集。示范计算机架构图36-39是示范计算机架构的框图。在用于膝上型计算机、台式计算机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,蜂窝电话、便携媒体播放机、手持装置和各种其他电子装置的领域中已知的其他系统设计和配置也是适合的。一般来说,能够结合本文所公开的处理器和/或其他执行逻辑的极多种系统或电子装置一般是适合的。现在参照图36,所示的是按照本发明的一个实施例的系统3600的框图。系统3600可包含一个或多个处理器3610、3615,其耦合到控制器集线器3620。在一个实施例中,控制器集线器3620包含图形存储器控制器集线器(GMCH)3690和输入/输出集线器(IOH)3650(其可在单独芯片上);GMCH3690包含存储器和图形控制器,存储器3640和协处理器3645与其耦合;IOH3650将输入/输出(I/O)装置3660耦合到GMCH3690。备选地,存储器和图形控制器的一个或两者集成在处理器内(如本文所述),存储器3640和协处理器3645直接耦合到处理器3610以及具有IOH3650的单个芯片中的控制器集线器3620。附加处理器3615的可选性质在图36中采用虚线表示。每个处理器3610、3615可包含本文所述处理核的一个或多个,并且可以是处理器3500的某个版本。存储器3640可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或者两者的组合。对于至少一个实施例,控制器集线器3620经由多点总线(例如前侧总线(FSB))、点对点接口(例如快速路径互连(QPI))或者类似连接3695与(一个或多个)处理器3610、3615进行通信。在一个实施例中,协处理器3645是专用处理器,例如比如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器3620可包含集成图形加速器。在包含架构、微架构、热、功率消耗特性等的优点的衡量标准范围方面,在物理资源3610、3615之间能够存在各种差异。在一个实施例中,处理器3610运行控制通用类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器3610将这些协处理器指令辨认为应当由所附连的协处理器3645来运行的类型。相应地,处理器3610在协处理器总线或其他互连上向协处理器3645发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器3645接受和运行所接收的协处理器指令。现在参照图37,所示的是按照本发明的实施例的第一更具体示范系统3700的框图。如图37所示,多处理器系统3700是点对点互连系统,并且包含经由点对点互连3750所耦合的第一处理器3770和第二处理器3780。处理器3770和3780的每个可以是处理器3500的某种版本。在本发明的一个实施例中,处理器3770和3780分别是处理器3610和3615,而协处理器3738是协处理器3645。在另一个实施例中,处理器3770和3780分别是处理器3610、协处理器3645。示出处理器3770和3780,其分别包含集成存储器控制器(IMC)单元3772和3782。处理器3770还包含作为其总线控制器单元的部分的点对点(P-P)接口3776和3778;类似地,第二处理器3780包含P-P接口3786和3788。处理器3770、3780可使用点对点(P-P)接口电路3778、3788经由P-P接口3750来交换信息。如图37所示,IMC3772和3782将处理器耦合到相应存储器、即存储器3732和存储器3734,其可以是本地附连到相应处理器的主存储器的部分。处理器3770、3780各可使用点对点接口电路3776、3794、3786、3798经由个别P-P接口3752、3754与芯片组3790交换信息。芯片组3790可选地可经由高性能接口3792与协处理器3738交换信息。在一个实施例中,协处理器3738是专用处理器,例如比如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。共享高速缓存(未示出)可包含在处理器中或者两个处理器外部,但是仍然经由P-P互连与处理器连接,使得如果处理器被置于低功耗模式中,则任一个或两个处理器的本地高速缓存信息可存储在共享高速缓存中。芯片组3790可经由接口3796耦合到第一总线3716。在一个实施例中,第一总线3716可以是外设组件互连(PCI)总线或者例如PCI快速总线的总线或另一种第三代I/O互连总线,但是本发明的范围并不局限于此。如图37所示,各种I/O装置3714可连同总线桥3718(其将第一总线3716耦合到第二总线3720)一起耦合到第一总线3716。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器的一个或多个附加处理器3715耦合到第一总线3716。在一个实施例中,第二总线3720可以是低引脚计数(LPC)总线。在一个实施例中,各种装置可耦合到第二总线3720,包含例如键盘和/或鼠标3722、通信装置3727以及可包含指令/代码和数据3730的诸如磁盘驱动或其他海量存储装置的存储单元3728。此外,音频I/O3724可耦合到第二总线3720。注意,其他架构是可能的。例如,代替图37的点对点架构,系统可实现多点总线或其他这种架构。现在参照图38,所示的是按照本发明的实施例的第二更具体示范系统3800的框图。图37和图38中的相似元件具有相似参考数字,并且从图38中省略图37的某些方面,以免使图38的其他方面的理解模糊。图38图示处理器3770、3780可分别包含集成存储器和I/O控制逻辑(“CL”)3772和3782。因此,CL3772、3782包含集成存储器控制器单元,并且包含I/O控制逻辑。图38图示不仅存储器3732、3734耦合到CL3772、3782,而且I/O装置3814也耦合到控制逻辑3772、3782。遗留I/O装置3815耦合到芯片组3790。现在参照图39,所示的是按照本发明的实施例的SoC3900的框图。图35中的相似元件具有相似参考数字。而且,虚线框是更高级SoC上的可选特征。图39中,(一个或多个)互连单元3902耦合到:应用处理器3910,其包含一个或多个核3502A-N的集合(其包含高速缓存单元3504A-N)和(一个或多个)共享高速缓存单元3506;系统代理单元3510;(一个或多个)总线控制器单元3516;(一个或多个)集成存储器控制器单元3514;一个或多个协处理器3920的集合,其可包含集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元3930;直接存储器访问(DMA)单元3932;以及显示器单元3940,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器3920包含专用处理器,例如比如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。本文所公开的机制的实施例可在硬件、软件、固件或者这类实现方式的组合中实现。本发明的实施例可实现为在可编程系统上运行的计算机程序或程序代码,其中可编程系统包括至少一个处理器、存储系统(包含易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。例如图37所图示的代码3730的程序代码可应用于输入指令,以执行本文所述的功能并且生成输出信息。输出信息可按照已知方式应用于一个或多个输出装置。为了本申请的目的,处理系统包含具有例如比如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器的处理器的任何系统。程序代码可通过高级过程或面向对象的编程语言来实现,以便与处理系统进行通信。如果预期的话,程序代码也可通过汇编或机器语言来实现。实际上,本文所述的机制的范围并不局限于任何具体编程语言。在任何情况下,语言可以是编译或解释语言。至少一个实施例的一个或多个方面可通过机器可读媒介上存储的、表示处理器内的各种逻辑的代表指令来实现,其在由机器读取时使机器制作用来执行本文所述技术的逻辑。称作“IP核”的这类表示可存储在有形机器可读媒介上,并且供应给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。这种机器可读存储媒体可以包含但不限于通过机器或装置所制造或形成的物品的非暂时有形装置,包含:例如硬盘的存储媒体;任何其他类型的磁盘,包含软盘、光盘、致密光盘只读存储器(CD-ROM)、可重写致密光盘(CD-RW)和磁光盘;半导体器件,例如只读存储器(ROM)、例如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)的随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的媒体。相应地,本发明的实施例还包含非暂时有形机器可读媒体,其包含指令或者包含定义本文所述结构、电路、设备、处理器和/或系统特征的设计数据、例如硬件描述语言(HDL)。这类实施例又可称作程序产品。模仿(包含二进制转化、代码变形等)在一些情况下,指令转换器可用来将指令从源指令集转换成目标指令集。例如,指令转换器可将指令转化(例如使用静态二进制转化、包含动态编译的动态二进制转化)、变形、模仿或者以其他方式变换成将要由核来处理的一个或多个其他指令。指令转换器可在软件、硬件、固件或其何组合中实现。指令转换器可以在处理器上、处理器外或者部分处理器上和部分处理器外。图40是按照本发明的实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。在所图示事务实施例中,指令转换器是软件指令转换器,但是备选地,指令转换器可在软件、固件、硬件或者它们的各种组合中实现。图40示出在高级语言4002中的程序可使用x86编译器4004来编译,以生成x86二进制代码4006,其可由具有至少一个x86指令集核的处理器4016本机运行。具有至少一个x86指令集核的处理器4016表示任何处理器,其能够通过兼容地运行或者以其他方式处理下列方面来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能:(1)Intelx86指令集核的指令集的实质部分;或者(2)针对运行于具有至少一个x86指令集核的Intel处理器的应用或其他软件的对象代码版本,以便取得与具有至少一个x86指令集核的Intel处理器基本上相同的结果。x86编译器4004表示可操作以生成x86二进制代码4006(例如对象代码)(其能够在具有或没有附加链接处理的情况下运行于具有至少一个x86指令集核的处理器4016)的编译器。类似地,图40示出高级语言4002中的程序可使用备选指令集编译器4008来编译,以便生成备选指令集二进制代码4010,其可由没有至少一个x86指令集核的处理器4014(例如具有运行MIPSTechnologiesofSunnyvale,CA的MIPS指令集和/或运行ARMHoldingsofSunnyvale,CA的ARM指令集的核的处理器)本机运行。指令转换器4012用来将x86二进制代码4006转换为可由没有x86指令集核的处理器4014本机运行的代码。这个转换代码不可能与备选指令集二进制代码4010是相同的,因为能够进行这个操作的指令转换器难以制作;但是,转换代码将实现一般操作,并且由来自备选指令集的指令来组成。因此,指令转换器4012表示软件、固件、硬件或者其组合,其经过模仿、仿真或者任何其他过程允许处理器或者没有x86指令集处理器或核的其他电子装置运行x86二进制代码4006。虽然附图中的流程图示出通过某些实施例所执行的操作的特定顺序,但是应当理解,这种顺序是示范的。因此,备选实施例可按照不同顺序来执行操作、组合某些操作、重叠某些操作等。另外,虽然按照若干实施例描述了本发明,但是本领域的技术人员将认识到,本发明并不局限于所述实施例,而是能够在所附权利要求书的精神和范围之内,采用修改和变更来实施。因此,本描述被看作是说明性而不是限制性的。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1