CN115374396A - 用于使用稀疏矩阵的分层表示来加速矩阵乘法计算的技术 - Google Patents
用于使用稀疏矩阵的分层表示来加速矩阵乘法计算的技术 Download PDFInfo
- Publication number
- CN115374396A CN115374396A CN202210515300.8A CN202210515300A CN115374396A CN 115374396 A CN115374396 A CN 115374396A CN 202210515300 A CN202210515300 A CN 202210515300A CN 115374396 A CN115374396 A CN 115374396A
- Authority
- CN
- China
- Prior art keywords
- matrix
- region
- node
- regions
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Complex Calculations (AREA)
Abstract
公开了用于使用稀疏矩阵的分层表示来加速矩阵乘法计算的技术。一个实施例阐述了一种用于基于第一矩阵和第二矩阵来执行一个或更多个矩阵乘法运算的技术。该技术包括从第一遍历引擎接收与第一矩阵相关联的数据,第一遍历引擎经由第一树结构访问包括在第一矩阵中的非零元素。该技术还包括对与第一矩阵相关联的数据和与第二矩阵相关联的数据执行一个或更多个计算以产生多个部分结果。该技术还包括将多个部分结果组合成一个或更多个中间结果并且将一个或更多个中间结果存储在第一缓冲存储器中。
Description
技术领域
本公开的实施例总体上涉及存储和访问稀疏数据,并且更具体地涉及用于使用稀疏矩阵的分层表示来加速矩阵乘法计算的技术。
背景技术
稀疏矩阵是特殊类型的矩阵,其中大部分矩阵元素具有零值。稀疏矩阵通常用于各种科学和计算应用中。例如,稀疏矩阵可用于存储和/或访问数据库、图形、机器学习模型和/或其他类型的结构或数据。在另一示例中,稀疏矩阵的乘积可被用来求解与工程或数学建模相关的偏微分方程。在第三示例中,稀疏矩阵可用于存储变换和/或将变换应用于点云、图像、网格、和/或其他二维(2D)或三维(3D)数据。
稀疏矩阵常常处于省略具有零值的矩阵元素的压缩格式。这种类型的压缩格式通常包括非零矩阵元素值以及指示那些非零矩阵元素值在稀疏矩阵内的坐标的元数据。一种常见的稀疏矩阵格式是压缩稀疏行(CSR),其使用三个一维阵列来表示稀疏矩阵。在CSR格式内,第一阵列将非零矩阵元素值存储在稀疏矩阵中(按照稀疏矩阵的逐行遍历的顺序),第二阵列将非零矩阵元素值的列索引存储在稀疏矩阵中,并且第三阵列对于稀疏矩阵中的每一行存储高达(但不包括)该行的非零矩阵元素值的累积数量。另一常见稀疏矩阵格式是压缩稀疏列(CSC),其也表示使用三个一维阵列的稀疏矩阵。CSC格式类似于CSR,除了第一阵列按照逐列遍历的顺序存储非零矩阵元素值,第二阵列在稀疏矩阵中存储非零矩阵元素值的行索引,并且第三阵列对于索引中的每一列存储高达(但不包括)该列的非零矩阵元素值的累积数量。
用于稀疏矩阵的常规压缩格式的一个缺点是这些压缩格式不是针对高度并行处理器(如图形处理单元(GPU))进行优化的。就这一点而言,为了使用并行处理器来高效地处理稀疏矩阵,压缩格式应当允许任意地访问将非零矩阵元素值分组在一起的各个矩阵元素或各个矩形“分块”,包括跨分块的平衡数量的非零矩阵元素值,沿着稀疏矩阵的各个维度“紧凑”的结构分块(例如,以便减少在矩阵乘法运算期间从其他矩阵获取的数据量),并且提供对指示稀疏矩阵内的非零元素值的坐标的元数据的高效存储和访问。然而,用于稀疏矩阵的常规压缩格式没有解决所有这些考虑。结果,当使用稀疏矩阵执行计算或其他操作时,使用常规压缩格式通常导致增加的等待时间和降低的处理效率。
例如,上文所描述的CSR格式将非零矩阵元素值划分为对应于稀疏矩阵的单独行的分块。CSR格式还包括指定给定行中的非零矩阵元素值的索引的元数据。然而,CSR格式不是以实现高效列查找操作或跨各行的简化负载平衡的方式来结构化的。CSR格式沿稀疏矩阵的水平维度也不是紧凑的,因为在CSR格式中,非零矩阵元素值是沿稀疏矩阵的整个行组织的。结果,使用以CSR格式存储的稀疏矩阵跨并行处理器内的多个处理元件并行地执行矩阵乘法计算或其他操作可导致基于行的工作负载跨不同处理元件的不均匀分布、沿稀疏矩阵的列对非零矩阵元素值的缓慢访问和/或当将稀疏矩阵的行与另一矩阵的列相乘时从另一矩阵访问的数据量的增加。
如前文所述,在本领域中需要的是用于以压缩格式存储和处理稀疏矩阵的更有效的技术。
发明内容
一个实施例阐述了一种用于基于第一矩阵和第二矩阵来执行一个或更多个矩阵乘法运算的技术。该技术包括从第一遍历引擎接收与第一矩阵相关联的数据,第一遍历引擎经由第一树结构访问包括在第一矩阵中的非零元素。该技术还包括对与第一矩阵相关联的数据和与第二矩阵相关联的数据执行一个或更多个计算以产生多个部分结果。该技术还包括将所述多个部分结果组合成一个或更多个中间结果并且将所述一个或更多个中间结果存储在第一缓冲存储器中。
所公开的技术相对于现有技术的技术优点是:当执行矩阵乘法运算或矩阵运算时,可以在并行处理器内的多个处理元件上分布具有相似数量的非零矩阵元素值的稀疏矩阵的区域,以便在那些处理元件上实现更平衡的工作分布。所公开的技术的另一技术优点是当将包含非零矩阵元素值的稀疏矩阵的区域与另一矩阵的区域相乘时从该另一矩阵访问的数据量减少。所公开的技术的附加技术优点是可以遍历不包括表示稀疏矩阵的空白区域的节点的树结构,以相对于现有技术更有效地访问稀疏矩阵的任意区域、维度或矩阵元素。这些技术优点提供了优于现有技术方法的一个或更多个技术改进。
附图说明
为了更详细地理解上述各种实施例的相关特征,可以通过参考各种实施例(其中一些已在附图中说明)对上述简要概括的本发明概念进行更具体的描述。但是,需要注意的是,所附的附图只说明发明概念的典型实施例,因此并不是以任何方式限制范围,还存在其他同样有效的实施例。
图1示出了被配置成用于实现各个实施例的一个或更多个方面的系统;
图2是根据各个实施例的包括在图1的并行处理子系统中的并行处理单元(PPU)的框图;
图3是根据各个实施例的图2的遍历引擎之一的更详细的图示;
图4A示出了根据各个实施例的沿着空间分割点的稀疏矩阵的示例性递归划分;
图4B示出了根据各个实施例的将图4A的稀疏矩阵的区域示例性地划分为具有基本上相同数量的非零元素的两个区域;
图4C示出了根据各个实施例的将图4A的稀疏矩阵的非空区域示例性递归划分为具有基本上相同数量的非零元素的较小区域;
图5是根据各个实施例的图2的树结构之一的示例性表示;
图6示出了根据各个其他实施例的用于使用稀疏矩阵执行矩阵乘法计算的加速器的示例性架构;
图7是根据各个实施例的用于生成表示稀疏矩阵的树结构的方法步骤的流程图;
图8是根据各个实施例的用于使用树结构来检索存储在计算机存储器内的数据的方法步骤的流程图;
图9是根据各个实施例的用于遍历树结构以访问稀疏矩阵的与查询中所包括的感兴趣区域重叠的一个或更多个非空区域的方法步骤的流程图;
图10是根据各个其他实施例用于使用稀疏矩阵执行矩阵乘法计算的方法步骤的流程图。
具体实施方式
在下面的描述中,阐述了大量的具体细节,以提供对各个实施例的更全面理解。然而,对于本领域技术人员来说,可以在没有一个或更多个这些具体细节的情况下实践这些发明概念。
总体概述
稀疏矩阵是特殊类型的矩阵,其中大部分矩阵元素具有零值。例如,“用户-项目”稀疏矩阵可以存储在平台的用户与在平台上许诺销售的项目之间的点击、查看、购买和/或其他交互。矩阵的每行将表示不同的用户,并且矩阵中的每个项目将表示不同的项目。由矩阵中的特定行和特定列表示的给定元素将存储对应于该行的用户与对应于该列的项目之间的交互的数量。因为平台可以具有数十亿的客户和项目,所以矩阵中非常大量的元素将具有零值(因为用户通常与平台提供的非常小比例的项目交互)。
稀疏矩阵通常用于多个应用中。首先,稀疏矩阵可以用于表示机器学习模型和/或生成机器学习输出。继续以上示例,用户项目稀疏矩阵可被转换成特征和/或标签,这些特征和/或标签被包括在机器学习模型的训练数据集中。在机器学习模型的训练期间,训练数据集用于更新机器学习模型的参数,使得机器学习模型学习以基于用户和/或项目的属性来预测用户和项目之间的交互。经训练的机器学习模型然后被用于向平台的用户生成平台上的项目的推荐。在另一示例中,稀疏矩阵可用于存储神经网络或另一类型的机器学习模型中的神经元之间的连接和/或权重。第二,稀疏矩阵可以用于有限元方法(FEM)中,该有限元方法产生对局部微分方程(PDE) 的数值解,这些局部微分方程模拟结构或流体行为、热传输、波传播、生物生长、电磁势、和/或其他物理现象。第三,稀疏矩阵可用于存储变换和 /或将变换应用于图像、点云、网格、体素(voxel)和/或对象或场景的其他二维(2D)或三维(3D)表示。第四,稀疏矩阵可用于存储社交网络或其他在线环境中的用户之间的关系或交互的图。然后,可遍历和/或以其他方式分析这些图,以处理与用户或交互有关的查询,推荐用户作为彼此的潜在连接,识别用户的集群或其他分组,和/或执行与用户和用户的关系或交互有关的其他任务。
稀疏矩阵通常以省略存储零值的所有矩阵元素的压缩格式存储。这些压缩格式包括给定稀疏矩阵中的所有非零元素以及识别非零元素位于稀疏矩阵中的位置的元数据。一种常见的稀疏矩阵格式是压缩稀疏行(CSR),其表示使用三个一维阵列的矩阵。在CSR格式内,第一阵列存储矩阵中的非零矩阵值(按矩阵的逐行遍历的次序),第二阵列存储非零矩阵值的列索引,且第三阵列针对矩阵中的每一行存储高达(但不包括)该行的非零矩阵值的累积数目。
稀疏矩阵的压缩格式的一个缺点是这些压缩格式没有被优化以供与例如图形处理单元(GPU)等高度并行加速器一起使用。就这一点而言,为了使用并行处理器高效地处理稀疏矩阵,压缩格式应当允许任意访问将非零矩阵元素值分组在一起的不同矩阵元素或不同矩形“分块”,包括跨分块的平衡数量的非零矩阵元素值,结构分块沿着稀疏矩阵的各个维度“紧凑”(例如,以便减少在矩阵乘法运算期间从其他矩阵访问的数据量),以及提供对指示所述稀疏矩阵内的所述非零元素值的所述坐标的所述元数据的高效存储和访问。
然而,用于稀疏矩阵的常规压缩格式没有解决所有这些考虑。例如,因为CSR格式将非零矩阵元素划分为与矩阵中的各个行相对应的分块并且按行号来索引非零矩阵元素,所以CSR格式允许矩阵中的高效行查找。然而,CSR格式不允许跨各行的有效列查找或直接负载平衡,这些行可具有不同数目的非零矩阵元素值。CSR格式进一步未能沿着矩阵的水平维度维持紧凑性,因为矩阵中的非零矩阵元素值是沿着矩阵的整个行组织的。结果,用于对多个GPU核心上的CSR格式的稀疏矩阵进行相乘或以其他方式处理的工作负载的并行化可导致基于行的负载跨GPU核心的不均匀分布、沿稀疏矩阵的列的非零元素的缓慢查找和检索、和/或在稀疏矩阵的行与另一矩阵的列的相乘期间从另一矩阵访问的数据量的增加。
为了改进GPU或其他高度并行的加速器上的矩阵处理工作负载的处理,可以沿着一种或更多种类型的边界递归地划分稀疏矩阵,直到满足一个或更多个阈值。在一些实施例中,稀疏矩阵被重复地划分成包含非零元素的象限(或其他大小相等的区域),直到满足用于区域大小的第一阈值。可以沿着“分割点”进一步划分满足区域大小的阈值的给定区域,所述“分割点”将所述区域分割成具有基本上相等数目的非零元素的两个或更多个区域,直到给定区域中的非零元素的数目下降到第二阈值以下。
还创建树结构来对稀疏矩阵中的非零元素进行索引。树结构的根节点表示整个稀疏矩阵,根节点的子节点表示稀疏矩阵被划分成的非零值的一个或更多个象限。子节点的附加层被添加到树结构以表示象限,由对应的父节点表示的区域被划分到该象限中,直到所有象限由树结构中的节点表示。
当稀疏矩阵中的最小象限被进一步划分成具有基本上相同数量的非零元素的区域时,表示那些区域的节点被添加为表示树结构中的最小象限的节点的子节点。子节点的额外层可任选地添加到树结构以表示由相应父节点表示的区被划分成的区域,直到所有区域由树结构中的节点表示。当稀疏矩阵中包括非零元素的区域未被进一步细分时,将表示存储该区域内的非零元素的“有效负载区域”的第一节点添加到树结构中,作为表示该区域的第二节点的子节点。
然后,树结构可以用于存储和访问稀疏矩阵中的非零元素。例如,可生成树结构来以压缩格式存储稀疏矩阵并减少与存储未压缩的稀疏矩阵相关联的存储开销。在另一示例中,可将树结构加载到CPU、GPU、实施树遍历引擎的专用加速器和/或另一类型的处理器中。处理器使用树结构来处理对稀疏矩阵中的特定“感兴趣区域”的查询(例如,在矩阵乘法运算期间将与另一矩阵的对应区域相乘的区域)并返回由树结构中与感兴趣区域重叠的叶节点表示的有效负载区域。处理器还使用或者替代地使用所检索的有效负载区域执行矩阵乘法和/或其他类型的矩阵运算。
因为有效负载区域具有相似数量的非零元素,所以可以跨多个处理器或处理器核心分布相似数量的有效负载区域以平衡处理器或处理器核心上的矩阵处理工作负载。此外,在象限内创建有效负载区域之前将稀疏矩阵递归地划分成象限改善了有效负载区域的紧凑性,由此减少了从其他矩阵访问以执行涉及稀疏矩阵和其他矩阵的矩阵乘法(或其他矩阵处理操作) 的数据量。结果,树结构提供压缩稀疏矩阵格式,该压缩稀疏矩阵格式改善了涉及稀疏矩阵的工作负载的并行处理并且减少了与存储和访问稀疏矩阵中的数据相关联的开销。
系统概述
图1是示出了被配置成用于实施各个实施例的一个或更多个方面的计算机系统100的框图。在一些实施例中,计算机系统100是在数据中心、集群或云计算环境中操作的机器或处理节点,其通过网络提供可缩放计算资源(可选地作为服务)。
在各个实施例中,计算机系统100包括但不限于中央处理单元(CPU) 102以及系统存储器104,它们经由存储器桥105和通信路径113耦合至并行处理子系统112。存储器桥105进一步地经由通信路径106耦合至I/O(输入/输出)桥107,I/O桥107又耦合至交换机116。
在一个实施例中,I/O桥107被配置为从可选的输入设备108(诸如键盘或鼠标)接收用户输入信息,并经由通信路径106和存储器桥105将输入信息转发给CPU 102进行处理。在一些实施例中,计算机系统100可以是云计算环境中的服务器机器。在这样的实施例中,计算机系统100可以不具有输入设备108。相反,计算机系统100可通过接收通过网络传输并经由网络适配器118接收的消息形式的命令来接收等效输入信息。在一个实施例中,交换机116被配置为在I/O桥107和计算机系统100的其他组件(如网络适配器118和各种附加卡120和121)之间提供连接。
在一个实施例中,I/O桥107耦合至系统盘114,系统盘114可以被配置为存储内容以及应用程序和数据,以供CPU 102和并行处理子系统112 使用。在一个实施例中,系统盘114为应用程序和数据提供非易失性存储,可包括固定的或可移除的硬盘驱动器、闪存设备和CD-ROM(光盘只读存储器)、DVD-ROM(数字多功能盘-ROM)、蓝光、HD-DVD(高清DVD) 或其他磁、光或固态存储设备。在各个实施例中,其他组件(诸如通用串行总线或其他端口连接、光盘驱动器、数字多功能盘驱动器、胶片录制设备等)也可以连接到I/O桥107。
在各个实施例中,存储器桥105可以是北桥芯片(Northbridge chip), I/O桥107可以是南桥芯片(Southbridge chip)。此外,可以用任何技术上合适的协议(包括但不限于AGP(加速图形端口)、超文本传输 (HyperTransport)或本领域公知的任何其他总线或点对点通信协议)在计算机系统100内实现通信路径106和113以及其他通信路径。
在一些实施例中,并行处理子系统112包括图形子系统,该图形子系统向可选的显示设备110输送像素,该显示设备可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。在这种实施例中,并行处理子系统112合并了针对图形和视频处理优化的电路,包括例如视频输出电路。如结合下图2中更详细地描述的,可以跨并行处理子系统112中包括的一个或更多个并行处理单元(PPU)(这里也称为并行处理器)合并此类电路。在其他实施例中,并行处理子系统112合并了针对通用和/或计算处理而优化的电路。同样,可以跨并行处理子系统112中包括的一个或更多个PPU 合并此类电路,这些PPU被配置为执行此类通用和/或计算操作。在其他实施例中,并行处理子系统112中包括的一个或更多个PPP可配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器,该设备驱动器配置为管理并行处理子系统112中的一个或更多个 PPU的处理操作。
在一个或更多个实施例中,并行处理子系统112包括遍历引擎122,所述遍历引擎访问树结构124以便在矩阵乘法和/或其他矩阵运算期间识别和/或检索非零元素103的区域。如下文进一步详细论述,可使用并行处理子系统112、CPU 102和/或计算机系统100中的其他处理器来执行这些矩阵运算。
在各种实施例中,并行处理子系统112可与图1的一个或更多个其他元素集成,以形成单个系统。例如,并行处理子系统112可以与CPU 102 和其他连接电路集成在单个芯片上,以形成片上系统(SoC)。
在一个实施例中,CPU 102是计算机系统100的主处理器,控制和协调其他系统部件的操作。在一个实施例中,CPU 102发出控制PPU的操作的命令。在一些实施例中,通信路径113是PCI Express链路,其中专用通路被分配给每个PPU,如本领域中已知的。也可以使用其他通信路径。PPU 有利地实现高度并行处理架构。PPU可设有任何量的本地并行处理存储器 (PP存储器)。
应理解,本文所示的系统是说明性的,并且变化和修改是可能的。连接拓扑(包括网桥的数量和布置、CPU 102的数量和并行处理子系统112 的数量)可以根据需要进行修改。例如,在一些实施例中,系统存储器104 可以直接连接到CPU 102,而不是通过存储器桥105连接到CPU 102,并且其他设备将经由存储器桥105和CPU 102与系统存储器104进行通信。在其他实施例中,并行处理子系统112可以连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在其他实施例中,I/O桥107和存储器桥105可以集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图1所示的一个或更多个组件可以不存在。例如,可以消除交换机116,网络适配器118和附加卡120、121会直接连接到I/O桥107。
图2是根据各个实施例的图1的并行处理子系统112中包括的并行处理单元(PPU)202的框图。尽管图2描述了一个PPU 202,如上文所述,但并行处理子系统112可以包括任意数量的PPU 202。如图所示,PPU 202 耦合到本地并行处理(PP)存储器204。PPU 202和PP存储器204可采用一个或更多个集成电路器件实现,例如可编程处理器、应用专用集成电路(“ASIC”)或存储器设备,或者任何其他技术上可行的方式。
一些实施例中,PPU 202包括图形处理单元(GPU),该GPU可配置为实现图形渲染管线,以基于CPU 102和/或系统存储器104提供的图形数据执行与生成像素数据相关的各种操作。在处理图形数据时,PP存储器 204可用作存储一个或更多个常规帧缓冲区(如果需要,还可以存储一个或更多个其他渲染目标)的图形存储器。除其他事项外,PP存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧传输至可选的显示设备110以进行显示。在一些实施例中,PPU 202也可以配置为通用处理和计算操作。在一些实施例中,计算机系统100可以是云计算环境中的服务器机器。在这样的实施例中,计算机系统100可以不具有显示设备110。相反,计算机系统100可以通过经由网络适配器118通过网络传输消息形式的命令来生成等效输出信息。
如上所示,在计算机系统100中,CPU 102可以作为主处理器操作来控制和协调其他系统组件的操作。在一个实施例中,CPU 102发出控制PPU 202的操作的命令。例如,CPU102将用于PPU 202的命令流写入数据结构(图1或图2未明确示出)中,该数据结构可以位于系统存储器104、 PP存储器204或CPU 102和PPU 202两者可访问的另一个存储位置。指向数据结构的指针被写入命令队列(也称为推送缓冲区(pushbuffer))以启动对数据结构中命令流的处理。在一个实施例中,PPU 202从命令队列读取命令流,然后相对于CPU 102的操作异步地执行命令。在生成多个推送缓冲区的实施例中,应用程序可以经由设备驱动器为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。
在一个实施例中,PPU 202包括I/O(输入/输出)单元205,其经由通信路径113和存储器桥105与计算机系统100的其余部分进行通信。在一个实施例中,I/O单元205生成数据包(或其他信号)以在通信路径113 上传输,并且还从通信路径113接收所有传入数据包(或其他信号),将传入数据包定向到PPU 202的相应组件。例如,与处理任务相关的命令可定向到主机接口206,而与存储器操作相关的命令(例如,从PP存储器204 读取或写入PP存储器204)可以定向到交叉开关单元210。在一个实施例中,主机接口206读取每个命令队列,并将存储在命令队列中的命令流发送到前端212。
如上结合图1所述,PPU 202与计算机系统100的其余部分的连接可以变化。在一些实施例中,并行处理子系统112(其包括至少一个PPU 202) 作为附加卡实现,附加卡可插入计算机系统100的扩展槽中。在其他实施例中,PPU 202可采用总线桥集成在单个芯片上,诸如存储器桥105或I/O 桥107。同样,在其他实施例中,PPU 202的一些或全部元件可与CPU102 一起被包括在单个集成电路或片上系统(SoC)中。
在一个实施例中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。在一个实施例中,工作分配单元接收指向处理任务的指针,这些任务被编码为任务元数据(TMD) 并存储在存储器中。指向TMD的指针包括在命令流中,该命令流存储为命令队列,并由前端212从主机接口206接收。可以编码为TMD的处理任务包括与要处理的数据相关联的索引,以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要对数据执行的程序。同样, TMD可以指定CTA集合的数量和配置。通常,每个TMD对应一个任务。任务/工作单元207从前端212接收任务,并确保在启动每个TMD指定的处理任务之前将GPC 208配置为有效状态。可以为每个TMD指定优先级,该优先级用于调度处理任务的执行。处理任务也可以从处理集群阵列230 接收。可选地,TMD可以包括控制是否将TMD添加到处理任务列表(或指向处理任务的指针列表)的头部或尾部,从而提供对执行优先级的另一级控制的参数。
在一个实施例中,PPU 202基于处理集群阵列230有利地实现了高度并行处理体系架构,处理集群阵列230包括一组C个通用处理集群(GPC) 208,其中C≥1。每个GPC 208能够同时执行大量(例如数百或数千个) 线程,其中每个线程都是程序的实例。在各种应用中,可以分配不同的GPC 208来处理不同类型的程序或执行不同类型的计算。GPC 208的分配可根据每种类型的程序或计算产生的工作负载而不同。
在一个实施例中,存储器接口214包括一组D个分区单元215,其中 D≥1。每个分区单元215耦合到驻留在PP存储器204内的一个或更多个动态随机存取存储器(DRAM)220。在一些实施例中,分区单元215的数量等于DRAM 220的数量,每个分区单元215耦合到不同的DRAM 220。在其他实施例中,分区单元215的数量可以与DRAM 220的数量不同。本领域普通技术人员可以认识到,DRAM 220可更换为任何其他技术上合适的存储设备。在操作中,各种渲染目标(诸如纹理映射和帧缓冲区)可以跨DRAM 220存储,允许分区单元215并行写入每个渲染目标的部分,从而有效地使用PP存储器204的可用带宽。
在一个实施例中,给定的GPC 208可以处理要写入PP存储器204中的任何DRAM 220的数据。在一个实施例中,交叉开关单元210被配置为将每个GPC 208的输出路由到任何分区单元215的输入或任何其他GPC 208以进行进一步处理。GPC 208经由交叉开关单元210与存储器接口214 通信,以从各个DRAM 220读取或写入各个DRAM 220。在一些实施例中,交叉开关单元210除了经由存储器接口214连接到PP存储器204之外,还连接到I/O单元205,从而使不同GPC 208中的处理核能够与系统存储器104或非PPU 202本地的其他存储器进行通信。在图2的实施例中,交叉开关单元210与I/O单元205直接连接。在各种实施例中,交叉开关单元210可以使用虚拟通道分隔GPC 208和分区单元215之间的业务流。
在一个实施例中,GPC 208可以被编程为执行与各种应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色程序、顶点着色程序、几何着色程序和/ 或像素/片段着色程序)、通用计算操作等。在操作中,PPU 202被配置为将数据从系统存储器104和/或PP存储器204传输到一个或更多个片上存储器单元,处理该数据,并将结果数据写回系统存储器104和/或PP存储器204。然后,其他系统组件(包括CPU 102、并行处理子系统112中的另一PPU 202或计算机系统100中的另一并行处理子系统112)可以访问该结果数据。
在一个实施例中,并行处理子系统112中可包括任意数量的PPU 202。例如,单个附加卡上可提供多个PPU 202,或者多个附加卡可以连接到通信路径113,或者一个或更多个PPU 202可以集成到桥芯片中。多PPU系统中的PPU 202可彼此相同或不同。例如,不同的PPU202可能具有不同数量的处理核和/或不同数量的PP存储器204。在存在多个PPU 202的实现方式中,这些PPU可以并行操作,以比采用单个PPU 202所可能的吞吐量更高的吞吐量处理数据。包括一个或更多个PPU 202的系统可以以各种配置和形式因素实现,包括但不限于台式机、笔记本电脑、手持式个人计算机或其他手持设备、服务器、工作站、游戏机、嵌入式系统等。
如图所示,每个GPC 208能够访问遍历引擎122的对应实例,并且 PP存储器204中的每个DRAM 220存储树结构124和非零元素103的部分或完整副本。例如,每个GPU 208可以与实现遍历引擎122的单独的加速器通信,以从使用树结构124索引的稀疏矩阵中检索非零元素103的区域。这些检索的区域随后可被用于将稀疏矩阵与一个或更多个其他稀疏或密集矩阵相乘和/或执行其他类型的矩阵运算。下面参见图3-5更详细地描述遍历引擎122和树结构124。
本领域技术人员将了解,遍历引擎122、树结构124和非零元素103 可以多种方式在图1和2的系统内实施、复制或分布。首先,树结构124 的一个或更多个部分可以被存储在每个GPC 208的片上存储器(例如,静态随机存取存储器(SRAM)、暂存存储器、片上高速缓存等)中,代替将树结构124存储在PP存储器204中的DRAM 220上或作为将树结构124 存储在PP存储器204中的DRAM 220上的替代。给定的GPC 208或遍历引擎122可以使用直接存储器访问(DMA)来在DRAM 220和片上存储器之间传输树结构124的部分。第二,代替存储在PP存储器204中的DRAM 220上或作为存储在PP存储器204中的DRAM 220上的补充,非零元素 103的一个或更多个区域可存储在每一分区单元215中的L2高速缓存中。第三,每个GPC 208可以实现一个遍历引擎122,或者遍历引擎122的一个或更多个实例可以由多个GPC 208共享。第四,遍历引擎122可以由一个或更多个GPC 208、一个或更多个CPU、和/或由处理来自一个或更多个 GPC 208的请求的独立加速器来实现。
优化稀疏矩阵表示
图3是根据各个实施例的图1-2的遍历引擎122的更详细的图示。如上所述,遍历引擎122访问存储器302(例如,片上SRAM、DRAM 220 等)中存储的树结构124,以在涉及稀疏矩阵的矩阵乘法和/或其他矩阵运算期间标识和/或检索稀疏矩阵的一个或更多个区域318和/或320。以下结合图3、图4A-4C和图5更详细地描述树结构124和遍历引擎122相对于树结构124的操作。
在一个或更多个实施例中,树结构124包括表示稀疏矩阵中的非零元素的第一组区域318的节点,这些区域沿着多个空间分割点312重复地划分直到满足第一阈值。例如,区域318可通过以下步骤形成:将2D稀疏矩阵沿着水平和垂直空间分割点312(例如,中点)划分为对应于大致相等大小的象限的四个区域,将包括非零元素的每个区域沿着对应水平和垂直空间分割点312细分为基本相等大小的四个附加区域318,以此类推,直到非零元素的区域318达到区域大小的阈值(例如,每个矩阵维度中的特定数量的元素)。进而,树结构124可包括表示稀疏矩阵的根节点、表示稀疏矩阵被划分成的非空象限的根节点的多达四个子节点、以及表示给定区域沿对应空间分割点312被划分成的附加区域的子节点的附加层。
图4A示出了根据各个实施例的沿着图3的空间分割点312的稀疏矩阵的示例性递归划分。如图所示,稀疏矩阵包括沿对角线从稀疏矩阵的左上角到稀疏矩阵的右下角分布的非零元素。
图4A的稀疏矩阵被递归地分成表示基本上相等大小的非空象限的区域,直到达到象限大小的阈值。由此,稀疏矩阵中的所有非零元素可在满足象限大小的阈值的区域中找到。相反,大于象限大小的阈值的区域不具有非零元素。
示意性地,图4A的稀疏矩阵包括第一区域402、小于区域402的第二区域404、小于区域402的第三区域406、以及与区域408相同大小的第四区域408。通过将稀疏矩阵划分为第一组象限,然后将第一组象限中的左下象限划分为第二组象限来形成区域402。因为区域402对应于第二组象限中的空的左下象限,所以区域402不被进一步细分。
区域404通过将第一组象限中的左上象限分成第三组象限,然后将第三组象限中的左下象限划分成第四组象限来形成。因为区域404对应于第四组象限中的空的左下象限,所以区域404不被进一步细分。
区域406和408通过以下形成:将第三组象限中的左上象限划分成第五组象限,然后将第五组象限中的左上象限划分成第六组象限,并且将第五组象限中的左下象限划分成第七组象限。区域406和408具有相同的大小,这是满足稀疏矩阵中象限大小的阈值的大小(例如,每个维度中700-800 个元素左右)。区域408对应于第六组象限中的非空的左上象限,并且区域 406对应于第七组象限中的空的左上区域。
返回至图3的讨论,树结构124还包括表示形成在区域318的子集内的非零元素的区域320的第二集合的节点,所述区域沿着多个非零元素 (NNZ)分割点314被重复地划分,直到满足第二阈值。每一NNZ分割点314表示将给定区分割为具有基本上相同数目个非零元素的两个区域的水平、垂直和/或另一线。继续以上实例,可沿对应NNZ分割点314进一步划分非零元素的最小区域318中的一个或一个以上,以形成具有基本上相同数目的非零元素的两个附加区域320。可以可选地沿着对应的NNZ分割点314进一步细分这些附加区域320,直到给定区域中的非零元素的数量满足或低于区域中的非零元素的数量的阈值。区域320可以在树结构124 中由从表示最小区域318的节点下降的节点来表示。
图4B示出了根据各个实施例的将图4A的稀疏矩阵的区域408示例性地划分为具有基本上相同数量的非零元素的两个区域410和412。更具体地,区域408沿着水平NNZ分割点被划分成区域410和412。区域410 和412中的每一者还可沿着附加的水平NNZ分割点细分,直到给定非空区域中的非零元素的数目下降到阈值以下,如下文关于图4C进一步详细论述。
图4C示出了根据各个实施例的图4A的稀疏矩阵的非空区域示例性递归划分为具有基本上相同数量的非零元素的较小区域。特别地,满足稀疏矩阵中象限大小的大小阈值的多个非空区域已经沿着一个或更多个水平 NNZ分割点细分为具有基本上相等数目的非零元素的较小区域。这些非空区域包括已经被多次细分成多个较小区域的区域408。这些非空区域还包括沿稀疏矩阵的对角线部分的其他区域,在其中找到所有非零元素。
如图4C中所示,满足象限大小的大小阈值的一些非空区域未被进一步细分,因为这些区域已经满足非零元素的数量的阈值。这些非空区域包括紧邻区域406右侧的区域414,其对应于第七组象限的右上象限。
返回至图3的讨论,树结构124还包括表示在稀疏矩阵中存储非零元素的“有效负载区域”的多个叶节点。这些叶节点可被添加为最小区域318 和/或区域320的子节点。树结构124中的叶节点所表示的每个有效负载区域另外满足与区域318的细分相关联的区域大小阈值以及与区域320的细分相关联的非零元素的数量的阈值。
图5是根据各个实施例的图1-2的树结构124的示例性表示。示例性树结构124的顶部包括表示稀疏矩阵的根节点502。在根节点502下方,树结构124的其他部分被组织成单独的级,其中从给定节点到该节点下方的级的有向边表示该节点与该级之间的父子关系。
如图5所示,示例性树结构124包括在根节点502下的七个级。每个级包括标识由对应级中的节点表示的区域的类型以及级的边界的元数据。例如,级的元数据可包含指示级中的节点表示多达四个相等大小的象限还是具有基本上相等数目的非零元素的两个区域的一个或更多个旗标或变量。元数据还可指定级的边界(例如,级的左上角和右下角)。
具体地,根节点502下方的第一级包括存储第一级的元数据的部分 504,接着是表示四个象限的四个节点506-512,由节点502表示的稀疏矩阵被划分成所述四个象限。节点506-508指示由“quad0”和“quad1”表示的象限包括非零元素,而节点510-512中的空值指示对应象限不包括非零值并且因此不被进一步细分。
节点506下方的第二级包括存储第二级的元数据的部分514,接着是表示四个象限的四个节点516-522,由节点506表示的区域(即,在第一级中表示为“quad0”的象限)被分成所述四个象限。节点516-522中的“quad0”、“quad1”、“quad2”和“quad3”的值指示第二级中的所有四个象限包括非零元素。
节点508下方的第三级包括存储第三级的元数据的部分524,接着是表示由节点508表示的区域(即,在第一级中表示为“quad1”的象限)被划分成的四个象限的四个节点526-532。节点526-532中的“quad0”、“quad1”、“quad2”和“quad3”的值指示第二级中的所有四个象限包括非零元素。
节点516下方的第四级包括存储第四级的元数据的部分534,接着是两个节点536-538和附加部分540。两个节点536-538表示由“bin0”和“bin1”表示的两个区域,这两个区域具有由节点516表示的区域被划分成的基本上相等数量的非零元素。部分540存储分割点(例如,x或y坐标),沿所述分割点由节点516表示的区域被划分以在第四级中形成两个区域。节点 536和538具有表示在稀疏矩阵中存储非零元素的有效负载区域的相应子节点568和570。
节点526下方的第五级包括存储第五级的元数据的部分542,接着是两个节点544-546和附加部分548。两个节点544-546表示由“bin0”和“bin1”表示的两个区域,这两个区域具有基本上相等数量的非零元素,由节点526 表示的区域被划分成这些非零元素。部分548存储由节点526表示的区域沿着其被划分以形成第五级中的两个区域的分割点。
节点544下方的第六级包括存储第六级的元数据的部分550,接着是两个节点552-554和附加部分556。两个节点552-554表示由“bin0”和“bin1”表示的两个区域,这两个区域具有基本上相等数量的非零元素,由节点544 表示的区域被划分成这些非零元素。部分556存储分割点,沿该分割点,由节点544表示的区域被划分以在第六级中形成两个区域。节点552和554 具有表示在稀疏矩阵中存储非零元素的有效负载区域的相应子节点572和 574。
节点546下方的第七级包括存储第七级的元数据的部分560,随后是两个节点562-564和附加部分566。节点562-564表示由“bin0”和“bin1”表示的两个区域,这两个区域具有由节点546表示的区域被划分成的基本上相等数量的非零元素。部分566存储分割点,沿该分割点,由节点546 表示的区域被划分以在第七级中形成两个区域。节点562和564具有表示在稀疏矩阵中存储非零元素的有效负载区域的相应子节点576和578。
在一些实施例中,以一种或更多种格式存储由节点568-578表示的有效负载区域中的非零元素。例如,可以使用诸如CSR的默认压缩稀疏矩阵格式来存储有效负载区域中的非零元素。当给定有效负载区域中的非零元素可以另一种格式更有效地存储时,可以使用另一种格式来存储有效负载区域中的非零元素,并且可以将元数据添加到有效负载区域以指定其中存储有效负载区域中的非零元素的格式。继续本示例,如果有效负载区域仅包括具有非零值的一行,则可以使用指定非空行坐标和非空行的矩阵值的单个密集向量的自定义格式来存储有效负载区域。有效负载区域还将包括标识自定义格式的一个或更多个元数据字段。
返回图3的讨论,树结构124可由硬件或软件组件生成并被提供给遍历引擎122以供在涉及稀疏矩阵的矩阵乘法和/或其他矩阵运算期间使用。例如,树结构124可以由处理器、一组处理器或计算机系统生成。然后,树结构124可以通过与其他计算机系统、DMA和/或另一种机制的网络连接被加载到存储器302中。
在一个或更多个实施例中,硬件或软件组件以并行、负载平衡的方式生成树结构124。首先,硬件或软件组件接收未压缩格式或另一经压缩稀疏矩阵格式的稀疏矩阵。在树结构124的生成期间,硬件或软件组件将稀疏矩阵划分成使用空间分割点312形成的最小大小的区域318(例如,满足区域大小的阈值的区域318)的网格。硬件或软件组件还将每个最小大小的区域318指派给不同的并行任务,该不同的并行任务可以由不同的处理器或处理器核心(例如,CPU核心、GPC 208、GPU中的流式多处理器 (SM)等)执行。每个并行任务分析稀疏矩阵被存储或表示的格式以确定对应的最小大小的区域是否为空。如果对应的最小大小的区域为空,则并行任务返回对应的最小大小的区域为空的指示并且中断处理。
如果指派给并行任务的最小大小的区域为非空,则执行一个或更多个任务以沿NNZ分割点314将最小大小的区域划分成一个或更多个附加区域 320(例如,将给定区域划分成具有基本上相等数量的非零元素的两个区域的边界310的x坐标和/或y坐标)。任务还向树结构124添加表示最小大小的区域和附加区域320的节点和级。然后,并行任务构建有效负载区域 (以指定的稀疏矩阵格式),其由最小大小的区域内的NNZ分割点314界定。这些有效负载区域和/或相应节点的创建可以可选地被并行化以进一步加快树结构124的创建。
在创建有效负载区域之后,执行一个或更多个任务以将使用空间分割点312创建的最小大小的区域318合并成树结构124内的较大区域318。例如,一个或更多个任务可以将表示四个最小大小的区域318的四个节点分组,该最小大小的区域318被布置在表示跨越第一2X2网格的第一区域的父节点之下的第一2X2网格中。一个或更多个任务还可以将父节点和表示四个较大区域318的三个其他节点分组,其中四个较大区域318被布置在表示跨越第二2X2网格的第二区域的较高层级父节点下方的第二2X2 网格中。由此,这些父节点中的每个将表示比对应的子节点所表示的任何区域大四倍的区域。所述任务可继续将较小区域318的象限(或其他分组) 合并成较大区域318,直到所有区域318和320由树结构124中的节点表示,将单个区域318和320细分成较小区域由树结构124中的有向边表示,并且树结构中的所有节点从表示整个稀疏矩阵的根节点下降。
在树结构124被创建和/或加载到存储器302中之后,遍历引擎122 使用树结构124处理对应的稀疏矩阵中的感兴趣区域348内的矩阵值的查询346。例如,遍历引擎122可接收来自计算机系统100(或远程计算机系统)上的一个或更多个GPC 208、CPU 102和/或另一处理器的查询346。在查询346内,感兴趣区域348可包括稀疏矩阵的矩形部分的左上角和右下角和/或矩形部分的边界的另一表示。稀疏矩阵的该部分可由遍历引擎 122检索以允许该部分与另一矩阵的对应部分相乘,如以下关于图6所描述的。稀疏矩阵的该部分还可或替代地被检索以供使用另一类型的矩阵运算的后续处理。
在接收到给定查询346之后,遍历引擎122使用树结构124来标识稀疏矩阵中与感兴趣区域348重叠的非零元素的一个或更多个区域318-320。更具体地,遍历引擎122使用比较器304、节点堆栈306(其可替换地实现为队列和/或另一类型的数据结构)、以及边界计算器308来遍历树结构124。在遍历树结构124期间,遍历引擎122标识与树结构124相关联的与感兴趣区域348重叠的任何有效负载区域。遍历引擎122然后生成并传输对查询346的响应350,该响应350标识重叠有效负载区域和/或在重叠有效负载区域中包括非零元素。响应350因此允许从其接收查询346的组件执行与感兴趣区域348中的非零元素有关的处理。
在一些实施例中,遍历引擎122执行一系列步骤以便识别树结构124 中与感兴趣区域348重叠的有效负载区域。首先,边界计算器308从存储器302读取以访问树结构124,从表示整个稀疏矩阵的根节点开始,向下至表示稀疏矩阵中的有效负载区域的一个或更多个叶节点。在树结构124 的给定级(即,父节点下的子节点的分组),边界计算器308将表示该级中的非空区域318或区域320的所有节点推送到节点堆栈306上。
边界计算器308在将表示给定级中的非空区域的节点推送到节点堆栈 306上的操作可以由以下伪代码表示:
根据以上伪代码,边界计算器308执行由级表示的区域类型(例如,如在级的元数据中指定的)与值“QUAD”的初始比较。如果区域类型匹配“QUAD”,则遍历引擎122在该级中表示2D稀疏矩阵和/或稀疏矩阵中的区域内形成的象限的四个节点(由“quad0”、“quad1”、“quad2”和“quad3”表示)上迭代。当所述级中的给定节点具有非空子节点或级(指示对应象限包含非零元素)时,边界计算器308使用由所述级表示的区域的边界(例如,如用于所述级的元数据中所指定)来计算表示由所述级中的节点表示的象限的边界310的空间分割点312。边界计算器308还用象限的边界310、节点的子节点或级、以及指示子节点或级是否表示有效负载区域的二进制值来填充“NODE”对象。遍历引擎122然后将“NODE”对象推送到节点堆栈306上。
继续以上伪代码,如果区域类型不匹配“QUAD”,则边界计算器308 执行与表示基本上相等数量的非零元素的两个非均匀区域的节点级有关的处理,其中,由该级的父节点表示的较大区域已经被划分成该非均匀区域。对于这种类型的级,边界计算器308使用由该级表示的区域的边界和该级的NNZ分割点(例如,如在该级的元数据中指定的)来确定每个非均匀区域的边界310。边界计算器308用每个非均匀区域的边界310、节点的子节点或级、以及指示子节点或级是否表示一个或更多个有效负载区域的二进制值来填充“NODE”对象。边界计算器308然后将“NODE”对象推送到节点堆栈306上。
在一个或更多个节点已经被推送到节点堆栈306上之后,比较器304 将最顶层节点弹出节点堆栈306之外并且确定该节点所表示的区域是否与感兴趣区域348重叠。遍历引擎122随后执行与比较器304的输出和该节点所表示的区域的类型(有效负载或非有效负载)有关的附加处理。
比较器304在确定由来自节点堆栈306的节点表示的区域与感兴趣区域348之间的重叠时的操作可以由以下伪代码表示:
is_overlap=!((QUERY.UL.x>NODE.LR.x)||(NODE.UL.x>QUERY.LR.x) ||(QUERY.UL.y>NODE.LR.y)||(NODE.UL.y>QUERY.LR.y))
在以上伪代码中,“QUERY”存储与感兴趣区域348的边界相关的值,并且“NODE”存储与由从节点堆栈306弹出的节点表示的区域的边界310 相关的值。
根据以上伪代码,比较器304执行数次比较以生成表示以下各项的四个布尔值:
·感兴趣区域348的左上x坐标是否在由节点表示的区域的右下x坐标的右侧
·由节点表示的区域的左上x坐标是否在感兴趣区域348的右下x坐标的右侧
·感兴趣区域348的左上y坐标是否低于由节点表示的区域的右下y 坐标
·由节点表示的区域的左上y坐标是否低于感兴趣区域348的右下y 坐标如果这些布尔值中的任何一个被设置为真,则比较器304确定由节点表示的区域不与感兴趣区域348重叠。如果所有这些布尔值被设置为假,比较器304确定由节点表示的区域与感兴趣区域348重叠。
当比较器304确定由从节点堆栈306弹出的节点所表示的区域不与感兴趣区域348重叠时,遍历引擎122省略与节点相关的附加处理。当比较器304识别由从节点堆栈306弹出的节点所表示的区域与感兴趣区域348 之间的重叠时,遍历引擎122基于该节点所表示的区域的类型(有效负载或非有效负载)来执行处理。如果比较器304在由节点表示的非有效负载区域与感兴趣区域348之间建立非有效负载区域重叠322,则边界计算器 308检索作为节点的子节点的级(例如,使用节点中的“NODE.child”字段)并且将节点从所检索的级推送到节点堆栈306上(例如,使用以上伪代码)。如果比较器304在由节点表示的有效负载区域和感兴趣区域348 之间建立有效负载区域重叠324,则遍历引擎122将有效负载区域的地址添加到区域地址列表326。
遍历引擎122继续使用边界计算器308来将节点从树结构124推送到节点堆栈306上,使用比较器304来确定由从节点堆栈弹出的节点所表示的每个区域与感兴趣区域348之间的重叠(或缺少重叠),并且执行与比较器304的输出相关的附加处理,直到节点堆栈306为空。此时,遍历引擎 122已标识稀疏矩阵中与感兴趣区域348重叠的有效负载区域的一组区域地址326。
遍历引擎122然后使用稀疏矩阵中与感兴趣区域348重叠的有效负载区域的区域地址326的列表来生成响应350。例如,遍历引擎122可以包括响应350中的区域地址326的列表,并且向从其接收到查询346的组件发送响应350。然后,组件可以使用区域地址326从DRAM 220和/或另一个存储器位置检索相应的有效负载区域,并且执行与所检索的有效负载区域和/或感兴趣区域348相关的矩阵处理。在另一示例中,遍历引擎122可以检索位于区域地址326处的有效负载区域并且在响应350中返回有效负载区域的内容。在第三示例中,遍历引擎122可以检索位于区域地址326 处的有效负载区域,计算所检索的有效负载区域与感兴趣区域348的交集,并且在响应350中返回落入感兴趣区域348内的非零元素。
本领域技术人员将认识到,树结构124和遍历引擎122可以适应具有不同维数的矩阵。例如,存储对象或场景的点云、网格或另一3D表示的 3D稀疏矩阵可沿着x、y和z轴空间分割点312被重复地划分成表示3D 稀疏矩阵的卦限(octant)的区域318(或3D稀疏矩阵内的较小区域),直到达到卦限大小的阈值。接着可沿一个或更多个NNZ分割点314进一步细分具有非零元素数目的卦限,直到满足区域中的非零元素数目的阈值。
本领域技术人员还将认识到,遍历引擎122可以被适配成用于确定树结构124中的各个区域318-320与非矩形感兴趣区域348之间的重叠或缺少重叠。例如,遍历引擎122可以配置为识别和/或返回与树结构124相关联的与给定的感兴趣区域348重叠的2D或3D有效负载区域,该感兴趣区域348具有圆形、椭圆形、球形、非矩形多边形、多面体、圆锥形、圆柱形或任意或自由形状。
用于执行稀疏矩阵乘法的加速器
图6示出了根据各个实施例的用于执行稀疏矩阵乘法的加速器600的示例性架构。如图所示,加速器600包括遍历引擎122、全局缓冲区B 602、独立操作处理元件(PE)的网格606、合并器608组件和全局缓冲区C 604。下文进一步详细描述这些组件中的每一者。
在一个或更多个实施例中,加速器600用于将第一输入矩阵A与第二输入矩阵B相乘以产生输出矩阵C(即,A x B=C)。第一矩阵A可以包括使用树结构124来索引并且使用以上讨论的技术经由遍历引擎122来访问的稀疏矩阵。
将第二矩阵B的至少一部分存储在全局缓冲区B 602中。例如,矩阵 B的一些或全部列可存储在全局缓冲区B 602内的CSR、CSC和/或另一压缩格式中,其中存储在全局缓冲区B 602中的矩阵B的量受制于全局缓冲区B 602的大小。替换地或附加地,矩阵B可包括使用与矩阵A相同类型的树结构存储和/或索引的另一稀疏矩阵,并且全局缓冲区B 602可被遍历引擎122的另一实例替换以允许在与矩阵A相乘期间对矩阵B的非零部分的高效存储和检索。全局缓冲区B 602还可以或替代地可以使用使用遍历引擎122的另一实例从矩阵B的非零部分检索的数据来填充。
将来自遍历引擎122的矩阵A的单独部分传递至网格606中的单独 PE,并且经由B多播616操作将来自全局缓冲区B 602的矩阵B的一个或更多个对应列传输至网格606中的对应PE。每个PE将从遍历引擎122接收的矩阵A的一部分存储在A区域暂存器610中。每个PE还将经由B多播616接收的矩阵B的一列或更多列(或部分列)存储在B列暂存器614 中。每个PE还包括乘法阵列612,乘法阵列612将存储在A区域暂存器 610中的A的部分与存储在B列暂存器614中的B的对应列(或部分列) 相乘以产生部分C 618结果。
例如,矩阵A和矩阵B可以包括160x160个正方形矩阵。矩阵A的前十行(具有10x160的尺寸)可以被划分成跨网格606中的16个PE分布的16个10x10部分,其中每个PE将矩阵A的对应10x10部分存储在A 区域暂存器610中。矩阵B的前十列(具有160x 10的尺寸)也将从全局缓冲区B 602中检索并且经由B多播616被提供给所有16个PE,其中每个PE将所有十列存储在B列暂存器614中。换言之,PE将接收并存储列 A的前10行的非重叠“块”,以及计算跨越矩阵C的前10行的部分C 618 结果所需的矩阵B的前10列的全部。进而,每个PE中的乘法阵列612可以包括一组或多组双精度浮点乘数,其根据A区域暂存器610和B列暂存器614中的数据来计算表示该PE的部分C 618的10x10部分矩阵。
合并器608从网格606中的PE接收单独的部分C 618结果,并且将来自多个PE的部分C 618结果组合成一个或更多个中间C 620结果。继续以上示例,如果B列暂存器614不足够大以存储矩阵B的10个完整列,则可以将B多播616修改到每个PE的矩阵B的前10列的前80行。每个 PE将矩阵B的前10列的前80行存储在对应的B列暂存器614中,并且使用乘法阵列612来将部分C 618结果计算为A区域暂存器610中的矩阵 A的部分与B列暂存器614中的前10列的部分的乘积。在给定PE完成计算部分C 618结果之后,PE将部分C 618传输到合并器608。在所有PE 已经从A区域暂存器610中的矩阵A的相应部分以及B列暂存器614中的前10列的前80行计算出第一轮部分C 618之后,新的B多播616可以用于将矩阵B中的前10列的最后80行传输到网格606,并且网格606中的每个PE将存储B列暂存器614中的矩阵B中的前10列的最后80行。每个PE然后将使用乘法阵列612来计算附加部分C 618结果作为A区域暂存器610中的矩阵A的部分和B列暂存器614中的前10列的最后80行,并且合并器608将从A区域暂存器610中的矩阵A的相应部分和B列暂存器614中的前10列的最后80行接收由PE计算的第二轮部分C 618结果。然后,合并器608将由每个PE计算的两个部分C 618结果求和成指派给该PE的矩阵A的部分与矩阵B的前10列相乘的中间C 620结果。
由合并器608产生的每个中间C 620结果被存储在全局缓冲区C 604 中。矩阵A数据和矩阵B数据通过网格606的多次传递产生的多个中间C 620结果随后可被全局缓冲区C604和/或另一组件组合成对应于矩阵C的最终结果。
在一个或更多个实施例中,经由树结构124和遍历引擎122从矩阵A (和可选地矩阵B)对数据的索引和检索为由加速器600执行的矩阵乘法运算提供了许多性能改进。首先,将稀疏输入矩阵(例如,矩阵A和/或矩阵B)划分为具有类似数量的非零元素的空间紧凑、非空区域改善了PE 上的负载分布。例如,遍历引擎122可以使用树结构124来识别和/或检索与输入矩阵中的特定范围的行重叠的一个或更多个有效负载区域,并且加速器600可以将检索的有效负载区域分布在网格606中的PE上。因为有效负载区域是紧凑的并且具有相似数量的非零元素,所以PE上的处理负载比不将稀疏矩阵分割成紧凑区域和/或具有基本上相同数量的非零元素的区域的压缩稀疏矩阵格式更可能均匀地分布。因而,在给定轮次的部分 C 618计算中PE的使用和同步得到改进,这允许加速器600在额外轮次的部分C 618计算中更快和高效地向PE部署一个或两个矩阵的新部分。
第二,有效负载区域的紧凑性减少了用于在矩阵乘法计算过程中检索有效负载区域的存储器访问次数。相反,CSR、CSC或其他压缩稀疏矩阵格式可完全跨越给定稀疏矩阵的一个或更多个维度,并且因此要求对相同区域(例如,矩阵的行或列)的多个存储器访问以执行相同的矩阵乘法计算。
本领域技术人员将认识到,加速器600可以按多种方式实施、构造、和/或使用。首先,加速器600可以是与CPU、GPU和/或片上系统(SoC) 上的另一类型的处理器一起包括的专用处理器。进而,SoC可以用于操作自动车辆、移动设备、和/或另一类型的计算设备。第二,遍历引擎122、网格606中的PE和/或合并器608可以使用一个或更多个处理器、处理器核心、现场可编程门阵列(FPGA)、粗粒度可重配置架构(CGRA)、专用集成电路(ASIC)、收缩阵列和/或其他类型的处理器或电路来实现。第三, PE的多个网格可以分布在加速器600上的多个处理器和/或处理器核心上。第四,全局缓冲区B 602、合并器608和/或全局缓冲区C604可以使用一个或更多个片上高速缓存、SRAM、DRAM和/或其他类型的存储器或存储装置来实现。第五,加速器600可适于涉及稀疏矩阵的其他类型的矩阵运算,诸如(但不限于)矩阵加法、矩阵减法、矩阵-向量乘法、卷积、将线性变换应用于稀疏矩阵、矩阵分解、矩阵求逆和/或矩阵指数。
优化的稀疏矩阵表示的工作流
图7是根据各个实施例的用于创建表示稀疏矩阵的树结构的方法步骤的流程图。虽然结合图1-3的系统来描述方法步骤,但所属领域的技术人员将理解,经配置以按任何次序执行所述方法步骤的任何系统落入本公开的范围内。
如图所示,PPU 202和/或另一组件将矩阵划分702成第一多个区域,这些第一多个区域具有相等的大小并且与该矩阵内的非空单元相对应。例如,组件可以沿着水平和垂直空间分割点将2D稀疏矩阵划分成大小相等的区域的网格,其中每个区域具有满足区域大小的阈值的维度。
在一些实施例中,矩阵存储一组用户和一组项目之间的交互。在这些实施例中,矩阵中的行可以表示用户的集合,并且矩阵中的列可以表示项目的集合。矩阵中的每个元素可以存储与评级、查看、点击、购买、忽略和/或由元素的行表示的用户与由元素的列表示的项目之间的其他交互相关联的值和/或计数。
接下来,组件沿着NNZ分割点将在操作702中形成的区域中的一个或更多个递归地划分704为与矩阵内的非空单元相对应的第二多个区域,直到满足给定区域中的非零矩阵值的数量的阈值。例如,所述组件可将所述第一多个区域中的每一者中的非零矩阵值的数目与阈值进行比较。如果给定区域中的非零矩阵值的数目满足或低于所述阈值,则所述组件将省略对所述区域的进一步细分。如果一个区域中的非零矩阵值的数目不满足阈值,那么所述组件将沿着一个或更多个水平和/或垂直NNZ分割点划分区域,以形成具有基本上相同数目个非零元素的较大数目的区域。这些额外区域可任选地沿着对应NNZ分割点进一步细分,直到给定区域中的非零元素的数目满足或低于区域中非零元素的数目的阈值。
然后,组件在计算机存储器内创建706用于索引矩阵的树结构的至少一部分。更具体来说,所述组件针对所述第一和第二多个区域中的每一区域产生所述树结构内的节点。当将矩阵中的给定区域划分成较小的非空区域时,组件将表示较小区域的节点添加到树结构中作为表示该区域的节点的子节点(例如,通过将来自表示该区域的节点的有向边添加到包括表示较小区域的节点的级)。组件还将表示第一多个区域的节点分组在表示矩阵中的较大区域的父节点的附加层之下。例如,组件可以将表示在操作702 中形成的相同大小的区域的2x2网格的四个节点分组在表示跨越2x2网格的较大区域的父节点下。组件还可以将表示四个这些较大区域中的四个的父节点分组在表示跨越全部四个较大区域的甚至更大区域的更高级父节点下。组件可以继续将树结构的某个层级的节点分组到树结构的较高层级的父节点下,以表示将矩阵中的区域“合并”到较大的区域中,直到树结构中的所有节点是表示矩阵的根节点的后代。
因此,该树结构包括表示该矩阵的根节点以及在该根节点下方的一个或更多个层级的子节点,该一个或更多个层级的子节点表示该矩阵沿着空间分割点细分成一个或更多个层级的相同大小的区域。树结构还包含在表示沿着空间分割点形成的最小区域的子节点的至少一部分下方的子节点的一个或更多个附加层级。这些附加层级的子节点表示将沿着空间分割点创建的最小区域额外细分为具有基本上相等数目的非零矩阵值的甚至更小区域。最后,组件生成树结构中表示存储矩阵中的非零元素的有效负载区域的叶节点。
遍历引擎122和/或另一组件还为树结构中的每个有效负载区域选择 708压缩稀疏矩阵格式。例如,组件可以针对所有有效负载区域使用诸如 CSR和/或CSC的默认压缩稀疏矩阵格式。在另一示例中,组件可以按照对有效负载区域中的非零矩阵值的位置进行优化的方式为给定的有效负载区域选择压缩稀疏矩阵格式。在为给定的有效负载区域选择压缩稀疏矩阵格式之后,遍历引擎122和/或另一组件将有效负载区域存储710在压缩稀疏矩阵格式中。
最后,遍历引擎122和/或另一组件存储712与所存储的有效负载区域相关联的树结构。例如,组件可以将树结构和有效负载区域存储在存储器、持久存储、云存储和/或另一类型的存储的相同和/或不同区域中。在树结构中,表示有效负载区域的叶节点可以包括有效负载区域的地址、路径和/或其他类型的位置。然后,可以遍历树结构以定位或访问有效负载区域中的非零元素和/或对非零元素执行矩阵运算,如下文进一步详细描述的。
图8是根据各个实施例的用于使用树结构来检索存储在计算机存储器内的数据的方法步骤的流程图。虽然结合图1-3的系统来描述方法步骤,但所属领域的技术人员将理解,经配置以按任何次序执行所述方法步骤的任何系统落入本公开的范围内。
如图所示,遍历引擎122和/或另一组件将数据存储802在驻留在计算机存储器中的树结构中。例如,组件可以将树结构存储在片上SRAM、片外DRAM和/或遍历引擎122可访问的另一类型的存储器中。如上所述,树结构可以包括与矩阵(例如,用户和项目之间的交互矩阵)中的第一多个非空区域对应的第一多个节点。该第一多个节点包括表示第一区域的第一节点和作为第一节点的子节点并且表示具有相同大小并且形成在第一区域内的一个或更多个第二区域的一个或更多个第二节点。树结构还可包括第二多个节点,第二多个节点对应于形成在一个或更多个第二区域中包括的至少一个区域内的第二多个非空区域。该第二多个节点包括表示第三区的第三节点和作为所述第三节点的子节点且表示具有基本上相等数目的非零矩阵值且在所述第三区域内形成的一个或更多个第四区域的一个或更多个第四节点。
接下来,遍历引擎122遍历804树结构以访问矩阵中与包括在查询中的感兴趣区域重叠的一个或更多个非空区域。下面参见图9更详细地描述操作804。
遍历引擎122然后生成806对包括一个或更多个非空区域的查询的响应。例如,遍历引擎122可以向响应添加一个或更多个非空区域的地址和/或向响应添加一个或更多个非空区域中包括的非零矩阵值。加速器和/ 或另一组件然后可以在非空区域的与感兴趣区域重叠的部分上执行矩阵乘法和/或其他类型的矩阵运算,如下面关于图10更详细地描述的。组件还可以或替代地使用非空区域的部分来生成特征集,并且生成和/或输出推荐可以基于特征集。例如,组件可以使用响应中的数据来检索用户-项目矩阵中的用户和项目之间的交互,并将交互输入到机器学习模型、协同过滤技术和/或另一类型的推荐系统中。推荐系统然后可以使用与用户和/或项目相关的交互和/或其他特征来向用户生成项目的附加推荐。
图9是根据各个实施例的用于遍历树结构以访问矩阵中与包括在查询中的感兴趣区域重叠的非空区域的方法步骤的流程图。虽然结合图1-3 的系统来描述方法步骤,但所属领域的技术人员将理解,经配置以按任何次序执行所述方法步骤的任何系统落入本公开的范围内。
如图所示,遍历引擎122从树结构的级检索902作为节点的子节点的一个或更多个节点,并且将一个或更多个节点推送904到节点堆栈上。例如,遍历引擎122可以在树结构的根节点处开始,并且使用源自根节点的一条或多条边来获得作为根节点的子节点的一个或更多个节点。根节点将表示矩阵,并且根节点的子节点将表示稀疏矩阵最初被划分成的一个或更多个非空象限。根节点的子节点然后将按照检索子节点的顺序被推送到节点堆栈上。
接下来,遍历引擎122确定906节点堆栈是否为空。如果节点堆栈是空的,则遍历引擎122中止与查询有关的处理,因为节点堆栈中缺少节点指示矩阵中缺少非空区域。
如果节点堆栈不为空,则遍历引擎122从节点堆栈中弹出908节点并且确定910由节点表示的区域是否与包括在查询中的感兴趣区域重叠。例如,遍历引擎122可以从节点中的元数据获得区域的边界。遍历引擎122 然后可以执行由节点表示的区域的左上角与感兴趣区域的右下角和/或感兴趣区域的左上角与由节点表示的区域的右下角之间的一个或更多个比较,以确定区域与感兴趣区域之间的重叠或缺少重叠。
如果由节点表示的区域不与感兴趣区域重叠,则遍历引擎122在树结构中不执行与节点或节点的后代有关的任何附加处理。相反,遍历引擎 122执行操作906以确定节点堆栈是否为空。如果节点堆栈为空,遍历引擎122中止与查询有关的附加处理。如果节点堆栈不为空,则遍历引擎122 执行操作908以从节点堆栈检索下一节点。
如果在操作908由从节点堆栈中检索的节点表示的区域与感兴趣区域重叠,则遍历引擎122确定912节点的一个或更多个子节点是否表示有效负载区域。例如,遍历引擎122可以使用从节点到表示树结构中的节点的子节点的下一级的指针来访问标识由节点的子节点所表示的节点的“类型”的元数据。如果级的节点类型指示节点具有表示树结构中的有效负载区域的单个子节点,则遍历引擎122将有效负载区域添加914到包括在对查询的响应中的一组非空区域。例如,遍历引擎914可以从子节点检索有效负载区域的地址,并且将该地址添加到在响应中返回的非空区域的地址列表。
如果节点的一个或更多个子节点不表示有效负载区域(例如,因为对应级的节点类型被设置成不同值),遍历引擎122利用节点的子节点和/ 或节点堆栈中的其他节点的子节点的附加集合来重复操作902-914,直到节点堆栈为空。进而,在操作902-914的多次迭代之后清空节点堆栈指示遍历引擎122已经将与感兴趣区域重叠的所有有效负载区域添加到响应。
图10是根据各个实施例的用于执行稀疏矩阵乘法计算的方法步骤的流程图。虽然结合图1-3和图6的系统来描述方法步骤,但本领域技术人员将理解,经配置以按任何次序执行方法步骤的任何系统落入本公开的范围内。
如图所示,加速器600的网格606中的PE经由遍历引擎从第一矩阵接收1002数据,所述遍历引擎在操作期间经由树结构访问包括在第一矩阵中的非零元素的一个或更多个区域。例如,加速器600的一个或更多个组件可以向遍历引擎122传输针对与第一矩阵中的感兴趣的矩形区域重叠的非空有效负载区域的查询。遍历引擎122可以使用上述技术来处理查询,并且响应于查询而返回重叠的非空有效负载区域的地址和/或存储在非空有效负载区域中的矩阵值。然后,组件可以在PE上分布感兴趣区域中的非零元素的不同部分。
网格606中的PE还经由加速器600中的组件从第二矩阵接收1004 数据。例如,PE可以经由B多播616从全局缓冲区B 602接收第二矩阵中的一个或更多个列(或列的部分)。在另一示例中,PE可以从通过遍历表示第二矩阵的不同树结构来访问列的不同遍历引擎接收第二矩阵中的一个或更多个列(或列的部分)。
接下来,PE对来自第一矩阵和第二矩阵的数据执行1006计算以产生一组部分结果。例如,每个PE可以包括存储在操作1002中接收到的第一矩阵的一部分的第一暂存器以及存储在操作1004中接收到的第二矩阵的一部分的第二暂存器。每个PE还可以包括乘法阵列,乘法阵列使用存储在两个暂存器中的部分来计算部分矩阵乘法结果。
合并器608组件然后将部分结果组合1008成一个或更多个中间结果并且在全局缓冲存储器中存储1010一个或更多个中间结果。例如,合并器 608组件可将部分结果求和和/或以其他方式聚合成一个或更多个中间结果,并且将一个或更多个中间结果传输到全局缓冲区C 604用于存储。
最后,加速器600的一个或更多个组件将来自全局缓冲存储器的一个或更多个中间结果组合1012为第一矩阵与第二矩阵相乘的最终结果。例如,组件可以布置、聚合和/或以其他方式处理中间结果,使得输出矩阵可用作第一矩阵和第二矩阵的乘积。
总之,所公开的技术提供了一种树结构,该树结构可以用于有效地存储和访问稀疏矩阵(或另一类型的稀疏数据结构)中的非零元素的区域。稀疏矩阵被递归地划分成包括非零元素的大小相等的区域,直到满足区域大小的阈值。满足区域大小的阈值的个别区域可沿将所述区域分离为具有基本上相等数目的非零元素的多个区域的分割点进一步细分,直到给定区域中的非零元素的数目下降到阈值以下。
创建树结构以对稀疏矩阵中的经细分的区域和非零元素进行索引。树的根节点表示整个稀疏矩阵,并且根节点下方的子节点表示稀疏矩阵被划分成的非零值的区域。可以添加节点的附加层作为节点的子节点以表示由节点表示的区域被划分成的多个区域。当稀疏矩阵中包括非零元素的区域未被进一步细分时,在树结构中将存储区域中的非零元素的“有效负载区域”表示为表示该区域的节点的子节点。树结构因此提供用于存储稀疏矩阵的压缩格式。
该树结构然后可以被加载到CPU、GPU、实现树遍历引擎的专用加速器和/或另一种类型的处理器中。处理器使用树结构处理稀疏矩阵中的特定“感兴趣区域”的查询(例如,用于执行矩阵乘法和其他矩阵处理操作的区域)并且响应于每个查询返回由树结构中的叶节点表示的与相应感兴趣区域重叠的任何有效负载区域。CPU、GPU、加速器和/或另一类型的处理器可随后使用响应中的数据来使用感兴趣区域中的矩阵值执行矩阵乘法和/或其他类型的矩阵运算。
所公开的技术相对于现有技术的技术优点是在执行矩阵乘法运算或矩阵运算时,可以将稀疏矩阵中具有相似数目的非零矩阵元素值的区域分布在并行处理器内的多个处理元件上,以实现跨那些处理元件的更平衡的工作分布。所公开的技术的另一技术优点是当将包含非零矩阵元素值的稀疏矩阵的区域与另一矩阵的区域相乘时从该另一矩阵访问的数据量减少。所公开的技术的附加技术特征优点是可以遍历不包括表示稀疏矩阵的空白区域的节点的树结构,以相对于现有技术更有效地访问稀疏矩阵的任意区域、维度或矩阵元素。这些技术优点提供了优于现有技术方法的一个或更多个技术改进。
1.在一些实施例中,一种系统包括:第一缓冲存储器,其存储第一矩阵的至少一部分;耦合到所述第一缓冲存储器的处理器的网格,其中每个处理器包括在所述处理器的网格中:经由所述第一缓冲存储器从所述第一矩阵接收数据;经由第一遍历引擎从第二矩阵接收数据,所述第一遍历引擎在操作期间经由树结构访问包括在所述第二矩阵中的非零元素的一个或更多个区域;以及对来自所述第一矩阵的数据和来自所述第二矩阵的数据执行一个或更多个计算以产生部分结果;合并电路,其将来自所述处理器的网格的部分结果组合成一个或更多个中间结果;以及第二缓冲存储器,其存储所述一个或更多个中间结果。
2.根据条款1所述的系统,其中所述树结构包括与所述第一矩阵中的第一多个非空区域相对应的第一多个节点,并且其中所述第一多个节点包括表示第一区域的第一节点和作为所述第一节点的子节点并且表示具有相同尺寸并且形成在所述第一区域内的一个或更多个第二区域的一个或更多个第二节点。
3.根据条款1或2所述的系统,其中所述第一遍历引擎通过以下操作来访问所述非零元素的一个或更多个区域:将作为所述树结构中的给定节点的子节点的一个或更多个节点添加到节点堆栈;从所述节点堆栈检索第五节点;确定由所述第五节点表示的第五区域与包括在所述第二矩阵中的感兴趣区域重叠;以及将由作为所述树结构中的所述第五节点的子节点的第六节点表示的有效负载区域添加到所述非零元素的一个或更多个区域。
4.根据条款1至3中任一项所述的系统,其中经由多播操作接收来自所述第一矩阵的所述数据,所述多播操作将所述数据从所述第一缓冲存储器传输到包括在所述处理器的网格中的每个处理器。
5.根据条款1至4中任一项所述的系统,其中包括在所述处理器的网格中的每个处理器包括:第一暂存存储器,用于存储来自所述第一矩阵的数据;第二暂存存储器,用于存储来自所述第二矩阵的数据;以及乘法阵列,其对来自所述第一矩阵的数据和来自所述第二矩阵的数据执行所述一个或更多个计算。
6.根据条款1至5中任一项所述的系统,其中所述合并电路通过基于所述部分结果执行一个或更多个加法运算来将所述部分结果组合成所述一个或更多个中间结果。
7.根据条款1至6中任一项所述的系统,还包括第一遍历引擎。
8.根据条款1至7中任一项所述的系统,还包括第二遍历引擎,所述第二遍历引擎使用来自所述第一矩阵的所述数据填充所述第一缓冲存储器。
9.根据条款1至8中任一项所述的系统,其中来自所述第一矩阵的所述数据包括来自所述第一矩阵的一个或更多个列。
10.根据条款1至9中任一项所述的系统,其中来自所述第二矩阵的所述数据包括所述第二矩阵的矩形区域。
11.在一些实施例中,一种计算机实现的方法,用于基于第一矩阵和第二矩阵执行一个或更多个矩阵乘法运算,所述方法包括:从第一遍历引擎接收与所述第一矩阵相关联的数据,所述第一遍历引擎经由第一树结构访问包括在所述第一矩阵中的非零元素;对与所述第一矩阵相关联的所述数据和与所述第二矩阵相关联的所述数据执行一个或更多个计算以产生多个部分结果;将所述多个部分结果组合成一个或更多个中间结果;以及将所述一个或更多个中间结果存储在第一缓冲存储器中。
12.根据条款11所述的计算机实现的方法,还包括:将来自所述第一缓冲存储器的所述一个或更多个中间结果组合成所述一个或更多个矩阵乘法运算的最终结果。
13.根据条款11或12所述的计算机实现的方法,进一步执行从第二缓冲存储器检索与所述第二矩阵相关联的所述数据的多播操作。
14.根据条款11至13中任一项所述的计算机实现的方法,还包括:通过执行第二遍历引擎来检索与所述第二矩阵相关联的所述数据,所述第二遍历引擎经由第二树结构访问包括在所述第二矩阵中的非零元素的一个或更多个区域。
15.根据条款11至14中任一项所述的计算机实现的方法,其中第一树结构包括:第一多个节点,所述第一多个节点与所述第一矩阵中的第一多个非空区域相对应,其中所述第一多个节点包括表示第一区域的第一节点和作为所述第一节点的子节点并且表示具有相同尺寸并且形成在所述第一区域内的一个或更多个第二区域的一个或更多个第二节点,以及第二多个节点,所述第二多个节点与形成在所述一个或更多个第二区域中包括的至少一个区域内的第二多个非空区域相对应,其中所述第二多个非空区域包括表示第三区域的第三节点和作为所述第三节点的子节点并且表示具有基本相等数量的非零矩阵值并且形成在所述第三区域内的一个或更多个第四区域的一个或更多个第四节点。
16.根据条款11至15中任一项所述的计算机实现的方法,其中所述第一遍历引擎通过以下操作访问包括在所述第一矩阵中的所述非零元素:将作为所述第一树结构中的给定节点的子节点的一个或更多个节点添加到节点堆栈;从所述节点堆栈检索第五节点;确定由所述第五节点表示的第五区域与包括在查询中的感兴趣区域重叠;以及将由作为所述第一树结构中的所述第五节点的子节点的第六节点表示的有效负载区域添加到所述非零元素。
17.根据条款11至16中任一项所述的计算机实现的方法,其中所述第一树结构还包括与所述第一矩阵内的多个有效负载区域相对应的多个叶节点,并且其中包括在所述多个有效负载区域中的每个有效负载区域以压缩稀疏矩阵格式存储所述非零元素的子集。
18.根据条款11至17中任一项所述的计算机实现的方法,其中对来自所述第一矩阵的所述数据和来自所述第二矩阵的所述数据执行所述一个或更多个计算以产生所述多个部分结果包括:将来自所述第一矩阵的所述数据存储在第一暂存存储器中;将来自所述第二矩阵的所述数据存储在第二暂存存储器中;以及经由乘法阵列对来自所述第一矩阵的所述数据和来自所述第二矩阵的所述数据执行所述一个或更多个计算。
19.根据条款11至18中任一项所述的计算机实现的方法,其中所述一个或更多个矩阵乘法运算包括来自所述第一矩阵的矩形区域与来自所述第二矩阵的一个或更多个列的矩阵乘法。
20.根据条款11至19中任一项所述的计算机实现的方法,其中所述一个或更多个计算由处理器的网格并行执行。
以任何方式记载在任何权利要求中的任何权利要求元素和/或本申请中描述的任何元素的任何和所有组合均落入所考虑的本发明和保护的范围内。
以任何方式记载在任何权利要求中的任何权利要求元素和/或本申请中描述的任何元素的任何和所有组合均落入所考虑的本发明和保护的范围内。
出于说明目的已经呈现了各个实施例的描述,但并不意图穷尽为或限制为所公开的实施例。在不偏离所述实施例的范围和精神的情况下,对于本领技术人员来讲,许多修改和变化将是显而易见的。
本实施例的方面可体现为系统、方法或计算机程序产品。因此,本公开的方面可采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或组合软件和硬件方面的实施例的形式,本文中全部统称为“模块”、“系统”或“计算机”。此外,本公开描述的任何硬件和/或软件技术、工艺、功能、组件、引擎、模块或系统都可以作为电路或一组电路实现。此外,本公开的方面可采用一种或更多种计算机可读介质中体现的计算机程序产品的形式,该计算机可读介质上包含计算机可读程序代码。
可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。例如,计算机可读存储介质包括但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或上述任何适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)可包括:具有一根或更多根电线的电气连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光纤、便携式光盘只读存储器(CD-ROM)、光存储设备、磁存储设备或上述任何合适的组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包括或存储程序,以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用。
本公开的方面参照根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图进行了描述。应理解,流程图和/或框图中的每个框,以及流程图和/或框图中的框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,以产生机器。该指令在由计算机或其他可编程数据处理装置的处理器执行时,使得能够实现流程图和/或框图的一个或更多个框中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定于应用程序的处理器或现场可编程门阵列。
图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这方面,流程图或框图中的每个框可以表示代码的模块、段或部分,代码包括用于实现一个或更多个指定逻辑功能的一个或更多个可执行指令。还应指出,在一些替代实施例中,框中指出的功能可不按图中指出的顺序发生。例如,连续显示的两个框实际上可以大致同时执行,或者这些框有时可以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图中的每个框,以及框图和/或流程图中框的组合,可以由基于专用硬件的系统实现,该基于专用硬件的系统执行指定功能或动作或专用硬件和计算机指令的组合。
虽然前述内容是针对本公开的实施例,本公开的其他和进一步实施例可以在不偏离其基本范围的情况下设计,其范围由所附权利要求确定。
Claims (20)
1.一种系统,包括:
第一缓冲存储器,其存储第一矩阵的至少一部分;
耦合到所述第一缓冲存储器的处理器的网格,其中每个处理器包括在所述处理器的网格中:
经由所述第一缓冲存储器从所述第一矩阵接收数据;
经由第一遍历引擎从第二矩阵接收数据,所述第一遍历引擎在操作期间经由树结构访问包括在所述第二矩阵中的非零元素的一个或更多个区域;以及
对来自所述第一矩阵的数据和来自所述第二矩阵的数据执行一个或更多个计算以产生部分结果;
合并电路,其将来自所述处理器的网格的部分结果组合成一个或更多个中间结果;以及
第二缓冲存储器,其存储所述一个或更多个中间结果。
2.根据权利要求1所述的系统,其中所述树结构包括与所述第一矩阵中的第一多个非空区域相对应的第一多个节点,并且其中所述第一多个节点包括表示第一区域的第一节点和作为所述第一节点的子节点并且表示具有相同尺寸并且形成在所述第一区域内的一个或更多个第二区域的一个或更多个第二节点。
3.根据权利要求1所述的系统,其中所述第一遍历引擎通过以下操作来访问所述非零元素的一个或更多个区域:
将作为所述树结构中的给定节点的子节点的一个或更多个节点添加到节点堆栈;
从所述节点堆栈检索第五节点;
确定由所述第五节点表示的第五区域与包括在所述第二矩阵中的感兴趣区域重叠;以及
将由作为所述树结构中的所述第五节点的子节点的第六节点表示的有效负载区域添加到所述非零元素的一个或更多个区域。
4.根据权利要求1所述的系统,其中经由多播操作接收来自所述第一矩阵的所述数据,所述多播操作将所述数据从所述第一缓冲存储器传输到包括在所述处理器的网格中的每个处理器。
5.根据权利要求1所述的系统,其中包括在所述处理器的网格中的每个处理器包括:第一暂存存储器,用于存储来自所述第一矩阵的数据;第二暂存存储器,用于存储来自所述第二矩阵的数据;以及乘法阵列,其对来自所述第一矩阵的数据和来自所述第二矩阵的数据执行所述一个或更多个计算。
6.根据权利要求1所述的系统,其中所述合并电路通过基于所述部分结果执行一个或更多个加法运算来将所述部分结果组合成所述一个或更多个中间结果。
7.根据权利要求1所述的系统,还包括所述第一遍历引擎。
8.根据权利要求1所述的系统,还包括第二遍历引擎,所述第二遍历引擎使用来自所述第一矩阵的所述数据填充所述第一缓冲存储器。
9.根据权利要求1所述的系统,其中来自所述第一矩阵的所述数据包括来自所述第一矩阵的一个或更多个列。
10.根据权利要求1所述的系统,其中来自所述第二矩阵的所述数据包括所述第二矩阵的矩形区域。
11.一种计算机实现的方法,用于基于第一矩阵和第二矩阵执行一个或更多个矩阵乘法运算,所述方法包括:
从第一遍历引擎接收与所述第一矩阵相关联的数据,所述第一遍历引擎经由第一树结构访问包括在所述第一矩阵中的非零元素;
对与所述第一矩阵相关联的所述数据和与所述第二矩阵相关联的所述数据执行一个或更多个计算以产生多个部分结果;
将所述多个部分结果组合成一个或更多个中间结果;以及
将所述一个或更多个中间结果存储在第一缓冲存储器中。
12.根据权利要求11所述的计算机实现的方法,还包括:将来自所述第一缓冲存储器的所述一个或更多个中间结果组合成所述一个或更多个矩阵乘法运算的最终结果。
13.根据权利要求11所述的计算机实现的方法,进一步执行从第二缓冲存储器检索与所述第二矩阵相关联的所述数据的多播操作。
14.根据权利要求11所述的计算机实现的方法,还包括:通过执行第二遍历引擎来检索与所述第二矩阵相关联的所述数据,所述第二遍历引擎经由第二树结构访问包括在所述第二矩阵中的非零元素的一个或更多个区域。
15.根据权利要求11所述的计算机实现的方法,其中所述第一树结构包括:
第一多个节点,所述第一多个节点与所述第一矩阵中的第一多个非空区域相对应,其中所述第一多个节点包括表示第一区域的第一节点和作为所述第一节点的子节点并且表示具有相同尺寸并且形成在所述第一区域内的一个或更多个第二区域的一个或更多个第二节点,以及
第二多个节点,所述第二多个节点与形成在所述一个或更多个第二区域中包括的至少一个区域内的第二多个非空区域相对应,其中所述第二多个非空区域包括表示第三区域的第三节点和作为所述第三节点的子节点并且表示具有基本相等数量的非零矩阵值并且形成在所述第三区域内的一个或更多个第四区域的一个或更多个第四节点。
16.根据权利要求15所述的计算机实现的方法,其中所述第一遍历引擎通过以下操作访问包括在所述第一矩阵中的所述非零元素:
将作为所述第一树结构中的给定节点的子节点的一个或更多个节点添加到节点堆栈;
从所述节点堆栈检索第五节点;
确定由所述第五节点表示的第五区域与包括在查询中的感兴趣区域重叠;以及
将由作为所述第一树结构中的所述第五节点的子节点的第六节点表示的有效负载区域添加到所述非零元素。
17.根据权利要求15所述的计算机实现的方法,其中所述第一树结构还包括与所述第一矩阵内的多个有效负载区域相对应的多个叶节点,并且其中包括在所述多个有效负载区域中的每个有效负载区域以压缩稀疏矩阵格式存储所述非零元素的子集。
18.根据权利要求11所述的计算机实现的方法,其中对来自所述第一矩阵的所述数据和来自所述第二矩阵的所述数据执行所述一个或更多个计算以产生所述多个部分结果包括:
将来自所述第一矩阵的所述数据存储在第一暂存存储器中;
将来自所述第二矩阵的所述数据存储在第二暂存存储器中;以及
经由乘法阵列对来自所述第一矩阵的所述数据和来自所述第二矩阵的所述数据执行所述一个或更多个计算。
19.根据权利要求11所述的计算机实现的方法,其中所述一个或更多个矩阵乘法运算包括来自所述第一矩阵的矩形区域与来自所述第二矩阵的一个或更多个列的矩阵乘法。
20.根据权利要求11所述的计算机实现的方法,其中所述一个或更多个计算由处理器的网格并行执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/325,120 | 2021-05-19 | ||
US17/325,120 US20220374496A1 (en) | 2021-05-19 | 2021-05-19 | Techniques for accelerating matrix multiplication computations using hierarchical representations of sparse matrices |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115374396A true CN115374396A (zh) | 2022-11-22 |
Family
ID=84060154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210515300.8A Pending CN115374396A (zh) | 2021-05-19 | 2022-05-11 | 用于使用稀疏矩阵的分层表示来加速矩阵乘法计算的技术 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20220374496A1 (zh) |
CN (1) | CN115374396A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118113978A (zh) * | 2024-04-03 | 2024-05-31 | 中国人民解放军国防科技大学 | 一种大型复数稀疏矩阵向量乘加速计算的数据处理方法 |
WO2024179326A1 (zh) * | 2023-02-27 | 2024-09-06 | 华为技术有限公司 | 数据处理方法、装置、处理器、计算机设备和系统 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220382829A1 (en) * | 2021-05-25 | 2022-12-01 | Google Llc | Sparse matrix multiplication in hardware |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11301545B2 (en) * | 2019-07-11 | 2022-04-12 | Facebook Technologies, Llc | Power efficient multiply-accumulate circuitry |
US11429394B2 (en) * | 2020-08-19 | 2022-08-30 | Meta Platforms Technologies, Llc | Efficient multiply-accumulation based on sparse matrix |
-
2021
- 2021-05-19 US US17/325,120 patent/US20220374496A1/en active Pending
-
2022
- 2022-05-11 CN CN202210515300.8A patent/CN115374396A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024179326A1 (zh) * | 2023-02-27 | 2024-09-06 | 华为技术有限公司 | 数据处理方法、装置、处理器、计算机设备和系统 |
CN118113978A (zh) * | 2024-04-03 | 2024-05-31 | 中国人民解放军国防科技大学 | 一种大型复数稀疏矩阵向量乘加速计算的数据处理方法 |
CN118113978B (zh) * | 2024-04-03 | 2024-08-09 | 中国人民解放军国防科技大学 | 一种大型复数稀疏矩阵向量乘加速计算的数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
US20220374496A1 (en) | 2022-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11715251B2 (en) | Neural network model trained using generated synthetic images | |
US11790609B2 (en) | Reducing level of detail of a polygon mesh to decrease a complexity of rendered geometry within a scene | |
US20200151288A1 (en) | Deep Learning Testability Analysis with Graph Convolutional Networks | |
US20220374496A1 (en) | Techniques for accelerating matrix multiplication computations using hierarchical representations of sparse matrices | |
EP3686816A1 (en) | Techniques for removing masks from pruned neural networks | |
US10614613B2 (en) | Reducing noise during rendering by performing parallel path space filtering utilizing hashing | |
US10762425B2 (en) | Learning affinity via a spatial propagation neural network | |
CN110880203A (zh) | 场景中对象的联合合成和放置 | |
CN111445581A (zh) | 使用数据驱动先验的网格重建 | |
US11379420B2 (en) | Decompression techniques for processing compressed data suitable for artificial neural networks | |
US7990380B2 (en) | Diffuse photon map decomposition for parallelization of global illumination algorithm | |
EP3678037A1 (en) | Neural network generator | |
CN114970803A (zh) | 对数系统中的机器学习训练 | |
US20190278574A1 (en) | Techniques for transforming serial program code into kernels for execution on a parallel processor | |
US20230062503A1 (en) | Pruning and accelerating neural networks with hierarchical fine-grained structured sparsity | |
US11709812B2 (en) | Techniques for generating and processing hierarchical representations of sparse matrices | |
US20220374961A1 (en) | Techniques for performing matrix computations using hierarchical representations of sparse matrices | |
US11925860B2 (en) | Projective hash maps | |
US11908064B2 (en) | Accelerated processing via a physically based rendering engine | |
US20240111532A1 (en) | Lock-free unordered in-place compaction | |
US11830123B2 (en) | Accelerated processing via a physically based rendering engine | |
US11704860B2 (en) | Accelerated processing via a physically based rendering engine | |
US11875444B2 (en) | Accelerated processing via a physically based rendering engine | |
US20240256153A1 (en) | Memory page access instrumentation | |
US20230297643A1 (en) | Non-rectangular matrix computations and data pattern processing using tensor cores |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |