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

对数系统中的机器学习训练的制作方法

2022-08-30 20:49:57 来源:中国专利 TAG:

对数系统中的机器学习训练
1.相关申请的交叉引用
2.本技术根据35usc 119(e)要求2021年2月16日提交的美国申请序列号为63/149,972“使用乘法权重更新的对数系统中的低精度训练(low-precision training in logarithmic number system using multiplicative weight update)”的优先权和利益,其内容通过引用整体并入本文。


背景技术:

3.使用低精度数字实现深度神经网络(dnn)可以提高训练和推理的计算效率。虽然低精度推理现在是一种常见的做法,但由于学习算法和低精度数字系统之间的复杂交互,低精度训练仍然是一个具有挑战性的问题。低精度的一个重要应用是在能量受限的边缘设备中学习神经网络。许多应用中的智能边缘设备必须使用设备上学习来适应不断发展的非固定环境。
4.深度神经网络已广泛用于许多应用,包括图像分类和语言处理。然而,由于高精度算术和存储器占用,训练和部署dnn通常需要大量计算成本。传统上,神经网络中的数字由单精度浮点(32位)或半精度浮点(16位)表示。然而,这些高精度数字格式可能包含冗余,因此可以在保持足够准确度的同时进行量化以进行训练和推理。
5.最近,一种称为madam的乘法更新算法被提出用于训练神经网络,该算法专注于由任何相对距离度量而非仅相对熵描述的优化域。madam展示了在对数权重表示下训练神经网络的可能性。但是,madam需要全精度训练,而不需要连接基于lns的低精度训练。
附图说明
6.为了便于识别对任何特定元件或行为的讨论,附图标记中的最高有效数字是指第一次引入该元件的图号。
7.图1描绘了根据一个实施例的基本深度神经网络100。
8.图2描绘了根据一个实施例的人工神经元200。
9.图3描绘了在对数表示下使用梯度下降和madam更新权重的比较。
10.图4描绘了一个实施例中的dnn训练算法数据流400和端到端低精度训练系统。
11.图5描绘了根据一个实施例的神经网络训练和推理系统502。
12.图6描绘了根据一个实施例的数据中心600。
13.图7描绘了根据一个实施例的神经网络处理器700,其可以被配置为执行本文描述的技术的各个方面。
14.图8描绘了根据一个实施例的可以被配置为执行本文描述的技术的方面的本地处理元件800。
15.图9描绘了根据一个实施例的并行处理单元902。
16.图10描绘了根据一个实施例的通用处理集群1000。
17.图11描绘了根据一个实施例的存储器分区单元1100。
18.图12描绘了根据一个实施例的流式多处理器1200。
19.图13描绘了根据一个实施例的处理系统1300。
20.图14描绘了根据另一个实施例的示例性处理系统1400。
21.图15描绘了根据一个实施例的图形处理管线1500。
具体实施方式
22.本文公开了基于多基对数系统(lns)和乘法权重更新算法的端到端低精度训练框架的实施例。lns表现出高动态范围和计算能效,使其有利于例如在能量受限的边缘设备中进行机上训练。与使用定点数系统利用流行的学习算法(如sgd和adam)进行训练相比,即使在权重更新的精度受到很大限制的情况下,多基lns也能提供更高的计算能效和改进的预测精度。例如,将8位用于前向传播,5位用于激活梯度,以及16位用于权重梯度,一些实施例可以实现与全精度最先进模型(例如resnet-50和bert)相当的精度。在某些情况下,与16位浮点精度训练实现方式相比,在用于训练的电路中可以实现超过20倍的计算能量减少。
23.下面的描述在一些地方使用了数学方程。应该理解,这些方程简明地描述了各种计算算法。
24.公开了端到端低精度深度神经网络(dnn)训练系统的实施例,该系统利用低精度更新和计算进行前向传播、后向传播和权重更新。该系统利用对数系统(lns)来提高计算能效,并利用乘法权重更新算法(本文,
[0025]“lns-madam”)直接在权重的对数表示中更新权重。
[0026]
使用多基lns,其中对数基是2的幂。为了进一步提高计算/能量效率,我们公开了一种近似算法,用于多基lns中的转换算术。在训练期间,通过经训练的网络学习近似值可以减轻任何诱发的准确性下降。
[0027]
所公开的加法近似作为确定性操作对涉及层的通用矩阵乘法(gemm)进行操作,因此在训练期间本质上是学习的。网络权重基于近似的层权重而不是原始(非近似)层权重进行调整。换句话说,网络计算本质上考虑了权重近似的影响并相应地调整权重。这个过程可以被认为是一种量化感知学习,其中附加的量化操作与每个(例如,隐藏)层相关联。
[0028]
这里还公开了一种量化系统,用于所提出的端到端低精度训练系统。使用统一的位宽设置:8位前向传播、5位后向传播、16位权重梯度和全精度权重更新,多基lns可以达到与全精度最先进模型(例如resnet-50和bert)相当的精度。
[0029]
此外,权重更新的精度受到限制,并且在具有随机梯度下降的lns-madam和adam之间进行了比较,以在16位到10位的精度范围内进行权重更新。结果表明,当精度受到高度限制时,lns-madam始终保持较高的精度。对于squad和glue基准上的bert模型,当权重更新为10位时,lns-madam和adam的f-1分数之间的相对差距大于20%。
[0030]
对各种神经网络模型的多基lns的示例性能效分析(表1)表明,与16位浮点(fp16)实现方式相比,lns在数学数据路径电路中实现了20倍的能量降低。
[0031][0032]
表1
[0033]
本文使用的算法表示中,表示深度神经网络(dnn)的损失,而dnn本身由f(
·
w)表示。dnn包括多个层l,这些层包括由w表示的自适应权重。跨层的激活函数由x表示。
[0034]
前向传播逻辑的一般算法可以表示为
[0035][0036]
dnn的输入向量/信号用x0表示,并且f(x,w)=x
l

[0037]
用于更新激活值的反向传播逻辑的通用算法可以表示为
[0038][0039]
用于更新权重值的反向传播逻辑的通用算法可以表示为
[0040][0041]
对于数系统,β表示位宽(表示值的位数),x是任意数,xq是数x的量化值。
[0042]
根据所述实施例的技术利用多基对数系统,其中基数是二(2)的小数指数,使得
[0043][0044]
其中是位宽β-1的整数,γ是限制为二(2)的幂的基数因子,因此γ=2b,其中b是非负整数。基数因子γ设置数系统内连续可表示值之间的距离。
[0045]
点积运算在dnn训练中很常见。考虑神经网络的任意两个向量和激活向量它们由它们在lns中的整数指数和表示。它们之间的点积运算可以表示如下:
[0046][0047]
等式1
[0048]
其中在这种点积运算中,每个逐元素相乘被计算
为整数指数之间的加法,这通过使用加法器电路而不是乘法器电路显著提高了计算效率。然而,累加很难有效计算,因为它涉及首先从对数格式转换为线性格式,然后执行加法运算。这些格式之间的转换在计算上是昂贵的,因为它涉及使用多项式展开计算为了减轻转换的计算成本,使用混合方法来近似对数和线性数字表示格式之间的转换。
[0049]
对于对数系统,令和是分别表示等式1中的中间结果的商和余数的正整数,并且令所以,
[0050][0051]
等式2
[0052]
这里《《描述了左移位计算机指令或操作。这种变换通过在vr上应用高效的移位来实现快速转换,vr的值由余数定界。可以预先计算的不同的常数值并将其存储在硬件或软件查找表(lut)中,其中余数用于选择vr的常数。然后商确定将常数移动多远。因为γ=2b,指数的最低有效位(lsb)是余数,最高有效位(msb)是商。随着lut大小的增长,这种方法的转换计算开销显著增加。通常,lut需要包含2b个条目,用于存储vr的所有可能值,对于较大的b值,这可能是令人望而却步的存储器开销。
[0053]
减小lut大小的一种解决方案是利用mitchell近似算法:
[0054][0055]
当vr远离零或一时,由mitchell近似引起的近似误差可能很大。为了减轻这种误差,所公开的近似技术平衡了效率和近似误差。具体来说,p
ir
被拆分为p
irm
和p
irl
,分别代表余数的msb和lsb。lsb值使用mitchell近似进行近似,msb值使用lut预先计算和存储,使得:
[0056][0057]
等式3
[0058]
这里p
irm
和p
irl
表示p
ir
的b
m msb和b
l lsb位。这将lut的大小减少到条目。为了该算法的高效硬件实现,硬件寄存器可用于累加不同的部分和值,然后与来自lut的常数相乘。
[0059]
为了在训练期间降低值和算术的精度,可以使用对数量化算法(logquant:),例如可以使用以下:
[0060][0061]
等式4
[0062]
其中
[0063][0064]
logquant算法将实数量化为具有有限位数的整数指数。lns中每个数字的缩放因子或将实数值范围映射到可表示的整数指数范围。logquant算法首先将缩放的数字|x|/s带入它们的对数空间,通过基数因子γ将它们放大,然后执行舍入和钳位函数以将它们转换为整数指数
[0065]
应用的缩放因子的特定实现中的选择可能对量化误差和神经网络推理准确度产生重大影响。具有过多缩放因子的量化系统可能会降低计算效率并增加存储器利用率,而具有过少缩放因子的量化系统可能会承受增加量化误差。在所公开的方法中,不是在张量的多个维度上计算单个缩放因子,而是可以为张量的单个维度内的每个元素向量确定和应用缩放因子。这种按向量缩放技术实现了较低的量化误差,而无需额外的计算能量开销。这对于分布表现出具有高方差的宽范围的量化梯度可能特别有益。
[0066]
在一个实施例中,量化感知训练(qat)用于在前向传播期间量化权重和激活,其中每个量化器与直通估计器(ste)相关联,以在后向传递期间使梯度能够直接流过不可微分的量化器。qat将每个量化函数视为dnn中的附加非线性操作。因此,前向传递中任何量化器引起的确定性量化误差通过训练隐含地减轻。在前向传播期间,可以根据下式为dnn的每一层配置权重量化函数qw和激活量化函数qa:
[0067][0068]
一些实施例可以利用近似感知训练(qaa),在许多方面类似于qat,其将每个转换近似器应用为非线性操作器。因此,前向传递中的近似误差可以在训练期间类似地减轻。表2描述了针对各种lut大小和基数因子γ=8的各种标准训练集上使用的近似结果的示例性结果。近似的dnn网络实现了低精度损失,同时显著降低了训练和操作dnn以进行推理的计算能量成本。
[0069][0070]
表2
[0071]
为了加速训练,除了推理,梯度可能被量化为低精度数。许多训练模型中的梯度分布可能类似于高斯或对数正态分布。因此,在量化梯度时,对数表示可能比定点表示更合适。可以使用量化函数qe量化激活梯度,使用量化函数qg量化权重梯度,例如根据以下算法:
[0072][0073]
下面的表3描述了各种标准训练集和任务的基准测试结果。该表提供了多基lns与定点和全精度(fp32)数系统的基准比较。基准测试使用跨任务的统一位宽设置:权重qw和激活qa为8位,激活梯度qe为5位,权重梯度qg为16位,在所有情况下使用lut=4的近似lns。在squad数据集上,lns和定点数系统实现之间明显存在相对较大的性能差距,因为定点数系统需要更大的qe位宽。
[0074]
表3显示了各种任务和数据集的结果,其中权重更新以全精度执行。对权重和激活使用8位精度,对权重梯度使用16位精度,对激活梯度使用5位精度,始终显示几乎没有损失或退化。多基lns始终优于定点数系统,并达到与全精度对应物相当的准确度。
[0075][0076]
表3
[0077]
lns下低精度权重更新的影响是复杂的。引入,更新权重的精度显著影响训练质量。全精度权重更新的广义形式可以表示为:
[0078]
[0079]
这里u代表任何学习算法。例如,梯度下降(gd)权重更新算法采用以下形式
[0080][0081]
其中η是控制学习速率的预定义参数。
[0082]
低精度权重更新可以表示如下:
[0083][0084]
等式5
[0085]
这里qu是更新的权重的量化函数。值wu可以直接以低精度格式存储。为简单起见,假设u为全精度函数。u的值可以使用低精度算术计算并以低精度存储其中间结果,例如一阶矩估计。
[0086]
两级量化可用于权重值。在前向和后向传播中,可以为权重配置相对较小的位宽βw,以高效地计算通常非常大量的通用矩阵乘法(gemm)。在权重更新期间,由于累加更新所需的精度,可以使用相对较大(与βw相比)的位宽βu。对权重使用两级量化实际上可能等同于使用带有额外高精度梯度累加器的单级权重量化,尽管在某些情况下使用梯度累加器可能涉及更少的硬件资源。
[0087]
量化误差是由qu引起的。随着量化误差的减小,更新后的权重与其可表示的对应物之间的不匹配变得更小。这种量化误差不仅取决于qu,还取决于量化qu和学习算法u之间的相互作用。
[0088]
以下描述适用于多基lns低精度框架,其中qu=logquant。首先,考虑经典的梯度下降(gd)算法u
gd
。其对应的基于lns的低精度权重更新算法为:
[0089][0090]
该算法使用来更新权重,η与权重的量值无关。然而,表示差距(即连续离散化级别之间的距离)在lns中随着权重远离零而变大。这加剧了gd生成的更新与lns中的表示差距之间的不匹配。结果,更新可能比相应的表示差距小几个数量级,如先前在图3中所描绘的。也就是说,当权重变大时,logquant和gd引起的量化误差会被放大。这种不匹配经常发生,因为gd生成的更新与权重量值不成比例。为了缓解这种不匹配问题,可以使用一种新的乘法学习算法lns-madam。代码清单(code listings)中提供了lns-madam的实施例算法。
[0091]
传统的madam优化器使用归一化梯度以乘法方式更新权重:
[0092][0093]
等式6
[0094]
这里

表示逐元素相乘,g表示全精度梯度,g*是归一化梯度。归一化梯度g*是梯度g与其二阶矩估计的平方根之间的分数。
[0095]
由于其乘法特性,madam算法自然地生成与权重大小成比例的更新。lns-madam是
为多基lns量身定制的madam的修改变体:
[0096][0097]
等式7
[0098]
在lns-madam中,对数基数从自然对数e更改为二(2),以通过选择不同的学习率η来减轻权重大小的影响。梯度也改变为一阶梯度估计以产生方差减少的归一化梯度。基数因子γ可以被配置为联合调整lns和lns-madam算法。通过在对数空间中表示等式7,可以看到lns-madam直接优化(在使算法更准确和有效的意义上)存储在多基lns中的权重的整数指数:
[0099][0100]
等式8
[0101]
此外,考虑到低精度的权重更新,logquant通过在上直接应用轮函数和钳位函数来量化更新的权重,而无需在线性空间和对数空间之间进行转换。如等式8所示,基数因子γ将学习算法和对数表示相结合。基数因子不仅设置表示的精度,而且提供确定每个权重可能因更新而变化多远的潜在强度。
[0102]
在一个实施例中,多基lns可以使用基于pytorch的神经网络量化库来实现,该库实现了一组通用神经网络层(例如,卷积、全连接),用于在全模式和量化模式下进行训练和推理。可以根据本文描述的实施例扩展对定点数系统中的整数量化的库支持以支持对数系统。该库还提供了用于将值缩放到特定数字格式的可表示整数范围的实用程序。使用这个库,一个典型的量化层包括一个以浮点实现的传统层,前面是权重量化器和输入量化器,将层的权重和输入转换为所需的量化格式。对于后向传递,在梯度通过每个量化器中的ste之后,值也被logquant量化。
[0103]
量化可以应用于dnn权重w、激活x、权重梯度和激活梯度。有效的数字系统应该有适用于不同应用的位宽设置。因此,可以使用位宽的统一配置。例如,可以使用8-8-5-16配置,分别表示qw、qa、qe和qg的位宽。多基lns的基数因子的设置在一个实施例中可以设置为:对于qw和qa,γ=8,对于qe和qg,γ=1。
[0104]
在一个实施例中,近似器仅应用于前向传播以实现近似感知训练。训练后,可以部署一个近似模型以进行更快、更有效的推理。在基数因子γ=8的情况下,可以评估从lut=1到lut=8的近似设置。如表2所示,对于许多实际应用,转换近似不会导致不可接受的精度下降。
[0105]
为了对lns-madam进行基准测试,考虑低精度权重更新,方法是在每次更新迭代时对更新的权重应用qu=logquant,利用多基lns作为基础数字系统,并为qw、qa、qe和qg实现相同的位宽配置,如上所述。此基准测试中未应用转换近似,它将各种数据集上的lns-madam与传统优化器进行比较。bert-base用作squad和glue基准测试的评估集。对于lns-madam,学习率η表示为二(2)的幂,以适应基数因子设置。η的值从2-4
调整为2-10
,并为η每个任务选择具有优异结果的η。乘法学习算法可以利用不同于传统学习算法的初始化。因此,对于
imagenet基准,随机梯度下降(sgd)被用作前10个代(epoch)的“热身”梯度算法,以缓解这个初始化问题。qu的位宽从16位到10位不等,以测试lns-madam在一系列位宽设置上的性能。为了保持qu的动态范围与qw的范围相同,基数因子γ随着位宽变大而增加。例如,16位qu与基数因子γ=2048相关联。当精度在低端受到限制时,这些基准中的lns-madam始终提供比传统优化器更高的精度。对于squad和glue基准上的bert模型,当权重更新为10位时,lns-madam和adam的f-1分数之间的相对差距大于20%。
[0106]
通常,通过在训练期间应用多基对数系统以低精度更新神经网络的权重,并通过在对数表示中将乘法更新应用于权重,可以获得神经网络能量利用率的改进。这通常可以涉及计算权重梯度的估计的一阶矩和二阶矩的比率。在该过程中使用的量化通常可以涉及形成精确位宽和对数基因子的比率,并将该比率应用为2的幂的指数。类似的比率可以用作在神经网络中的权重更新、反向传播和前馈计算之间变化的两个对数基数的幂的指数。通常,一个小的(《10个条目)查找表可以与左移操作一起使用,以在权重更新期间近似多基对数系统中的加法。
[0107]
与用于训练的传统16位和32位浮点计算相比,用于训练的反馈(例如,反向传播)、前馈信号(例如,激活)和权重更新都可以以低精度计算。
[0108]
参考以下某些术语可以最好地理解以下描述。
[0109]“反向传播”是指神经网络中使用的一种算法,用于计算用于更新神经网络中权重的梯度。反向传播算法通常用于训练神经网络。在反向传播中,损失函数计算神经网络的实际输出与神经网络的预期输出之间的差。
[0110]“偏差加法”是指包含用于神经网络层的一个或更多个神经元的偏差(例如,固定输出值或输出值的增量)。偏差加法是一种技术,用于确保当一层未检测到其输入中的任何特征时,该层的至少一个神经元对下一层产生非零激活。
[0111]“缓冲器”是指存储作为计算输入或计算结果的值的存储器。
[0112]“控制器”是指控制其他逻辑操作的任何逻辑。当控制器以硬件实现时,它可以是微处理器、图形处理单元或使用专用集成电路(asic)实现的定制控制器、片上系统(soc)或本领域已知的许多其他方式的许多众所周知模型中的一种。控制器也可以在软件或固件中实现,作为存储在易失性存储器或非易失性存储器中的计算机指令。控制器通常用于协调系统中一个或更多个其他组件的操作,例如向其他组件提供信号以启动和停止它们的操作,或者用特定命令指示其他组件执行。一般而言,如果此处未指定控制器的特定算法,则应理解为执行控制器功能的逻辑将容易被本领域普通技术人员理解和实现(例如,通过编程代码/指令)。
[0113]“深度神经网络”是指具有一个或更多个隐藏层的神经网络。
[0114]“点积累加”是指点积的计算。点积是两个数字序列(向量)的相应条目的乘积之和。使用向量乘法累加单元有效地计算点积。
[0115]“边缘设备”是指位于网络终端叶节点上的网络耦合设备。
[0116]“全连接层”是指其中每个神经元与前一层中的所有激活都有连接的层。
[0117]“全局存储器缓冲器”是指可供芯片上的所有或至少多个处理元件使用的缓冲器。
[0118]“输入激活”是指神经网络中的神经元接收到的激活。
[0119]“输入层”是指神经网络的第一层,它接收输入值以进行分析和分类。
[0120]“损失函数”也称为成本函数或误差函数(不要与高斯误差函数混淆),是将一个或更多个变量的值映射到直观地表示与这些值相关联的一些“成本”的一个实数上的函数。
[0121]“低精度”通常是指小于16位或32位浮点精度的任何计算精度,如在传统神经网络训练中使用的那样。
[0122]“多播”是指一种组通信机制,其中数据的传输同时被寻址到一组目标设备(例如,处理元件)。多播可以实现一对多或多对多的分发。
[0123]“乘法累加单元”是指执行乘法累加运算的数据处理电路,其中涉及计算两个数字的乘积并将该乘积加到累加器中。乘法累加单元在本文中可以通过它们的首字母缩写词、mac或mac单元来指代。乘法累加单元执行a《-a (b*c)形式的计算。向量乘法累加单元使用乘法器阵列计算两个向量的乘积,然后通过将乘法器的所有输出相加来执行归约运算以产生部分和,然后将其添加到累加器中。
[0124]“输出激活”是指神经网络中神经元的激活输出。输出激活通常基于神经元的输入激活和应用于输入激活的权重来计算。
[0125]“输出层”是指神经网络的最后一层,它生成应用于输入层的值的一个或更多个分类。
[0126]“部分和”是指点积累加计算中的中间乘法累加结果。
[0127]“后处理器”是指在乘法和累加之后应用的神经网络计算中的逻辑。
[0128]“权重”是指与激活相乘以增加或减少激活函数中激活值的影响的值。
[0129]
图1描绘了基本的深度神经网络100(dnn),其包括被组织成层的被称为人工神经元的连接单元或节点的集合。层之间的每个耦合可以将信号从一个人工神经元传输到另一个人工神经元。接收信号的内部(隐藏)层中的人工神经元对其进行处理,然后向与其连接的其他人工神经元发出信号。
[0130]
在常见的实现方式中,人工神经元之间耦合处的信号是实数,并且每个人工神经元的输出由其输入之和的某个非线性函数(激活函数)计算。人工神经元之间的耦合称为“边缘”或轴突。人工神经元和边缘通常具有随着学习进行而调整的权重。权重增加或减少连接处的信号强度。权重是根据在网络训练期间使用的损失函数102演化的。在某些情况下,激活函数(例如,激活阈值)也可以在学习期间根据损失函数102演变。人工神经元可能具有阈值(触发阈值),使得仅当聚合接收信号超过该阈值时才发送信号。
[0131]
通常,人工神经元被排列成层。不同的层可以对其输入执行不同类型的变换而成为激活。可能在遍历一个或更多个中间层(称为隐藏层108)之后,信号从第一层(输入层104)传播到最后一层(输出层106)。
[0132]
参考图2,接收来自前任神经元的输入的人工神经元200包括以下组件:
[0133]
·
输入xi;
[0134]
·
权重wi,应用于输入;
[0135]
·
可选的阈值(b),它可以由学习函数演变而来;以及
[0136]
·
激活函数202,其计算来自先前神经元输入的输出和阈值,如果有的话。
[0137]
输入神经元没有前任,而是作为整个网络的输入接口。类似地,输出神经元没有后继,因此作为整个网络的输出接口。
[0138]
该网络包括连接,每个连接将一层中的神经元的输出传输到下一层中的神经元的
输入。每个连接带有一个输入x并被指派一个权重w。对于来自先前层的输入,输入x称为激活。
[0139]
激活函数202通常具有前任神经元的输入的加权值的乘积之和的形式。
[0140]
学习规则是修改神经网络参数的规则或算法,以使网络的给定输入产生有利的输出。学习过程通常涉及修改网络内的神经元和连接的权重(根据权重更新函数204),有时还涉及修改网络内的神经元和连接的阈值(根据激活函数202的更新)。
[0141]
图3描绘了在对数表示下使用梯度下降(gd)和madam更新权重的比较。每个坐标(粗竖线)代表一个存储在lns中的数字。假设两个圆圈的权重接收相同的梯度。由gd生成的更新会随着权重的增大而被忽略,而由madam生成的更新会随着权重进行调整。
[0142]
图4描绘了一个实施例中的dnn训练算法数据流400和端到端低精度训练系统。在训练算法数据流400中,所有操作数(权重和激活更新、梯度等)都是低精度的。
[0143]
针对第l层的前向传递402、后向传递404、损失算法l406和权重更新408描绘了训练算法数据流400,其中低精度值流过系统。
[0144]
图5描绘了在普通商业应用中使用神经网络训练和推理系统502的示例性场景。神经网络训练和推理系统502可以用在计算系统504、车辆506和机器人508中,仅举几个例子。
[0145]
神经网络训练和推理系统的一种常见实现是在数据中心中。例如,许多软件即服务(saas)系统利用托管在数据中心中的神经网络训练和/或推理。
[0146]
图6描绘了一个实施例中的示例性数据中心600,该数据中心600可以被配置为执行本文描述的神经网络训练技术的各个方面。在至少一个实施例中,数据中心600包括但不限于数据中心基础设施层602、框架层604、软件层606和应用层608。
[0147]
在至少一个实施例中,如图6所示,数据中心基础设施层602可以包括资源协调器610、分组计算资源612和节点计算资源(“节点c.r.”)节点c.r.614a、节点c.r.614b、节点c.r.614c、
……
节点c.r.n),其中“n”表示任何整数,正整数。在至少一个实施例中,节点c.r.可以包括但不限于任何数量的中央处理单元(“cpu”)或其他处理器(包括加速器、现场可编程门阵列(“fpga”)、图形处理器等)、存储器设备(例如,动态只读存储器)、存储设备(例如,固态或磁盘驱动器)、网络输入/输出(“nw i/o”)设备、网络交换机、虚拟机(“vm”)、电源模块、冷却模块等。在至少一个实施例中,节点c.r.中的一个或更多个节点c.r.可以是具有上述计算资源中的一个或更多个的服务器。例如,一个或更多个节点计算资源可以包括一个或更多个神经网络训练和推理系统502、神经网络处理器700、处理元件800和/或并行处理单元902,其配置有执行本文公开的神经网络训练技术的实施例的逻辑。
[0148]
在至少一个实施例中,分组计算资源612可以包括容纳在一个或更多个机架(未示出)内的节点c.r.的单独分组,或者容纳在不同地理位置的数据中心中的许多机架(也未示出)。分组计算资源612内的节点c.r.的单独分组可包括可被配置或分配以支持一个或更多个工作负载的分组计算、网络、存储器或存储资源。在至少一个实施例中,包括cpu或处理器的若干节点c.r.可以在一个或更多个机架内分组以提供计算资源以支持一个或更多个工作负载。在至少一个实施例中,一个或更多个机架还可以包括任意组合的任意数量的电源模块、冷却模块和网络交换机。
[0149]
在至少一个实施例中,资源协调器610可以配置或以其他方式控制一个或更多个节点c.r.和/或分组计算资源612。在至少一个实施例中,资源协调器610可以包括数据中心
600的软件设计基础设施(“sdi”)管理实体。在至少一个实施例中,资源协调器610可以包括硬件、软件或其某种组合。
[0150]
在至少一个实施例中,如图6所示,框架层604包括但不限于作业调度器616、配置管理器618、资源管理器620和分布式文件系统622。在至少一个实施例中,框架层604可以包括用于支持软件层606的软件624和/或应用层220的一个或更多个应用626的框架。在至少一个实施例中,软件624或一个或更多个应用626可分别包括基于网络的服务软件或应用,例如由亚马逊网络服务(amazon web services)、谷歌云(google cloud)和微软azure提供的那些。在至少一个实施例中,框架层604可以是但不限于一种类型的免费和开源软件web应用框架,例如apache sparktm(以下简称“spark”),其可以将分布式文件系统622用于大型规模数据处理(例如,“大数据”)。在至少一个实施例中,作业调度器616可以包括spark驱动器,以便于调度由数据中心600的各个层支持的工作负载。在至少一个实施例中,配置管理器618可能能够配置不同的层,例如软件层606和框架层604,包括用于支持大规模数据处理的spark和分布式文件系统622。在至少一个实施例中,资源管理器620可能能够管理映射到或分配用于支持分布式文件系统622和分布式文件系统622的集群或分组计算资源。在至少一个实施例中,集群或分组计算资源可以包括在数据中心基础设施层602的分组计算资源612。在至少一个实施例中,资源管理器620可以与资源协调器610协调以管理这些映射或分配的计算资源。
[0151]
在至少一个实施例中,包括在软件层606中的软件624可以包括由框架层604的节点c.r.、分组计算资源612和/或分布式文件系统622的至少一部分使用的软件。一种或更多种类型的软件可能包括但不限于互联网网页搜索软件、电子邮件病毒扫描软件、数据库软件和流式视频内容软件。
[0152]
在至少一个实施例中,包括在应用层608中的一个或更多个应用626可以包括由框架层604的节点c.r.、分组计算资源612和/或分布式文件系统622的至少一部分使用的一种或更多种类型的应用。在至少一种或更多种类型的应用中,可以包括但不限于cuda应用、5g网络应用、人工智能应用、数据中心应用和/或其变体。
[0153]
在至少一个实施例中,配置管理器618、资源管理器620和资源协调器610中的任何一个可以基于以任何技术上可行的方式获取的任何数量和类型的数据来实施任何数量和类型的自修改动作。在至少一个实施例中,自修改动作可以使数据中心600的数据中心操作员免于做出可能糟糕的配置决策并可能避免数据中心的未充分利用和/或性能不佳的部分。
[0154]
图7描绘了一个实施例中的神经网络处理器700,其可以包括或配置有执行本文公开的神经网络训练技术的逻辑。神经网络处理器700在多个处理元件702之间执行计算流(例如,用于训练和/或推理)。神经网络处理器700还包括全局缓冲器704和控制器706,例如可以是risc-v处理器。处理元件702通过路由器708或其他互连技术彼此通信并与全局缓冲器704通信(参见gpu实现,下文进一步描述)。路由器708可以集中或以分布式方式实现为每个处理元件702上的路由器。
[0155]
图8以高级方式描绘了示例性处理元件800。处理元件800包括多个向量乘法累加单元802、权重缓冲器804、激活缓冲器806、路由器808、控制器810、累加存储器缓冲器812和后处理器814。在一个实施例中,激活缓冲器806可以被实现为双端口sram以经由路由器808
或其他互连从全局缓冲器704或从其他本地或全局处理元件接收激活值。路由器808可以是分布式路由器708的组件,其在一个实施例中包括串行器/解串行器、打包器、仲裁器、高级可扩展接口(advanced extensible interface)和本领域已知的其他组件。
[0156]
在一个实施例中,权重缓冲器804可以被实现为存储权重值的单端口sram。向量乘法累加单元802使用的权重值可以是“权重固定的”,这意味着它们不会在每个时钟周期更新,而是仅在为深度神经网络的特定层计算输出激活值之后才更新。
[0157]
累加存储器缓冲器812可以包括一个或更多个sram设备以存储由向量乘法累加单元802计算的输出激活。路由器808将这些输出激活和控制信号从处理元件800传送到其他处理元件。“输出激活”是指神经网络中神经元的激活输出。输出激活通常基于神经元的输入激活和应用于输入激活的权重来计算。“输入激活”是指神经网络中的神经元接收到的激活。
[0158]
处理元件800可以有效地执行dnn的卷积层和全连接层的操作,包括乘法累加、截断、缩放、偏置加法、relu和池化(后处理器814中的最后五个,这可以包括权重更新、激活计算/更新和/或利用本文所述的低精度计算技术的梯度计算逻辑中的一项或更多项)。向量乘法累加单元802可以使用不同的滤波器对相同的输入进行操作。在一个实施例中,每个向量乘法累加单元802在每个时钟周期执行八输入通道点积并将结果累加到累加存储器缓冲器812中。存储在权重缓冲器804中的权重在输出激活的整个计算完成之前是不变的。每个处理元件800在每个时钟周期读取激活缓冲器806中的输入激活,执行乘法累加操作,并且将输出激活写入累加存储器缓冲器812。访问权重缓冲器804的频率取决于输入激活矩阵的维度和使用的滤波器的数量。
[0159]
每个处理元件800的向量乘法累加单元802计算宽点积累加的一部分作为部分结果并将部分结果转发到相邻处理元件。“点积累加”是指点积的计算。点积是两个数字序列(向量)的相应条目的乘积之和。使用向量乘法累加单元有效地计算点积。“乘法累加单元”是指执行乘法累加运算的数据处理电路,其中涉及计算两个数字的乘积并将该乘积加到累加器中。乘法累加单元在本文中可以通过它们的首字母缩写词mac或mac单元来指代。乘法累加单元执行a《-a (b*c)形式的计算。向量乘法累加单元使用乘法器阵列计算两个向量的乘积,然后通过将乘法器的所有输出相加来执行归约运算以产生部分和,然后将其添加到累加器中。
[0160]
后处理器814将部分结果转换成最终结果并传送到全局缓冲器704。全局缓冲器704充当用于深度神经网络的层之间的最终乘法累加结果的暂存区域。
[0161]
累加存储器缓冲器812接收来自向量乘法累加单元802的输出。中央控制器706在处理元件之间分配权重值和激活值,并利用全局存储器缓冲器作为激活值的二级缓冲器。当处理图像时,控制器706在空间上通过输入/输出通道尺寸跨越处理元件以及在时间上通过图像高度/宽度来配置深度神经网络的层的处理。
[0162]
全局缓冲器704存储来自处理元件702的输入激活和输出激活,用于由上述收发器经由例如多播分发到处理元件。“多播”指的是一种组通信机制,其中数据的传输同时被寻址到一组目标设备(例如,处理元件)。多播可以实现一对多或多对多的分发。在一个实施例中,处理元件702中的一些或全部包括路由器808以在每个时钟周期传送64位数据输入和64位数据输出。这使得能够累加其计算在空间上跨处理元件702平铺的宽点积的部分和。
[0163]
本文公开的算法和技术可以由利用一个或更多个图形处理单元(gpu)和/或通用数据处理器(例如,中央处理单元或cpu)的计算设备来执行。例如,控制器706、控制器810或更通用的计算平台可以包括一个或更多个gpu/cpu,用于实现所公开的算法和技术。在一些情况下,算法或算法的部分可以实现为硬件电路中的指令集架构指令/扩展,和/或微编码指令。现在将描述可以被配置为在这样的设备上执行本文所公开的技术的示例性架构。
[0164]
以下描述可能使用某些首字母缩写词和缩写,如下所示:
[0165]
·“dpc”是指“数据处理集群”;
[0166]
·“gpc”是指“通用处理集群”;
[0167]
·“i/o”指的是“输入/输出”;
[0168]
·“l1高速缓存”是指“一级高速缓存”;
[0169]
·“l2高速缓存”是指“二级高速缓存”;
[0170]
·“lsu”是指“加载/存储单元”;
[0171]
·“mmu”是指“存储器管理单元”;
[0172]
·“mpc”指的是“m管控制器”;
[0173]
·“ppu”是指“并行处理单元”;
[0174]
·“prop”是指“预光栅操作单元”;
[0175]
·“rop”是指“光栅操作”;
[0176]
·“sfu”是指“特殊功能单元”;
[0177]
·“sm”是指“流式多处理器”;
[0178]
·“视口scc”是指“视口缩放、剔除和剪辑”;
[0179]
·“wdx”是指“工作分发纵横式交换矩阵(crossbar)”;以及
[0180]
·“xbar”是指“纵横式交换矩阵”。
[0181]
并行处理单元
[0182]
图9示出了根据一个实施例的并行处理单元(ppu)902。在一个实施例中,并行处理单元902是在一个或更多个集成电路器件上实现的多线程处理器。并行处理单元902是设计用于并行处理许多线程的延迟隐藏架构。线程(即,执行线程)是被配置为由并行处理单元902执行的指令集的实例化。在一个实施例中,并行处理单元902是图形处理单元(gpu),其被配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成用于在显示设备(诸如液晶显示(lcd)设备)上显示的二维(2d)图像数据。在其他实施例中,并行处理单元902可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
[0183]
一个或更多个并行处理单元902模块可以被配置为加速数千个高性能计算(hpc)、数据中心和机器学习应用。并行处理单元902可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
[0184]
如图9所示,并行处理单元902包括i/o单元904、前端单元906、调度器单元908、工作分发单元910、集线器912、纵横式交换矩阵914、一个或更多个通用处理集群1000模块以
及一个或更多个存储器分区单元1100模块。并行处理单元902可以经由一个或更多个高速nvlink 916互连连接到主机处理器或其他并行处理单元902模块。并行处理单元902可以经由互连918连接到主机处理器或其他外围设备。并行处理单元902还可以连接到包括多个存储器920设备的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(dram)设备。dram设备可以被配置为高带宽存储器(hbm)子系统,其中多个dram管芯堆叠在每个设备内。存储器920可以包括配置并行处理单元902以执行本文公开的技术的方面的逻辑。
[0185]
nvlink 916互连使得系统能够扩展并且包括与一个或更多个cpu结合的一个或更多个并行处理单元902模块,支持并行处理单元902模块和cpu之间的高速缓存一致性,以及cpu主控。数据和/或命令可以由nvlink916通过集线器912发送到并行处理单元902的其他单元或从并行处理单元902的其他单元发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图13更详细地描述nvlink916。
[0186]
i/o单元904被配置为通过互连918从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。i/o单元904可以经由互连918直接与主机处理器通信,或通过一个或更多个中间设备(诸如存储器桥)与主机处理器通信。在一个实施例中,i/o单元904可以经由互连918与一个或更多个其他处理器(例如,一个或更多个并行处理单元902模块)通信。在一个实施例中,i/o单元904实现外围组件互连快速(pcie)接口,用于通过pcie总线进行通信,并且互连918是pcie总线。在替代的实施例中,i/o单元904可以实现其他类型的公知接口,用于与外部设备进行通信。
[0187]
i/o单元904对经由互连918接收的数据包进行解码。在一个实施例中,数据包表示被配置为使并行处理单元902执行各种操作的命令。i/o单元904按照命令指定将解码的命令发送到并行处理单元902的各种其他单元。例如,一些命令可以被发送到前端单元906。其他命令可以被发送到集线器912或并行处理单元902的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,i/o单元904被配置为在并行处理单元902的各种逻辑单元之间和之中路由通信。
[0188]
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向并行处理单元902提供工作负载用于处理。工作负载可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和并行处理单元902两者访问(例如,读/写)的区域。例如,i/o单元904可以被配置为经由通过互连302918传输的存储器请求访问连接到互连918的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向并行处理单元902发送指向命令流开始的指针。前端单元906接收指向一个或更多个命令流的指针。前端单元906管理一个或更多个流,从流读取命令并将命令转发到并行处理单元902的各个单元。
[0189]
前端单元906耦合到调度器单元908,其配置各种通用处理集群1000模块以处理由一个或更多个流定义的任务。调度器单元908被配置为跟踪与由调度器单元908管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个通用处理集群1000,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元908管理一个或更多个通用处理集群1000模块上的多个任务的执行。
[0190]
调度器单元908耦合到工作分发单元910,其被配置为分派任务以在通用处理集群
1000模块上执行。工作分发单元910可以跟踪从调度器单元908接收到的若干调度的任务。在一个实施例中,工作分发单元910为每个通用处理集群1000模块管理待决(pending)任务池和活动任务池。待决任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定通用处理集群1000处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由通用处理集群1000模块主动处理的任务。当通用处理集群1000完成任务的执行时,该任务从通用处理集群1000的活动任务池中逐出,并且来自待决任务池的其他任务之一被选择和调度以在通用处理集群1000上执行。如果通用处理集群1000上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从通用处理集群1000中逐出并返回到待决任务池,而待决任务池中的另一个任务被选择并调度以在通用处理集群1000上执行。
[0191]
工作分发单元910经由纵横式交换矩阵914与一个或更多个通用处理集群1000模块通信。纵横式交换矩阵914是将并行处理单元902的许多单元耦合到并行处理单元902的其他单元的互连网络。例如,纵横式交换矩阵914可以被配置为将工作分发单元910耦合到特定的通用处理集群1000。虽然没有明确示出,但并行处理单元902的一个或更多个其他单元也可以经由集线器912连接到纵横式交换矩阵914。
[0192]
任务由调度器单元908管理并由工作分发单元910分派给通用处理集群1000。通用处理集群1000被配置为处理任务并生成结果。结果可以由通用处理集群1000内的其他任务消耗,经由纵横式交换矩阵914路由到不同的通用处理集群1000,或者存储在存储器920中。结果可以经由存储器分区单元1100模块写入存储器920,存储器分区单元1100模块实现用于从存储器920读取数据和向存储器920写入数据的存储器接口。结果可以通过nvlink 916发送到另一个并行处理单元902或cpu。在一个实施例中,并行处理单元902包括数目为u的存储器分区单元1100模块,其等于耦合到并行处理单元902的独立且不同的存储器920设备的数目。下面将结合图11更详细地描述存储器分区单元1100。
[0193]
在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动程序内核,其使得在主机处理器上执行的一个或更多个应用程序能够调度操作以在并行处理单元902上执行。在一个实施例中,多个计算应用由并行处理单元902同时执行,并且并行处理单元902为多个计算应用程序提供隔离、服务质量(qos)和独立地址空间。应用程序可以生成指令(例如,api调用),其使得驱动程序内核生成一个或更多个任务以由并行处理单元902执行。驱动程序内核将任务输出到正在由并行处理单元902处理的一个或更多个流。每个任务可以包括一组或更多组相关线程,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图12更详细地描述线程和协作线程。
[0194]
图10示出了根据一个实施例的图9的并行处理单元902的通用处理集群1000。如图10所示,每个通用处理集群1000包括用于处理任务的多个硬件单元。在一个实施例中,每个通用处理集群1000包括管线管理器1002、预光栅操作单元1004、光栅引擎1006、工作分发纵横式交换矩阵1008、存储器管理单元1010以及一个或更多个数据处理集群1012。应当理解,图10的通用处理集群1000可以包括代替图10中所示单元的其他硬件单元或除图10中所示单元之外的其他硬件单元。
[0195]
在一个实施例中,通用处理集群1000的操作由管线管理器1002控制。管线管理器1002管理用于处理分配给通用处理集群1000的任务的一个或更多个数据处理集群1012模
块的配置。在一个实施例中,管线管理器1002可以配置一个或更多个数据处理集群1012模块中的至少一个来实现图形渲染管线的至少一部分。例如,数据处理集群1012可以被配置为在可编程流式多处理器1200上执行顶点着色器程序。管线管理器1002还可以被配置为将从工作分发单元910接收的数据包路由到通用处理集群1000内的适当的逻辑单元。例如,一些数据包可以被路由到预光栅操作单元1004和/或光栅引擎1006中的固定功能硬件单元,而其他数据包可以被路由到数据处理集群1012模块以供图元引擎1014或流式多处理器1200处理。在一个实施例中,管线管理器1002可以配置一个或更多个数据处理集群1012模块中的至少一个以实现神经网络模型和/或计算管线。
[0196]
预光栅操作单元1004被配置为将由光栅引擎1006和数据处理集群1012模块生成的数据路由到光栅操作(rop)单元,结合图11更详细地描述。预光栅操作单元1004还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
[0197]
光栅引擎1006包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎1006包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,在剔除引擎中,与未通过z-测试的图元相关联的片段被剔除,并且被发送到裁剪引擎,在裁剪引擎中,位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎1006的输出包括例如要由在数据处理集群1012内实现的片段着色器处理的片段。
[0198]
包括在通用处理集群1000中的每个数据处理集群1012包括m管控制器1016、图元引擎1014和一个或更多个流式多处理器1200模块。m管控制器1016控制数据处理集群1012的操作,将从管线管理器1002接收到的数据包路由到数据处理集群1012中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎1014,图元引擎1014被配置为从存储器920提取与顶点相关联的顶点属性。相反,与着色器程序相关联的数据包可以被发送到流式多处理器1200。
[0199]
流式多处理器1200包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个流式多处理器1200是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,流式多处理器1200实现单指令、多数据(simd)架构,其中线程组(例如,线程束)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,流式多处理器1200实现单指令、多线程(simt)架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图12更详细地描述流式多处理器1200。
[0200]
存储器管理单元1010提供通用处理集群1000和存储器分区单元1100之间的接口。
存储器管理单元1010可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,存储器管理单元1010提供用于执行从虚拟地址到存储器920中的物理地址的转换的一个或更多个转换后备缓冲器(tlb)。
[0201]
图11示出了根据一个实施例的图9的并行处理单元902的存储器分区单元1100。如图11所示,存储器分区单元1100包括光栅操作单元1102、二级高速缓存1104和存储器接口1106。存储器接口1106耦合到存储器920。存储器接口1106可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,并行处理单元902合并了u个存储器接口1106模块,每对存储器分区单元1100模块有一个存储器接口1106,其中每对存储器分区单元1100模块连接到对应的存储器920设备。例如,并行处理单元902可以连接到多达y个存储器920设备,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储。
[0202]
在一个实施例中,存储器接口1106实现hbm2存储器接口,并且y等于u的一半。在一个实施例中,hbm2存储器堆叠位于与并行处理单元902相同的物理封装上,提供与常规gddr5 sdram系统相比显著的功率和面积节约。在一个实施例中,每个hbm2堆叠包括四个存储器管芯并且y等于4,其中hbm2堆叠包括每个管芯两个128位通道,总共8个通道和1024位的数据总线宽度。
[0203]
在一个实施例中,存储器920支持单错校正双错检测(secded)纠错码(ecc)以保护数据。对于对数据损毁敏感的计算应用程序,ecc提供了更高的可靠性。在大规模集群计算环境中,并行处理单元902模块处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
[0204]
在一个实施例中,并行处理单元902实现多级存储器层次结构。在一个实施例中,存储器分区单元1100支持统一存储器以为cpu和并行处理单元902存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间能够数据共享。在一个实施例中,跟踪并行处理单元902对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的并行处理单元902的物理存储器。在一个实施例中,nvlink 916支持地址转换服务,其允许并行处理单元902直接访问cpu的页表并且提供由并行处理单元902对cpu存储器的完全访问。
[0205]
在一个实施例中,复制引擎在多个并行处理单元902模块之间或在并行处理单元902模块与cpu之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元1100可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是透明的。
[0206]
来自存储器920或其他系统存储器的数据可以由存储器分区单元1100获取并存储在二级高速缓存1104中,二级高速缓存1104位于芯片上并且在各个通用处理集群1000模块之间共享。如图所示,每个存储器分区单元1100包括与对应的存储器设备920相关联的二级高速缓存1104的一部分。然后,可以在通用处理集群1000模块内的多个单元中实现较低级高速缓存。例如,每个流式多处理器1200模块可以实现l1高速缓存。l1高速缓存是专用于特定流式多处理器1200的专用存储器。来自二级高速缓存1104的数据可以被获取并存储在每
个l1高速缓存中,以在流式多处理器1200模块的功能单元中进行处理。二级高速缓存1104被耦合到存储器接口1106和纵横式交换矩阵914。
[0207]
光栅操作单元1102执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。光栅操作单元1102还与光栅引擎1006一起实现深度测试,从光栅引擎1006的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则光栅操作单元1102更新深度缓冲区并将深度测试的结果发送给光栅引擎1006。将理解的是,存储器分区单元1100模块的数量可以不同于通用处理集群1000模块的数量,并且因此每个光栅操作单元1102可以耦合到每个通用处理集群1000模块。光栅操作单元1102跟踪从不同通用处理集群1000模块接收到的数据包并且确定由光栅操作单元1102生成的结果通过纵横式交换矩阵914被路由到哪个通用处理集群1000。尽管在图11中光栅操作单元1102被包括在存储器分区单元1100内,但是在其他实施例中,光栅操作单元1102可以在存储器分区单元1100之外。例如,光栅操作单元1102可以驻留在通用处理集群1000或另一个单元中。
[0208]
图12示出了根据一个实施例的图10的流式多处理器1200。如图12所示,流式多处理器1200包括指令高速缓存1202、一个或更多个调度器单元1204模块(例如调度器单元908)、寄存器文件1206、一个或更多个处理核心1208模块、一个或更多个特殊功能单元1210模块、一个或更多个加载/存储单元1212模块、互连网络1214、共享存储器/l1高速缓存1216。
[0209]
如上所述,工作分发单元910分派任务以在并行处理单元902的通用处理集群1000模块上执行。任务被分配给通用处理集群1000内的特定数据处理集群1012,并且如果该任务与着色器程序相关联,则该任务可以被分配给流式多处理器1200。调度器单元908接收来自工作分发单元910的任务并且管理指派给流式多处理器1200的一个或更多个线程块的指令调度。调度器单元1204调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元1204可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心1208模块、特殊功能单元1210和加载/存储单元1212)。
[0210]
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动api支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式实现更高的性能、设计灵活性和软件重用。
[0211]
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行性的新模式,包括生产者-消费者并行性、机会主义并行性以及跨整个线程块网格的全局同步。
[0212]
分派1218单元被配置为在调度器单元1204内向一个或更多个功能单元发送指令。在一个实施例中,调度器单元1204包括两个分派1218单元,其使得能够在每个时钟周期期间分派来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元1204可以包括单个分派1218单元或附加分派1218单元。
[0213]
每个流式多处理器1200包括寄存器文件1206,其提供用于流式多处理器1200的功能单元的一组寄存器。在一个实施例中,寄存器文件1206在各个功能单元之间被划分,使得每个功能单元被分配寄存器文件1206的专用部分。在另一个实施例中,寄存器文件1206在由流式多处理器1200执行的不同线程束之间被划分。寄存器文件1206为连接到功能单元的数据路径的操作数提供临时存储。
[0214]
每个流式多处理器1200包括l个处理核心1208模块。在一个实施例中,流式多处理器1200包括大量(例如128个等)不同的处理核心1208模块。每个核心1208可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点算术逻辑单元和整数算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮点算术的ieee 754-2008标准。在一个实施例中,核心1208模块包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
[0215]
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心1208模块中。具体地,张量核心被配置为执行深度学习矩阵算术,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4
×
4矩阵上运算并且执行矩阵乘法和累加运算d=a

b c,其中a、b、c和d是4
×
4矩阵。
[0216]
在一个实施例中,矩阵乘法输入a和b是16位浮点矩阵,而累加矩阵c和d可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用与4
×4×
4矩阵乘法的其他中间积的32位浮点相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的大得多的二维或更高维的矩阵运算。api(诸如cuda 9c api)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自cuda-c 程序的张量核心。在cuda层面,线程束级接口假定16
×
16尺寸矩阵跨越线程束的全部32个线程。
[0217]
每个流式多处理器1200还包括执行特殊函数(例如,属性评估、倒数平方根等)的m个特殊功能单元1210模块。在一个实施例中,特殊功能单元1210模块可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,特殊功能单元1210模块可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器920加载纹理图(例如,纹理像素的2d阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由流式多处理器1200执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/l1高速缓存1216中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个流式多处理器1200包括两个纹理单元。
[0218]
每个流式多处理器1200还包括n个加载/存储单元1212模块,其实现共享存储器/l1高速缓存1216与寄存器文件1206之间的加载和存储操作。每个流式多处理器1200包括将每个功能单元连接到寄存器文件1206以及将加载/存储单元1212连接到寄存器文件1206和共享存储器/l1高速缓存1216的互连网络1214。在一个实施例中,互连网络1214是纵横式交换矩阵,其可以被配置为将任何功能单元连接到寄存器文件1206中的任何寄存器,以及将
加载/存储单元1212模块连接到寄存器文件1206和共享存储器/l1高速缓存1216中的存储器位置。
[0219]
共享存储器/l1高速缓存1216是片上存储器阵列,其允许流式多处理器1200与图元引擎1014之间以及流式多处理器1200中的线程之间的数据存储和通信。在一个实施例中,共享存储器/l1高速缓存1216包括128kb的存储容量并且在从流式多处理器1200到存储器分区单元1100的路径中。共享存储器/l1高速缓存1216可以用于高速缓存读取和写入。共享存储器/l1高速缓存1216、二级高速缓存1104和存储器920中的一个或更多个是后备存储库。
[0220]
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/l1高速缓存1216内的集成使共享存储器/l1高速缓存1216起到用于流式传输数据的高吞吐量管路的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
[0221]
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图9所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分发单元910将线程块直接指派并分发给数据处理集群1012模块。块中的线程执行相同的程序,使用计算中的唯一线程id来确保每个线程生成唯一结果,使用流式多处理器1200执行程序并执行计算,使用共享存储器/l1高速缓存1216以在线程之间通信,以及使用加载/存储单元1212通过共享存储器/l1高速缓存1216和存储器分区单元1100读取和写入全局存储器。当被配置用于通用并行计算时,流式多处理器1200还可以写入调度器单元908可用来在数据处理集群1012模块上启动新工作的命令。
[0222]
并行处理单元902可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,并行处理单元902包含在单个半导体衬底上。在另一个实施例中,并行处理单元902与一个或更多个其他器件(诸如附加并行处理单元902模块、存储器920、精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数模转换器(dac)等)一起被包括在片上系统(soc)中。
[0223]
在一个实施例中,并行处理单元902可以被包括在图形卡上,图形卡包括一个或更多个存储器设备。图形卡可以被配置为与台式计算机的主板上的pcie插槽接口。在又一个实施例中,并行处理单元902可以是包含在主板的芯片组中的集成图形处理单元(igpu)或并行处理器。
[0224]
示例性计算系统
[0225]
具有多个gpu和cpu的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能gpu加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加的带宽。
[0226]
图13是根据一个实施例的使用图9的并行处理单元902实现的处理系统1300的概念图。处理系统1300包括中央处理单元1302、交换机1304和多个并行处理单元902模块中的每一个以及相应的存储器920模块。nvlink 916提供每个并行处理单元902模块之间的高速
通信链路。尽管图13中示出了特定数量的nvlink 916和互连918连接,但是连接到每个并行处理单元902和中央处理单元1302的连接的数量可以改变。交换机1304在互连918和中央处理单元1302之间接口。并行处理单元902、存储器920模块和nvlink 916连接可以位于单个半导体平台上以形成并行处理模块1306。在一个实施例中,交换机1304支持两个或更多个在各种不同连接和/或链路之间接口的协议。
[0227]
在另一个实施例(未示出)中,nvlink 916在每个并行处理单元模块(并行处理单元902、并行处理单元902、并行处理单元902和并行处理单元902)和中央处理单元1302之间提供一个或更多个高速通信链路,并且交换机1304在互连918和每个并行处理单元模块之间进行接口。并行处理单元模块、存储器920模块和互连918可以位于单个半导体平台上以形成并行处理模块1306。在又一个实施例(未示出)中,互连918在每个并行处理单元模块和中央处理单元1302之间提供一个或更多个通信链路,并且交换机1304使用nvlink 916在每个并行处理单元模块之间进行接口,以在并行处理单元模块之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,nvlink 916在并行处理单元模块和中央处理单元1302之间通过交换机1304提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连918在各个并行处理单元模块之间直接地提供一个或更多个通信链路。可以使用与nvlink 916相同的协议将一个或更多个nvlink 916高速通信链路实现为物理nvlink互连或者片上或管芯上互连。
[0228]
在本说明书的上下文中,单个半导体平台可以指在管芯或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接性的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块1306可以被实现为电路板衬底,并且并行处理单元模块和/或存储器920模块中的每一个可以是封装器件。在一个实施例中,中央处理单元1302、交换机1304和并行处理模块1306位于单个半导体平台上。
[0229]
在一个实施例中,每个nvlink 916的信令速率是20到25千兆位/秒,并且每个并行处理单元模块包括六个nvlink 916接口(如图13所示,每个并行处理单元模块包括五个nvlink 916接口)。每个nvlink 916在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当中央处理单元1302还包括一个或更多个nvlink 916接口时,nvlink 916可专门用于如图13所示的ppu到ppu通信,或者ppu到ppu以及ppu到cpu的某种组合。
[0230]
在一个实施例中,nvlink 916允许从中央处理单元1302到每个并行处理单元模块的存储器920的直接加载/存储/原子访问。在一个实施例中,nvlink 916支持一致性操作,允许从存储器920模块读取的数据被存储在中央处理单元1302的高速缓存层次结构中,减少了中央处理单元1302的高速缓存访问延迟。在一个实施例中,nvlink 916包括对地址转换服务(ats)的支持,允许并行处理单元模块直接访问中央处理单元1302内的页表。一个或更多个nvlink 916还可以被配置为以低功率模式操作。
[0231]
图14示出了示例性处理系统1400,其中可以实现各种先前实施例的各种架构和/或功能。如图所示,提供示例性处理系统1400,其包括连接到通信总线1402的至少一个中央处理单元1302。通信通信总线1402可以使用任何合适的协议来实现,诸如pci(外围组件互
连)、pci-express、agp(加速图形端口)、超传输(hypertransport)或任何其他总线或一个或更多个点对点通信协议。示例性处理系统1400还包括主存储器1404。控制逻辑(软件)和数据被存储在主存储器1404中,主存储器1404可以采取随机存取存储器(ram)的形式。
[0232]
示例性处理系统1400还包括输入设备1406、并行处理模块1306和显示设备1408,例如常规crt(阴极射线管)、lcd(液晶显示器)、led(发光二极管)、等离子显示器等。可以从输入设备1406(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成示例性处理系统1400。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
[0233]
此外,示例性处理系统1400可以出于通信目的通过网络接口1410耦合到网络(例如,电信网络、局域网(lan)、无线网络、广域网(wan)(诸如因特网)、对等网络、电缆网络等)。
[0234]
示例性处理系统1400还可以包括辅助存储(未示出)。辅助存储包括例如硬盘驱动器和/或可移除存储驱动器,代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
[0235]
计算机程序或计算机控制逻辑算法可以存储在主存储器1404和/或辅助存储中。这些计算机程序在被执行时使得示例性处理系统1400能够执行各种功能。主存储器1404、存储和/或任何其他存储是计算机可读介质的可能示例。
[0236]
各种在先附图的架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,示例性处理系统1400可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
[0237]
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
[0238]
图形处理管线
[0239]
图15是根据一个实施例的由图9的并行处理单元902实现的图形处理管线1500的概念图。在一个实施例中,并行处理单元902包括图形处理单元(gpu)。并行处理单元902被配置为接收指定用于处理图形数据的着色器程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。并行处理单元902可以被配置为处理图形图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
[0240]
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器920)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行api调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在并
行处理单元902的流式多处理器1200模块上实现的不同着色器程序,包括顶点着色器、外壳着色器、域着色器、几何着色器和像素着色器中的一个或更多个。例如,流式多处理器1200模块中的一个或更多个可以被配置为执行顶点着色器程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的流式多处理器1200模块可以被配置为并发地执行不同的着色器程序。例如,流式多处理器1200模块的第一子集可以被配置为执行顶点着色器程序,而流式多处理器1200模块的第二子集可以被配置为执行像素着色器程序。流式多处理器1200模块的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入二级高速缓存1104和/或存储器920。在经处理的顶点数据被光栅化(例如,从三维数据变换成屏幕空间中的二维数据)以产生片段数据之后,流式多处理器1200模块的第二子集执行像素着色器以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并写入存储器920中的帧缓冲区。顶点着色器程序和像素着色器程序可以并发地执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
[0241]
图形处理管线1500是被实现以从3d几何数据生成2d计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作拆分成多个阶段来更高效地执行长延时操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线1500接收从图形处理管线1500的一个阶段传送到下一阶段的输入数据601,以生成输出数据1502。在一个实施例中,图形处理管线1500可表示由api定义的图形处理管线。作为选择,图形处理管线1500可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
[0242]
如图15所示,图形处理管线1500包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装1504阶段、顶点着色1506阶段、图元组装1508阶段、几何着色1510阶段、视口scc 1512阶段、光栅化1514阶段、片段着色1516阶段和光栅操作1518阶段。在一个实施例中,输入数据1520包括命令,其配置处理单元以实现图形处理管线1500的阶段以及待由这些阶段处理的几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)。输出数据1502可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
[0243]
数据组装1504阶段接收输入数据1520,其指定用于高阶表面、图元等的顶点数据。数据组装1504阶段收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色1506阶段以进行处理。
[0244]
顶点着色1506阶段通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,《x,y,z,w》)。顶点着色1506阶段可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色1506阶段对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,ncd)空间。顶点着色1506阶段生成
经变换的顶点数据,经变换的顶点数据被传送到图元组装1508阶段。
[0245]
图元组装1508阶段收集由顶点着色1506阶段输出的顶点并且将顶点分组成几何图元以由几何着色1510阶段处理。例如,图元组装1508阶段可以被配置为将每三个连续顶点分组为用于传送到几何着色1510阶段的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装1508阶段将几何图元(例如,相关联的顶点的集合)传送到几何着色1510阶段。
[0246]
几何着色1510阶段通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色1510阶段可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线1500的其余部分进行处理。几何着色1510阶段将几何图元传送到视口scc 1512阶段。
[0247]
在一个实施例中,图形处理管线1500可以在流式多处理器和顶点着色1506阶段、图元组装1508阶段、几何着色1510阶段、片段着色1516阶段和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口scc 1512阶段可以利用数据。
[0248]
在一个实施例中,由图形处理管线1500中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,l1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口scc 1512阶段可以访问高速缓存中的数据。在一个实施例中,视口scc 1512阶段和光栅化1514阶段被实现为固定功能电路。
[0249]
视口scc 1512阶段执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,变换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化1514阶段。
[0250]
光栅化1514阶段将3d几何图元转换成2d片段(例如,能够用于显示等)。光栅化1514阶段可以被配置为利用几何图元的顶点来设置一组平面方程,从该组平面方程可以内插各种属性。光栅化1514阶段还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化1514阶段生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),片段数据被传送到片段着色1516阶段。
[0251]
片段着色1516阶段通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色1516阶段可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色1516阶段生成像素数据,像素数据被发送到光栅操作1518阶段。
[0252]
光栅操作1518阶段可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。
当光栅操作1518阶段已经完成对像素数据(例如,输出数据1502)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
[0253]
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线1500中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色1510阶段)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线1500的任何阶段可以由图形处理器(诸如并行处理单元902)内的一个或更多个专用硬件单元来实现。图形处理管线1500的其他阶段可以由可编程硬件单元(诸如并行处理单元902的流式多处理器1200)来实现。
[0254]
图形处理管线1500可以经由由主机处理器(诸如cpu)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(api),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制并行处理单元902的操作的多个指令。api为程序员提供抽象,其允许程序员利用专用图形硬件(诸如并行处理单元902)来生成图形数据而不要求程序员利用并行处理单元902的特定指令集。应用程序可以包括被路由到并行处理单元902的设备驱动程序的api调用。设备驱动程序解释api调用并执行各种操作以响应api调用。在一些情况下,设备驱动程序可以通过在cpu上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用cpu和并行处理单元902之间的输入/输出接口在并行处理单元902上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用并行处理单元902的硬件来实现图形处理管线1500。
[0255]
可以在并行处理单元902内执行各种程序以便实现图形处理管线1500的各个阶段。例如,设备驱动程序可以启动并行处理单元902上的内核以在一个流式多处理器1200(或多个流式多处理器1200模块)上执行顶点着色1506阶段。设备驱动程序(或由并行处理单元902执行的初始内核)还可启动并行处理单元902上的其他内核以执行图形处理管线1500的其他阶段,诸如几何着色1510阶段和片段着色1516阶段。另外,图形处理管线1500的阶段中的一些可以在固定单元硬件(诸如在并行处理单元902内实现的光栅器或数据组装器)上实现。应当领会,在被流式多处理器1200上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
[0256]
代码列表
[0257][0258]
清单1-lns-madam算法
[0259]
附图元素列表
[0260]
100 基础深度神经网络
[0261]
102 损失函数
[0262]
104 输入层
[0263]
106 输出层
[0264]
108 隐藏层
[0265]
200 人工神经元
[0266]
202 激活函数
[0267]
204 权重更新函数
[0268]
400 训练算法数据流
[0269]
402 向前传递
[0270]
404 向后传递
[0271]
406 损失算法l
[0272]
408 权重更新
[0273]
502 神经网络训练与推理系统
[0274]
504 计算系统
[0275]
506 车辆
[0276]
508 机器人
[0277]
600 数据中心
[0278]
602 数据中心基础设施层
[0279]
604 框架层
[0280]
606 软件层
[0281]
608 应用层
[0282]
610 资源编排器
[0283]
612 分组计算资源
[0284]
614a 节点c.r.
[0285]
614b 节点c.r.
[0286]
614c 节点c.r.
[0287]
616 作业调度器
[0288]
618 配置管理器
[0289]
620 资源管理器
[0290]
622 分布式文件系统
[0291]
624 软件
[0292]
626 一个或更多个应用
[0293]
700 神经网络处理器
[0294]
702 处理元件
[0295]
704 全局缓冲器
[0296]
706 控制器
[0297]
708 路由器
[0298]
800 处理元件
[0299]
802 向量乘法累加单元
[0300]
804 权重缓冲器
[0301]
806 激活缓冲器
[0302]
808 路由器
[0303]
810 控制器
[0304]
812 累加存储器缓冲器
[0305]
814 后处理器
[0306]
902 并行处理单元
[0307]
904 i/o单元
[0308]
906 前端单元
[0309]
908 调度器单元
[0310]
910 工作分发单元
[0311]
912 集线器
[0312]
914 纵横式交换矩阵
[0313]
916 nvlink
[0314]
918 互连
[0315]
920 存储器
[0316]
1000 通用处理集群
[0317]
1002 管线管理器
[0318]
1004 预光栅操作单元
[0319]
1006 光栅引擎
[0320]
1008 工作分发纵横式交换矩阵
[0321]
1010 存储器管理单元
[0322]
1012 数据处理集群
[0323]
1014 图元引擎
[0324]
1016 m管控制器
[0325]
1100 存储器分区单元
[0326]
1102 光栅操作单元
[0327]
1104 二级高速缓存
[0328]
1106 存储器接口
[0329]
1200 流式多处理器
[0330]
1202 指令高速缓存
[0331]
1204 调度器单元
[0332]
1206 寄存器文件
[0333]
1208 核心
[0334]
1210 特殊功能单元
[0335]
1212 加载/存储单元
[0336]
1214 互连网络
[0337]
1216 共享存储器/l1高速缓存
[0338]
1218 分派
[0339]
1300 处理系统
[0340]
1302 中央处理单元
[0341]
1304 交换机
[0342]
1306 并行处理模块
[0343]
1400 示例处理系统
[0344]
1402 通信总线
[0345]
1404 主存储器
[0346]
1406 输入设备
[0347]
1408 显示设备
[0348]
1410 网络接口
[0349]
1500 图形处理管线
[0350]
1502 输出数据
[0351]
1504 数据组装
[0352]
1506 顶点着色
[0353]
1508 图元组装
[0354]
1510 几何着色
[0355]
1512 视口scc
[0356]
1514 光栅化
[0357]
1516 片段着色
[0358]
1518 光栅操作
[0359]
1520 输入数据
[0360]
在此描述的各个功能操作可以使用反映所述操作或功能的名词或名词短语引用的逻辑来实现。例如,关联操作可以由“关联器”或“相关器”执行。同样,可以通过“开关”进行切换,通过“选择器”进行选择,等等。“逻辑”是指机器存储器电路和包括机器可执行指令(软件和固件)和/或电路(硬件)的非暂态机器可读介质,所述电路通过其材料和/或材料能量配置包括可以被施加以影响设备的操作的控制和/或过程信号、和/或设置和值(诸如电阻、阻抗、电容、电感、电流/电压额定值等)。磁性介质、电子电路、电和光存储器(易失性和非易失性两者)以及固件是逻辑的示例。逻辑特别地排除纯信号或软件本身(然而,不排除包括软件并由此形成物质配置的机器存储器)。
[0361]
在本公开内,不同实体(可以不同地称为“单元”、“电路”、其他组件等)可以被描述或要求保护为“被配置成用于”执行一个或更多个任务或操作。本文中使用[实体]被配置[成用于执行一个或更多个任务]的这种表述来指代结构(即,物理事物,诸如电子电路)。更具体地,该表述用于指示该结构被布置成在操作期间执行一个或更多个任务。结构可以被称为“被配置成”执行一些任务,即使该结构当前没有被操作。“被配置为向多个处理器核心分配信用的信用分配电路”旨在覆盖例如具有电路的集成电路,该电路在操作期间执行该功能,即使所讨论的集成电路当前没有被使用(例如,电源没有被连接到该集成电路)。因此,被描述为或叙述为“被配置成用于”执行一些任务的实体是指物理事物,如设备、电路、存储可执行用于实现该任务的程序指令的存储器等。该短语在本文中不用于指代无形的事物。
[0362]
术语“被配置成”不旨在意指“可配置成”。例如,未编程的fpga将不被认为是“被配置成”执行某种特定功能,尽管它可以“可配置成”在编程之后执行该功能。
[0363]
在所附权利要求中叙述“被配置成用于”执行一个或更多个任务的结构明确地旨在不援引35u.s.c.
§
112(f)用于该权利要求元素。因此,不应根据35u.s.c.
§
112(f)来解释否则不包括[用于执行功能]构造的“装置”的本技术中的权利要求。
[0364]
如在此使用的,术语“基于”用于描述影响确定的一个或更多个因素。该术语不排除附加因素可能影响确定的可能性。即,确定可仅基于指定因素或基于所述指定因素以及其他未指定因素。考虑短语“基于b确定a”。该短语指定b是用于确定a或影响a的确定的因素。此短语不排除a的确定还可基于某一其他因素,例如c。该短语还旨在涵盖其中a仅基于b确定的实施例。如本文所使用的,短语“基于”与短语“至少部分地基于”同义。
[0365]
如在此使用的,短语“响应于”描述触发效果的一个或更多个因素。该短语不排除附加因素可能影响或以其他方式触发效果的可能性。即,效果可以仅响应于那些因素,或者可以响应于指定的因素以及其他未指定的因素。考虑短语“响应于b执行a”。该短语指定b是触发a的性能的因素。此短语不排除执行a还可响应于某一其他因素,例如c。该短语还旨在覆盖其中仅响应于b来执行a的实施例。
[0366]
如在此使用的,术语“第一”、“第二”等被用作它们之前的名词的标签,并且不暗示任何类型的排序(例如,空间、时间、逻辑等),除非另外说明。例如,在具有八个寄存器的寄存器堆中,术语“第一寄存器”和“第二寄存器”可以用于指八个寄存器中的任意两个,而不是例如仅指逻辑寄存器0和1。
[0367]
当在权利要求书中使用时,术语“或”被用作包含性或而不是排他性或。例如,短语“x、y或z中的至少一个”是指x、y和z中的任一个以及它们的任何组合。
[0368]
如在此使用的,关于两个或更多个元件的“和/或”的叙述应当被解释为意指仅一个元件、或元件的组合。例如,“元素a、元素b和/或元素c”可以包括仅元素a、仅元素b、仅元素c、元素a和元素b、元素a和元素c、元素b和元素c、或元素a、b和c。此外,“元素a或元素b中的至少一个”可包括元素a中的至少一个、元素b中的至少一个、或者元素a中的至少一个和元素b中的至少一个。此外,“元素a和元素b中的至少一个”可包括元素a中的至少一个、元素b中的至少一个、或者元素a中的至少一个和元素b中的至少一个。
[0369]
在此具体描述本公开的主题以满足法定要求。然而,描述本身不旨在限制本公开的范围。相反,发明人已预期所要求保护的主题还可结合其他当前或未来技术以其他方式来体现,以包括不同步骤或类似于在本文档中描述的步骤的步骤的组合。此外,尽管术语“步骤”和/或“框”在本文中可以用于表示所采用的方法的不同元素,但是除非并且除了明确描述各个步骤的顺序,否则该术语不应被解释为暗示在本文中公开的各个步骤之中或之间的任何特定顺序。
[0370]
已经如此详细地描述了说明性实施例,将显而易见的是,在不脱离如所要求的本发明的范围的情况下,修改和变化是可能的。本发明主题的范围不限于所描述的实施例,而是在以下权利要求中阐述。
再多了解一些

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

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

相关文献