CN111191784A - 转置的稀疏矩阵乘以稠密矩阵用于神经网络训练 - Google Patents
转置的稀疏矩阵乘以稠密矩阵用于神经网络训练 Download PDFInfo
- Publication number
- CN111191784A CN111191784A CN201910467136.6A CN201910467136A CN111191784A CN 111191784 A CN111191784 A CN 111191784A CN 201910467136 A CN201910467136 A CN 201910467136A CN 111191784 A CN111191784 A CN 111191784A
- Authority
- CN
- China
- Prior art keywords
- matrix
- sparse matrix
- sparse
- product
- computer
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了转置的稀疏矩阵乘以稠密矩阵用于神经网络训练。实现神经网络的机器学习系统通常以推理模式或训练模式操作。在训练模式中,执行推理操作以帮助指导训练过程。推理模式操作通常涉及向前传播和对被编码为一组向量的某些稀疏矩阵的密集访问。反向传播和对相同稀疏矩阵的转置版本的密集访问提供了训练改进。生成稀疏矩阵的转置版本可能消耗大量额外的存储器和计算资源。在一个实施例中,生成两个附加编码向量,提供对稀疏矩阵和同一稀疏矩阵的转置表示的高效操作。在神经网络中,有效的操作可以减少反向传播所需的存储器量并降低功耗。
Description
技术领域
本公开涉及矩阵运算,并且更具体地涉及转置的稀疏矩阵乘以稠密矩阵用于神经网络训练。
背景技术
机器学习中的训练和推理操作通常涉及对大矩阵的乘法运算。一些矩阵是稀疏的并且可以以压缩格式存储,以相对于未压缩的存储格式显著降低总体存储器利用率。但是,访问压缩的稀疏矩阵中的数据元素会引入额外的计算工作,从而降低整体系统性能和效率。因此,需要解决与现有技术相关的这些问题和/或其他问题。
附图说明
图1A示出了根据一个实施例的神经网络的框图。
图1B示出了根据一个实施例的用于确定乘积矩阵中的位置的方法的流程图。
图1C示出了根据一个实施例的用于计算和存储稀疏参数更新矩阵的方法的流程图。
图1D示出了根据一个实施例的用于计算稀疏参数更新矩阵的方法的流程图。
图1E示出了根据一个实施例的示例性稀疏矩阵和相关编码向量。
图1F示出了根据一个实施例的指示乘积矩阵中的项累积位置的编码向量。
图2A示出了根据一个实施例的用于初始化稀疏矩阵编码函数的示例性代码块。
图2B示出了根据一个实施例的用于稀疏矩阵编码函数的示例性代码块。
图2C示出了根据一个实施例的用于调用稀疏矩阵编码函数的示例性代码块。
图3示出了根据一个实施例的并行处理单元。
图4A示出了根据一个实施例的图3的并行处理单元内的通用处理集群。
图4B示出了根据一个实施例的图3的并行处理单元的存储器分区单元。
图5A示出了根据一个实施例的图4A的流式多处理器。
图5B是根据一个实施例的使用图3的PPU实现的处理系统的概念图。
图5C示出了可以实现各种先前实施例的各种架构和/或功能的示例性系统。
详细描述
在一个实施例中,提供稀疏矩阵(sparse matrix)的编码,用于对稀疏矩阵和稀疏矩阵的转置表示两者有效地执行运算。这些应用包括但不限于使用给定稀疏矩阵执行训练和推理操作两者的机器学习系统。在一个实施例中,编码补充了具有附加索引映射的压缩稀疏行(CSR)矩阵格式,以消除对矩阵转置运算的需要,例如在神经网络系统中的后向传播期间。传统的稀疏矩阵转置运算(加载操作和存储操作)要求分配的存储器大约等于输入矩阵中的非零值数目的两倍。相反,在一个实施例中,需要较少的存储(非零值的1倍大小,而传统技术为2倍大小)以执行本文公开的技术。
图1A示出了根据一个实施例的神经网络100的框图。尽管在处理单元的上下文中描述了神经网络100,但是神经网络100的一个或更多个子单元可以实现为程序、定制电路或者定制电路和程序的组合。例如,神经网络100或神经网络100的一个或更多个子单元可以由GPU(图形处理单元)、 CPU(中央处理单元)或能够实现各自功能的任何处理器实现。在一个实施例中,图3的并行处理单元(PPU)300配置成实现神经网络100。此外,本领域普通技术人员将理解,执行神经网络100的操作的任何系统都在本公开的实施例的精神和范围内。
如图所示,神经网络100包括一组m个层120、一组权重125、权重更新函数115、索引映射函数105、损失函数135和校正函数140。在一个实施例中,每个层120包括配置成在神经网络100的给定评估深度内操作的节点的集合。该组权重125可以包括被配置成存储权重矩阵w1至wm的存储器子系统中的存储电路和/或存储器分配。在一个实施例中,权重更新函数115可以包括被配置成存储w的更新权重值以及值(到)的存储电路和/或存储器分配。在一个实施例中,可以将权重更新函数115写入或复制到权重集125,例如在训练之后。此外,在一个实施例中,权重更新函数115可以为每一层120计算新的权重矩阵。
在一个实施例中,神经网络100可以配置成在训练模式和推理模式两者下操作。当神经网络100以推理模式操作时,层120从稀疏激活输入矩阵x计算特征y和/或从先前层120计算特征y,以及从一组权重125计算输入权重矩阵w。在一个实施例中,层120(1)基于一个或更多个稀疏激活输入矩阵x1和输入权重矩阵w1生成特征y2。在一个实施例中,层120 (2)通过一组附加层120基于特征y2和输入权重矩阵w2生成特征y3,诸如此类,以产生神经网络输出ym。在一个实施例中,稀疏激活输入矩阵 x以例如CSR格式的压缩格式表示。
当神经网络100在训练模式下操作时,层120根据推理模式计算来计算输出特征y以生成神经网络输出ym。此外,在一个实施例中,通过损失函数135将神经网络输出ym与期望输出132(例如,真值(ground truth)) 进行比较以生成损失值L。损失函数135可以实现任何技术上可行的损失函数,诸如各个误差函数的总和、距离函数的总和等。在一个实施例中,损失函数135包括欧几里德距离函数。还可以将损失函数135计算为误差函数或成本函数。
校正函数140生成差值信号校正函数140可以考虑损失值L相对于输出(诸如y)的梯度。在一个实施例中,损失值L用于通过层120 计算反向传播路径的输入为其中L是根据损失函数135计算的损失,并且是L相对于yi的导数。在一个实施例中,在训练期间,通过层 120反向传播,使由层120对x1执行的操作反转。在一个实施例中,将层120的输出计算为对于具有输入x1和w1的第一层120(1),在一个实施例中,特征y2和转置输入用于计算也稀疏的在一个实施例中,权重更新函数115计算并更新每个权重:其中η是学习速率。
如图1A所示,未压缩的稀疏激活输入矩阵x'1由索引映射函数105 处理,以生成补充压缩的稀疏激活输入矩阵x1的两个附加向量130。生成附加向量130在图2B中示出。在一个实施例中,权重更新函数115使用附加向量130来有效地访问(例如,以行主要顺序)代表相应的稀疏激活输入矩阵x1的转置版本的一个或更多个转置输入矩阵在一个实施例中,为了计算以行主要顺序读取稀疏激活输入矩阵x1。附加向量的第一向量通过指示应当写入的压缩表示中的哪些行位置来使能的压缩。附加向量的第二向量指定包含至少一个非零值的稀疏激活输入矩阵 x1的列(或行)的索引,并且使能有效地解压缩以更新权重矩阵w的参数。
在一个实施例中,神经网络100包括利用至少一个稀疏矩阵(例如, x1)和稀疏矩阵的相应转置版本(例如,)的系统。神经网络100可以使用至少一个稀疏矩阵(x1)和相应的转置版本在训练和推理操作之间交替变化。虽然在神经网络100的上下文中描述了各种实施例,但是使用和/或访问稀疏矩阵和使用两个附加向量130的相同稀疏矩阵的转置版本的其他系统均在各种实施例的范围和精神内。注意,可以以相同的顺序读取输入数据以用于前向(推理)和后向(学习)传播。此外,通过附加向量130明确地提供要更新的矩阵中的元素的位置,从而实现关于矩阵的有效压缩、解压缩和访问。
图1B示出了根据一个实施例的用于确定乘积矩阵中的位置的方法 150的流程图。尽管在神经网络100的上下文中描述了方法150,但是方法 150也可以由程序、定制电路或定制电路和程序的组合来执行。在一个实施例中,方法150可以由GPU(图形处理单元)、CPU(中央处理单元)、专用神经网络处理单元或者能够实现图1A的神经网络100和执行方法150的任何处理单元实现。在一个实施例中,图3的并行处理单元(PPU)300 配置成执行方法150。此外,本领域普通技术人员将理解,执行方法150 的任何系统都在本公开的实施例的范围和精神内。
在步骤151中,至少部分地基于标识元素的稀疏矩阵输入图,使得对稀疏矩阵和稠密矩阵的元素执行一个或更多个乘法运算,在这些元素上将执行一个或更多个乘法运算。在一个实施例中,稀疏矩阵包括稀疏输入矩阵(例如,x1),并且索引映射函数105生成稀疏矩阵索引图(map)。在一个实施例中,稀疏矩阵索引图包括附加向量130。在一个实施例中,稀疏矩阵索引图指示稀疏矩阵的非零值的存储中的位置。
在步骤153中,根据稀疏矩阵索引图,将一个或更多个乘法运算的结果累加到一个或更多个相应的存储位置中。在一个实施例中,存储位置指示乘积矩阵中的元素。在一个实施例中,结果包括乘积矩阵。在一个实施例中,存储位置指示乘积矩阵中的元素。在一个实施例中,存储位置指示行/列,其指示乘积矩阵中的元素。在一个实施例中,结果是稀疏矩阵的转置版本与稠密矩阵之间的累加的乘积项。在一个实施例中,神经网络100 包括输入层和输出层,并且输出层是反向传播的起始点。在一个实施例中,存储位置包括DRAM存储器子系统内的分配区域。此外,存储位置可以包括在DRAM存储器子系统内的另一个分配区域。在一个实施例中,存储位置指示用于在乘积矩阵中存储元素的地址。
在一个实施例中,从存储位置读取稀疏输入矩阵的非零值以计算乘积矩阵而不执行矩阵转置操作。在一个实施例中,稠密矩阵是校正矩阵。在一个实施例中,y2是校正矩阵。在一个实施例中,在反向传播期间,乘积矩阵是稀疏参数更新矩阵,其通过将稀疏参数更新矩阵的乘积项累加到乘积矩阵的元素中,同时避免在稀疏输入矩阵上执行显式矩阵转置操作,被计算为校正矩阵和稀疏输入矩阵的转置版本的乘积。
图1C示出了根据一个实施例的用于计算和存储稀疏参数更新矩阵的方法160的流程图。尽管在神经网络100的上下文中描述了方法160,但是方法160还可以由程序、定制电路或定制电路和程序的组合来执行。在一个实施例中,方法160可以由GPU(图形处理单元)、CPU(中央处理单元)、专用神经网络处理单元或能够实现图1A的神经网络100和执行方法160的任何处理单元执行。在一个实施例中,图3的并行处理单元(PPU) 300配置成执行方法160。此外,本领域普通技术人员将理解,执行方法160 的任何系统都在本公开的实施例的范围和精神内。
在步骤161中,由神经网络100将参数矩阵应用于稀疏输入矩阵,以产生输出。在一个实施例中,神经网络100包括输入层和输出层,其中输入层接收参数矩阵和稀疏输入矩阵,输出层生成输出。在一个实施例中,神经网络100由图3的PPU 300实现。
在一个实施例中,参数矩阵包括图1A的权重矩阵w(例如,权重矩阵w1到wm),并且稀疏输入矩阵可以包括稀疏输入矩阵(例如,x1)。此外,在一个实施例中,输出可以包括特征y和/或输出ym。在步骤163中,神经网络100根据损失函数(例如,损失函数135)处理输出,以产生校正矩阵,以减小输出和真值输出之间的差异。在一个实施例中,损失函数包括距离函数的总和。
在步骤165中,神经网络100从稀疏输入矩阵读取非零值以计算稀疏参数更新矩阵。在一个实施例中,稀疏参数更新矩阵是结果。在步骤151 中,计算稀疏参数更新矩阵。在一个实施例中,在步骤151计算的稀疏参数更新矩阵等效于校正矩阵和转置的稀疏输入矩阵的乘积,而无需执行矩阵转置操作。在一个实施例中,稀疏输入矩阵中的非零值通过稀疏输入矩阵的CSR编码来标识;此外,通过CSR编码标识要访问的乘积项的位置,其由两个附加向量130补充。
在一个实施例中,神经网络100处理稀疏输入矩阵以生成指示被写入的稀疏参数更新矩阵中的位置的第一向量。在一个实施例中,根据图2B 的子块224计算第一向量(col_to_nzcol)。在步骤153中,将结果累加到存储位置。在一个实施例中,神经网络100存储包括值的稀疏参数更新矩阵的压缩格式。在一个实施例中,仅访问存储位置以存储稀疏参数更新矩阵的累加的乘积项。
图1D示出了根据一个实施例的用于计算稀疏参数更新矩阵的方法 170的流程图。尽管在处理单元的上下文中描述了方法170,但是方法170 还可以由程序、定制电路或定制电路和程序的组合来执行。在一个实施例中,方法170可以由GPU(图形处理单元)、CPU(中央处理单元)、专用神经网络处理单元或能够实现图1A的神经网络100和执行方法170的任何处理单元执行。在一个实施例中,图3的并行处理单元(PPU)300配置成执行方法170。此外,本领域普通技术人员将理解,执行方法170的任何系统都在本公开的实施例的范围和精神内。
在一个实施例中,神经网络100计算第二向量,该第二向量指示稀疏输入矩阵中包含至少一个非零值的列的数目。在一个实施例中,通过编码包括第一向量和第二向量的向量来识别非零值。在一个实施例中,根据图2B的子块224计算第二向量(nzcol_indices)。在一个实施例中,生成第二向量,其指示包含至少一个非零值的稀疏输入矩阵中列的索引。
在步骤173中,神经网络100基于第二向量解压缩稀疏参数更新矩阵的压缩格式,以生成稀疏参数更新矩阵。在一个实施例中,稀疏参数矩阵的压缩格式仅包括非零值。在一个实施例中,稀疏参数矩阵的压缩格式仅包括乘积矩阵的非零值。
在步骤175中,神经网络100通过组合参数矩阵和学习速率(η) 与稀疏参数更新矩阵的乘积来更新参数矩阵。在一个实施例中,使用编码向量识别用于计算乘积的矩阵项。在一个实施例中,从参数矩阵中减去乘积。
现在将根据用户的期望,阐述更多关于可以实现前述框架的各种可选架构和特征的说明性信息。应该强烈注意的是,出于说明性目的阐述了以下信息,并且不应该被解释为以任何方式进行限制。可以选择性的并入以下特征中的任意一个或者不排除所描述的其他特征。
图1E示出了根据一个实施例的示例性稀疏矩阵180和相关联的编码向量182、184。如图所示,示例性稀疏矩阵180包括在编码向量182的数据向量[11,22,33,4,55,6,7,8,9]中列出的非零值。此外,编码向量182提供示例性稀疏矩阵180的常规CSR编码,其中行指针向量(row_ptr) 提供数据向量中的特定元素与示例性矩阵180内的行之间的关联,列索引向量(col_ind)提供数据向量中的特定元素和示例性矩阵180内的列之间的关联。
行指针向量中的顺序元素将给定数据元素标识为示例性稀疏矩阵 180内的后续行中的第一非零数据元素。例如,row_ptr[0]等于0,指示存储在data[0]处的数据与行号0相关联,row_ptr[1]等于2,指示存储在data [1]处的数据与行号0相关,存储在data[2]处的数据与下一行(行号1)相关联。这是将data[0]和data[1]放在第0行,将data[2]放在第1行的充分信息。列索引向量中的顺序元素指示相应的数据元素的列号。例如,col_ind [0]等于1,指示对应的数据元素[0]在示例性稀疏矩阵180的列1中,以及 col_ind[7]等于4,指示数据[7]在列4中。
编码向量184包括图1A的两个附加向量130。这些包括非零列索引向量(nzcol_indices)和非零列向量(col_to_nzcol)的列。nzcol_indices向量指定图1A中包含至少一个非零值的稀疏输入矩阵x1的列(或行)的索引,并且使能有效地解压缩以更新权重矩阵w的参数。col_to_nzcol向量通过指示应写入的压缩表示中的哪些行位置来使能的压缩。使用图 2A-图2C中的示例性Python代码示出了计算编码向量182和184。编码向量182和184一起包括稀疏矩阵180的压缩表示。
图1F示出了根据一个实施例的指示乘积矩阵中的项累积位置的编码向量。如图所示,转置矩阵185是稀疏矩阵180的转置。当在转置矩阵185 和第二矩阵(例如,稠密矩阵)之间执行矩阵乘法运算以产生乘积矩阵时,编码向量col_to_nzcol指示乘积矩阵中非零数据条目应累加到其中的列。例如,数据条目{22,33,4,6}应全部累积到乘积矩阵的第2列中。以这种方式,编码向量col_to_nzcol将在数据向量内任意分布的数据项重新关联到转置矩阵185的公共行,并因此重新关联到公共列以用于在乘积矩阵中累积。在一个实施例中,基于编码向量col_to_nzcol条目,通过读取由编码向量col_to_nzcol中的条目标识的索引项,生成相应的乘积项和在乘积矩阵中累加乘积项,来计算包括用于转置矩阵185乘以稠密矩阵的乘积矩阵的乘积项的矩阵乘法。乘积项可以顺序或并行生成。注意,实际生成或存储转置矩阵185对于执行矩阵乘法运算不是必需的,因为可以使用编码向量182 和184来识别和检索来自稀疏矩阵180的数据条目,并且还可以使用编码向量184确定乘积矩阵中的目的地位置。具体地,通过使用编码向量184 来确定乘积矩阵中用于累积乘积项的位置,避免了执行显式转置操作以生成转置矩阵185。
图2A示出了根据一个实施例的用于初始化稀疏矩阵编码函数的示例性代码块210。在一个实施例中,图3的并行处理单元(PPU)300配置成执行示例性代码块210的计算。如图所示,示例性代码块210定义稠密到稀疏矩阵函数并初始化变量,包括编码向量182、184,以及输入矩阵的行数目(num_row)和列数目(num_col)。
图2B示出了根据一个实施例的用于稀疏矩阵编码函数的示例性代码块220。在一个实施例中,图3的并行处理单元(PPU)300配置成执行示例性代码块220的计算。如图所示,示例性代码块220包括子块222和子块224。子块222计算包括传统CSR稀疏矩阵表示的编码向量182,而子块224计算包括图1A的补充的两个附加向量130的编码向量184。特别地,子块224计算nzcol_indices和col_to_nzcol向量。如图所示,将 nzcol_indices生成为来自列索引列表(col_has_nz)的一组唯一列索引,每个列索引标识具有非零行条目的列。
图2C示出了根据一个实施例的用于调用稀疏矩阵编码函数的示例性代码块230。在一个实施例中,图3的并行处理单元(PPU)300配置成执行示例性代码块230的计算。如图所示,示例性代码块230定义样本矩阵,将样本矩阵转换为包括一组向量(编码向量182,184)的稀疏矩阵表示,然后打印编码向量。
示例性代码块210-230示出了根据本公开的用于生成稀疏矩阵表示的操作。其任何实现都在各种实施例的范围和精神内。
索引映射提供稀疏矩阵的编码,用于有效地对稀疏矩阵和稀疏矩阵的转置表示两者执行运算。这些应用包括但不限于使用给定的稀疏矩阵执行训练和推理操作的机器学习系统。在一个实施例中,例如在神经网络系统中的反向传播期间,基于索引映射的矩阵编码消除了对矩阵转置操作的需要。因此,减少了存储权重和传送矩阵数据以更新权重所需的存储量。
并行处理架构
图3示出了根据一个实施例的并行处理单元(PPU)300。在一个实施例中,PPU 300是在一个或更多个集成电路器件上实现的多线程处理器。 PPU 300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 300执行的指令集的实例。在一个实施例中, PPU 300是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD) 设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
一个或更多个PPU 300可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 300可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等。
如图3所示,PPU 300包括输入/输出(I/O)单元305、前端单元315、调度器单元320、工作分配单元325、集线器330、交叉开关(Xbar)370、一个或更多个通用处理集群(GPC)350以及一个或更多个分区单元380。 PPU 300可以经由一个或更多个高速NVLink 310互连连接到主机处理器或其他PPU 300。PPU 300可以经由互连302连接到主机处理器或其他外围设备。PPU 300还可以连接到包括多个存储器设备304的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个 DRAM裸晶(die)堆叠在每个设备内。
NVLink 310互连使得系统能够扩展并且包括与一个或更多个CPU 结合的一个或更多个PPU 300,支持PPU 300和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 310通过集线器330发送到PPU 300的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 310。
I/O单元305被配置为通过互连302从主机处理器(未示出)发送和接收通信(即,命令、数据等)。I/O单元305可以经由互连302直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,I/O单元305可以经由互连302与一个或更多个其他处理器(例如,一个或更多个PPU 300)通信。在一个实施例中,I/O 单元305实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连302是PCIe总线。在替代的实施例中,I/O单元305可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元305对经由互连302接收的分组进行解码。在一个实施例中,分组表示被配置为使PPU 300执行各种操作的命令。I/O单元305按照命令指定将解码的命令发送到PPU300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或PPU 300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元305被配置为在PPU 300 的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 300提供工作负载用于处理。工作负载可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU 300两者访问(即,读/写)的区域。例如,I/O单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到PPU 300的各个单元。
前端单元315耦合到调度器单元320,其配置各种GPC 350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个GPC 350上的多个任务的执行。
调度器单元320耦合到工作分配单元325,其被配置为分派任务以在 GPC 350上执行。工作分配单元325可以跟踪从调度器单元320接收到的多个调度任务。在一个实施例中,工作分配单元325为每个GPC 350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个时隙 (例如,32个时隙),其包含被指派为由特定GPC 350处理的任务。活动任务池可以包括多个时隙(例如,4个时隙),用于正在由GPC 350主动处理的任务。当GPC350完成任务的执行时,该任务从GPC 350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在 GPC 350上执行。如果GPC 350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 350上执行。
工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC 350通信。XBar370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的GPC 350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。
任务由调度器单元320管理并由工作分配单元325分派给GPC 350。 GPC 350被配置为处理任务并生成结果。结果可以由GPC 350内的其他任务消耗,经由XBar 370路由到不同的GPC 350,或者存储在存储器304中。结果可以经由分区单元380写入存储器304,分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。结果可以通过 NVLink310发送到另一个PPU 304或CPU。在一个实施例中,PPU 300包括数目为U的分区单元380,其等于耦合到PPU 300的独立且不同的存储器设备304的数目。下面将结合图4B更详细地描述分区单元380。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 300上执行。在一个实施例中,多个计算机应用程序由PPU 300同时执行,并且PPU 300为多个计算机应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(即API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 300执行。驱动程序内核将任务输出到正在由PPU 300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图5A更详细地描述线程和协作线程。
图4A示出了根据一个实施例的图3的PPU 300的GPC 350。如图 4A所示,每个GPC350包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 350包括管线管理器410、预光栅操作单元(PROP)415、光栅引擎425、工作分配交叉开关(WDX)480、存储器管理单元(MMU) 490以及一个或更多个数据处理集群(DPC)420。应当理解,图4A的GPC 350可以包括代替图4A中所示单元的其他硬件单元或除图4A中所示单元之外的其他硬件单元。
在一个实施例中,GPC 350的操作由管线管理器410控制。管线管理器410管理用于处理分配给GPC 350的任务的一个或更多个DPC 420的配置。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420 中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 420可以被配置为在可编程流式多处理器(SM)440上执行顶点着色程序。管线管理器410还可以被配置为将从工作分配单元325接收的分组路由到GPC 350 中适当的逻辑单元。例如,一些分组可以被路由到PROP 415和/或光栅引擎425中的固定功能硬件单元,而其他分组可以被路由到DPC 420以供图元引擎435或SM 440处理。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个以实现神经网络模型和/或计算管线。
PROP单元415被配置为将由光栅引擎425和DPC 420生成的数据路由到光栅操作(ROP)单元,结合图4B更详细地描述。PROP单元415 还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎425包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎425的输出包括例如要由在DPC 420内实现的片段着色器处理的片段。
包括在GPC 350中的每个DPC 420包括M管线控制器(MPC)430、图元引擎435和一个或更多个SM 440。MPC 430控制DPC 420的操作,将从管线管理器410接收到的分组路由到DPC 420中的适当单元。例如,与顶点相关联的分组可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的分组可以被发送到SM 440。
SM 440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 440实现SIMD(单指令、多数据)体系架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在一个实施例中,SM 440实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5A更详细地描述SM 440。
MMU 490提供GPC 350和分区单元380之间的接口。MMU 490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图4B示出了根据一个实施例的图3的PPU 300的存储器分区单元 380。如图4B所示,存储器分区单元380包括光栅操作(ROP)单元450、二级(L2)高速缓存460和存储器接口470。存储器接口470耦合到存储器304。存储器接口470可以实现用于高速数据传输的32、64、128、1024 位数据总线等。在一个实施例中,PPU 300合并了U个存储器接口470,每对分区单元380有一个存储器接口470,其中每对分区单元380连接到对应的存储器设备304。例如,PPU 300可以连接到多达Y个存储器设备304,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口470实现HBM2存储器接口,并且Y 等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 300相同的物理封装上,提供与常规GDDR5SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于 4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024 位的数据总线宽度。
在一个实施例中,存储器304支持单错校正双错检测(SECDED) 纠错码(ECC)以保护数据。对于对数据损毁敏感的计算机应用程序,ECC 提供了更高的可靠性。在大型集群计算环境中,可靠性尤其重要,其中PPU 300处理非常大的数据集和/或长时间运行应用程序。
在一个实施例中,PPU 300实现多级存储器分层结构。在一个实施例中,存储器分区单元380支持统一存储器以为CPU和PPU 300存储器提供单个统一的虚拟地址空间,使能虚拟存储器系统之间的数据共享。在一个实施例中,由PPU 300对位于其他处理器上的存储器的访问频率被跟踪,以确保存储器页面被移动到更频繁地访问页面的PPU 300的物理存储器。在一个实施例中,NVLink 310支持地址转换服务,其允许PPU 300直接访问CPU的页表并且提供由PPU 300对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 300之间或在PPU 300与CPU 之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元380可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(即,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器304或其他系统存储器的数据可以由存储器分区单元 380取回并存储在L2高速缓存460中,L2高速缓存460位于芯片上并且在各个GPC 350之间共享。如图所示,每个存储器分区单元380包括与对应的存储器设备304相关联的L2高速缓存460的一部分。然后可以在GPC 350 内的多个单元中实现较低级高速缓存。例如,每个SM 440可以实现一级(L1) 高速缓存。L1高速缓存是专用于特定SM 440的专用存储器。来自L2高速缓存460的数据可以被获取并存储在每个L1高速缓存中,以在SM 440的功能单元中进行处理。L2高速缓存460被耦合到存储器接口470和XBar 370。
ROP单元450执行与像素颜色相关的图形光栅操作,诸如颜色压缩、像素混合等。ROP单元450还与光栅引擎425一起实现深度测试,从光栅引擎425的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元450更新深度缓冲区并将深度测试的结果发送给光栅引擎425。将理解的是,分区单元380的数量可以不同于GPC 350的数量,并且因此每个ROP单元450可以耦合到每个GPC 350。ROP 单元450跟踪从不同GPC 350接收到的分组并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC 350。尽管ROP单元450包括在图 4B中的存储器分区单元380内,但是在其他实施例中,ROP单元450可以在存储器分区单元380之外。例如,ROP单元450可以驻留在GPC 350或另一个单元中。
图5A示出了根据一个实施例的图4A的流式多处理器440。如图5A 所示,SM 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元 (SFU)552、一个或更多个加载/存储单元(LSU)554、互连网络580、共享存储器/L1高速缓存570。
如上所述,工作分配单元325调度任务以在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,并且如果任务与着色器程序相关联,则该任务可以被分配给SM 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32 个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、SFU 552和LSU554)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏 (barrier)(即,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(即,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作伙伴并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元515被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元510包括两个分派单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个分派单元515或附加分派单元515。
每个SM 440包括寄存器文件520,其提供用于SM 440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在一个实施例中,寄存器文件520在由SM 440执行的不同线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储。
每个SM 440包括L个处理核心550。在一个实施例中,SM 440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心550包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A ×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA 9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 440还包括执行特殊函数(例如,属性评估、倒数平方根等) 的M个SFU552。在一个实施例中,SFU 552可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU 552可以包括被配置为执行纹理贴图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器304加载纹理贴图(例如,纹理像素的2D阵列)并且对纹理贴图进行采样以产生经采样的纹理值,用于在由SM 440执行的着色器程序中使用。在一个实施例中,纹理贴图被存储在共享存储器/L1高速缓存470 中。纹理单元实现纹理操作,诸如使用mip贴图(即,不同细节层次的纹理贴图)的过滤操作。在一个实施例中,每个SM 440包括两个纹理单元。
每个SM 440还包括N个LSU 554,其实现共享存储器/L1高速缓存 570和寄存器文件520之间的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、共享存储器/L1高速缓存570的互连网络580。在一个实施例中,互连网络 580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和共享存储器/L1高速缓存570中的存储器位置。
共享存储器/L1高速缓存570是片上存储器阵列,其允许数据存储和SM 440与图元引擎435之间以及SM 440中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存570包括128KB的存储容量并且在从 SM 440到分区单元380的路径中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存储器/L1高速缓存570、L2高速缓存460和存储器304中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存570内的集成使共享存储器/L1高速缓存570起到用于流式传输数据的高吞吐量管道的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给DPC 420。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 440执行程序并执行计算,使用共享存储器/L1高速缓存570以在线程之间通信,以及使用LSU 554 通过共享存储器/L1高速缓存570和存储器分区单元380读取和写入全局存储器。当被配置用于通用并行计算时,SM 440还可以写入调度器单元320 可用来在DPC 420上启动新工作的命令。
PPU 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理 (PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 300包含在单个半导体衬底上。在一个实施例中, PPU 300与一个或更多个其他器件(诸如附加PPU 300、存储器204、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备304。图形卡可以被配置为与台式计算机的主板上的 PCIe插槽接口。在又一个实施例中,PPU 300可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用 (诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加的带宽。
图5B是根据一个实施例的使用图3的PPU 300实现的处理系统500 的概念图。在一个实施例中,处理系统500可以被配置为实现图1B中所示的方法150。在一个实施例中,处理系统500可以被配置为实现图1C中所示的方法160。处理系统500包括CPU 530、交换机510和多个PPU 300 中的每一个以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU300和CPU 530的连接的数量可以改变。交换机 510在互连302和CPU 530之间接口。PPU300、存储器304和NVLink 310 可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 530 之间提供一个或更多个高速通信链路,并且交换机510在互连302和每个 PPU 300之间进行接口。PPU300、存储器304和互连302可以位于单个半导体平台上以形成并行处理模块525。在一个实施例(未示出)中,互连 302在每个PPU 300和CPU 530之间提供一个或更多个通信链路,并且交换机510使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300 之间提供一个或更多个高速通信链路。在一个实施例(未示出)中,NVLink 310在PPU 300和CPU 530之间通过交换机510提供一个或更多个高速通信链路。在一个实施例(未示出)中,互连302在每个PPU 300直接地提供一个或更多个通信链路。可以使用与NVLink 310相同的协议将一个或更多个NVLink 310高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且PPU 300和/或存储器304中的每一个可以是封装器件。在一个实施例中,CPU 530、交换机510和并行处理模块525位于单个半导体平台上。
在一个实施例中,每个NVLink 310的信令速率是20到25千兆位/ 秒,并且每个PPU300包括六个NVLink 310接口(如图5B所示,每个PPU 300包括五个NVLink 310接口)。每个NVLink 310在每个方向上提供25 千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当CPU 530 还包括一个或更多个NVLink 310接口时,NVLink 310可专门用于如图5B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 310允许从CPU 530到每个PPU 300的存储器304的直接加载/存储/原子访问。在一个实施例中,NVLink 310支持一致性操作,允许从存储器304读取的数据被存储在CPU 530的高速缓存分层结构中,减少了CPU 530的高速缓存访问延迟。在一个实施例中, NVLink 310包括对地址转换服务(ATS)的支持,允许PPU 300直接访问CPU 530内的页表。一个或更多个NVLink 310还可以被配置为以低功率模式操作。
图5C示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。在一个实施例中,示例性系统565可以被配置为实现图1B所示的方法150。示例性系统565可以被配置为实现图1C中所示的方法160。
如图所示,提供系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以使用任何合适的协议来实现,诸如PCI (外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取随机存取存储器(RAM)的形式。
系统565还包括输入设备560、并行处理系统525和显示设备545,即常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备560(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统565可以出于通信目的通过网络接口535耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统565还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB) 闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器540和/或辅助存储中。这些计算机程序在被执行时使得系统565能够执行各种功能。存储器540、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们只是作为示例而不是限制来提供的。因此,本申请的广度和范围不应受上述示例性实施例中的任何一个的限制,而应仅根据以下和之后提交的权利要求及其等同物来定义。
机器学习
在处理器(诸如PPU 300)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像标注到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在对象识别和分类方面进行训练,以便在识别基本对象、遮挡对象等同时还有为对象分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括多个层的许多连接节点(例如感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速、高精度地解决复杂问题。在一个示例中,DLL模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高层的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理 (inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别存入ATM机中的支票上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练低,其是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
在一个实施例中,用于给定神经网络(诸如,神经网络100)的训练和推理操作访问一个或更多个稀疏矩阵和一个或更多个稀疏矩阵的使用本文描述的稀疏矩阵编码的相应转置版本。具体地,稀疏矩阵编码可以包括编码向量182和编码向量184。
Claims (30)
1.一种计算机实现的方法,包括:
使得至少部分地基于稀疏矩阵索引图对稀疏矩阵和稠密矩阵的元素执行一个或更多个乘法运算,所述稀疏矩阵索引图标识要对其执行所述一个或更多个乘法运算的元素;以及
使得根据所述稀疏矩阵索引图,将所述一个或更多个乘法运算的结果累加到一个或更多个相应的存储位置中。
2.如权利要求1所述的计算机实现的方法,其中所述稀疏矩阵索引图包括用于所述稀疏矩阵的列或行的转置索引,以及所述存储位置是至少部分地使用所述转置索引而确定的。
3.如权利要求1所述的计算机实现的方法,其中所述结果包括乘积矩阵的元素,所述乘积矩阵等于所述稀疏矩阵的转置版本与所述稠密矩阵的乘积。
4.如权利要求1所述的计算机实现的方法,进一步包括:
由神经网络将参数矩阵应用到所述稀疏矩阵以产生输出;
根据损失函数处理所述输出以产生所述稠密矩阵,其中所述稠密矩阵减少所述输出和真值输出之间的差异;以及
读取所述稀疏矩阵的非零值以计算所述结果。
5.如权利要求4所述的计算机实现的方法,进一步包括通过组合所述参数矩阵和所述学习率与所述乘积矩阵的乘积来更新所述参数矩阵。
6.如权利要求5所述的计算机实现的方法,其中从所述参数矩阵中减去所述乘积。
7.如权利要求4所述的计算机实现的方法,其中所述损失函数包括距离函数的总和。
8.如权利要求4所述的计算机实现的方法,其中所述输出和所述真值输出之间的差异由校正函数计算。
9.如权利要求4所述的计算机实现的方法,其中所述神经网络包括输入层和输出层,以及所述输入层接收所述参数矩阵和所述稀疏矩阵,所述输出层生成所述输出。
10.如权利要求1所述的计算机实现的方法,其中所述稀疏矩阵索引图包括第二向量,所述第二向量指示包含至少一个非零值的所述稀疏矩阵中的列的索引。
11.如权利要求10所述的计算机实现的方法,进一步包括基于所述第二向量访问所述存储位置,以使用所述乘积矩阵更新神经网络的参数。
12.如权利要求1所述的计算机实现的方法,其中避免矩阵转置操作以累积所述结果。
13.如权利要求1所述的计算机实现的方法,其中所述结果包括乘积矩阵的元素,以及所述稀疏矩阵索引图包括指示所述乘积矩阵中的元素的第一向量。
14.如权利要求1所述的计算机实现的方法,其中所述结果包括乘积矩阵的元素,以及所述乘积矩阵的压缩格式只包括非零值。
15.如权利要求1所述的计算机实现的方法,其中所述结果中的每个乘积项从所述稀疏矩阵索引图中的数据向量的不同条目计算得到,并且每个存储位置由所述稀疏矩阵索引图内的列中的相应条目标识为非零列向量。
16.一种系统,包括:
并行处理单元,配置成:
至少部分地基于稀疏矩阵索引图对稀疏矩阵和稠密矩阵的元素执行乘法运算,所述稀疏矩阵索引图标识要对其执行一个或更多个乘法运算的元素;以及
根据所述稀疏矩阵索引图,将一个或更多个乘法运算的结果累加到一个或更多个相应的存储位置中。
17.如权利要求16所述的系统,其中所述结果包括乘积矩阵的元素,以及所述稀疏矩阵索引图包括指示所述存储位置的第一向量。
18.如权利要求16所述的系统,其中所述稀疏矩阵索引图包括第二向量,所述第二向量指示包含至少一个非零值的所述稀疏矩阵中的列的数量。
19.如权利要求16所述的系统,其中所述稀疏矩阵索引图包括用于所述稀疏矩阵中的列或行的转置索引,以及所述存储位置是至少部分地使用所述转置索引而确定的。
20.如权利要求16所述的系统,其中所述结果包括乘积矩阵的元素,所述乘积矩阵等于所述稀疏矩阵的转置版本与所述稠密矩阵的乘积。
21.如权利要求16所述的系统,其中所述并行处理单元实现神经网络。
22.如权利要求21所述的系统,其中所述神经网络被配置成:
将参数矩阵应用于所述稀疏矩阵以产生输出;
根据损失函数处理所述输出以产生所述稠密矩阵,其中所述稠密矩阵减少所述输出和真值输出之间的差异;以及
从所述稀疏矩阵读取非零值以计算所述结果。
23.如权利要求16所述的系统,其中所述结果中的每个乘积项从所述稀疏矩阵索引图中的数据向量的不同条目计算得到,以及每个存储位置由所述稀疏矩阵索引图中的列中的相应条目标识为非零列向量。
24.一种非暂时性计算机可读介质,存储有计算机指令,当所述计算机指令由一个或更多个处理器执行时,使得所述一个或更多个处理器执行下列步骤:
至少部分地基于稀疏矩阵索引图对稀疏矩阵和稠密矩阵的元素执行一个或更多个乘法运算,所述稀疏矩阵索引图识别对其执行所述一个或更多个乘法运算的元素;以及
根据所述稀疏矩阵索引图,将所述一个或更多个乘法运算的结果累加到一个或更多个相应的存储位置。
25.如权利要求24所述的非暂时性计算机可读介质,其中所述稀疏矩阵索引图包括用于所述稀疏矩阵中的列或行的转置索引,以及所述存储位置是至少部分地使用所述转置索引而确定的。
26.如权利要求24所述的非暂时性计算机可读介质,其中所述结果包括乘积矩阵的元素,所述乘积矩阵等于所述稀疏矩阵的转置版本与所述稠密矩阵的乘积。
27.如权利要求24所述的非暂时性计算机可读介质,其中所述结果包括乘积矩阵的元素,以及所述稀疏矩阵索引图包括指示所述乘积矩阵中的元素的第一向量。
28.如权利要求24所述的非暂时性计算机可读介质,其中所述稀疏矩阵索引图包括第二向量,所述第二向量指示包括至少一个非零值的所述稀疏矩阵中的列的索引。
29.如权利要求28所述的非暂时性计算机可读介质,进一步包括基于所述第二向量访问所述存储位置,以使用所述乘积矩阵更新神经网络的参数。
30.如权利要求24所述的非暂时性计算机可读介质,其中所述结果包括乘积矩阵的元素,以及所述稀疏矩阵索引图包括指示所述乘积矩阵中的元素的第一向量。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/191,201 | 2018-11-14 | ||
US16/191,201 US12008475B2 (en) | 2018-11-14 | 2018-11-14 | Transposed sparse matrix multiply by dense matrix for neural network training |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111191784A true CN111191784A (zh) | 2020-05-22 |
Family
ID=70469477
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910467136.6A Pending CN111191784A (zh) | 2018-11-14 | 2019-05-31 | 转置的稀疏矩阵乘以稠密矩阵用于神经网络训练 |
Country Status (3)
Country | Link |
---|---|
US (1) | US12008475B2 (zh) |
CN (1) | CN111191784A (zh) |
DE (1) | DE102019130311A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799635A (zh) * | 2021-02-08 | 2021-05-14 | 算筹信息科技有限公司 | 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法 |
CN116821576A (zh) * | 2023-08-28 | 2023-09-29 | 英特尔(中国)研究中心有限公司 | 用于基于risc-v加速n:m稀疏网络的方法和装置 |
CN117931131A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 一种稀疏矩阵乘指令实现方法及系统 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11061738B2 (en) * | 2019-02-28 | 2021-07-13 | Movidius Limited | Methods and apparatus to store and access multi dimensional data |
US11500644B2 (en) | 2020-05-15 | 2022-11-15 | Alibaba Group Holding Limited | Custom instruction implemented finite state machine engines for extensible processors |
US11481214B2 (en) | 2020-07-14 | 2022-10-25 | Alibaba Group Holding Limited | Sparse matrix calculations untilizing ightly tightly coupled memory and gather/scatter engine |
US11977885B2 (en) * | 2020-11-30 | 2024-05-07 | Intel Corporation | Utilizing structured sparsity in systolic arrays |
CN112699686B (zh) * | 2021-01-05 | 2024-03-08 | 浙江诺诺网络科技有限公司 | 基于任务型对话系统的语义理解方法、装置、设备及介质 |
US20220342666A1 (en) * | 2021-04-26 | 2022-10-27 | Nvidia Corporation | Acceleration of operations |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160232291A1 (en) * | 2015-02-09 | 2016-08-11 | 10X Genomics, Inc. | Systems and methods for determining structural variation and phasing using variant call data |
CN106407158A (zh) * | 2016-09-12 | 2017-02-15 | 东南大学 | 一种gpu加速的批处理同构稀疏矩阵乘满向量的处理方法 |
US20170132496A1 (en) * | 2015-11-05 | 2017-05-11 | Microsoft Technology Licensing, Llc | Hardware-efficient deep convolutional neural networks |
CN107944555A (zh) * | 2017-12-07 | 2018-04-20 | 广州华多网络科技有限公司 | 神经网络压缩和加速的方法、存储设备和终端 |
CN108229681A (zh) * | 2017-12-28 | 2018-06-29 | 郑州云海信息技术有限公司 | 一种神经网络模型压缩方法、系统、装置及可读存储介质 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8762298B1 (en) * | 2011-01-05 | 2014-06-24 | Narus, Inc. | Machine learning based botnet detection using real-time connectivity graph based traffic features |
US9317482B2 (en) | 2012-10-14 | 2016-04-19 | Microsoft Technology Licensing, Llc | Universal FPGA/ASIC matrix-vector multiplication architecture |
US10275479B2 (en) * | 2014-02-27 | 2019-04-30 | Sas Institute Inc. | Sparse matrix storage in a database |
US9286044B2 (en) * | 2014-06-27 | 2016-03-15 | International Business Machines Corporation | Hybrid parallelization strategies for machine learning programs on top of MapReduce |
US9385751B2 (en) * | 2014-10-07 | 2016-07-05 | Protein Metrics Inc. | Enhanced data compression for sparse multidimensional ordered series data |
US9697176B2 (en) * | 2014-11-14 | 2017-07-04 | Advanced Micro Devices, Inc. | Efficient sparse matrix-vector multiplication on parallel processors |
US9760538B2 (en) * | 2014-12-22 | 2017-09-12 | Palo Alto Research Center Incorporated | Computer-implemented system and method for efficient sparse matrix representation and processing |
US20160259826A1 (en) * | 2015-03-02 | 2016-09-08 | International Business Machines Corporation | Parallelized Hybrid Sparse Matrix Representations for Performing Personalized Content Ranking |
US10423411B2 (en) | 2015-09-26 | 2019-09-24 | Intel Corporation | Data element comparison processors, methods, systems, and instructions |
US9558156B1 (en) | 2015-11-24 | 2017-01-31 | International Business Machines Corporation | Sparse matrix multiplication using a single field programmable gate array module |
US20170193361A1 (en) | 2015-12-31 | 2017-07-06 | Microsoft Technology Licensing, Llc | Neural network training performance optimization framework |
US10157309B2 (en) * | 2016-01-14 | 2018-12-18 | Nvidia Corporation | Online detection and classification of dynamic gestures with recurrent convolutional neural networks |
US10565207B2 (en) | 2016-04-12 | 2020-02-18 | Hsilin Huang | Method, system and program product for mask-based compression of a sparse matrix |
US9977663B2 (en) * | 2016-07-01 | 2018-05-22 | Intel Corporation | Technologies for optimizing sparse matrix code with field-programmable gate arrays |
US10614798B2 (en) | 2016-07-29 | 2020-04-07 | Arizona Board Of Regents On Behalf Of Arizona State University | Memory compression in a deep neural network |
US10984308B2 (en) | 2016-08-12 | 2021-04-20 | Xilinx Technology Beijing Limited | Compression method for deep neural networks with load balance |
US10055135B2 (en) * | 2016-08-18 | 2018-08-21 | Intel Corporation | Method and apparatus for compressing a data set using incremental deltas and a variable reference value |
US12019603B2 (en) | 2016-10-11 | 2024-06-25 | Nec Corporation | Area allocation device, area allocation method, and non-volatile recording medium |
CN107239824A (zh) | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
PL3812900T3 (pl) | 2016-12-31 | 2024-04-08 | Intel Corporation | Systemy, sposoby i aparaty do obliczania heterogenicznego |
CN108322221A (zh) | 2017-01-18 | 2018-07-24 | 华南理工大学 | 一种用于深度卷积神经网络模型压缩的方法 |
US10565686B2 (en) * | 2017-06-12 | 2020-02-18 | Nvidia Corporation | Systems and methods for training neural networks for regression without ground truth training samples |
CN107301668B (zh) | 2017-06-14 | 2019-03-15 | 成都四方伟业软件股份有限公司 | 一种基于稀疏矩阵、卷积神经网络的图片压缩方法 |
TWI680409B (zh) * | 2017-07-08 | 2019-12-21 | 英屬開曼群島商意騰科技股份有限公司 | 適用於人工神經網路之矩陣及向量相乘的方法 |
US10624558B2 (en) * | 2017-08-10 | 2020-04-21 | Siemens Healthcare Gmbh | Protocol independent image processing with adversarial networks |
CN107590533B (zh) | 2017-08-29 | 2020-07-31 | 中国科学院计算技术研究所 | 一种用于深度神经网络的压缩装置 |
TWI684141B (zh) * | 2017-10-12 | 2020-02-01 | 英屬開曼群島商意騰科技股份有限公司 | 人工神經元中以非零封包加速乘法運算的裝置及方法 |
CN108280514B (zh) | 2018-01-05 | 2020-10-16 | 中国科学技术大学 | 基于fpga的稀疏神经网络加速系统和设计方法 |
US10936230B2 (en) * | 2018-01-26 | 2021-03-02 | National Technology & Engineering Solutions Of Sandia, Llc | Computational processor-in-memory with enhanced strided memory access |
US20190278600A1 (en) * | 2018-03-09 | 2019-09-12 | Nvidia Corporation | Tiled compressed sparse matrix format |
US10572568B2 (en) * | 2018-03-28 | 2020-02-25 | Intel Corporation | Accelerator for sparse-dense matrix multiplication |
WO2019195660A1 (en) * | 2018-04-05 | 2019-10-10 | Rain Neuromorphics Inc. | Systems and methods for efficient matrix multiplication |
US10726096B2 (en) * | 2018-10-12 | 2020-07-28 | Hewlett Packard Enterprise Development Lp | Sparse matrix vector multiplication with a matrix vector multiplication unit |
US11132423B2 (en) * | 2018-10-31 | 2021-09-28 | Hewlett Packard Enterprise Development Lp | Partition matrices into sub-matrices that include nonzero elements |
-
2018
- 2018-11-14 US US16/191,201 patent/US12008475B2/en active Active
-
2019
- 2019-05-31 CN CN201910467136.6A patent/CN111191784A/zh active Pending
- 2019-11-11 DE DE102019130311.7A patent/DE102019130311A1/de active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160232291A1 (en) * | 2015-02-09 | 2016-08-11 | 10X Genomics, Inc. | Systems and methods for determining structural variation and phasing using variant call data |
US20170132496A1 (en) * | 2015-11-05 | 2017-05-11 | Microsoft Technology Licensing, Llc | Hardware-efficient deep convolutional neural networks |
CN106407158A (zh) * | 2016-09-12 | 2017-02-15 | 东南大学 | 一种gpu加速的批处理同构稀疏矩阵乘满向量的处理方法 |
CN107944555A (zh) * | 2017-12-07 | 2018-04-20 | 广州华多网络科技有限公司 | 神经网络压缩和加速的方法、存储设备和终端 |
CN108229681A (zh) * | 2017-12-28 | 2018-06-29 | 郑州云海信息技术有限公司 | 一种神经网络模型压缩方法、系统、装置及可读存储介质 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799635A (zh) * | 2021-02-08 | 2021-05-14 | 算筹信息科技有限公司 | 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法 |
CN112799635B (zh) * | 2021-02-08 | 2022-11-15 | 算筹(深圳)信息科技有限公司 | 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法 |
CN116821576A (zh) * | 2023-08-28 | 2023-09-29 | 英特尔(中国)研究中心有限公司 | 用于基于risc-v加速n:m稀疏网络的方法和装置 |
CN116821576B (zh) * | 2023-08-28 | 2023-12-26 | 英特尔(中国)研究中心有限公司 | 用于基于risc-v加速n:m稀疏网络的方法和装置 |
CN117931131A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 一种稀疏矩阵乘指令实现方法及系统 |
CN117931131B (zh) * | 2024-03-22 | 2024-07-26 | 中国人民解放军国防科技大学 | 一种稀疏矩阵乘指令实现方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US20200151571A1 (en) | 2020-05-14 |
US12008475B2 (en) | 2024-06-11 |
DE102019130311A1 (de) | 2020-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11508076B2 (en) | Learning rigidity of dynamic scenes for three-dimensional scene flow estimation | |
CN110363294B (zh) | 利用网络中的路径来表示神经网络以提高神经网络的性能 | |
US11106261B2 (en) | Optimal operating point estimator for hardware operating under a shared power/thermal constraint | |
US11790609B2 (en) | Reducing level of detail of a polygon mesh to decrease a complexity of rendered geometry within a scene | |
US11961001B2 (en) | Parallel forward and backward propagation | |
US12008475B2 (en) | Transposed sparse matrix multiply by dense matrix for neural network training | |
US10614613B2 (en) | Reducing noise during rendering by performing parallel path space filtering utilizing hashing | |
US11341369B2 (en) | Distributed batch normalization using partial populations | |
US10684824B2 (en) | Stochastic rounding of numerical values | |
US11379420B2 (en) | Decompression techniques for processing compressed data suitable for artificial neural networks | |
EP3678037A1 (en) | Neural network generator | |
CN112783554A (zh) | 用于程序间数据交换的持久便签内存 | |
US20230177810A1 (en) | Performing semantic segmentation training with image/text pairs | |
CN115797543A (zh) | 单个图像逆向渲染 | |
US20230062503A1 (en) | Pruning and accelerating neural networks with hierarchical fine-grained structured sparsity | |
CN115039076A (zh) | 无障碍和无围栏共享存储器同步 | |
CN113822975A (zh) | 用于对图像进行有效采样的技术 | |
US20230153604A1 (en) | Performing simulations using machine learning | |
US20210232366A1 (en) | Dynamic directional rounding | |
US20230080247A1 (en) | Pruning a vision transformer | |
US20230394647A1 (en) | Determining contour edges for an image |
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 |