一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于深度学习的稀疏矩阵运算的制作方法

2022-08-28 06:44:24 来源:中国专利 TAG:

用于深度学习的稀疏矩阵运算
1.相关申请的交叉引用
2.本技术要求2020年1月15日提交的美国临时申请no.62/961,645的优先权,其全部内容通过引用并入本文。


背景技术:

3.本说明书涉及神经网络。
4.神经网络是采用一层或多层非线性单元以针对接收到的输入预测输出的机器学习模型。除了输出层之外,一些神经网络还包括一个或多个隐藏层。每个隐藏层的输出被用作网络中的下一层,即,下一隐藏层或输出层的输入。网络的每个层根据相应参数集的当前值从接收到的输入生成输出。


技术实现要素:

5.本说明书描述了一种在一个或多个位置的一个或多个计算机上实现为计算机程序的系统,该系统使用稀疏矩阵执行矩阵运算。稀疏矩阵是具有大比例的具有“空”值,即,作为零的值的元素的矩阵。如果矩阵中超过指定阈值比例,例如,10%、25%、50%或75%,的值为空,则该矩阵能够被视为稀疏的。
6.本说明书中描述的系统能够使用并行处理设备来并行地执行所需矩阵运算的多个计算。并行处理设备能够是,例如,图形处理单元(gpu)、张量处理单元(tpu)、边缘tpu、多核cpu、视觉处理单元(vpu)或能够并行地执行多个运算的任何其它适当的处理设备。
7.虽然以下的描述描述了并行处理设备的线程能够被组织成“线程块”、“线程束(warp)”和“子线程束”,但是通常并行处理设备的线程能够使用任何适当的层级和命名方案来组织。
8.本说明书中描述的主题的特定实施例能够被实现,以便实现以下优点中的一个或多个。
9.对稀疏矩阵执行矩阵运算能够比对类似密集矩阵,例如,具有与稀疏矩阵相同的维度的密集矩阵,执行相同的矩阵运算更有效并且需要更少的资源。在许多情况下,能够使作为深度神经网络的一部分的密集矩阵稀疏,而深度神经网络的质量几乎没有损失到没有损失;即,能够(例如,在训练神经网络期间或者在已经训练神经网络之后)处理密集矩阵以生成稀疏矩阵,该稀疏矩阵被用于代替深度神经网络中的密集矩阵。将密集权重矩阵转换为稀疏权重矩阵使得深度神经网络在所需的浮点运算的数量方面以及在为了实现给定预测精度而必须维持的参数的数量方面都更有效。使用本说明书中描述的技术,由具有稀疏权重矩阵的深度神经网络执行的矩阵运算能够使用并行处理设备被更高效地执行。例如,因为能够有效地并行化正向传递矩阵乘法,所以能够更快地执行使用神经网络进行推断。作为另一示例,训练神经网络能够被更快地执行,因为能够有效地并行化反向传播矩阵乘法。
10.本说明书中描述的一些技术不需要稀疏矩阵中的非零值的拓扑的任何特定结构。
即,能够对任何稀疏矩阵执行这些技术,而不管稀疏矩阵中的非零值的放置或对称性如何。
11.与将输出矩阵的整个行映射到线程块相反,将输出矩阵的片映射到线程块能够允许并行处理设备更灵活地跨流式传输多处理器平衡计算。输出矩阵中的列数能够跨不同的深度学习应用显著变化。在输出矩阵具有相对多的列的一些情况下,与将行的计算跨多个线程块分解并且并行地执行它们相比,将输出矩阵的整行指派给单个线程块能够是低效的。这允许并行处理设备实现更高的占用率和更高的峰值吞吐量分数。能够进一步调整片的大小以针对特定使用情况定制并行处理设备的操作。
12.在一些情况下,在深度神经网络中使用的稀疏矩阵具有与在其他领域中,例如,在科学计算领域中,使用的稀疏矩阵系统地不同的特性。
13.作为特定示例,在深度学习场境中使用的稀疏矩阵通常具有比在其他场境中使用的稀疏矩阵更低的稀疏等级;即,深度神经网络中的稀疏矩阵通常具有较低分数的空值。较低稀疏度等级能够增加稀疏矩阵的不同行中的非零值落入稀疏矩阵中的相同列的可能性。使用本说明书中描述的一些技术,并行处理设备能够利用稀疏矩阵的相同列中的非零值以再使用并行处理设备的高速缓存中的操作数,从而进一步提高并行处理设备的效率。
14.作为另一特定示例,在深度学习上下文中使用的稀疏矩阵通常具有比在其他场境中使用的稀疏矩阵更长的平均行长度(即,每一行非零值的平均数量);即,深度神经网络中的稀疏矩阵通常每一行具有更多非零值。稀疏矩阵的平均行长度能够捕获将在稀疏矩阵的每一行上完成的平均工作量以便执行矩阵运算。使用本说明书中描述的一些技术,并行处理设备能够利用稀疏矩阵的较长平均行长度来跨更有用工作分摊启动开销和一次性成本。即,较长的平均行长度使得并行处理设备做更多工作以生成输出矩阵的值,而启动工作保持相同,因此增加“有用”的工作的比例并且进一步提高并行处理设备的平均效率。
15.作为另一特定示例,在深度学习场境中使用的稀疏矩阵通常具有比在其他上下文中使用的稀疏矩阵低的行长度变化系数。矩阵的行长度的变化系数是每一行的长度除以矩阵的平均行长度的标准偏差。较低行长度的变化系数能够指示矩阵的非零值跨矩阵的不同行更平衡。使用本说明书中描述的一些技术,并行处理设备能够利用稀疏矩阵的行上的负载平衡以跨并行处理设备的不同节点,例如,在不同流式传输多处理器上,更均匀地指派计算。即,并行处理设备的每个流式传输多处理器能够被指派近似相同的计算量,从而进一步提高并行处理设备的效率。
16.在附图和以下描述中阐述了本说明书的主题的一个或多个实施例的细节。从说明书、附图和权利要求中,主题的其它特征、方面和优点将变得明显。
附图说明
17.图1a和1b是示例并行处理设备的框图。
18.图2a和2b是用于跨计算系统的节点分布矩阵乘法的计算的示例技术的图。
19.图3a-3c是用于提高矩阵运算的效率的示例技术的图。
20.图4是用于使矩阵乘法的计算并行化的示例过程的流程图。
21.在各个附图中,相同的附图标记和名称表示相同的元件。
具体实施方式
22.本说明书描述了一种使涉及一个或多个稀疏矩阵的矩阵运算的计算并行化的系统。
23.图1a和1b是示例并行处理设备的框图。图1a中描绘的并行处理设备100被配置为执行稀疏矩阵与第二矩阵之间的矩阵乘法以生成输出矩阵。图1b中描绘的并行处理设备150被配置为执行采样密集-密集矩阵乘法,其中两个密集矩阵被相乘在一起,并且乘积的元素根据稀疏矩阵被采样(例如,通过在乘积与稀疏矩阵之间执行逐元素乘积)以生成稀疏输出矩阵。
24.参考图1a,并行处理设备100包括调度器110、p个流式传输多处理器120a-p和(可选地)主节点130。并行处理设备100被配置为获得稀疏矩阵102和第二矩阵104,并且将两个矩阵102和104相乘以生成输出矩阵132。第二矩阵104能够是密集矩阵或另一稀疏矩阵。即,并行处理设备100被配置为计算a
·
b=c,其中矩阵a或b中的一个或多个是稀疏的。
25.调度器110被配置为跨p个流式传输多处理器120a-p分布执行矩阵乘法的工作负载。具体地,调度器110将输出矩阵132分成多个一维片112,每个片包括输出矩阵132的行中的连续元素。即,对于输出矩阵132的每一行,调度器110将行的元素分组成连续元素的多个片112,其中,行的每个元素被指派给恰好一个片112。下面参考图2a更详细地描述该过程。
26.在确定输出矩阵132的片112之后,调度器110将每个片指派给相应的流式传输多处理器120a-p。在一些实施方式中,调度器110在流式传输多处理器120a-p的执行之前将每个片112指派给相应的流式传输多处理器120a-p。在一些其他实施方式中,调度器110在执行之前将许多一个或多个片112指派给每个流式传输多处理器120a-p,同时保持一些片112未被指派。然后,当流式传输多处理器120a-p完成与指派给它们的片112相关的计算时,例如响应于来自特定流式传输多处理器的关于特定流式传输多处理器已经完成了指派给它的工作的通知,调度器110将剩余的片112指派给相应的流式传输多处理器120a-p。下面参考图3c更详细地讨论示例分布过程。
27.每个流式传输多处理器120a-p被配置为计算已经由调度器110指派给流式传输多处理器的每个片112的每个元素的相应值。通常,每个流式传输处理器120a-p跨流式传输处理器的一个或多个线程块分布这些计算。每个线程块能够包括一个或多个线程束,每个线程束包括被配置成执行矩阵乘法的计算的一个或多个线程。下面参考图2a更详细地讨论该过程。
28.尽管在图1a中描绘了相同并行处理设备的流式传输多处理器集合,但是通常矩阵运算的计算能够跨多个不同的并行处理设备分布,例如跨一个或多个位置的多个计算机的分布式计算系统分布。此外,尽管图1a中描绘了流式传输多处理器,但是并行处理设备100(或并行处理设备的系统)通常能够包含被配置为执行矩阵运算的计算的任何类型的节点。
29.在一些实施方式中,在每个流式传输多处理器120a-p针对指派给其的每个片112计算相应值122之后,流式传输多处理器能够将向主节点130提供计算值122。主节点130能够被配置为收集输出矩阵132的每个片112的计算值122,并且将这些值编译在一起以生成最终输出矩阵132。主节点130能够是流式传输处理器120a-p中的一个,或者主节点130能够是与流式传输处理器120a-p分离的组件。
30.在一些其他实施方式中,流式传输多处理器120a-p不向主节点130提供计算值
122;相反,每个流式传输多处理器120a-p能够将其相应的计算值122存储在并行处理设备的存储器中的位置,该位置能够由每个流式传输多处理器120a-p访问。即,流式传输多处理器通过将其相应的计算值122放置在存储器中的适当位置,将计算值编译成输出矩阵132本身。输出矩阵132然后能够由下游组件从并行处理设备100的存储器访问以用于进一步处理。例如,并行处理设备100能够使用输出矩阵132来执行另一矩阵运算,例如,另一矩阵乘法。作为另一示例,并行处理设备100的外部系统能够请求输出矩阵132以用于进一步处理。
31.在一些实施方式中,调度器110不在并行处理设备100上,即,调度器110能够被托管在与流式传输多处理器120a-p不同的一个或多个设备上。作为特定示例,调度器110能够位于提交执行矩阵乘法的请求的用户设备本地,而托管流式传输多处理器120a-p的并行处理设备100能够在云上。
32.换句话说,调度器110能够使得并行处理设备100使矩阵乘法并行化。在一些实施方式中,调度器110的操作在并行处理设备100上执行,并且该使得包括在并行处理设备100上执行操作。在一些其它实施方式中,调度器110的操作在与并行处理设备100不同的一个或多个设备上执行,并且该使得包括,例如,通过在调度器110与并行处理设备100之间建立的通信链路向并行处理设备100提供用于并行化的指令。
33.在一些实施方式中,并行处理设备100是用于神经网络的推断系统的组件。
34.例如,神经网络能够包括具有稀疏权重矩阵的一个或多个神经网络层。当推断系统接收到神经网络的新输入时,推断系统能够使用并行处理设备100执行具有稀疏权重矩阵的每个神经网络层的操作。即,推断系统能够使用并行处理设备100来计算w
·
x=y,其中w是神经网络层的稀疏权重矩阵,x是输入激活矩阵,并且y是输出激活矩阵。具体地,推断系统能够向并行处理设备提供i)用于神经网络层的稀疏权重矩阵作为稀疏矩阵102,以及ii)由神经网络中的先前神经网络层生成的密集输入激活矩阵作为第二矩阵104。并行处理设备100然后能够生成神经网络层的输出激活矩阵作为输出矩阵132,如上所述。推断系统能够使用标准矩阵乘法,例如,使用并行处理设备100或另一处理设备,执行具有密集权重矩阵的每个神经网络层的操作。
35.作为另一示例,神经网络能够包括接受稀疏输入激活矩阵的一个或多个神经网络层。当推断系统接收到对神经网络的新输入时,推断系统能够使用并行处理设备100执行接受稀疏输入激活矩阵的每个神经网络层的操作。即,推断系统能够使用并行处理设备100来计算w
·
x=y,其中w是用于神经网络层的权重矩阵(即,第二矩阵104),x是稀疏输入激活矩阵(即,稀疏矩阵102),并且y是输出激活矩阵(即,输出矩阵132)。
36.作为另一示例,神经网络能够包括i)具有稀疏权重矩阵和ii)接受稀疏输入激活矩阵两者的一个或多个神经网络层。即,推断系统能够使用并行处理设备100计算w
·
x=y,其中w是用于神经网络层的稀疏权重矩阵,x是稀疏输入激活矩阵,并且y是输出激活矩阵。
37.在一些其它实施方式中,并行处理设备100是神经网络的训练系统的组件。
38.例如,当训练系统接收到对神经网络的新训练输入时,训练系统能够通过与上述推断系统类似地处理新训练输入来执行神经网络的正向传递。
39.作为另一示例,在生成了用于训练网络输入的训练网络输出之后,训练系统能够执行神经网络的反向传递以使用反向传播来更新神经网络的参数值。
40.作为特定示例,训练系统能够使用并行处理设备100来计算w
t
·
δy=δx,其中w是
用于神经网络层的稀疏权重矩阵,δy是用于神经网络层的输出激活矩阵的梯度,并且δx是用于神经网络层的输入激活矩阵的梯度。具体地,训练系统能够向并行处理设备100提供i)当前稀疏权重矩阵的转置作为稀疏矩阵102以及ii)来自神经网络中的后续神经网络层的反向传播的梯度矩阵作为第二矩阵104。并行处理设备100能够执行矩阵乘法以生成用于对神经网络层的输入的梯度矩阵,并且使用其来继续反向传播。作为另一特定示例,输出激活矩阵的梯度δy能够是稀疏的(即,稀疏矩阵102),并且权重矩阵w能够是密集的(即,第二矩阵104)。作为另一特定示例,权重矩阵w和输出激活矩阵的梯度δy都能够是稀疏的。
41.参考图1b,并行处理设备150包括调度器160、p个流式传输多处理器170a-p和(可选地)主节点180。并行处理设备150被配置为获得两个密集矩阵152和154以及稀疏输入矩阵156,并且执行采样的密集-密集矩阵乘法以生成稀疏输出矩阵182。
42.即,并行处理设备150被配置为计算[a
·
b]

c=d,其中,矩阵a和b是密集的(即,密集矩阵152和154),矩阵c是稀疏的(即,稀疏输入矩阵156),矩阵d是稀疏的(即,稀疏输出矩阵182),并且

是两个矩阵的逐元素乘积。
[0043]
调度器160被配置为跨p个流式传输多处理器170a-p分布执行采样的密集-密集矩阵乘法的工作负载。具体地,调度器110将稀疏输出矩阵182分成多个一维片162,每个片包括稀疏输出矩阵162的行中的连续非零元素。因为稀疏输出矩阵182中的非零元素与稀疏矩阵156中的非零元素处于相同位置(由于逐元素乘积),所以调度器160能够针对稀疏输出矩阵182的每一行确定哪些元素可以为非零,并且将该行的非零元素分组成连续非零元素的多个片162,其中行的每个非零元素被指派到恰好一个片162。下面参考图2b更详细地描述该过程。
[0044]
在确定稀疏输出矩阵182的片162之后,调度器160将每个片指派到相应的流式传输多处理器170a-p,如上文参考图1a所述。每个流式传输多处理器170a-p被配置为计算已经由调度器160指派给流式传输多处理器的每个片162的每个元素的相应值。下面参考图2b更详细地讨论该过程。
[0045]
尽管在图1b中描述了同一并行处理设备的流式传输多处理器集合,但是通常矩阵运算的计算能够跨多个不同的并行处理设备分布。此外,尽管图1b中描绘了流式传输多处理器,但是并行处理设备150(或并行处理设备的系统)通常能够包含被配置为执行矩阵运算的计算的任何类型的节点。
[0046]
在一些实施方式中,在每个流式传输多处理器170a-p针对指派给其的每个片162计算相应值172之后,流式传输多处理器能够将计算值172提供给主节点180。主节点180能够被配置成收集稀疏输出矩阵182的每个片162的计算值172,并且将这些值编译在一起以生成最终稀疏输出矩阵182。主节点180能够是流式传输处理器170a-p中的一个,或者主节点180能够是与流式传输处理器170a-p分离的组件。
[0047]
在一些其它实施方式中,流式传输多处理器170a-p不将计算值172提供给主节点180;相反,流式传输多处理器通过将它们的相应的计算值172放置在并行处理设备150的存储器中的能够由每个流式传输多处理器170a-p访问的位置来将计算值编译成稀疏输出矩阵182本身。
[0048]
在一些实施方式中,调度器160不在并行处理设备150上。作为特定示例,调度器160能够位于提交执行采样的密集-密集矩阵乘法的请求的用户设备本地,而托管流式传输
多处理器170a-p的并行处理设备150能够在云上。
[0049]
在一些实施方式中,并行处理设备150是用于神经网络的训练系统的组件。
[0050]
例如,当训练系统接收到神经网络的新训练输入时,训练系统能够通过处理新训练输入以生成训练输出来执行神经网络的正向传递。在生成训练网络输出之后,训练系统能够使用并行处理设备150执行神经网络的反向传递,以使用反向传播来更新神经网络的参数值。
[0051]
作为特定示例,神经网络能够包括具有稀疏权重矩阵的一个或多个神经网络层。在反向传播期间,训练系统能够使用并行处理设备100来计算[δy
·
x
t
]
⊙ⅱ
(w)=δw,其中w是用于神经网络层的稀疏权重矩阵,δy是用于神经网络层的输出激活矩阵的梯度,x是用于神经网络层的输入激活矩阵,ⅱ是针对w的非零元素返回1的指示符函数,并且δw是权重矩阵的梯度。具体地,训练系统能够向并行处理设备150提供i)(从神经网络中的后续神经网络层反向传播的)输入激活矩阵的转置和输出激活矩阵的梯度作为密集矩阵152和154,以及ii)权重矩阵w本身或将权重矩阵w的非零元素标识为稀疏输入矩阵的矩阵ⅱ(w)156。并行处理设备150能够执行采样的密集-密集矩阵乘法以生成权重矩阵的梯度(作为稀疏输出矩阵182)并且使用它来更新权重矩阵的值。
[0052]
作为另一特定示例,神经网络能够包括接受稀疏输入激活矩阵的一个或多个神经网络层。在反向传播期间,训练系统能够使用并行处理设备150来计算[w
t
·
δy]
⊙ⅱ
(x)=δx,其中x是用于神经网络层的稀疏输入激活矩阵,w是用于神经网络层的权重矩阵,δy是用于神经网络层的输出激活矩阵的梯度,并且δx是输入激活矩阵的梯度。具体地,训练系统能够向并行处理设备150提供i)(从神经网络中的后续神经网络层反向传播的)权重矩阵的转置和输出激活矩阵的梯度作为密集矩阵152和154,以及ii)输入激活矩阵x本身或将输入激活矩阵x的非零元素标识为稀疏输入矩阵的矩阵ⅱ(x)156。并行处理设备150能够执行采样的密集-密集矩阵乘法以生成输入激活矩阵的梯度(作为稀疏输出矩阵182),并且使用它来继续反向传播通过神经网络中的先前神经网络层。
[0053]
图2a和2b是用于跨计算系统的节点分布矩阵乘法的计算的示例技术的图。
[0054]
图2a中描绘的技术200分布用于在稀疏矩阵和第二矩阵之间的矩阵乘法的计算以生成输出矩阵。图2b中描绘的技术250分布用于采样的密集-密集矩阵乘法的计算以生成稀疏输出矩阵。
[0055]
参考图2a,计算系统被配置为接收大小为m
×
k的稀疏矩阵210和大小为k
×
n的第二矩阵220,并且执行两个矩阵210和220之间的矩阵乘法以生成大小为m
×
n的输出矩阵230。计算系统能够包括一个或多个并行处理设备,例如,图1a中描绘的并行处理设备100。
[0056]
在一些实施方式中,稀疏矩阵以压缩稀疏行(csr)格式被接收。在一些其他实施方式中,稀疏矩阵以双重压缩稀疏行(dcsr)格式被接收。第二矩阵能够是密集矩阵或稀疏矩阵。
[0057]
针对输出矩阵230的m个行中的每一行,计算系统能够将该行分解成多个片,其中每个片是输出矩阵的行的连续元素的一维序列。输出矩阵中的每个元素能够被指派给恰好一片。在一些实施方式中,这些片中的每个片具有相同大小t;即,每个片存在t个元素。因此,针对输出矩阵230的每一行,第0到第(t-1)个元素表示一片,第t到第(2t-1)个元素表示另一片,依此类推。例如,计算系统或用户能够选择片大小t,使得n可被t整除,即,每一行存
在片,并且输出矩阵中存在总数片。在一些情况下,n可以不能被t整除;在这些情况下,输出矩阵中不是行中的最后片的每个片能够具有大小t,而每一行中的最后片能够具有大小n mod t,其中“mod”是当n除以t时返回余数的模数运算符。
[0058]
计算系统能够将输出矩阵230中的每个片指派给并行处理设备的特定线程块-因此,这些片有时被称为“线程块片”。并行计算设备的线程块然后通过执行矩阵乘法来计算所指派的片中的元素的值。在由相应的线程块已经计算了每个片的值之后,计算系统能够组合这些片以生成包括每个元素的计算值的完整输出矩阵230,如以上参考图1a所描述的。
[0059]
线程块表示能够被串行或并行执行的线程组。线程块能够包括一个或多个线程束。线程束是线程块的线程的子组,其能够对所有线程并行地执行相同操作。即,线程束能够跨线程束的所有线程同时处理单个指令。因此,生成该片中的单个元素的值能够被指派给特定线程;线程束能够跨相应的线程并行地计算多个元素的值;并且用于该片的线程块能够串行或并行地执行该线程块的每个线程束的操作。
[0060]
线程是能够由并行处理设备的处理单元独立地执行的操作序列。作为特定示例,每个线程块能够被指派为在并行处理设备的特定流式传输多处理器上执行。例如,gpu能够具有,例如,12、16或20个流式传输处理器。每个流式传输多处理器能够并行地执行相应的指派的线程块的一个或多个线程。流式传输多处理器的每个线程运行能够共享流式传输多处理器的资源,例如,流式传输多处理器的计算单元、共享存储器、常量高速缓存、l1高速缓存等。
[0061]
为了计算特定片中的元素的值,计算系统能够隔离稀疏矩阵和第二矩阵中的值,其将被处理以计算这些值。具体地,通过将第二矩阵的第i列与稀疏矩阵的行r相乘来计算输出矩阵的元素(r,i)的值。然而,由于稀疏矩阵的行r的值中的许多值是空,所以计算系统能够通过仅检索第二矩阵的第i列中的将与稀疏矩阵的行r的非零元素相乘的那些值来提高效率。
[0062]
作为特定示例,在图2a中描绘了输出矩阵230的特定线程块片232,其对应于稀疏矩阵210的行212和第二矩阵的多个列222集合。计算系统将线程块片232指派给线程块240。
[0063]
线程块240能够获得i)稀疏矩阵210的行212的值和ii)第二矩阵220的该列222集合的第一值224,其是对应于稀疏矩阵210的行212的值的该列222集合的值。即,因为列222将与稀疏的行212相乘,所以线程块240仅需要获得将与行212的非零值相乘的列222的值224。列222的这些第一值224由比列222的其它值更暗的灰度表示。注意,阴影值是稀疏的,并且跨列222的行分布-这些行对应于行212中的非零元素。
[0064]
线程块240能够将所获得的值放置在可由线程块240中的每个线程束和线程访问的高速缓存中。在一些实施方式中,线程块240获得列222中的每个值,并且丢弃对应于行212的零元素的值(即,丢弃不是第一值224的值)。在一些其它实施方式中,线程块240仅获得第一值224。
[0065]
在一些实施方式中,线程块240的多个线程束协作地将所需值(例如,行212的值和/或第一值224)中的一些或全部加载和存储在线程块240的共享存储器中,使得线程块的每个线程能够访问这些值。
[0066]
线程块240能够跨多个不同线程束分布线程块片232的值的计算。例如,线程块240能够指派线程束242以计算用于线程束片234的值。线程束片234是线程块片232的子集,即,
包括来自线程块片232的多个连续元素。为了计算用于线程束片234中的元素的值,线程束242能够获得第二矩阵220的第二值226。第二值226是对应于线程束片234的第一值224的子集。具体地,第二值226是线程束片234中表示的列(其是列222的子集)中的第一值224。
[0067]
线程束242继而能够跨多个不同线程分布用于线程束片234的值的计算。例如,线程束242能够指派相应的线程来并行计算线程束片234中的每个元素。作为特定示例,线程束242能够指派线程244以计算线程片236的值,其能够包括来自线程束片234的单个元素。为了计算线程片236中的元素的值,线程244能够获得第二矩阵220的第三值228。第三值228是对应于线程片的第二值226的子集。具体地,第三值228是在线程片236中表示的列中的第二值226。
[0068]
例如,为了计算线程片236的值,线程244能够将行212划分成多个子片,其中行212的每个子片包括行212的一个或多个连续非零元素。针对行212的每个子片,线程244能够确定第三值228的集合中的对应第三值,即,在内积计算期间将与行212的子片的元素相乘以计算线程片236的值的第三值。线程244能够使用内积针对行212的每个子片来组合i)子片的值和ii)第三值228的集合中的对应第三值,以生成标量值。线程244然后能够确定对应于行212的每个子片的标量值的总和,以生成线程片236的值。
[0069]
虽然线程块240被描述为具有4个线程束并且线程束242被描述为具有4个线程,但是通常线程块能够具有更多的线程束并且线程束能够具有更多的线程。举几个示例,线程块能够包括总共512或1024个线程,并且线程束能够包括32或64个线程。
[0070]
尽管图2a描绘其中a是稀疏的矩阵乘法a
·
b,但是本说明书中所描述的技术能够被用于计算其中b是稀疏的矩阵乘法a
·
b。例如,稀疏矩阵b能够以稀疏列格式,例如,压缩稀疏列(csc)格式或双重压缩稀疏列(dcsc)格式,表示。即,稀疏矩阵能够是矩阵乘法中的“右”矩阵,而第二矩阵能够是矩阵乘法中的“左”矩阵。在这些实施方式中,代替如上所述获得稀疏矩阵210的行和第二矩阵220的列,系统能够获得第二矩阵的行(其在这些实施方式中在左边)和稀疏矩阵的列(其在这些实施方式中在右边)。然后,输出矩阵的计算元素的运算能够如上所述地跨线程块、线程束和线程分布。
[0071]
参考图2b,计算系统被配置为接收大小为m
×
k的第一密集矩阵260、大小为k
×
n的第二密集矩阵270、以及大小为m
×
n的稀疏输入矩阵252。计算系统被配置为使用两个密集矩阵260和270以及稀疏输入矩阵252执行采样的密集-密集矩阵乘法,以生成大小为m
×
n的稀疏输出矩阵280。计算系统能够包括一个或多个并行处理设备,例如,图1b中描绘的并行处理设备150。
[0072]
针对稀疏输出矩阵280的m个行中的每一行,计算系统能够将该行分解成多个片,其中每个片是稀疏输出矩阵280的该行的连续非零元素的一维序列。系统能够使用稀疏输入矩阵252来确定稀疏输出矩阵280的非零元素;即,针对稀疏输入矩阵252中的每个非零元素,稀疏输出矩阵280的对应元素(即,相同行和相同列中的元素)可以是非零的。
[0073]
注意,如果第一密集矩阵260的行i和第二密集矩阵270的列j之间的内积等于零,则稀疏输出矩阵280中的与稀疏输入矩阵252中的非零元素(i,j)相对应的元素(i,j)可能等于零。然而,尽管这种可能性,系统能够将稀疏输出矩阵280中的与稀疏输入矩阵252中的非零元素相对应的每个元素视为稀疏输出矩阵280的“非零”元素。
[0074]
稀疏输出矩阵280中的每个非零元素能够被指派给恰好一片。在一些实施方式中,
这些片中的每个片具有相同大小t。通常,由于输出矩阵的稀疏性,给定行中的非零元素的数量将不能被t整除。在这些情况下,稀疏输出矩阵280中的不是行中的最后片的每个片能够具有大小t,而每一行中的最后片能够具有大小n mod t。
[0075]
计算系统能够将稀疏输出矩阵280中的每个片指派给并行处理设备的特定线程块—因此,片有时被称为“线程块片”。并行计算设备的线程块然后计算所指派片中的元素的值。在每个片的值已经由相应的线程块计算之后,计算系统能够组合这些片以生成包括稀疏输出矩阵252的每个非零元素的计算值的完整稀疏输出矩阵280,如以上参考图1b所描述的。
[0076]
为了计算特定片中的元素的值,计算系统能够确定i)第一稀疏矩阵260中的对应的行和ii)第二稀疏矩阵270中的多个对应的列。具体地,通过将第二密集矩阵270的第i列与第一密集矩阵260的行r相乘来计算输出矩阵的元素(r,i)的值。
[0077]
作为特定示例,在图2b中描绘了输出矩阵230的特定线程块片282,其对应于第一密集矩阵260的行262和第二密集矩阵270的多个列272集合。注意,列272是稀疏的-这些列对应于片282中的非零元素。计算系统将线程块片282指派给线程块290。
[0078]
线程块290能够获得i)第一密集矩阵260的行262的值和ii)第二密集矩阵270的该列272集合的值。线程块290能够将所获得的值放置在可由线程块290中的每个线程束和线程访问的高速缓存中。在一些实施方式中,线程块290的多个线程束协作地将所需值(例如,行262和/或列272的值)中的一些或全部加载和存储在线程块290的共享存储器中,使得线程块中的每个线程能够访问这些值。
[0079]
线程块290能够跨多个不同线程束分布用于线程块片282的值的计算。例如,线程块290能够指派线程束292以计算线程束片284的值。线程束片284是线程块片282的子集,即,包括来自线程块片282的多个连续元素。为了计算用于线程束片284中的元素的值,线程束292能够获得第二密集矩阵270的第二值276。第二值276是与线程束片234相对应的列272的子集,即,线程束片284中表示的第二密集矩阵270的列(其是列272的子集),的值。
[0080]
线程束292继而能够跨多个不同线程分布线程束片284的值的计算。例如,线程束292能够指派相应的线程来并行地计算线程束片284中的每个元素。作为特定示例,线程束292能够指派线程294来计算线程片286的值,其能够包括来自线程束片284的单个元素。为了计算线程片286中的元素的值,线程294能够获得第二密集矩阵220的第三值278。第三值228是对应于线程片的列272集合中的列,即对应于线程束片284的元素的第二密集矩阵的列,的值。
[0081]
例如,为了计算线程片286的值,线程294能够将行262划分成多个子片,其中行262的每个子片包括行262的一个或多个连续元素。针对行262的每个子片,线程294能够确定第三值278的集合中的对应的第三值,即,在内积计算期间行262的子片的元素要与其相乘以计算线程片286的值的第三值。线程294能够针对行262的每个子片使用内积来组合i)子片的值和ii)第三值278的集合中的对应的第三值,以生成标量值。线程294然后能够确定与行262的每个子片相对应的标量值的总和,以生成线程片286的值。
[0082]
在一些实施方式中,第二密集矩阵270是提供给系统的矩阵的转置;即,如果系统被提供矩阵b,则系统计算[a.b
t
]

c=d。例如,如上参考图1b所述,系统能够通过计算[δy
·
x
t
]
⊙ⅱ
(w)=δw,来确定神经网络的稀疏权重矩阵的梯度,其中x
t
是第二密集矩阵270,
但是x被提供给系统。
[0083]
在一些这样的实施方式中,例如,当第二密集矩阵以行为主的格式被存储时,如上所述,将线程块片282的每个元素指派给相应的线程导致每个线程执行对线程块290的共享存储器的跨步、未合并的存储器访问,这是对时间和计算资源的低效使用。因此,系统能够将工作指派给线程块290的线程,使得每个线程执行确定片282中的多个元素(例如,所有元素)的值所需的计算的一部分。即,针对片282的每个元素,多个不同线程能够协作以计算该元素的值。然后,线程块290能够例如使用线程束混洗指令跨所有线程执行缩减以计算元素的最终值。
[0084]
图3a-3c是用于提高执行矩阵运算的效率的示例技术的图。例如,图3a-3c中所示的技术能够被用于执行稀疏矩阵和第二矩阵之间的矩阵乘法以生成输出矩阵。尽管以下描述可以指稀疏矩阵为矩阵乘法中的“左”矩阵,但当稀疏矩阵为矩阵乘法中的“右”矩阵时,或当矩阵乘法中的两个矩阵均为稀疏时,能够应用所描述的技术。
[0085]
为了方便起见,这些技术将被描述为由位于一个或多个位置的一个或多个计算机的系统执行。例如,根据本说明书适当编程的并行处理设备,例如,图1a中所描绘的并行处理设备100,能够执行这些技术。
[0086]
图3a图示用于使用向量存储器指令以将稀疏矩阵的值加载到并行处理设备的存储器的示例技术。
[0087]
向量存储器指令允许并行处理设备的组件(例如,并行处理设备的线程块、线程束或子线程束)一次将多个数据块加载到存储器。即,组件能够利用单个指令同时获得多个数据块,而不是一次获得每个数据块并将其放置到存储器中。
[0088]
例如,在没有向量存储器指令的情况下,并行处理设备的访问宽度(即,利用单个指令加载的数据量)可以为32个浮点值。使用具有两个向量宽度的向量存储器指令,并行处理设备的每个组件能够利用单个指令加载两倍那么多的值,例如,64个浮点值。类似地,使用具有四个向量宽度的向量存储器指令,并行处理设备的每个组件能够利用单个指令加载四倍那么多的值,例如,128个浮点值。因此,向量存储器指令能够显著改进并行处理设备的效率。
[0089]
作为特定示例,如果并行处理设备中的每个线程束包括32个线程,则在没有向量存储器指令的情况下,每个线程束能够利用单个指令加载线程束中的每个线程的单个相应的值以进行处理。使用具有两个向量宽度的向量存储器指令,每个线程束能够利用单个指令加载线程束中的每个线程的两个相应的值以进行处理。
[0090]
然而,在仅单个片被指派给每个线程块的一些情况下,线程块必须处理的值的数量不足以有效地使用向量存储器指令。例如,当线程块正在加载来自稀疏矩阵的值时,与被指派给线程块的片相对应的该稀疏矩阵的行中的元素的数量小于使用向量存储器指令加载的值的数量,因此使得线程块加载将在执行矩阵乘法时不使用的额外的值。
[0091]
因此,通过将多个不同片指派给每个线程块,能够使并行处理设备更高效;具体地,调度器(例如,图1a中描绘的调度器110)能够将与稀疏矩阵的相应的不同行相对应的片指派给单个线程块。例如,线程块的每个线程束能够被指派相应的片。作为另一示例,线程的每个子线程束能够被指派相应的片。子线程束是线程束的子集。例如,代替将输出矩阵的每个片指派给并行处理设备的相应的线程块,系统能够将多个片指派给相同的线程块,这
继而将每个片指派给相应的子线程束。
[0092]
在图3a中描绘的示例中,在左侧,并行处理设备的组件使用具有二的向量宽度的向量存储器指令以加载稀疏矩阵的单个行310的值。由组件加载的值由箭头表示。例如,如果对应于行310的片已经被指派给线程束,则线程束能够执行向量存储器指令。因为行310中的值比由向量存储器指令加载的值少,所以线程束通过加载将不由线程束使用的值来执行浪费的运算。未使用的值由x’s表示。
[0093]
继续图3a中描绘的示例,在右侧,并行处理设备的组件使用具有二的向量宽度的向量存储器指令以加载稀疏矩阵的两个行310和320的值。由组件加载的值再次由箭头表示。例如,如果对应于行310和行320的相应的片已经被指派给线程束(例如,指派给线程束的相应子线程束),则线程束能够执行向量存储器指令。因为向量存储器指令被定向到稀疏矩阵的两个不同行310和320,所以不存在浪费的运算,即,由线程束加载的所有值将由线程束使用。因此,将多个片指派给单个线程块或线程束、增加线程块或线程束必须处理的值的数量,能够允许线程块或线程束更好地利用向量存储器指令。
[0094]
作为特定示例,线程块的线程束能够将行310和320的值加载到线程块的共享存储器中的位置,其中这些值能够由线程块的每个线程访问以计算输出矩阵的元素的值。能够使用后续向量存储器指令,例如,通过相同线程束或不同线程束,加载行310和320的剩余值。
[0095]
图3b图示用于在并行处理设备上执行向量存储器指令的示例技术。
[0096]
向量存储器访问能够要求指令的目标值(即,指令所请求的数据的第一地址)与并行处理设备的向量存储器指令的特定向量宽度(例如,两个或四个32字节值的向量宽度)对准。即,所请求数据中的第一地址必须是向量宽度的倍数,即,必须是“向量宽度对准的”。
[0097]
在一些情况下,例如,在稀疏矩阵以csr格式表示的一些情况下,稀疏矩阵的行中的第一非零值(称为该行的“行偏移”)不与向量宽度对准。这在并行处理设备的组件(例如,线程块或线程束)提交向量存储器指令以读取稀疏矩阵的行的值时出现问题;即,向量存储器指令的第一地址不能是该行的第一非零值的地址。
[0098]
为了解决这个问题,当加载稀疏矩阵的行的值时,并行处理设备的组件能够加载行的行偏移并且计算行的行长度,并且然后将行偏移递减到最接近的向量宽度对准地址以生成递减偏移。该组件然后能够提交其目标值是递减偏移的向量存储器指令,从而使得该组件加载来自稀疏矩阵的先前行的值(如果行偏移的地址尚未是向量宽度对准的)。为了维护正确性,该组件能够确定不处理来自先前行的值。例如,组件的每个线程可以掩蔽从先前行加载的值。
[0099]
参考图3b中描绘的示例,稀疏矩阵的一些行的第一非零值的地址不是向量宽度对准的。具体地,第三行、第四行、第五行、第七行以及第八行的地址不是向量宽度对准的。因此,当请求那些行中的一行的值时,并行处理设备的组件能够将目标值递减到最接近的向量宽度对准地址。例如,当请求第三行的值时,目标值是第二行的元素,并且因此请求将返回第二行的最后部分的值,之后是第三行的值。类似地,对第四行的请求将返回第三行的最后部分的值,之后是第四行的值,依此类推。在图3b中,第i行的请求的目标值由第i个圆表示。
[0100]
图3c图示用于对跨并行处理设备的组件的矩阵乘法的计算进行加载平衡的示例
技术。
[0101]
虽然以下描述涉及将片指派给并行处理设备的线程块的系统,但所描述的技术能够被应用于并行处理设备的任何适当组件,例如,线程块、线程束或子线程束。
[0102]
在一些这样的实施方式中,系统能够将输出矩阵的片指派给线程块,使得每个线程块接收近似相同量的要做的工作。此外,系统ng1将工作指派给线程块内的线程,使得每个线程接收近似相同量的要做的工作。
[0103]
例如,系统能够基于确定片的值所需的计算量来对输出矩阵的片进行排序。作为特定示例,系统能够基于与每个片相对应的稀疏矩阵的行中的非零值的数量来对片进行排序。这对执行给定片所需的工作量进行近似,因为计算片的值所需的工作量随着与该片相对应的稀疏矩阵的行中的非零元素的数量而增加。
[0104]
在一些实施方式中,在基于执行片所需的计算量对片进行排序之后,系统能够将片以“蛇形”模式指派给线程块。即,如果在并行处理设备中存在编号为1到q的q个线程块,则系统能够按顺序将q个计算上最繁重的片指派给q个线程块。然后,系统能够按相反顺序将接下来q个计算上最繁重的片指派给线程块。因此,第一线程块接收第一和第(2q)个计算上最繁重的片,而第q个流式传输多处理器接收第q和第(q 1)个计算上最繁重的片。系统能够继续以这种方式指派接下来q个计算上最繁重的片,直到所有片都已经被分配。因此,工作能够跨不同的线程块被平衡,使得单个线程块不被指派多个计算上最昂贵的片。
[0105]
在一些其它实施方式中,在基于执行片所需的计算量对片排序之后,系统能够将片分组为具有类似计算成本的组。即,需要类似计算量来执行的片能够被放置在同一组中。系统然后能够将片的每个组指派给相应的线程块。换句话说,针对并行处理设备的每个线程块,线程块处理的每个片需要近似相同的工作量。此外,针对每个线程块,计算每个线程块的每个元素的值的计算成本近似相同,因为每个值是稀疏矩阵(其已经被分组为相似的大小)的行和第二矩阵的列之间的内积。因此,工作能够跨单个线程块的线程平衡,使得线程块中的线程的第一子集没有被指派比线程的第二子集显著地多的工作,从而使得线程的第二子集在线程的第一子集完成其操作时是不活动的(或者正在执行无价值的操作)。
[0106]
参考图3c中描绘的示例,在用于将片指派给线程块的第一策略330下,系统能够顺序地指派片。具体地,系统能够将对应于稀疏矩阵的第0行和第1行的每个片指派给第一线程块,将对应于稀疏矩阵的第2行和第3行的每个片指派给第二线程块,依此类推。然而,这能够导致线程块内的工作不平衡。例如,在第一线程块内,线程的第一子集计算对应于第0行的输出矩阵的值,而线程的第二子集计算对应于第1行的输出矩阵的值;因此,线程的第一子集必须执行更多操作,在此期间线程的第二子集不能做有用的工作。
[0107]
在第二策略340下,系统将对应于稀疏矩阵的类似大小的行的片分组,并且将片的每个组指派到相应的线程块。具体地,该系统将与稀疏矩阵的第0行和第5行相对应的每个片指派给第一线程块,将与稀疏矩阵的第1行和第3行相对应的每个片指派给第二线程块,将与稀疏矩阵的第4行和第7行相对应的每个片指派给第三线程块,并且将与稀疏矩阵的第2行和第6行相对应的每个片指派给第四线程块。这样,针对每个线程块,系统能够平衡线程块内的线程所做的工作。例如,在第一线程块内,每个线程计算与稀疏矩阵的第0或第5行相对应的输出矩阵的值,其具有相同的大小。
[0108]
尽管在第二策略230下,工作可以不跨不同线程块完美地平衡(即,第一线程块处
理与比第二线程块更大的稀疏矩阵行相对应的片),但是当执行具有许多行(例如,数百、数千或数万行)的矩阵乘法时,这种不平衡能够是最小的,因为每个线程块被指派多个不同的片的组。例如,当线程块完成处理它们的最初指派的组时,系统能够按需将片的新组指派给线程块。作为另一示例,如上所述,系统能够以蛇形模式指派片的组。
[0109]
图4是用于使矩阵乘法的计算并行化的示例过程400的流程图。过程400能够由安装在一个或多个计算机上并且根据本说明书编程的一个或多个计算机程序实现。例如,过程400能够由并行处理设备,例如,图1a中所描绘的并行处理设备100,执行。为了方便起见,过程400将被描述为由一个或多个计算机的系统执行。
[0110]
系统获得表示将被相乘以生成输出矩阵的稀疏矩阵和第二矩阵的数据(步骤402)。稀疏矩阵具有大小m
×
k,第二矩阵具有大小k
×
n,并且输出矩阵具有大小m
×
n。
[0111]
系统针对输出矩阵的m个行中的每一行确定每个都包括来自该行的一个或多个连续元素的多个片(步骤404)。
[0112]
系统针对每一行的每个片将该片指派给并行处理设备的多个线程块中的相应的线程块(步骤406)。每个线块能够包括多个线程束,并且每个线程块的每个线程束能够包括多个线程。
[0113]
系统针对输出矩阵的m个行中的每一行r的每个片确定第二矩阵的相应第一列中的多个第一值(步骤408)。
[0114]
例如,针对输出矩阵中的每一行r的每个片,系统能够进行以下操作。针对片中的每个元素,系统能够标识该元素在输出矩阵的行r中的位置i,并且标识第二矩阵中的对应的列i。第二矩阵中的这些标识的列能够被称为第二矩阵的“第一列”。然后,针对稀疏矩阵的行r中的每个非零元素,系统能够标识非零元素在稀疏矩阵的行r中的位置j,并且标识第二矩阵的每个第一列中的处于该第一列的位置j中的对应的值。第二矩阵的第一列中的这些标识的值是将与稀疏矩阵的非零元素相乘以计算输出矩阵中的片的相应的元素的值的那些值。在本说明书中,这些值将被称为第二矩阵的第一列的“第一值”。
[0115]
以此方式,系统能够针对输出矩阵的行r中的特定片标识第二矩阵的第一列中的每一个的第一值。然后,针对每个第一列i(对应于片中的元素i),系统能够将第一列的第一值提供给已经指派了片的线程块的相应的线程束中的相应的线程。该系统还能够向线程提供稀疏矩阵的行r的非零元素。
[0116]
系统针对输出矩阵的m个行中的每一行r的每个片使用已经指派了片的线程块来计算该片中的每个元素的值(步骤410)。
[0117]
例如,系统能够通过将i)由第一列i中的第一值组成的向量和ii)由稀疏矩阵的行r的非零元素组成的向量相乘来计算片的元素i的值。线程束能够针对片中的多个这样的元素并行地执行这些操作,而已经指派了片的线程块能够控制所有其线程束的操作,以计算该片中的每个元素的值。
[0118]
本说明书结合系统和计算机程序组件使用术语“配置为”。对于要被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了软件、固件、硬件或它们的组合,其在运行时使得系统执行操作或动作。对于要被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括指令,当由数据处理装置执行指令时,使该装置执行操作或动作。
[0119]
本说明书中描述的主题和功能操作的实施例能够被实现在数字电子电路、有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构等价物的计算机硬件、或者它们中的一个或多个的组合中。本说明书中描述的主题的实施例能够被实现为一个或多个计算机程序,即,编码在有形非暂时性存储介质上的计算机程序指令的一个或多个模块,以由数据处理装置执行或控制数据处理装置的操作。计算机存储介质能够是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。替代地或另外,程序指令能够被编码在人工生成的传播信号上,例如,机器生成的电信号、光信号或电磁信号,其被生成以对信息进行编码,以发送到合适的接收器装置以供数据处理装置执行。
[0120]
术语“数据处理装置”指的是数据处理硬件并且涵盖用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。该装置能够是或还包括专用逻辑电路,例如,fpga(现场可编程门阵列)或asic(专用集成电路)。除硬件之外,该装置能够可选地包括为计算机程序创建运行环境的代码,例如构成处理器固件、协议栈、数据库管理系统,操作系统、或它们中的一个或多个的组合的代码。
[0121]
计算机程序,也可以被称为或描述为程序、软件、软件应用程序、应用程序、模块、软件模块、脚本或代码,能够以任何形式的编程语言编写,包括编译或解释性语言,或陈述性或程序性语言;并且它能够以任何形式进行部署,包括作为独立程序或作为模块、组件、子例程或适用于计算环境的其他单元。程序可以但不必须对应于文件系统中的文件。程序能够被存储在保存其他程序或数据(例如,存储在标记语言文档中的一个或多个脚本)的文件的一部分中、存储在专用于所涉及的程序的单个文件中、或者存储在多个协调文件中,例如,存储一个或多个模块、子程序或代码的部分的文件。计算机程序能够被部署为在位于一个站点的一个计算机上或在多个计算机上运行其,或跨多个站点分布并通过数据通信网络互连。
[0122]
本说明书中描述的过程和逻辑流程能够由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过对输入数据进行操作并生成输出来执行功能。过程和逻辑流程也能够由专用逻辑电路,例如fpga或asic,或专用逻辑电路和一个或多个编程的计算机的组合执行。
[0123]
适用于执行计算机程序的计算机能够基于通用或专用微处理器或两者,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或者两者接收指令和数据。计算机的基本元件是用于执行或运行指令的中央处理单元,以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器能够由专用逻辑电路补充或并入其中。通常,计算机还将包括或可操作地耦合以从和/或向用于存储数据的一个或多个海量存储设备接收和/或传输数据,例如,磁盘、磁光盘或光盘。然而,计算机不必须具有这样的设备。此外,计算机能够被嵌入在另一设备中,例如,移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制器、全球定位系统(gps)接收器或便携式存储设备,例如,通用串行总线(usb)闪存驱动器,等等。
[0124]
适用于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备,例如,eprom、eeprom和闪存设备;磁盘,例如,内部硬盘或可移动磁盘;磁光盘;以及cd-rom和dvd-rom盘。
[0125]
为了提供与用户的交互,本说明书中描述的主题的实施例能够被实现在计算机上,该计算机具有显示设备,例如,crt(阴极射线管)或lcd(液晶显示器)监视器,以用于向用户显示信息,以及键盘和定点设备,例如鼠标或轨迹球,用户能够通过其向计算机提供输入。其他类型的设备也能够被用于提供与用户的交互;例如,提供给用户的反馈能够是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且能够以任何形式接收来自用户的输入,包括声学、语音或触觉输入。另外,计算机能够通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从web浏览器接收的请求将网页发送到用户设备上的web浏览器。此外,计算机能够通过向个人设备,例如,正在运行消息收发应用程序的智能电话,发送文本消息或其他形式的消息来与用户交互,以及反过来从用户接收响应消息。
[0126]
用于实现机器学习模型的数据处理装置还能够包括,例如,专用硬件加速器单元,其用于处理机器学习训练或生产(即,推断)工作负载的公共和计算密集部分。
[0127]
能够使用机器学习框架,例如,tensorflow框架,microsoft认知工具包框架,apache singa框架或apache mxnet框架,来实现和部署机器学习模型。
[0128]
本说明书中描述的主题的实施例能够被实现在计算系统中,该计算系统包括后端组件,例如,作为数据服务器,或者包括中间件组件,例如,应用程序服务器,或者包括前端组件,例如,具有图形用户接口、web浏览器或app的客户端计算机,用户能够通过其与本说明书中描述的主题的实现方式进行交互,或者一个或多个这样的后端组件、中间件组件或前端组件的任何组合。系统的组件能够通过数字数据通信的任何形式或介质互连例如,通信网络。通信网络的示例包括局域网(lan)和广域网(wan),例如,互联网。
[0129]
计算系统能够包括客户端和服务器。客户端和服务器通常彼此远离并且通常通过通信网络进行交互。客户端和服务器之间的关系借助于运行在相应的计算机上的计算机程序产生,并且彼此具有客户端-服务器关系。在一些实施例中,服务器将数据,例如,html页面,发送到用户设备,例如,出于向与作为客户端的设备交互的用户显示数据和从其接收用户输入的目的。能够在服务器处从设备接收在用户设备处生成的数据,例如,用户交互的结果。
[0130]
除了上述实施方式之外,以下实施方式也是创新的:
[0131]
实施例1是一种在并行处理硬件设备上使稀疏矩阵与第二矩阵之间的矩阵乘法并行化以生成输出矩阵的方法,其中所述稀疏矩阵具有大小m
×
k,所述第二矩阵具有大小k
×
n,并且所述输出矩阵具有大小m
×
n,所述方法包括:
[0132]
针对所述输出矩阵的所述m个行中的每一行,确定每个都包括来自该行的一个或多个元素的多个片;
[0133]
针对每一行的每个片,将该片指派给所述并行处理硬件设备的多个线程块中的相应的线程块,其中每个线程块包括多个线程束,并且每个线程块的每个线程束包括多个线程;
[0134]
针对所述输出矩阵的所述m个行中的每一行r的每个特定片,确定所述第二矩阵中的多个第一列中的多个第一值,包括:
[0135]
针对所述特定片中的每个元素:
[0136]
标识该元素在所述输出矩阵的所述行r中的位置i,以及
[0137]
标识作为所述第二矩阵的第i列的第一列;以及
[0138]
针对所述稀疏矩阵的特定行中的每个非零元素:
[0139]
标识所述非零元素在所述稀疏矩阵的所述行r中的位置j,以及
[0140]
标识所述第二矩阵的每个第一列中的处于该第一列中的位置j的第一值;以及
[0141]
针对所述输出矩阵的所述m个行中的每个特定行r的每个特定片使用被指派了所述特定片的所述相应的线程块来计算所述特定片中的每个元素的相应值,所述计算包括:
[0142]
针对所述第二矩阵中的每个第一列,使用被指派了所述特定片的所述相应的线程块的特定线程束的特定线程,将i)所述第一列中的所述第一值的向量与ii)所述稀疏矩阵中的所述特定行r的所述非零元素的向量相乘。
[0143]
实施例2是实施例1的方法,其中,行的每个片被指派给所述多个线程块中的不同的相应的线程块。
[0144]
实施例3是实施例1的方法,其中,针对每一行的每个片,将该片指派给所述并行处理硬件设备的多个线程块中的相应的线程块包括:
[0145]
将多个片指派给特定线程块,
[0146]
针对被指派给所述特定线程块的所述多个片中的每个片,将该片指派给所述特定线程块的所述线程束中的相应一个的多个子线程束中的相应一个。
[0147]
实施例4是实施例1-3中的任一项所述的方法,其中,所述稀疏矩阵是压缩稀疏行(csr)格式。
[0148]
实施例5是实施例4所述的方法,其中,针对所述输出矩阵的所述m个行中的每个特定行r的每个特定片,使用被指派了所述特定片的所述相应的线程块来计算所述特定片中的每个元素的相应值包括:
[0149]
加载所述稀疏矩阵中的所述特定行r的行偏移;
[0150]
计算所述稀疏矩阵中的所述特定行r的行长度;以及
[0151]
将所述行偏移递减到与所述并行处理硬件设备的向量宽度对准的地址,其中
[0152]
针对所述第二矩阵中的每个第一列,使用被指派了所述特定片的所述相应的线程块的特定线程束的特定线程,将i)所述第一列中的所述第一值的向量与ii)所述稀疏矩阵中的所述特定行r的所述非零元素的向量相乘包括:
[0153]
掩蔽来自在所述稀疏矩阵中的所述特定行r之前的先前行的非零元素。
[0154]
实施例6是实施例1-5中的任一项所述的方法,其中:
[0155]
每个线程块由所述并行处理硬件设备的多个流式传输多处理器中的相应的流式传输多处理器处理;以及
[0156]
针对每一行的每个片,将该片指派给所述并行处理硬件设备的多个线程块中的相应的线程块包括:
[0157]
指派所述片,使得所述并行处理硬件设备的所述多个流式传输多处理器中的每个流式传输多处理器处理所述稀疏矩阵的近似相同数量的非零元素。
[0158]
实施例7是实施例6所述的方法,其中:
[0159]
指派所述片使得所述并行处理硬件设备的所述多个流式传输多处理器中的每个流式传输多处理器处理所述稀疏矩阵的近似相同数量的非零元素包括:
[0160]
指派这些片,使得所述并行处理硬件设备的所述多个流式传输多处理器中的每个
流式传输多处理器处理所述稀疏矩阵的近似相同数量的非零元素,包括:
[0161]
根据为执行相应的线程块而必须被处理的所述稀疏矩阵的非零元素的数量对所述线程块进行排序;以及
[0162]
将每个线程块以蛇形模式指派给所述流式传输多处理器中的相应的流式传输多处理器。
[0163]
实施例8是实施例1-7中的任一项所述的方法,其中,所述稀疏矩阵是神经网络的神经网络层的权重矩阵,所述第二矩阵是所述神经网络层的密集激活矩阵,并且所述输出矩阵是所述神经网络层的输出。
[0164]
实施例9是实施例1-7中的任一项所述的方法,其中,所述稀疏矩阵是神经网络的神经网络层的权重矩阵的转置,所述第二矩阵是所述神经网络的密集反向传播梯度矩阵,并且所述输出矩阵是所述神经网络层的梯度矩阵。
[0165]
实施例10是一种在并行处理设备上实现神经网络的方法,所述神经网络包括多个层,所述多个层包括至少一个稀疏神经网络层,
[0166]
所述稀疏神经网络层被配置为接收输入矩阵并且执行所述输入矩阵与稀疏权重矩阵之间的矩阵乘法以生成输出矩阵,其中所述稀疏权重矩阵具有大小m
×
k,所述输入矩阵具有大小k
×
n,并且所述输出矩阵具有大小m
×
n,所述方法包括:
[0167]
针对所述输出矩阵的所述m个行中的每一行,确定每个都包括来自该行的一个或多个元素的多个片;
[0168]
针对每一行的每个片,将该片指派给所述并行处理设备的多个线程块中的相应的线程块,其中每个线程块包括多个线程束,并且每个线程块的每个线程束包括多个线程;
[0169]
针对所述输出矩阵的所述m个行中的每一行r的每个特定片,确定所述输入矩阵中的多个第一列中的多个第一值,包括:
[0170]
针对所述特定片中的每个元素:
[0171]
标识该元素在所述输出矩阵的所述行r中的位置i,以及
[0172]
标识作为所述输入矩阵的第i列的第一列;以及
[0173]
针对所述稀疏权重矩阵中的所述特定行中的每个非零元素:
[0174]
标识所述非零元素在所述稀疏权重矩阵的所述行r中的位置j,以及
[0175]
标识所述输入矩阵的每个第一列中的处于该第一列中的位置j的第一值;以及
[0176]
针对所述输出矩阵的所述m个行中的每个特定行r的每个特定片使用被指派了所述特定片的所述相应的线程块来计算所述特定片中的每个元素的相应值,包括:
[0177]
针对所述输入矩阵中的每个第一列,使用被指派了所述特定片的所述相应的线程块的特定线程束的特定线程,将i)所述第一列中的所述第一值的向量与ii)所述稀疏权重矩阵中的所述特定行r的所述非零元素的向量相乘。
[0178]
实施例11是实施例10所述的方法,其中,行的每个片被指派给所述多个线程块中的不同线程块。
[0179]
实施例12是实施例10或11中的任一项所述的方法,其中,针对每一行的每个片,将该片指派给所述并行处理硬件设备的多个线程块中的相应的线程块包括:
[0180]
将多个片指派给特定线程块,
[0181]
针对被指派给所述特定线程块的所述多个片中的每个片,将该片指派给所述特定
线程块的所述线程束中的相应一个的多个子线程束中的相应一个。
[0182]
实施例13是实施例10-12中的任一项所述的方法,其中,所述稀疏权重矩阵是压缩稀疏行(csr)格式。
[0183]
实施例14是实施例13所述的方法,其中,针对所述输出矩阵的所述m个行中的每个特定行r的每个特定片,使用被指派了所述特定片的所述相应的线程块来计算所述特定片中的每个元素的相应值包括:
[0184]
加载所述稀疏权重矩阵中的所述特定行r的行偏移;
[0185]
计算所述稀疏权重矩阵中的所述特定行r的行长度;以及
[0186]
将所述行偏移递减到与所述并行处理硬件设备的向量宽度对准的地址,其中
[0187]
针对所述输入矩阵中的每个第一列,使用被指派了所述特定片的所述相应的线程块的特定线程束的特定线程,将i)所述第一列中的所述第一值的向量与ii)所述稀疏权重矩阵中的所述特定行r的所述非零元素的向量相乘包括:
[0188]
掩蔽来自在所述稀疏权重矩阵中的所述特定行r之前的先前行的非零元素。
[0189]
实施例15是实施例10-14中的任一项所述的方法,其中:
[0190]
每个线程块由所述并行处理硬件设备的多个流式传输多处理器中的相应的流式传输多处理器处理;以及
[0191]
针对每一行的每个片,将该片指派给所述并行处理硬件设备的多个线程块中的相应的线程块包括:
[0192]
指派所述片,使得所述并行处理硬件设备的所述多个流式传输多处理器中的每个流式传输多处理器处理所述稀疏权重矩阵的近似相同数量的非零元素。
[0193]
实施例16是实施例15所述的方法,其中:
[0194]
指派所述片使得所述并行处理硬件设备的所述多个流式传输多处理器中的每个流式传输多处理器处理所述稀疏权重矩阵的近似相同数量的非零元素包括:
[0195]
根据为执行相应的线程块而必须被处理的所述稀疏权重矩阵的非零元素的数量对所述线程块进行排序;以及
[0196]
将每个线程块以蛇形模式指派给所述流式传输多处理器中的相应的流式传输多处理器。
[0197]
实施例17是一种系统,包括一个或多个计算机和存储指令的一个或多个存储设备,所述指令在由所述一个或多个计算机执行时使得所述一个或多个计算机执行根据实施例1-16中的任一项所述的相应的方法的操作。
[0198]
实施例18是一种或多种非暂时性计算机存储介质,其存储指令,所述指令在由一个或多个计算机执行时使得所述一个或多个计算机执行根据实施例1-16中的任一项所述的相应方法的操作。
[0199]
虽然本说明书包含许多具体的实施方式细节,但是这些不应该被解释为对任何发明的范围或可以要求保护的范围的限制,而是作为针对特定发明的特定实施例的特征的描述。本说明书中在分离的实施例的上下文中描述的某些特征也能够组合地被实现在单个实施例中。相反,在单个实施例的上下文中描述的各种特征也能够分离地或以任何合适的子组合被实现在多个实施例中。此外,尽管特征可以在上文描述为以某些组合起作用并且甚至最初如此要求保护,但是来自所要求保护的组合的一个或多个特征能够在一些情况下从
该组合中删除,并且所要求保护的组合可以涉及子组合或子组合的变型。
[0200]
类似地,尽管操作以特定顺序描述在附图中描绘并且在权利要求中引述,但这不应被理解为要求以所示的特定顺序或按次序的顺序执行这样的操作,或者执行所有示出的操作以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上文所述的实施例中的各种系统模块和部件的分离不应该被理解为在所有的实施例中都需要这种分离,并且应当理解,所描述的程序组件和系统通常能够一起集成在单个软件产品中或封装成多个软件产品。
[0201]
已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中记载的动作能够以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不必然需要所示的特定顺序或按次序的顺序,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献