实现用于具有写到读依赖关系的稀疏线性代数运算的增强的并行性的微架构的制作方法

文档序号:14911111发布日期:2018-07-10 23:26阅读:252来源:国知局

本公开总体上涉及电子学,更具体地,实施例涉及实现用于具有写到读 (write-to-read)依赖关系的稀疏线性代数运算的增强的并行性的微架构设计和 使用。



背景技术:

机器学习领域可认为是对以下技术的研究:使计算机在没有被显式编程的 情况下采取动作以执行特定任务,并且还随着时间的推移使这些计算机变得更 擅长做这些任务。仅在几年时间里,不断进展的机器学习领域已用于不断增加 数量的实际应用,从而产生各种技术,诸如,无人驾驶汽车、改进的互联网搜 索引擎、语音、音频和/或视觉识别系统、人类健康数据和基因组分析、推荐系 统、欺诈检测系统等。

正由人类和非人类两者产生的数据量和类型的增长以及计算处理和数据 存储的可用性和功率的增加已因此导致各种人对应用机器学习技术的兴趣的 激增。

许多机器学习算法以及其他现代的计算应用依赖于线性代数的使用。例 如,许多机器学习算法使用分类器或回归器,并且通过使由初期分类器计算的 值与来自训练数据的实际值之间的误差最小化来训练该分类器或回归器。这可 通过以迭代方式或使用线性代数技术来完成,线性代数技术通常涉及奇异值分 解(SVD)或其变体。

许多近期的机器学习应用涉及(典型地,以稀疏矩阵形式)对稀疏数据集 的使用。稀疏矩阵是这样的矩阵:在其中,该矩阵中的元素中的许多或大部分 具有默认值(例如,0,空值(NULL))。例如,用于对文档分类的一些机器 学习应用可利用矩阵,该矩阵包括用于在这些文档中使用的文字的维度(或矩 阵中的“列”);由此,特定的文档可包括总文字量中的仅少量文字,因此,用 于此文档的矩阵内的条目(或“行”)可具有大量“空”元素。此类稀疏矩阵通常 以压缩或替代表示形式来表示,这些压缩或替代表示形式可使用许多不同的精 确格式和数据结构,但是这些典型地都尝试消除对非零元素的存储(即,它们 仅存储非零条目)。两个此类示例包括压缩稀疏行(CRS)和压缩稀疏列(CSC)。

然而,线性代数运算(尤其是稀疏线性代数运算)在现代计算系统中很难 并行化,这至少部分地由于跨迭代(例如,在矩阵中更新值的循环)的潜在的 写到读依赖关系。

用于执行稀疏线性代数运算的当前方式要么使用锁定技术,要么使用近似 无锁实现方式。锁定继续产生与顺序部分相同的解,并且权衡锁定开销以得到 更大的并行性。然而,作为锁定开销的结果,先前方式已显示性能并不缩放超 过2-4个核,并且甚至直到4个核也不产生接近线性性能缩放的任何结果。

第二种方式(涉及使用近似无锁实现方式)确实更接近线性性能缩放,但 是由于在根本上寻找近似而无法实现最佳解。此外,输出偏差对于具有幂律分 布的数据集(其中,一些特征比另一些特征更常见)可能是尤其高的,这导致 错误更新的更大几率。

因此,迫切需要为具有写到读依赖关系的稀疏线性代数运算提供增强的并 行性的技术。

附图说明

通过参考用于说明一些实施例的以下描述和所附附图,可最佳地理解本发 明。在附图中:

图1是示出根据一些实施例的用于实现用于具有写到读依赖关系的稀疏 线性代数运算的增强的并行性的硬件处理器的高层级微架构的框图。

图2是示出根据一些实施例的存储器地址的框图,这些存储器地址由仲裁 器的锁缓冲器跟踪,该仲裁器控制对存储器的区块的访问。

图3是示出根据一些实施例的流程的流程图,该流程包括用于经由加载并 锁定指令来访问存储器的操作。

图4是示出根据一些实施例的流程的流程图,该流程包括用于经由存储并 解锁指令来访问存储器的操作。

图5是框图,示出根据一些实施例的加载并锁定指令和存储并解锁指令、 用于在分类或回归算法中执行模型更新的代码段、以及用于执行模型更新的实 现安全且增强的并行性的改进的代码段。

图6是示出根据一些实施例的仲裁器、存储器和处理元件集合的示例性配 置的框图。

图7是示出根据一些实施例的操作流程的流程图。

图8示出根据一些实施例的示例实现方式,在该示例实现方式中,加速器 通过高速缓存一致接口通信地耦合到多个核。

图9示出根据一些实施例的加速器的另一视图。

图10示出根据一些实施例的由处理元件执行的示例操作集。

图11a描绘根据一些实施例的在稀疏矩阵A与向量x之间相乘以产生向 量y的乘法的示例。

图11b示出根据一些实施例的矩阵A的CSR表示,在该CSR表示中,每 一个值被存储为(值,行索引)对。

图11c示出矩阵A的CSC表示,该CSC表示使用(值,列索引)对。

图12a、图12b和图12c示出每一种计算模式的伪代码,其中:

图12a示出根据一些实施例的面向行的(row-oriented)稀疏矩阵与密集向 量相乘(spMdV_csr)。

图12b示出根据一些实施例的面向列的(column-oriented)稀疏矩阵与稀 疏向量相乘(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提供根据一些实施例的点积引擎(DPE)的高层级概览图,该DPE 包含两个缓冲器、两个64位乘-加算术逻辑单元(ALU)以及控制逻辑。

图25示出根据一些实施例的用于大型稀疏矩阵计算的分块方案。

图26示出根据一些实施例的块描述符的格式。

图27示出根据一些实施例的将块描述符用于两行矩阵,该两行矩阵适配 在具有仅一个堆叠的动态随机存取存储器(DRAM)数据通道和四字数据猝发 的系统上的单个点积引擎的缓冲器内。

图28示出根据一些实施例的点积引擎中的硬件的一种实现方式。

图29示出根据一些实施例的进行捕捉的匹配逻辑3020的内容。

图30示出根据一些实施例的用于支持稀疏矩阵-稀疏向量乘法的点积引擎 设计的细节。

图31示出根据一些实施例的使用特定值的示例多轮次(multi-pass)方式。

图32示出根据一些实施例的上文所述的稀疏-密集和稀疏-稀疏点积引擎 能够如何组合的方式。

图33是根据一些实施例的寄存器架构的框图。

图34A是示出根据一些实施例的示例性有序流水线和示例性的寄存器重 命名的乱序发布/执行流水线的框图。

图34B是示出根据一些实施例的要包括在处理器中的有序架构核的示例 性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。

图35A-图35B示出更具体的示例性有序核架构的框图,该核将是芯片中 的若干逻辑块(包括相同类型和/或不同类型的其他核)之一。

图35A是根据一些实施例的单个处理器核以及它与管芯上互连网络的连 接及其第二级(L2)高速缓存的本地子集的框图。

图35B是根据一些实施例的图35A中的处理器核的一部分的展开图。

图36是根据一些实施例的可具有多于一个核、可具有集成的存储器控制 器、并且可具有集成图形的处理器的框图。

图37-40是示例性计算机架构的框图。

图37示出根据一些实施例的系统的框图。

图38是根据一些实施例的更具体的第一示例性系统的框图。

图39是根据一些实施例的更具体的第二示例性系统的框图。

图40是根据一些实施例的SoC的框图。

图41是示出根据一些实施例的对照使用软件指令转换器将源指令集中的 二进制指令转换成目标指令集中的二进制指令的框图。

具体实施方式

以下描述内容描述了实现用于具有写到读依赖关系的稀疏线性代数运算 的增强的并行性的微架构设计和使用。在该描述中,可陈述众多具体细节(诸 如,系统组件的逻辑实现、类型和相互关系等)以提供对一些实施例的更透彻 理解。然而,本领域技术人员应当领会,没有这些具体细节也可实践本发明。 在其他实例中,没有详细示出控制结构、门级电路和/或完整的软件指令序列, 以便不至于使本发明变得模糊。本领域技术人员利用所包括的描述将能够在无 需过度实验的情况下实现适当的功能。

说明书中对“一个实施例”、“实施例”、“示例实施例”等等的引用表明所描 述的实施例可以包括特定的特征、结构或特性,但是每个实施例可能不一定包 括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此 外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确 描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范 围之内的。

用括号括起来的文本以及具有虚线边界的框(例如,大虚线、小虚线、点 虚线、点线)可在本文中用于示出向本发明的实施例添加附加特征的可任选操 作。然而,此类记号不应当被认为意味着它们是仅有的选项或可任选操作,和 /或具有实线边界的框在本发明的某些实施例中不是可任选的。

贯穿本说明书,在(对应于所示实体的)附图标记的末尾使用字母符号不 旨在指示任何特定数量的那个实体必须一定存在,而仅指示该实体是潜在许多 类似实体中的一个。例如,处理元件110A-110X包括“A”和“X”这两个字母后 缀,这意味着可以有两个处理元件、三个处理元件、十六个处理元件,等等。 此外,将不同的字母符号用作参考后缀以用于不同实体不旨在指示必须具有不 同数量的这些实体。例如,虽然处理元件110A-110X和存储器地址标识符 206A-206N的末尾包括不同的字母后缀——即,“X”和“N”,但是在各种实施例 中,可具有相同数量(或不同数量)的这些实体。

如先前所述,迫切需要为具有写到读依赖关系的稀疏线性代数运算提供增 强的并行性的技术。本文中公开的实施例提供凭借新颖的存储器组织、可利用 两条指令(被称为“LOAD_LOCK”和“STORE_UNLOCK”)的硬件处理器(例 如,微处理器、硬件加速器),该新颖的存储器组织可通过设计来使处理器能 够更好地利用迭代间并行性。在一些实施例中,存储器是高度区块化的静态随 机存取存储器(SRAM),该存储器可经由仲裁器来访问,该仲裁器提供针对 每一区块的锁缓冲器,锁缓冲器中的每一个允许应用锁定存储在对应区块内的 存储器地址。相应地,处理器可并行地执行例如循环的多个迭代,同时尊重该 循环所呈现的真实写到读依赖关系。

图1是示出根据一些实施例的用于实现用于具有写到读依赖关系的稀疏 线性代数运算的增强的并行性的硬件处理器100的高层级微架构的框图。图1 示出硬件处理器100的各组件,包括多个处理元件110A-110X、仲裁器102和 高度区块化(heavily-banked)的存储器104(例如,由处理元件110共享的第 二级(L2)高速缓存、暂存器(scratchpad)),仲裁器102包括多个锁缓冲 器106-0至106-31,高度区块化存储器104包括多个区块108-0至108-31。在 一些实施例中,存储器104是SRAM。处理元件110A-110X中的每一个可包 括用于执行一条或多条指令来执行操作的电路,或者可以是或可以不是处理器 核的部分。由此,处理元件可视为一种类型的硬件处理器。

图1中示出的实施例指示存储器104是高度区块化的。高度区块化存储器 104是包括大于“典型的”区块(每一个区块可被并行地(例如,同时)访问) 数量的存储器。虽然被视为高度区块化的存储器所需的区块108的精确数量取 决于处理器架构的特定性质,但是将会理解,在本公开的上下文中,高度区块 化最少旨在意味着具有至少4个区块,并且一些实施例使用8个区块、16个区 块、32个区块(如图所示)、64个区块、128个区块、256个区块、或超过4 个区块的不同数量的区块,其大小可设定为2的幂或可不设定为2的幂。例如, 如图所示,包括三十二个区块108的存储器可允许每周期32-64次并行标量访 问。

如图所示,处理元件110A-110X可执行实现各种不同操作的一组指令, 这些操作包括但不限于利用稀疏数据的分类或递归算法,其可能包括循环(或 其他逻辑,该其他逻辑在它已被写入之后不久需要频繁地读取值)——例如, 模型更新循环,该模型更新循环以某种方式修改矩阵中的每一个元素(例如, 将每一个元素乘以值)

在一些实施例中,由处理元件110A-110X执行的一组指令包括 LOAD_LOCK和STORE_UNLOCK指令,这些指令使存储器操作请求 112A-112Z(例如,信号)被发送到仲裁器102。LOAD_LOCK指令会产生对 以下两者的请求:执行从特定存储器地址加载值(例如,从区块108加载到处 理元件110A的寄存器中),以及“锁定”那个存储器位置而使其不能够由其他 元件访问和/或修改。类似地,STORE_UNLOCK指令会产生对以下两者的请 求:将(例如,新的或经更新的)值存储到存储器地址,以及“解锁”那个存储 器位置,使得其他元件现在能够访问该存储器位置。在本文中稍后将参照其他 附图来呈现关于这些指令的进一步细节。

仲裁器102(其可以是存储器控制器的部分)适于接收这些存储器操作请 求112A-112Z,并且利用多个锁缓冲器160-0至160-31以确定如何响应于存储 器操作请求112A-112Z来进行动作。例如,仲裁器102可标识与存储器请求相 关联的存储器地址(例如,要从其读取或要向其写入的地址),标识对应于负 责该存储器地址的区块的锁缓冲器(例如,锁缓冲器106-0),并且基于锁缓 冲器106-0的任何锁缓冲器条目来判定所请求的存储器地址是否被锁定。

图2是示出根据一些实施例的存储器地址标识符206A-206N的框图,存 储器地址标识符206A-206N由仲裁器102的锁缓冲器106-0维护,供在控制对 存储器的区块108-0的访问时使用。如本文中所述,仲裁器102维护对应于存 储器104的区块108的锁缓冲器106。锁缓冲器106中的每一个可(例如,经 由存储器地址标识符206A-206N)保持跟踪多达多个来自该锁缓冲器对应的区 块108内的、将被视为被锁定的存储器地址。例如,在一些实施例中,锁缓冲 器106中的每一个可能能够跟踪多达四个存储器地址,但是在其他实施例中, 锁缓冲器106中的每一个可能能够跟踪多达五个存储器地址、十个存储器地址、 一个存储器地址,等等。

存储器地址能以锁缓冲器条目202A-202N存储存储器地址标识符 206A-206N的形式被跟踪,存储器地址标识符206A-206N中的每一个可以是 允许仲裁器102唯一地标识区块条目204A-204M中被锁定的一个区块条目的 一个或多个数据位(或字节)。例如,在一些实施例中,每一个锁缓冲器条目 202A-202N可存储作为完整存储器地址的存储器地址标识符206A,但是在其 他实施例中,存储器地址标识符206A-206N中的每一个可包含比全存储器地址 更少的位/字节。例如,如果区块108-0包括256个不同的区块条目204A-204M, 则实施例可利用各自大小为一个字节的存储器地址标识符206A-206N(因为8 个位能够清楚地表示256个值)。然而,可利用就存储器地址标识符206A-206N 的大小和格式而言的许多其他配置,该其他配置在本领域技术人员获得本公开 后对他们将是可辨别的。

无论存储器地址标识符206A-206N的大小和格式如何,仲裁器102都可 判定存储器地址是否由与该存储器地址相关联的区块108的锁缓冲器条目 202A-202N中的一个来表示。当存储器地址在锁缓冲器106“中”时,则该存储 器地址被锁定,并且无法(例如,由除锁定进程/线程之外的进程/线程)读取 或修改,直到该存储器地址被解锁;反过来,当存储器地址不在锁缓冲器 106“中”时,则该存储器地址不被锁定,并且可被读取、修改和/或锁定。

由此,在操作期间,零个、一个或多于一个锁缓冲器条目202存在都可以 是可能的。

如图所示,在一些实施例中,仲裁器102包括输入单元205、锁缓冲器控 制单元255和存储器控制单元260。这些块可包括(为本领域技术人员所知的 各种类型的)硬件单元,这些硬件单元可接收存储器操作请求112(由输入单 元250进行),判定存储器地址是否在锁缓冲器106内被表示(由锁缓冲器控 制单元255进行),并且使用区块108加载和/或存储值(由存储器控制单元 260进行)以实现本文中所公开的一些实施例。

往回转到图1,在接收到响应于处理元件针对特定存储器地址执行 LOAD_LOCK指令而生成的存储器操作请求(例如,存储器操作请求112A) 后,仲裁器102可判定该存储器地址是否在锁缓冲器106“中”。在一些实施例 中,仲裁器102可仅在区块108-0中存储器地址将位于的特定锁缓冲器(例如, 锁缓冲器106-0)中搜索,但是在其他实施例中,仲裁器102可简单地搜遍各 个(或全部)锁缓冲器106-0至106-31以判定存储器地址是否在锁缓冲器中的 一个“中”(即,被锁定)。

如果对于响应于处理元件执行LOAD_LOCK指令而生成的存储器操作请 求112A,存储器地址不在相应的锁缓冲器中(或不在锁缓冲器中的任一者中), 则仲裁器102可从特定的区块108-0加载那个存储器地址处的值(例如,标量 值),并且可通过将条目插入到锁缓冲器中来“锁定”该存储器地址。

然而,在一些实施例中,如果在锁缓冲器106-0中没有可用的条目,则仲 裁器102可将指示该存储器地址不能够被锁定(和/或该值不能够被放置到(多 个)寄存器中)的标记(例如,“区块冲突标记”)返回至作出请求的处理设备 110A。

类似地,如果对于响应于处理元件执行LOAD_LOCK指令而生成的存储 器操作请求112A,已经在相应的锁缓冲器中找到该存储器地址,则在一些实 施例中,仲裁器102可将指示该存储器地址不能够被锁定(和/或该值不能够被 放置到(多个)寄存器中)的标记(例如,“区块冲突标记”)返回至作出请求 的处理元件110A。

为获得进一步的细节,我们转到图3,图3是示出根据一些实施例的流程 300的流程图,该流程300包括用于经由加载并锁定(或LOAD_LOCK)指令 来访问存储器的操作。将参照其他附图中的示例性实施例来描述该流程图中的 操作。然而,应当理解,该流程图中的操作可由除参照其他附图所讨论的那些 实施例之外的实施例来执行,并且参照这些其他附图所讨论的实施例可执行与 参照该流程图所讨论的操作不同的操作。例如,在一些实施例中,流程300可 由图1、图2或图6中的任一图中的仲裁器102执行。

流程300包括:在框305处,从处理器核接收将高速缓存的存储器地址处 的值加载并锁定到寄存器中的请求。该请求可包括响应于处理器核执行 LOAD_LOCK指令而生成的一个或多个信号。该高速缓存被视为是“高度区块 化的”,体现在它包括多个区块305。该存储器是高度区块化的,体现在它包括 多个区块,诸如,四个、五个、八个、十个,等等。该存储器可以是充当L2 高速缓存、暂存器等的SRAM。

流程300还包括:在框310处,判定该存储器地址是否在对应于多个区块 的多个锁缓冲器内存在(即,被表示)。多个锁缓冲器中的每一个包括存储当 前被锁定的对应区块内的存储器地址的多达多个条目。此判定可包括:确定该 存储器地址应当位于的区块;以及判定该存储器地址是否在对应于那个区块的 锁缓冲器内被表示。然而,在一些实施例中,此判定可包括:搜遍一个或多个 锁缓冲器的锁缓冲器条目以尝试找到在其中被表示的该存储器地址。

流程300还包括:在判断框315处,如果没有找到该存储器地址,则分支 向左。在一些实施例中,流程300随后可包括:判定空闲条目是否存在与值被 存储在其中的区块相对应的锁缓冲器内。如果不是,则在一些实施例中,流程 300继续进行到框330,并且响应于请求来返回区块冲突标记。然而,如果发 现自由条目存在于可任选的判断框320中(或在不利用判断框的实施例中), 流程300可继续进行到框325,并且将值从区块加载到寄存器中且将该存储器 地址插入到对应于该区块的锁缓冲器中以使该存储器地址被锁定。

然而,如果在判断框315处发现了所请求的存储器地址,则流程300可继 续进行到框330,并且响应于请求来返回区块冲突标记。

往回转到图1,STORE_UNLOCK的操作多少类似于LOAD_LOCK的那 些操作,但是有一些区别。在接收到响应于处理元件针对特定存储器地址执行 STORE_LOCK指令而生成的存储器操作请求(例如,存储器操作请求112A) 后,仲裁器102可判定该存储器地址是否如上文中参照LOAD_LOCK指令所 述在锁缓冲器106“中”。

如果在相应的锁缓冲器中找到了该存储器地址,则仲裁器102能以所提供 的值来更新在特定的区块108-0中的那个存储器地址处的值(例如,标量值), 并且可通过将对应条目从锁缓冲器移除来“解锁”该存储器地址。

然而,如果没有在相应的锁缓冲器中找到该存储器地址,则在一些实施例 中,仲裁器102可将指示该存储器地址不能够被解锁以及值不能够被存储在那 个存储器地址处的标记(例如,“区块冲突标记”)返回至作出请求的处理元件 110A。然而,在多数实施例中,在没有系统的某些干扰或问题(生成不恰当指 令的编译器中的故障、硬件失灵)的情况下,此操作条件应当是不可能的,因 为指令仅在成功调用LOAD_LOCK之后才调用STORE_UNLOCK。

为获得进一步的细节,我们转到图4,图4是示出根据一些实施例的流程 400的流程图,该流程400包括用于经由存储并解锁(或STORE_UNLOCK) 指令来访问存储器的操作。例如,在一些实施例中,流程400可由图1、图2 或图6中的任一图中的仲裁器102执行。

流程400包括:在框405处,接收将值存储并解锁到存储器地址处的存储 器中的请求。该请求可包括响应于处理器核执行STORE_UNLOCK指令而生 成的一个或多个信号。该存储器是高度区块化的,体现在它包括多个区块,诸 如,四个、五个、八个、十个,等等。该存储器可以是充当L2高速缓存、暂 存器等的SRAM。

流程400包括:在框410处,判定该存储器地址是否存在于对应于多个区 块的多个锁缓冲器内。多个锁缓冲器中的每一个包括存储了在对应区块内的存 储器地址的标识符的多达多个条目。

流程400包括:在框415处,当找到所请求的存储器地址时,向左分支到 框420。在框420处,流程400包括将该存储器地址从锁缓冲器移除,随后, 在框425处,将所提供的值存储在对应于锁缓冲器的存储器的区块内的存储器 地址处。

如果在判定框415处没有找到所请求的存储器地址,则可由各实施例进行 示出为替代的“否”路径440A-440B的各分支。由带圈的“A”表示的一个分支包 括简单地进行到框425:将所提供的值存储在对应于锁缓冲器的存储器的区块 内的存储器地址处。

另一可能的分支由带圈的“B”表示,并且该分支可包括框430以及响应于 请求而返回诸如“区块冲突标记”之类的标记,该标记用于指示体现为未找到该 存储器地址的所请求操作的异常。在一些实施例中,该流程随后可以或可以不 继续进行到框425,在框425处,存储值。

此外,在一些实施例中也可执行来自框405的替代路径445,该替代路径 简单地包括框420以及将该存储器地址从锁缓冲器移除(如果该存储器地址存 在),随后在框425处存储值。

我们现在转向图5,图5是根据一些实施例的具有框500、代码段525以 及改进的代码段550的框图,框500示出加载并锁定指令505以及存储并解锁 指令510,代码段525用于在分类或回归算法中执行模型更新,改进的代码段 550用于执行模型更新、实现安全且增强的并行性。

如通篇所述,可利用具有地址操作数的LOAD_LOCK指令505来使仲裁 器102尝试将来自该地址的值加载到例如寄存器中并锁定那个存储器地址。类 似地,可利用具有地址操作数和值操作数的STORE_UNLOCK指令510来使 仲裁器102尝试将所提供的值存储在该地址处并解锁那个存储器地址。

此外,实施例对于机器学习实现方式可以是特别有益的,机器学习实现方 式可包括例如循环,其中,跨循环的迭代具有潜在的写到读依赖关系。

一个典型的示例包括以在分类/回归程序中执行模型更新,该分类/回归程 序可以显得与代码段525类似。在代码段525中,示出“for”循环,该“for”循环 试图通过以下方式来修改“denseVector”(“密集向量”)(例如,稀疏矩阵的紧 凑表示)中的某些值:对这些值递增“scalarVal”(例如,标量值)与变化的索 引处的另一向量“x”的值相乘的结果。注意,这是其中存在跨循环迭代的潜在 写到读依赖关系的循环的经典示例。

该循环的“改进”版本示出为代码段550,该代码段550可容易地由编译器 生成以利用如本文中所公开的LOAD_LOCK指令和STORE_UNLOCK指令。 在此示例中,“denseVector[x[i].index]”的值被检索出(并被保存为“val”),并 且该存储器位置被线程/进程锁定。随后,值“val”被递增乘法的结果,并且使 用STORE_UNLOCK指令将经更新的“val”往回写入到存储器。

作为结果,该代码段550可由编译器安全且有效地并行化,并且可产生相 比其他系统的对模型更新的显著更快执行。

当然,实施例可极其有益于许多其他类型的程序和计算,包括但不限于使 用随机梯度下降(SGD)、矩阵因子化/分解等执行页面排名(Pagerank)。

相应地,在一些实施例中,此微架构可比其他所描述的方式更优越,因为 对软件而言它容易使用,甚至当存在跨迭代的实际写到读依赖关系时也可提供 加速,并且不损害输出质量。例如,依赖于事务性存储器和锁的系统是低劣的, 因为对于每次访问锁引发获取/释放开销,并且事务性存储器仅当不存在跨线程 的依赖关系时才提供性能。作为另一示例,与执行到共享状态的“不安全”更新 的软件中的近似相比,此类近似实现方式在输出质量上有所妥协以实现高性 能。

此外,一些实施例中的存储器的高度区块化的结构允许应用跨许多锁(例 如,256个锁)非常迅速地(例如,在1-4个周期内)保持和检查。这允许处 理元件和硬件处理器作为整体通过并行地运行更多迭代并同时依赖于存储器 以获得正确性来实现更高性能。

图6是示出根据一些实施例的仲裁器102、存储器104和处理元件 110A-110X的集合的示例性配置的框图。本文中所描述的技术在各种上下文中 都是有用的。例如,第一配置600包括处理元件110A-110X,该处理元件 110A-110X执行为也包括仲裁器102的片610(tile)的部分。存储器104(SRAM、 DRAM等)可以或可以不位于片610上。仲裁器102可以是存储器控制器615 的一个组件。在一些实施例中,存储器控制器615可以是如本文中稍后所述的 数据管理单元(DMU)。该片610可以是许多此类片中的一个,并且可充当 与系统的另外一个或多个中央处理元件(CPU)不同的加速器单元的部分。例 如,一个或多个中央处理器可使加速器605执行某些机器学习操作,这些机器 学习操作可包括如本文中所公开的其中具有跨循环迭代的潜在写到读依赖关 系的循环。

另一配置625也包括操作为片610的部分的处理元件110A-110X,但是仲 裁器102(可任选地,存储器控制器615)与(多个)片610分开,并且存储 器104可与加速器610分开。例如,存储器104可以是系统存储器(例如,也 由一个或多个CPU使用)。

又一配置650包括处理元件110A-110X以及仲裁器102(可任选地,存储 器控制器615)和存储器104,它们全都充当硬件处理器655(诸如,服务器端 站处理器、工作站/台式处理器等)的部分。

图7是示出根据一些实施例的操作的流程700的流程图。在一些实施例中, 流程700的操作可由其他图中的仲裁器102执行。

流程700包括:在框705处,从处理元件接收加载并锁定位于存储器的第 一存储器地址处的第一值的第一请求。该存储器是高度区块化的,体现在它包 括多个区块。在框705由仲裁器102执行的实施例中,框705可由接收该请求 (可经由总线或线)的仲裁器102的输入单元250执行。

在框710处,流程700包括:判定第一存储器地址是否在对应于多个区块 的多个锁缓冲器内被跟踪。多个锁缓冲器中的每一个存储来自对应区块的当前 被锁定的多达多个存储器地址。在一些实施例中,当第一存储器地址自身被存 储在锁缓冲器内(存储为存储器地址标识符)时,第一存储器地址将被视为在 多个锁缓冲器内被跟踪,在一些实施例中,当第一存储器地址的部分(或来自 第一存储器地址的位的子集)被存储在锁缓冲器内(存储为存储器地址标识符) 时,第一存储器地址将被视为在多个锁缓冲器内被跟踪。当然,在其他实施例 中,可利用不同的存储器地址标识符。在框710由仲裁器102执行的实施例中, 框710可由仲裁器102的锁缓冲器控制单元255执行,该锁缓冲器控制单元255 包括多个存储位置和用于判定存储器地址是否在那些存储位置内被表示的电 路。

在框715处,流程700包括:响应于确定了第一存储器地址不在多个锁缓 冲器中被跟踪,将第一值从多个区块中的第一区块加载到第一寄存器中,并且 将第一存储器地址的标识符插入到对应于第一区块的多个锁缓冲器中的第一 锁缓冲器中,以使存储器地址被锁定。在框715由仲裁器102执行的实施例中, 框715可由仲裁器102的存储器电路以及仲裁器102的存储器控制单元260执 行,该存储器电路包括多个存储位置和用于判定存储器地址是否在那些存储位 置内被表示(或“跟踪”)的电路,该存储器控制单元260包括允许仲裁器102 检索存储在存储器中的值并将该值往回发送到寄存器的电路。

可任选地,如由虚线所指示,流程700包括框720:从第一处理元件接收 将第二值存储在第一存储器地址处并解锁该第一存储器地址的请求。可任选 地,流程700还包括框725:将第二值存储在第一区块的第一存储器地址处, 并将第一存储器地址移除而不由第一锁缓冲器跟踪(例如,当第一存储器地址 充当存储器地址标识符时,将第一存储器地址从第一锁缓冲器移除;当另一值 (诸如,存储器地址的位/字节的子集)充当存储器地址标识符时,移除该另一 值。

示例

根据一些示例,硬件处理器包括:多个处理元件;以及仲裁器,所述仲裁 器与所述多个处理元件耦合并与分区块成多个区块的存储器耦合,所述仲裁器 用于从所述多个处理元件中的处理元件接收加载并锁定位于所述存储器的第 一存储器地址处的第一值的第一请求,其中,所述仲裁器用于判定所述第一存 储器地址是否在对应于所述多个区块的多个锁缓冲器内被跟踪,其中,所述多 个锁缓冲器中的每一个跟踪来自对应区块的当前正被锁定的多达多个存储器 地址,并且其中,所述仲裁器用于响应于判定所述第一存储器地址不被跟踪, 将所述第一值从所述多个区块中的第一区块加载到用于所述处理元件的第一 寄存器中,并将所述第一存储器地址的标识符插入到对应于所述第一区块的所 述多个锁缓冲器中的第一锁缓冲器中以使所述存储器地址被锁定。

在一些实施例中,所述仲裁器进一步用于:从第二处理元件接收加载并锁 定位于第二存储器地址处的第二值的第二请求;判定所述第二存储器地址是否 在所述多个锁缓冲器内被跟踪;以及响应于判定所述第二存储器地址由所述多 个锁缓冲器中的第二锁缓冲器跟踪,将指示所述第二存储器地址被锁定的区块 冲突标记返回到所述第二处理元件。在一些实施例中,所述仲裁器进一步用于: 从所述第一处理元件接收将第二值存储在所述第一存储器地址处并解锁所述 第一存储器地址的请求。在一些实施例中,所述仲裁器进一步用于:将所述第 二值存储在所述第一存储器地址处并将所述第一存储器地址移除而不由所述 第一锁缓冲器跟踪。在一些实施例中,所述仲裁器进一步用于:判定所述第一 存储器地址是否在所述第一锁缓冲器内被跟踪。在一些实施例中,所述仲裁器 进一步用于:响应于判定所述第一存储器在所述第一锁缓冲器中被跟踪,将所 述第二值存储在所述第一区块内的所述第一存储器地址处并将所述第一存储 器地址移除而不由所述第一锁缓冲器跟踪。在一些实施例中,所述仲裁器进一 步用于:响应于判定所述第一存储器不在所述第一锁缓冲器内被跟踪,将所述 第二值存储在所述第一存储器地址处或将标记返回到所述第一处理元件。在一 些实施例中,所述多个区块包括至少八个区块。在一些实施例中,所述多个区 块包括至少三十二个区块。

根据一些实施例,可在硬件处理器的仲裁器单元中执行一种方法。所述方 法包括:在所述仲裁器单元处,从处理元件接收加载并锁定位于存储器的第一 存储器地址处的第一值的第一请求,其中,所述存储器是高度区块化的,体现 在所述存储器包括多个区块;由所述仲裁器单元判定所述第一存储器地址是否 在对应于所述多个区块的多个锁缓冲器内被跟踪,其中,所述多个锁缓冲器中 的每一个跟踪来自对应区块的当前正被锁定的多达多个存储器地址;以及响应 于判定所述第一存储器地址不在所述多个锁缓冲器内被跟踪,将所述第一值从 所述多个区块中的第一区块加载到第一寄存器中,并将所述第一存储器地址的 标识符插入到对应于所述第一区块的所述多个锁缓冲器中的第一锁缓冲器,以 使所述存储器地址被锁定。在一些实施例中,所述多个区块包括至少八个区块, 并且在一些实施例中,所述多个区块包括至少三十二个区块。在一些实施例中, 所述方法进一步包括:在所述仲裁器单元处,从第二处理元件接收加载并锁定 位于第二存储器地址处的第二值的第二请求;由所述仲裁器单元判定所述第二 存储器地址是否在所述多个锁缓冲器内被跟踪;以及响应于判定所述第二存储 器地址由所述多个锁缓冲器中的第二锁缓冲器跟踪,将指示所述第二存储器地 址当前被锁定的区块冲突标记返回到所述第二处理元件。在一些实施例中,所 述方法进一步包括:在所述仲裁器单元处,从所述第一处理元件接收将第二值 存储在所述第一存储器地址处并解锁所述第一存储器地址的请求。在一些实施 例中,所述方法进一步包括:将所述第二值存储在所述第一存储器地址处并将 所述第一存储器地址移除而不由所述第一锁缓冲器跟踪。在一些实施例中,所 述方法进一步包括:判定所述第一存储器地址是否在所述第一锁缓冲器内被跟 踪;以及响应于判定所述第一存储器在所述第一锁缓冲器中被跟踪,将所述第 二值存储在所述第一区块内的所述第一存储器地址处并将所述第一存储器地 址移除而不由所述第一锁缓冲器跟踪。在一些实施例中,所述方法进一步包括: 判定所述第一存储器地址是否在所述第一锁缓冲器内被跟踪;以及响应于判定 所述第一存储器不在所述第一锁缓冲器内被跟踪,将所述第二值存储在所述第 一存储器地址处或将标记返回到所述第一处理元件。根据一些实施例,一种设 备,包括用于执行上述方法中的任一方法的装置。

根据一些实施例,一种系统包括:多个处理元件;存储器,高度区块化为 多个区块;以及仲裁器,与所述多个处理元件耦合并与所述存储器耦合。所述 仲裁器用于从在寻求执行涉及所述存储器的操作的所述多个处理元件处执行 的线程接收请求,其中,所述仲裁器用于维护对应于所述多个区块的多个锁缓 冲器,其中,所述多个锁缓冲器中的每一个能够跟踪对应区块内将被视为被锁 定的多达多个存储器地址,存储器地址被锁定体现在存储在那些存储器处的值 不能够由线程中先前未使所述存储器地址被锁定的那些线程更新,直到那些存 储器地址已被移除而不由所述多个锁缓冲器跟踪为止。在一些实施例中,所述 多个处理元件和所述存储器以及所述仲裁器是硬件加速器设备的组件,并且所 述系统进一步包括另外一个或多个处理元件,与所述硬件加速设备通信地耦 合,其中,所述另外一个或多个处理元件执行指令,并卸载所述指令中的至少 一些指令供由所述硬件加速器设备处理。

根据一些实施例,一种仲裁器设备包括:用于从处理元件接收加载并锁定 位于存储器的第一存储器地址处的第一值的第一请求的装置,其中,所述存储 器是高度区块化的,体现在所述存储器包括多个区块;用于由所述仲裁器单元 判定所述第一存储器地址是否在对应于所述多个区块的多个锁缓冲器内被跟 踪的装置,其中,所述多个锁缓冲器中的每一个跟踪来自对应区块的当前正被 锁定的多达多个存储器地址;以及用于响应于判定所述第一存储器地址不在所 述多个锁缓冲器内被跟踪而将所述第一值从所述多个区块中的第一区块加载 到第一寄存器中并将所述第一存储器地址的标识符插入到对应于所述第一区 块的所述多个锁缓冲器中的第一锁缓冲器以使所述存储器地址被锁定的装置。

根据一些实施例,一种系统包括:多个处理元件;存储器,高度区块化为 多个区块;以及仲裁器设备,与所述多个处理元件耦合并与所述存储器耦合。 所述仲裁器设备包括:用于从所述处理元件中的一个处理元件接收加载并锁定 位于存储器的第一存储器地址处的第一值的第一请求的装置;用于判定所述第 一存储器地址是否在对应于所述多个区块的多个锁缓冲器内被跟踪的装置,其 中,所述多个锁缓冲器中的每一个跟踪来自对应区块的当前正被锁定的多达多 个存储器地址;以及用于响应于判定所述第一存储器地址不在所述多个锁缓冲 器内被跟踪而将所述第一值从所述多个区块中的第一区块加载到第一寄存器 中并将所述第一存储器地址的标识符插入到对应于所述第一区块的所述多个 锁缓冲器中的第一锁缓冲器以使所述存储器地址被锁定的装置。

本文中公开的实施例利用电子设备。电子设备使用机器可读介质(也称为 计算机可读介质)来存储和(在内部以及/或者用其他电子设备通过网络的方式) 传输代码(所述代码由软件指令组成并且有时被称为计算机程序代码或计算机 程序)和/或数据,机器可读介质诸如机器可读存储介质(例如,磁盘、光盘、 只读存储器(ROM)、闪存设备、相变存储器)和机器可读传输介质(也称为 载体)(例如,电、光、无线电、声或其他形式的被传播信号——诸如,载波、 红外信号)。因此,电子设备(例如,计算机)包括硬件和软件,诸如,一个 或多个处理器的集合,该一个或多个处理器的集合耦合到一个或多个机器可读 存储介质,该机器可读存储介质用于存储供在处理器集合上执行的代码和/或用 于存储数据。例如,电子设备可包括包含代码的非易失性存储器,因为非易失 性存储器甚至当电子设备被关闭(当功率被移除)时也可使代码/数据留存,而 当电子设备被开启时,将由那个电子设备的(多个)处理器执行的代码的那部 分从较慢的非易失性存储器典型地被复制到那个电子设备的易失性存储器(例 如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))中。 典型的电子设备还包括用于建立与其他电子设备的网络连接(以使用传播信号 传输和/或接收代码和/或数据)的一个或多个物理网络接口的集合。本发明的 实施例的一个或多个部分可使用软件、固件和/或硬件的不同组合来实现。

示例性加速器架构

概览

在一些实现方式中,加速器耦合到处理器核或其他处理元件以加速某些类 型的操作(诸如,图形操作、机器学习操作、图案分析操作以及(如下文中详 述的)稀疏矩阵乘法操作,仅举数例)。加速器可通过总线或其他互连(例如, 点对点互连)通信地耦合到处理器/核,或者可与处理器一起集成在同一芯片上 且通过内部处理器总线/互连通信地耦合到核。无论加速器连接的方式如何,处 理器核都可将某些处理任务分配给加速器(例如,以指令或微操作(μop)序 列的形式),该加速器包括用于高效地处理这些任务的专用电路/逻辑。

图8示出示例实现方式,其中,加速器800通过高速缓存一致接口830 通信地耦合到多个核810-811。核810-811中的每一个包括用于存储虚拟到物 理地址转换的转换后备缓冲器812-813以及用于对数据和指令进行高速缓存的 一个或多个高速缓存814-815(例如,L1高速缓存、L2高速缓存等)。存储 器管理单元820管理核810-811对系统存储器850的访问,系统存储器850可 以是动态随机存取存储器DRAM。共享高速缓存826(诸如,L3高速缓存) 可在处理器核810-811之间被共享,并且经由高速缓存一致接口830与加速器 800共享。在一种实现方式中,核ATA 1010T-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的对等设 备(peer)。例如,高速缓存一致接口830可实现高速缓存一致协议以确保由 加速器800访问/修改以及存储在加速器高速缓存807和/或本地存储器 803-804、N中的数据与存储在核高速缓存810-811、共享高速缓存826和系统 存储器850中的数据一致。例如,高速缓存一致接口830可参与由核810-811 和MMU 820用于检查共享高速缓存826和本地高速缓存814-815内的高速缓 存行的状态的监听机制,并且可充当代理(proxy),从而响应于由处理元件 801-802、N进行的对高速缓存行的访问和所尝试的修改来提供监听更新。此 外,当高速缓存行由处理元件801-802、N修改时,如果这些高速缓存行存储 在共享高速缓存826或本地高速缓存814-815内,则高速缓存一致接口830可 更新这些高速缓存行的状态。

在一种实现方式中,数据管理单元805包括存储器管理电路,该存储器管 理电路提供对系统存储器850和共享高速缓存826的加速器800访问。此外, 数据管理单元805可根据需要将更新提供给高速缓存一致接口830,并从高速 缓存一致接口830接收更新(例如,以便确定高速缓存行的状态变化)。在所 示实现方式中,数据管理单元805包括调度器806,该调度器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 x n矩阵,总数为m x n)来定义。在一种实现方式中,如果 矩阵/向量的稀疏度高于指定的阈值,则它被视为是“稀疏的”。

在图10中的表中示出由处理元件801-N执行的示例性操作集。具体地, 操作类型包括使用稀疏矩阵的第一乘法1000、使用密集矩阵的第二乘法1001、 缩放并更新操作1002m和点积操作1003。提供列用于:第一输入操作数1010 和第二输入操作数1011(其中的每一个都可包括稀疏或密集矩阵/向量);输 出格式1013(例如,密集向量或标量);矩阵数据格式(例如,经压缩的稀疏 行、经压缩的稀疏列、面向行的,等等);以及操作标识符1014。

在一些当前工作负荷中发现的运行时主导计算模式包括以面向行和面向 列方式的矩阵乘以向量的变体。它们按公知的矩阵格式工作:经压缩的稀疏行 (CSR)和经压缩的稀疏列(CSC)。图11a描绘在稀疏矩阵A与向量x之间 相乘以产生向量y的乘法的示例。图11b示出矩阵A的CSR表示,在该CSR 表示中,每一个值被存储为(值,行索引)对。例如,对于行0的(3,2)指示 值3被存储在行0的元素位置2中。图11c示出矩阵A的CSC表示,该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算法用于将缩放因子应用于矩阵中的每一个样本,并 使这些缩放因子约简(reduce)为各自对应于特征(即,A中的列)的权重集。 在此,x向量包含缩放因子。对于矩阵A的每一行(按CSR格式),用于那 行的缩放因子从x矩阵读取出,并随后应用于那行中A的每一个元素。结果被 用于更新y向量的元素。在所有行已被处理之后,y向量包含经约简的权重。

与先前的计算模式类似,当y为大时,对y向量的不规则访问会影响性能。 将矩阵A划分为列块并将y向量划分为对应于这些块的多个子集可有助于使每 一个y子集内的不规则访问局部化。

一种实现方式包括可高效地执行上文讨论的计算模式的硬件加速器800。 加速器800是可与通用处理器集成的硬件IP块,类似于在现有的基于加速器 的解决方案(例如, PowerEN、 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将矩阵行或列从存储器子系统读取到该数据 管理单元805的读取缓冲器1302中,这些矩阵行或列随后由PE调度器1301 跨PE 801-802动态地分布以用于处理。该数据管理单元805也从其写入缓冲器 1303将结果写入到存储器。

每一个PE 801-802负责处理矩阵子块。PE包含片上RAM 1321-1322以存 储需要被随机访问的向量(即,如上文所述的x或y向量的子集)。PE还包 含:浮点乘法累加(FMA)单元,其包括乘法器1307-1308和加法器1309-1310; 以及输入缓冲器1305-1306内的拆包逻辑,用于从输入数据提取矩阵元素;以 及和寄存器1311-1312,用于保持所累加的FMA结果。

加速器的一种实现方式实现非常高的效率,因为:(1)它将被不规则访 问的(聚集/发散)数据放置在片上PE RAM 1321-1322中;(2)它利用硬件 PE调度器1301来确保PE被很好地利用;以及(3)与利用通用处理器不同, 加速器仅由基本上用于稀疏矩阵操作的硬件资源构成。总体而言,加速器高效 地将被提供给它的可用存储器带宽转换为性能。

性能的缩放可通过以下操作来完成:采用加速器块中的更多PE以并行地 处理多个矩阵子块;和/或采用更多加速器块(每一个加速器块具有PE集)以 并行地处理多个矩阵块。在下文中考虑这些选项的组合。PE和/或加速器块的 数量应当经调节以匹配存储器带宽。

加速器800的一种实现方式可通过软件库(类似于数学内核库 (Math Kernel Library))来编程。此类库在存储器中准备矩阵数据,利用关 于计算的信息(例如,计算类型、指向矩阵数据的存储器指针)来设置加速器 800中的控制寄存器,并且启动加速器。随后,加速器独立地访问存储器中的 矩阵数据,执行计算并将结果写回到存储器供软件消耗。

如图14a-图14b中所描绘,加速器通过将其PE设置为适当的数据路径配 置来处置不同的计算模式。具体地,图14a(使用点状线)突出显示用于 spMspV_csc和scale_update操作的路径,而图14b示出用于spMdv_csr操作的 路径。在下文中详述用于执行每一种计算模式的加速器操作。

对于spMspV_csc,初始y向量由DMU 805加载到PE的RAM 1321中。 随后,它从存储器读取x向量元素。对于每一个x元素,DMU 805从存储器 流送对应矩阵列的元素,并将它们供应至PE 801。每一个矩阵元素包含值 (A.val)和索引(A.idx),该索引指向将从PE的RAM 1321读取的y元素。 DMU 805也提供x向量元素(x.val),该x向量元素通过乘法累加(FMA) 单元与A.val相乘。结果被用于更新在由A.idx所指向的PE的RAM中的y元 素。注意,即便未由我们的工作负荷使用,加速器也支持通过处理所有矩阵列 而不是处理仅子集(因为x是密集的)来支持与密集x向量进行的逐列乘法 (spMdv_csc)。

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向量元素,该x向量元素通 过FMA与A.val相乘。结果被累加到和寄存器1312中。每当PE看见由DMU 805供应的指示行结尾的标记时,和寄存器就被写入输出缓冲器。以此方式, 每一个PE都为它所负责的行子块产生和。为了产生行的最终和,由DMU中 的约简单元1304(参见图13)将由所有PE产生的子块和加在一起。最终和被 写入输出缓冲器1313-1314,随后DMU 805将这些最终和写入到存储器。

图形数据处理

在一种实现方式中,本文中描述的加速器架构配置成用于处理图形数据。 图形分析依赖于图形算法以提取关于被表示为图形的数据之间的关系的情况。 (来自诸如社交媒体之类的源的)图形数据的激增已导致对图形分析的强烈需 求和广泛使用。由此,能够尽可能高效地完成图形分析是至关重要的。

为解决这一需求,一种实现方式自动地将用户定义的图形算法映射至被定 制到给定的输入图形算法的硬件加速器架构“模板”。加速器可包括上文描述的 架构,并且可实现为能以极高效率执行的FPGA/ASIC。概括而言,一种实现 方式包括:

(1)硬件加速器架构模板,其基于广义稀疏矩阵与向量相乘(GSPMV) 加速器。它支持任意图形算法,因为已显示出图形算法可公式化为矩阵操作。

(2)自动方式,用于将广泛使用的“顶点-中心”(“vertex-centric”)图形 编程抽象映射并调节至架构模板。

存在现有的稀疏矩阵相乘硬件加速器,但是它们不支持可定制性以允许映 射图形算法。

设计框架的一种实现方式按如下方式操作:

(1)用户将图形算法指定为遵循顶点-中心图形编程抽象的“顶点程序”在 此,由于其流行性,该抽象被选为示例。顶点程序不暴露硬件细节,因此不具 备硬件专业知识的用户(例如,数据科学家)可创建该程序。

(2)与(1)中的图形算法一起,框架的一种实现方式接受以下输入:

a.待生成的目标硬件加速器的参数(例如,片上RAM的最大量)。这些 参数可由用户提供,或者当以现有系统(例如,特定的FPGA板)为目标时从 已知参数的现有库获取。

b.设计优化目标(例如,最大性能、最小面积)。

c.目标图形数据的属性(例如,图形类型)或图形数据自身。这是可任选 的,并且用于辅助自动调节。

(3)给定上述输入,框架的一种实现方式执行自动调节以确定应用于硬 件模板的定制集以:优化输入图形算法;将这些参数映射到架构模板上以在可 合成RTL中产生加速器实例;以及对照从输入图形算法规范导出的功能和性 能软件模型来执行对所生成RTL的功能和性能验证。

在一种实现方式中,上文描述的加速器架构经扩展以通过以下方式来支持 顶点程序的执行:(1)将其做成可定制硬件模板;以及(2)支持顶点程序所 需的功能。基于此模板,描述设计框架以将用户供应的顶点程序映射至硬件模 板以产生为该顶点程序所优化的可合成RTL(例如,Verilog)实现实例。该框 架也执行自动验证和调节以确保所产生的RTL是正确且经优化的。对于此框 架有多个用例。例如,所产生的可合成RTL可部署在FPGA平台(例如, Xeon-FPGA)中以高效地执行给定的顶点程序。或者,可进一步改良所产生的 可合成RTL以产生ASIC实现。

已经显示,图形可表示为邻接矩阵,并且图形处理可公式化为稀疏矩阵操 作。图15a-图15b示出将图形表示为邻接矩阵的示例。矩阵中的每一个非零表 示图形中两个节点之间的边缘。例如,第0行第2列中的1表示从节点A到节 点C的边缘。

用于描述对图形数据的计算的最流行的模型之一是顶点编程模型。一种实 现方式支持来自Graphmat软件框架的顶点编程模型变量,该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中示出,图16包括模板映射组件 1611、验证组件1612和自动调节组件1613。它的输入是用户指定的顶点程序 1601、设计优化目标1603(例如,最大性能、最小面积)以及目标硬件设计约 束1602(例如,片上RAM的最大量、存储器接口宽度)。作为用于辅助自动 调节的可任选输入,该框架也接受图形数据属性1604(例如,类型=自然图形) 或样本图形数据。

给定这些输入,框架的模板映射组件1611将输入顶点程序映射到硬件加 速器架构模板,并产生为执行顶点程序1601所优化的加速器实例的RTL实现 1605。自动调节组件1613执行自动调节1613来为给定的设计目标优化所生成 的RTL,同时满足硬件设计约束。此外,验证组件1612自动地对照从输入导 出的功能和性能模型来验证所生成的RTL。验证测试台(text bench)1606和 调节报告1607连同RTL一起产生。

广义稀疏矩阵与向量相乘(GSPMV)硬件架构模板

用于GSPMV的架构模板的一种实现方式在图17中示出,图17基于上文 所述的加速器架构(参见例如图13和相关联的文本)。图17中示出的组件中 的许多组件是可定制的(如以灰线突出显示的那样)。在一种实现方式中,用 于支持对顶点程序的执行的架构已按如下方式扩展。

如图17中所示,可定制逻辑块在每一个PE内被提供以支持顶点程序所 需的PROCESS_MSG()1710、REDUCE()1711、APPLY 1712以及 SEND_MSG()1713。此外,一种实现方式提供可定制片上存储结构和打包/拆包 逻辑1705以支持用户定义的图形数据(即,vdata、edata、mdata、tdata)。图 17中示出的数据管理单元805包括(用于如上文所述调度PE的)PE调度器 1301、用于存储活跃的列,x数据的aux缓冲器1701、读取缓冲器1302、用于 控制对系统存储器的访问的存储器控制器1703以及写入缓冲器1303。此外, 在图17中示出的实现方式中,旧的和新的vdata和tdata被存储在本地PE存储 器1321内。各种控制状态机可经修改以支持执行顶点程序,从而实现由图15d 和图15e中的算法指定的功能。

每一个加速器片的操作在图18中概括。在1801处,y向量(vdata)被加 载到PE RAM 1321。在1802处,x向量和列指针被加载到aux缓冲器1701。 在1803处,对于每一个x向量元素,A列被流入(edata),并且PE执行 PROC_MSG()1710和REDUCE()1711。在1804处,PE执行APPLY()1712。 在1805处,PE执行SEND_MSG()1731,从而产生消息,并且数据管理单元 1805将这些消息作为x向量写入在存储器中。在1806处,数据管理单元805 将存储在PE RAM 1321中的经更新的y向量(vdata)写回到存储器。以上技 术符合图15d和图15e中示出的顶点程序执行算法。为了放大性能,该架构允 许增加片中PE的数量和/或增加设计中片的数量。以此方式,该架构可利用图 形中的多级并行性(即,跨子图形(跨邻接矩阵的块)或在每一个子图形内)。 图19a中的表格概括了模板的一种实现方式的可定制参数。指派用于优化的跨 片的非对称参数(例如,一个片比另一片有更多的PE)也是可能的。

自动映射、验证和调节

调节.基于输入,框架的一种实现方式执行自动调节以确定用于定制硬件 架构模板的最佳设计参数,从而为输入顶点程序和(可任选地)图形数据优化 该硬件架构模板。有许多调节考虑,这在图19b中的表格中进行概括。如图所 示,这些考虑包括数据的局部性、图形数据大小、图形计算函数、图形数据结 构、图形数据访问属性、图形数据类型以及图形数据模式。

模板映射.在该阶段,框架取得由调节阶段确定的模板参数,并且通过“填” 入模板的可定制部分来产生加速器实例。用户定义的计算函数(例如,图15c) 可使用现有的高级合成(HLS)工具从输入规范被映射至合适的PE计算块。 存储结构(例如,RAM、缓冲器、高速缓存)和存储器接口使用其对应的设计 参数来实例化。打包/拆包逻辑可从数据类型规范(例如,图15c)自动地生成。 控制有限状态机(FSM)的部分也基于所提供的设计参数(例如,PE调度方 案)来生成。

验证.在一种实现方式中,由模板映射产生的加速器架构实例(可合成RTL)随后被自动验证。为了完成此,框架的一种实现方式导出将用作“黄金” 参考的顶点程序的功能模型。测试台被生成以将对此黄金参引的执行与对架构 实例的RTL实现的模拟进行比较。该框架也通过将RTL模拟与分析性能模型 和周期精确的软件模拟器进行比较来执行性能验证。该架构报告运行时崩溃并 精确定位影响性能的设计瓶颈。

用于处理稀疏数据的加速器架构

引论

对稀疏数据集——其值中的大多数为零的向量或矩阵——的计算对于增 长数量的商业上重要的应用是关键的,但是当运行在现今的CPU上时,典型 地仅实现峰值性能中的一些百分比。在科学计算领域,几十年来稀疏矩阵计算 一直作为线性解算器(solver)的关键内核。最近,机器学习和图形分析的爆 炸式增长已将稀疏计算推向主流。稀疏矩阵计算是许多机器学习应用的中心议 题,并且形成许多图形算法的核心。

稀疏矩阵计算趋于受限于存储器带宽而非受限于计算,这使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)和ELLPACK,CSC是相对于CRS对偶的列为主的,ELLPACK 将矩阵的每一行表示为非零值及其索引的固定宽度列表,当行具有比该矩阵中 的最长行更少的非零元素时,用显式的零来填补。

对稀疏矩阵的计算具有对其对等的密集矩阵计算相同的结构,但是稀疏数 据的性质趋于使得它们比其对等的密集矩阵带宽密集程度高得多。例如,矩阵 -矩阵乘法的稀疏变量和密集变量两者都通过对于所有的i,j,计算Ci,j=Ai,· B,j来求解C=A·B。在密集矩阵-矩阵计算中,这导致显著的数据重新使用, 因为A的每一个元素都参与到N次乘-加操作(假定为N x N矩阵),B的每 一个元素也是如此。只要该矩阵-矩阵乘法由于高速缓存局部性而被阻塞,该 重新使用就使计算具有低字节/操作比且是受限于计算的。然而,在稀疏变量中, A的每一个元素仅参与到与B的对应行中所具有的非零值一样多的乘-加操作 中,同时B的每一个元素仅参与到与A的对应列中所具有的非零值一样多的 乘-加中。随着矩阵的稀疏度增加,字节/操作比也增加,从而尽管事实上密集 矩阵-矩阵乘法是典型的计算受限计算中的一种却使得许多稀疏矩阵-矩阵计算 的性能受限于存储器带宽。

四种操作构成当今应用中所见的稀疏矩阵计算的主体:稀疏矩阵-密集向 量乘法(spMV)、稀疏矩阵-稀疏向量乘法、稀疏矩阵-稀疏矩阵乘法、以及松 弛/平滑器操作,诸如,在高性能共轭梯度基准的英特尔实现中使用的 Gauss-Seidel平滑器。这些操作共享使稀疏矩阵加速器切合实际的两个特性。 首先,它们由向量点积操作占主导,这使得实现可实现全部四个重要计算的简 单硬件成为可能。例如,矩阵-向量乘法通过进行矩阵中的每一行与向量的点 积来执行,而矩阵-矩阵乘法进行一个矩阵的每一行与另一矩阵的每一列的点 积。其次,应用通常对相同矩阵执行多次计算,诸如,支持向量机算法通过训 练模型来执行的相同矩阵乘以不同向量的数千次乘法。这种对相同矩阵的重复 使用使得在程序执行期间往/返于加速器传送矩阵和/或以简化硬件任务的方式 重新格式化矩阵是切合实际的,因为数据传送/变换的成本可跨对每一个矩阵的 许多操作被分摊。

稀疏矩阵计算典型地仅实现它们运行于其上的系统的峰值性能的一些百 分比。为了阐释这为何发生,图21示出使用CRS数据格式进行的稀疏矩阵- 密集向量乘法的实现方式中所涉及的步骤2101-2104。首先,在2101处,表示 矩阵的行的数据结构从存储器被读出,这通常涉及易于预测和预取的一系列顺 序的读取。其次,在2102处,矩阵行中非零元素的索引被用于聚集向量的对 应元素,这要求许多依赖于数据的、难以预测的存储器访问(聚集操作)。此 外,这些存储器访问在每一个所引用的高速缓存行中经常仅触及一个或两个 字,从而当向量在高速缓存中未适配时导致大量被浪费的带宽。

接着,在2103处,处理器计算矩阵行的非零元素与向量的对应元素的点 积。最后,在2104处,点积的结果被写入到结果向量中,该结果向量也被顺 序地访问,并且程序继续进行到矩阵的下一行。注意,这是计算的概念性/算法 视角,程序执行的确切操作序列将取决于处理器的ISA和向量宽度。

此示例示出稀疏矩阵计算的许多重要特性。假定32位的数据类型,并且 矩阵和向量两者在高速缓存中都不适配,则计算输出行的第一元素要求从 DRAM读取36个字节,但是仅有五条计算指令(三条乘法和两条加法),字 节/操作比为7.2:1。

然而,存储器带宽不是对高性能稀疏矩阵计算的唯一挑战。如图21所示, 在spMV中对向量的访问是依赖于数据且难以预测的,从而将向量访问的等待 时间暴露于应用。如果向量在高速缓存中不适配,则除非甚至当许多线程被停 止以等待数据时处理器提供足够的并行性来使DRAM带宽饱和,否则SpMV 性能变得对DRAM等待时间和带宽敏感。

由此,用于稀疏矩阵计算的架构必须提供若干要素以便有效。它必须递送 高存储器带宽以满足稀疏计算的字节/操作需求。它还必须支持从在高速缓存中 可能不适配的大型向量向外的高带宽聚集。最后,虽然执行足够的算术操作/ 秒以跟上DRAM带宽在其本身以及就其本身而言不是挑战,但是架构必须以 高能效方式执行那些操作以及那些操作所需的所有存储器访问以保持处于系 统功率预算内。

实现方式

一种实现方式包括设计成用于提供对高稀疏矩阵性能所必需的三个特征 的加速器:高存储器带宽、从大型向量向外的高带宽聚集以及高能效计算。如 图22中所示,加速器的一种实现方式包括加速器逻辑管芯2205以及一个或多 个DRAM管芯的叠层2201-2204在下文中更详细地描述的堆叠的DRAM以低 能量/位来提供高存储器带宽。例如,预期堆叠的DRAM以2.5pJ/位实现256-512 GB/秒,而预期LPDDR4DIMM仅实现68GB/秒,并且将具有12pJ/位的能量 成本。

在加速器叠层底部的加速器逻辑芯片2205针对稀疏矩阵计算的需求来定 制,并且能够消耗由DRAM叠层2201-2204提供的带宽,同时仅花费2-4W的 功率,能耗与叠层的带宽成比例。保守地说,对于该应用的其余部分,假定了 273GB/秒的叠层带宽(WIO3叠层的预期带宽)。基于较高带宽叠层的设计将 并入更多并行性以消耗存储器带宽。

图23示出从俯视视角穿过DRAM管芯的叠层2201-2204而定向的加速器 逻辑芯片2205的一种实现方式。朝向视图中心的叠层DRAM通道块2305表 示将逻辑芯片2205连接至DRAM 2201-2204的硅通孔,而存储器控制器块1310 包含生成用于DRAM通道的控制信号的逻辑。虽然在图中示出八个DRAM通 道2305,但是在加速器芯片上实现的实际通道数量将取决于所使用的堆叠的 DRAM而有所不同。正在开发的叠层DRAM技术中的大多数提供四个或八个 通道。

点积引擎(DPE)2320是架构的计算元件。在图23中示出的特定实现方 式中,每一组八个DPE与向量高速缓存2315相关联。图24提供DPE的高层 级概览,该DPE包含两个缓冲器2405-2406、两个64位乘-加ALU 2410以及 控制逻辑2400。在计算期间,芯片控制单元2400使正在被处理的数据块体 (chunk)流入缓冲器存储器2405-2406中。一旦每一个缓冲器满了,DPE的 控制逻辑就贯穿缓冲器定序,从而计算它们包含的向量的点积,并将结果向外 写入到DPE的结果锁存器2410,该结果锁存器2410以菊形链(daisy-chain) 与其他DPE的结果锁存器连接以将计算的结果写回到叠层DRAM 2201-2204。

在一种实现方式中,加速器逻辑芯片2405以大约1GHz和0.65V操作以 使功耗最小化(但是对于不同应用可修改具体的操作频率和电压)。基于14nm 设计研究的分析显示出32-64KB缓冲器在那个电压下满足这一频率规格,但 是可能要求强ECC来防止软错误。乘-加单元能以基准时钟速率的一半来操作 以满足0.65V供应电压和浅流水线的时序。拥有两个ALU对于每个DPE提供 了一个双精度乘-加/周期的吞吐量。

在273GB/秒以及1.066MHz的时钟速率下,DRAM叠层2201-2204对于 每个逻辑芯片时钟周期递送256字节的数据。假定阵列索引和值是至少为32 位的量,则这转换成每个周期32个稀疏矩阵元素(索引的4个字节+值的4个 字节=8字节/元素),从而要求芯片每个周期执行32次乘-加以便能够跟上。 (这是对矩阵-向量乘法而言的,并假定向量高速缓存中的高命中率,使得100% 的叠层DRAM带宽被用于取出矩阵。)图23中示出的64个DPE提供2-4x(2-4 倍)所需计算吞吐量,从而在即便ALU 2410不是100%时间被使用的情况下 也允许芯片以峰值叠层DRAM带宽处理数据。

在一种实现方式中,向量高速缓存2315对矩阵-向量乘法中的向量的元素 进行高速缓存。这显著地增加了下文所述的矩阵分块方案的效率。在一种实现 方式中,每一个向量高速缓存块(block)包含高速缓存的32-64KB,从而在八 通道架构中有256-512KB的总容量。

芯片控制单元2301管理计算流,并处置与加速器中的其他叠层以及与系 统中的其他插槽的通信。为了减小复杂度和功耗,点积引擎从不从存储器请求 数据。相反,芯片控制单元2301管理存储器系统,从而发起将合适的数据块 推送到DPE中的每一个DPE的传送。

在一种实现方式中,多叠层加速器中的叠层经由KTI链路2330的网络彼 此通信,KTI链路2330的网络使用附图中示出的邻居连接2331来实现。芯片 也提供三个附加的KTI链路,这三个附加的KTI链路用于与多插槽系统中的 其他(多个)插槽通信。在多叠层加速器中,叠层的封装外KTI链路2330中 的仅一个将是活动的。目标为其他叠层上的存储器的KTI事务将通过封装上 KTI网络被路由至合适的叠层。

实现稀疏矩阵操作

在本小节中,我们描述在加速器的一种实现方式上实现稀疏矩阵-密集向 量和稀疏矩阵-稀疏向量乘法所需的技术和硬件。该设计也扩展至支持矩阵-矩 阵乘法、松弛操作和其他重要功能以创建支持所有关键的稀疏矩阵操作的加速 器。

虽然稀疏-稀疏和稀疏-密集矩阵-向量乘法执行相同的基本算法(进行矩阵 中的每一行与向量的点积),但是当向量相比其为密集而为稀疏时,在该算法 如何实现方面具有显著区别,在以下表1中进行概括。

表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,该块描述符阵 列2605标识每一个点积引擎需要捕捉向量数据的哪些猝发来执行总计算中的 该点积引擎的部分。

如图26中所示,每一个块描述符由8个16位值和猝发描述符的列表组成。 第一个16位值告诉硬件块描述符中有多少猝发描述符,而其余七个为叠层 DRAM数据通道除第一个数据通道之外的所有数据通道标识在猝发描述符列 表中的起点。这些值的数量将取决于堆叠的DRAM提供的数据通道的数量而 变化。每一个猝发描述符包含24位猝发计数和“所需字”位向量,24位猝发计 数告诉硬件该硬件需要关注的数据的哪些猝发,“所需字”位向量标识包含点处 理引擎需要的值的猝发内的字。

一种实现方式中所包括的其他数据结构是矩阵缓冲器索引(MBI)阵列 2604,矩阵中的每一个非零有一个MBI。每一个MBI给出对应于非零的密集 向量元素将被存储在相关点积引擎的向量值缓冲器(参见例如图28)中的位置。 当执行稀疏矩阵-密集向量乘法时,矩阵缓冲器索引而不是原始的矩阵索引被 加载到点积引擎的矩阵索引缓冲器2604中,并充当在计算点积时用于查找对 应向量值的地址。

图27示出这对于在单个点积引擎的缓冲器内适配的两行式矩阵,在仅具 有一个堆叠的DRAM数据通道和四字数据猝发的系统上是如何工作的。在该 图的左边示出原始的CRS表示,其包括行开始值2701、矩阵索引2702和矩阵 值2703。由于这两行在列{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示出使用该格式的点积引擎中的硬件的一种实现方式。为了执行矩 阵-向量乘法,构成块的矩阵的块体被复制到矩阵索引缓冲器2803和矩阵值缓 冲器2805中(复制矩阵缓冲器索引而不是原始的矩阵索引),并且相关的块 描述符被复制到块描述符缓冲器2802中。随后,使用取出列表以从密集向量 加载所要求的元素,并将这些元素广播到点积引擎。每一个点积引擎对在每一 个数据通道上经过的向量数据的猝发数量计数。当在给定数据通道上的计数匹 配猝发描述符中所指定的值时,匹配逻辑2820捕捉所指定的字,并将这些字 存储在其向量值缓冲器2804中。

图29示出进行此捕捉的匹配逻辑2820单元的内容。当计数器匹配猝发描 述符中的值时,锁存器2905捕捉数据通道的线上的值。移位器2906从猝发2901 向外提取所要求的字2902,并将这些字路由至大小匹配向量值缓冲器中的行的 线缓冲器2907中的右边位置。当猝发计数2901等于内部计数器2904时,加 载信号被生成。当线缓冲器填满时,它(通过多路复用器2908)被存储在向量 值缓冲器2904中。按此方式将字从多个猝发组装到多个线中减少了向量值缓 冲器需要支持的写入/周期的数量,从而减小了向量值缓冲器的大小。

一旦向量的所有所要求元素已被捕捉在向量值缓冲器中,点积引擎就使用 ALU 3010来计算所要求的(多个)点积。控制逻辑3001顺序地逐步通过矩阵 索引缓冲器3003和矩阵值缓冲器3004,每个周期通过一个元件。矩阵索引缓 冲器3003的输出被用作在下一周期上用于向量值缓冲器3004的读取地址,而 矩阵值缓冲器3005的输出被锁存,使得矩阵值缓冲器3005的该输出与来自向 量值缓冲器3004的对应值同时到达ALU 3010。例如,使用来自图27的矩阵, 在点积计算的第一周期上,硬件将从矩阵索引缓冲器3003读出矩阵缓冲器索 引“0”,并从矩阵值缓冲器3005读取值“13”。在第二周期上,来自矩阵索引缓 冲器3003的值“0”充当用于向量值缓冲器3004的地址,从而取出向量元素“2” 的值,随后在循环3上,该值乘以“13”。

行开始位向量3001中的值告诉硬件矩阵的行何时结束以及新的行何时开 始。当硬件到达行的结尾时,该硬件将该行的所累加的点积放置在其输出锁存 器3011中,并且开始为下一行累加点积。每一个点积引擎的点积锁存器以菊 形链连接,该菊形链聚集输出向量以用于写回。

实现稀疏矩阵-稀疏向量乘法

在稀疏矩阵-稀疏向量乘法中,向量趋于占据比稀疏矩阵-密集向量乘法中 少得多的存储器,但是由于向量是稀疏的,因此直接取出对应于给定索引的向 量元素是不太可能的。相反,必须搜索向量,从而使仅将每一个点积引擎需要 的元素路由至该点积引擎是不切实际的,并使计算指派给每一个点积引擎的矩 阵数据的点积所要求的时间量不可预测。由于这一点,用于稀疏矩阵-稀疏向 量乘法的取出列表仅指定矩阵块中最低和最高非零元素的索引,并且那些点之 间的向量的所有非零元素都必须被广播至点积引擎。

图30示出用于支持稀疏矩阵-稀疏向量乘法的点积引擎设计的细节。为了 处理矩阵数据块,点积引擎的矩阵的块体的索引(不是稀疏-密集乘法中使用 的矩阵缓冲器索引)和值被写入到矩阵索引和值缓冲器中,就如同处理块所要 求的向量区域的索引和值。随后,点积引擎控制逻辑3040穿过索引缓冲器 3002-3003定序,索引缓冲器3002-3003将四个索引的块输出到4x4比较器 3020。4x4比较器3020将来自向量3002的索引中的每一个索引与来自矩阵3003 的索引中的每一个索引进行比较,并将任何匹配的缓冲器地址输出到匹配的索 引队列3030。匹配的索引队列3030的输出驱动矩阵值缓冲器3005和向量值缓 冲器3004的读取地址输入,矩阵值缓冲器3005和向量值缓冲器3004将对应 于匹配的值输出到乘-加ALU 3010中。只要匹配的索引队列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,以及多路复用器的集合3250 和多路复用器3251,多路复用器的集合3250确定哪些模块驱动缓冲器 3004-3005的读取地址和写入数据输入,多路复用器3251选择矩阵值缓冲器的 输出还是矩阵值缓冲器的经锁存的输出被发送到乘-加ALU 3010。在一种实现 方式中,这些多路复用器由控制单元3040中的配置位控制,该配置位在矩阵- 向量乘法的开始时被置位,并且贯穿整个操作保持在同一配置中。

指令集

指令可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如, 位的数量、位的位置)以指定将要执行的操作(例如,操作码)以及将对其执 行该操作的(多个)操作数和/或(多个)其他字段(例如,掩码),等等。通 过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定 指令格式的指令模板定义为具有指令格式字段(所包括的字段通常按照相同顺 序,但是至少一些字段具有不同的位的位置,因为更少的字段被包括)的不同 子集,和/或定义为具有以不同方式进行解释的给定字段。由此,指令集架构 (ISA)的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令 格式的指令模板中的给定指令模板)来表达,并包括用于指定操作和操作数的 字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式(包括 用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的 操作数字段),并且该ADD指令在指令流中出现将使得在选择特定操作数的 操作数字段中具有特定的内容。已经推出和/或发布了被称为高级向量扩展 (AVX)(AVX1和AVX2)和利用向量扩展(VEX)编码方案的单指令多数 据(SIMD)扩展集(参见例如2014年9月的64和IA-32架构软件开 发者手册;以及参见2014年10月的高级向量扩展编程参考)。

本文中所描述的(多条)指令的实施例能以不同的格式来具体化。另外, 在下文中详述示例性系统、架构、以及流水线。指令的实施例可在这些系统、 架构、以及流水线上执行,但是不限于详述的系统、架构、以及流水线。

示例性寄存器架构

图33是根据一些实施例的寄存器架构3300的框图。在所示出的实施例中, 有32个512位宽的向量寄存器3310;这些寄存器被引用为zmm0到zmm31。 较低的16zmm寄存器的较低阶256个位覆盖在寄存器ymm0-16上。较低的 16zmm寄存器的较低阶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-图34B中的实线框示出了有序流 水线和乱序核,而可任选增加的虚线框示出了寄存器重命名的、乱序发布/执行 流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。

在图34A中,处理器流水线3400包括取出级3402、长度解码级3404、 解码级3406、分配级3408、重命名级3410、调度(也被称为分派或发布)级 3412、寄存器读取/存储器读取级3414、执行级3416、写回/存储器写入级3418、 异常处理级3422以及提交级3424。

图34B示出处理器核3490,包括耦合至执行引擎单元3450的前端单元 3430,该前端单元和执行引擎单元两者均耦合至存储器单元3470。核3490可 以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字 (VLIW)核或混合或替代核类型。作为又一选项,核3490可以是专用核,诸 如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元 (GPGPU)核、图形核,等等。

前端单元3430包括耦合到指令高速缓存单元3434的分支预测单元3432, 该指令高速缓存单元耦合到指令转换后备缓冲器(TLB)3436,该指令转换后 备缓冲器耦合到指令取出单元3438,指令取出单元耦合到解码单元3440。解 码单元3440(或解码器)可解码指令,并生成从原始指令解码出的、或以其他 方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、 微指令、其他指令、或其他控制信号作为输出。解码单元3440可使用各种不 同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程 逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一些实施例中,核3490 包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码 单元3440中,或以其他方式在前端单元3430内)。解码单元3440耦合至执 行引擎单元3450中的重命名/分配器单元3452。

执行引擎单元3450包括耦合到引退单元3454和一个或多个调度器单元 3456的集合的重命名/分配器单元3452。(多个)调度器单元3456表示任意数 量的不同调度器,包括预留站、中央指令窗口等。(多个)调度器单元3456 耦合到(多个)物理寄存器组单元3458。(多个)物理寄存器组单元3458中 的每一个表示一个或多个物理寄存器组,其中不同的物理寄存器组存储一个或 多个不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向 量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针) 等等。在一个实施例汇总,(多个)物理寄存器组单元3458包括向量寄存器 单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向 量寄存器、向量掩码寄存器、和通用寄存器。(多个)物理寄存器组单元3458 被引退单元3454所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式 (例如,使用(多个)重排序缓冲器和(多个)引退寄存器组、使用(多个) 未来文件(future file)、(多个)历史缓冲器、(多个)引退寄存器组、使用 寄存器映射和寄存器池等等)。引退单元3454和(多个)物理寄存器组单元 3458耦合至(多个)执行群集3460。(多个)执行群集3460包括一个或多个 执行单元3462的集合以及一个或多个存储器访问单元3464的集合。执行单元 3462可执行各种操作(包括:移位、加法、减法、乘法)并可对各种数据类型 (诸如、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管 一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施 例可包括全部执行所有功能的仅一个执行单元或多个执行单元。(多个)调度 器单元3456、(多个)物理寄存器组单元3458和(多个)执行群集3460被示 为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例 如,标量整型流水线、标量浮点/紧缩整型/紧缩浮点/向量整型/向量浮点流水线, 和/或各自具有其自己的调度器单元、(多个)物理寄存器组单元和/或执行群 集的存储器访问流水线——以及在分开的存储器访问流水线的情况下,实现其 中仅该流水线的执行群集具有(多个)存储器访问单元3464的某些实施例)。 还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以 为乱序发布/执行,并且其余流水线可以为有序发布/执行。

存储器访问单元3464的集合耦合到存储器单元3470,该存储器单元包括 耦合到数据高速缓存单元3474的数据TLB单元3472,其中数据高速缓存单元 耦合到第二级(L2)高速缓存单元3476。在一个示例性实施例中,存储器访 问单元3464可包括加载单元、存储地址单元和存储数据单元,其中的每一个 均耦合至存储器单元3470中的数据TLB单元3472。指令高速缓存单元3434 还耦合到存储器单元3470中的第二级(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指令集(具有与较新版本 一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS 指令集;加利福尼州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON 等可任选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核 3490包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由 此允许由许多多媒体应用使用的操作利用紧缩数据来执行。

应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集 合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、 同时多线程化(其中单个物理核为物理核正在同时多线程化的各线程中的每一 个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如以超线程化技术的实现同时多线程化)。

尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有 序架构中使用寄存器重命名。尽管所示出的处理器的实施例还包括分开的指令 和数据高速缓存单元3434/3474以及共享L2高速缓存单元3476,但替代实施 例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1) 内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内 部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓 存都可以在核和/或处理器的外部。

具体的示例性有序核架构

图35A-图35B示出了更具体的示例性有序核架构的框图,该核将是芯片 中的若干逻辑块(包括相同类型和/或不同类型的其他核)之一。根据应用,这 些逻辑块通过高带宽的互连网络(例如,环形网络)与一些固定功能逻辑、存 储器I/O接口和其他必要的I/O逻辑通信。

图35A是根据本发明的各实施例的单个处理器核以及它与管芯上互连网 络3502的连接及其第二级(L2)高速缓存的本地子集3504的框图。在一个实施 例中,指令解码器3500支持具有紧缩数据指令集扩展的x86指令集。L1高速 缓存3506允许对进入标量和向量单元中的高速缓存存储器的低等待时间访问。 尽管在一个实施例中(为了简化设计),标量单元3508和向量单元3510使用分 开的寄存器集合(分别为标量寄存器3512和向量寄存器3514),并且在这些寄 存器之间转移的数据被写入到存储器并随后从第一级(L1)高速缓存3506读回, 但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或 包括允许数据在这两个寄存器组之间传输而无需被写入和读回的通信路径)。

L2高速缓存的本地子集3504是全局L2高速缓存的一部分,该全局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的集合可包括一个或多个中级高 速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的 高速缓存、末级高速缓存(LLC)和/或以上各项的组合。尽管在一个实施例中, 基于环的互连单元3612将专用逻辑3608(例如,集成图形逻辑)、共享高速 缓存单元3606的集合以及系统代理单元3610/(多个)集成存储器控制器单元 3614互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一 个实施例中,可以维护一个或多个高速缓存单元3606和核3602-A-N之间的一 致性(coherency)。

在一些实施例中,核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以 及控制器中枢3720,控制器中枢3720与IOH 3750处于单个芯片中。

附加的处理器3715的可任选性在图37中通过虚线来表示。每一处理器 3710、3715可包括本文中描述的处理核中的一个或多个,并且可以是处理器 3600的某一版本。

存储器3740可以是例如动态随机存取存储器(DRAM)、相变存储器 (PCM)或这两者的组合。对于至少一个实施例,控制器中枢3720经由诸如 前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对 点接口、或者类似的连接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)接口电路3878、3888的P-P接口 3850来交换信息。如图38所示,IMC 3872和3882将处理器耦合到相应的存 储器,即存储器3832和存储器3834,这些存储器可以是本地附连到相应处理 器的主存储器的部分。

处理器3870、3880可各自经由使用点对点接口电路3876、3894、3886、 3898的各个P-P接口3852、3854与芯片组3890交换信息。芯片组3890可以 可任选地经由高性能接口3892与协处理器3838交换信息。在一个实施例中, 协处理器3838是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信 处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。

共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器的外 部但经由P-P互连与这些处理器连接,从而如果处理器被置于低功率模式,则 任一个或这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。

芯片组3890可以经由接口3896耦合至第一总线3816。在一个实施例中, 第一总线3816可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第 三代I/O互连总线之类的总线,但是本发明的范围不限于此。

如图38所示,各种I/O设备3814可连同总线桥3818一起耦合到第一总 线3816,总线桥3818将第一总线3816耦合到第二总线3820。在一个实施例 中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速器(诸如 例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何 其它处理器的一个或多个附加处理器3815耦合到第一总线3816。在一个实施 例中,第二总线3820可以是低引脚数(LPC)总线。各种设备可耦合到第二 总线3820,这些设备包括例如键盘和/或鼠标3822、通信设备3827以及存储单 元3828,该存储单元3828诸如在一个实施例中的可包括指令/代码和数据3830 的盘驱动器或者其他大容量存储设备。此外,音频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)、诸如动态随机存取存储 器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦 除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM); 相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其它类型的介 质。

因此,本发明的各实施例还包括非瞬态的有形机器可读介质,该介质包含 指令或包含设计数据(诸如,硬件描述语言(HDL),它定义本文中描述的结构、 电路、装置、处理器和/或系统特征)。此类实施例也可称为程序产品。

仿真(包括二进制变换、代码变形等)

在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。 例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态 二进制变换)、变形、仿真或以其他方式将指令转换成将由核来处理的一个或 多个其他指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转 换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。

图41是根据本发明的各实施例的对照使用软件指令转换器将源指令集中 的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中, 指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、 硬件或其各种组合来实现。图41示出可使用x86编译器4104来编译利用高级 语言4102的程序,以生成可由具有至少一个x86指令集核的处理器4116原生 执行的x86二进制代码4106。具有至少一个x86指令集核的处理器4116表示 任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行 与具有至少一个x86指令集核的处理器基本相同的功能:1)x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集 核的处理器上运行的应用或其它程序的目标代码版本,以便取得与具 有至少一个x86指令集核的处理器基本相同的结果。x86编译器4104 表示用于生成x86二进制代码4106(例如,目标代码)的编译器,该二进制代 码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器 4116上执行。类似地,图41示出可以使用替代的指令集编译器4108来编译利 用高级语言4102的程序,以生成可以由不具有至少一个x86指令集核的处理 器4114(例如具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指 令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的 核的处理器)原生执行的替代指令集二进制代码4110。指令转换器4112被用 来将x86二进制代码4106转换成可以由不具有x86指令集核的处理器4114原 生执行的代码。该转换后的代码不大可能与替代性指令集二进制代码4110相 同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般 操作并由来自替代指令集的指令构成。由此,指令转换器4112通过仿真、模 拟或任何其它过程来表示允许不具有x86指令集处理器或核的处理器或其它电 子设备执行x86二进制代码4106的软件、固件、硬件或其组合。

虽然附图中的流程图示出由某些实施例执行的操作的特定顺序,但是应当 理解,此类顺序是示例性的。由此,替代实施例可按不同的顺序执行这些操作, 可组合某些操作,可重叠某些操作,等等。

此外,尽管已通过若干实施例描述了本发明,但是本领域技术人员将认识 到,本发明不仅限于所描述的实施例,并且本发明可在所附权利要求书的精神 和范围内作出修改和更改来实践。说明书由此被视为是说明性的而不是限制性 的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1