CN114118354A - 高效的softmax计算 - Google Patents

高效的softmax计算 Download PDF

Info

Publication number
CN114118354A
CN114118354A CN202111007923.6A CN202111007923A CN114118354A CN 114118354 A CN114118354 A CN 114118354A CN 202111007923 A CN202111007923 A CN 202111007923A CN 114118354 A CN114118354 A CN 114118354A
Authority
CN
China
Prior art keywords
vector
softmax
unit
memory
neural network
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
Application number
CN202111007923.6A
Other languages
English (en)
Inventor
J·R·史蒂文斯
R·文克特山
S·H·戴
B·海勒尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN114118354A publication Critical patent/CN114118354A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/047Probabilistic or stochastic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/061Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using biological neurons, e.g. biological neurons connected to an integrated circuit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computer Hardware Design (AREA)
  • Image Analysis (AREA)

Abstract

本发明公开了高效的SOFTMAX计算。应用于变换神经网络和其他神经网络中的高效深度学习推理的提高Softmax计算效率的解决方案。这些解决方案利用Softmax中各种运算的降低精度实现,用2x替换ex以减少与计算ex相关的指令开销,并用整数最大计算替换浮点最大计算。进一步描述的是将Softmax分解为未归一化的Softmax和归一化操作的可扩展实现。

Description

高效的SOFTMAX计算
相关申请的交叉引用
本申请根据35U.S.C.119(e)要求2019年3月12日提交的美国申请序列号62/817,413的优先权和权益,其内容通过引用整体并入本文。
背景技术
Softmax计算常用于各种类型的神经网络和深度学习应用。利用Softmax的神经网络的示例是循环神经网络、卷积神经网络和变换(Transformer)神经网络。
Softmax的传统计算存在存储器利用率低和在某些方面计算成本高的缺点。因此,神经网络和深度学习应用程序可能会受益于更高效的Softmax计算。
变换神经网络在对话式人工智能(AI)应用中尤其显示出有希望的结果。变换网络使用在编码器和解码器阶段利用Softmax的注意力机制,并且可能特别受益于更高效的Softmax计算。
深度神经网络(DNN)是一类神经网络,已成为解决各个技术领域(尤其是涉及深度机器学习的技术领域)复杂问题的关键方法。DNN的应用程序具有不同的性能、准确度和功率要求,具体取决于实现方式。由于高设计复杂性和制造挑战,为特定实现的要求构建专用DNN的成本可能过高。深度神经网络也倾向于大量使用Softmax计算,因此也可以从更高效的Softmax计算中受益。
在一些方面,系统包括一个或更多个处理器。该系统包括逻辑,当应用于一个或更多个处理器时,通过将输入向量的元素提高到2的幂并计算输入向量的整数向量最大值,从输入向量计算未归一化的Softmax向量。系统还包括逻辑,当应用于一个或更多个处理器时,将未归一化的Softmax向量转换为归一化的Softmax向量。
在其他方面,人工神经网络包括一个或更多个前馈层,以及耦合到一个或更多个前馈层的一个或更多个Softmax层。人工神经网络包括至少一个Softmax层,该层被配置为通过将输入向量的元素提升到2的幂并计算输入向量的整数向量最大值来从输入向量计算未归一化的Softmax向量。
在其他方面,变换人工神经网络包括自注意力层和编码器-解码器注意力层。自注意力层和编码器-解码器注意力层中的每一个都包括Softmax层,其被配置为通过将输入向量的元素提高到2的幂并计算输入向量的整数向量最大值,从输入向量生成未归一化的Softmax向量。
附图说明
为了轻松识别对任何特定元件或行为的讨论,参考编号中的一个或更多个最重要的数字是指首次引入该元件的图编号。
图1描绘了利用人工神经网络的示例性系统100。
图2描绘了根据一个实施例的深度学习系统202。
图3描绘了根据一个实施例的变换神经网络302。
图4描绘了根据一个实施例的编码器402。
图5描绘了根据一个实施例的解码器502。
图6描绘了根据一个实施例的注意力层602。
图7A-图7C描绘了根据一个实施例的Softmax算法700。
图8A-图8D描绘了一个实施例中的Softmax计算逻辑800。
图9描绘了根据一个实施例的用于Softmax计算的分布式计算系统900。
图10描绘了根据一个实施例的多裸片封装1012。
图11描绘了根据一个实施例在单个芯片上实现的神经网络处理器1100。
图12描绘了根据一个实施例的本地处理元件1200。
图13更详细地描绘了根据一个实施例的本地处理元件1300。
图14描绘了根据一个实施例的后处理器1212的细节。
图15描绘了根据一个实施例的全局处理元件1522。
图16描绘了根据一个实施例的并行处理单元2008b。
图17描绘了根据一个实施例的通用处理集群1700。
图18描绘了根据一个实施例的存储器分区单元1800。
图19描绘了根据一个实施例的流式多处理器1900。
图20描绘了根据一个实施例的处理系统2000。
图21描绘了根据另一个实施例的示例性处理系统2100。
图22描绘了根据一个实施例的图形处理管线2200。
具体实施方式
在许多深度学习应用中,通常使用不太精确的数据表示对经训练的模型进行推理,以提高性能(提高每次推理的吞吐量或延迟)并减少每次推理所消耗的计算能量。这些模型可应用于可编程图形处理单元(GPU)或专用深度学习加速器上的张量核心。一些解决方案专注于通过在GPU中实现诸如批处理矩阵乘法操作之类的层来提高神经网络层的性能。“神经网络”是指基于称为人工神经元的连接单元或节点集合的算法或计算系统,其对生物系统中的神经元进行松散建模。神经元之间的每个连接,就像生物大脑中的突触一样,可以将信号(激活)从一个人工神经元传输到另一个人工神经元。接收信号(输入激活)的人工神经元可以对其进行处理,然后向连接到它的其他人工神经元(输出激活)发出信号。“输入激活”是指神经网络中的神经元接收到的激活。“输出激活”是指神经网络中神经元的激活输出。输出激活通常是基于神经元的输入激活和应用于输入激活的权重来计算的。“权重”指的是与激活相乘以增加或减少激活函数中激活值的影响的值。“激活”是指神经网络中神经元的输出值,至少部分基于输入到神经元的权重和神经元的激活函数来计算。激活也称为“激活值”。
随着后续几代GPU硬件的出现,核心矩阵乘法计算的计算性能不断提高。深度学习应用的其他方面也因此成为瓶颈。例如,在许多对话式人工智能工作负载中,例如基于变换的神经网络,Softmax计算可能会成为瓶颈。
利用变换神经网络的对话式AI实现可能特别受Softmax性能不佳的影响。在高层次上,变换神经网络结构包括编码组件、解码组件以及这些组件之间的连接。编码组件可以包括多个编码级的堆栈,并且解码组件可以包括多个解码级的堆栈,通常与编码级的数量相同。编码阶段(简称“编码器”)是神经网络,通常在结构上可能彼此相同,除非他们可能会在训练过程中获得差异(例如,被训练为彼此具有不同的权重)。同样,除了在训练中获得的差异之外,解码阶段(简称“解码器”)通常都可以具有相同的结构。编码器和解码器可以包括对向量输入执行操作以生成向量或标量输出的“层”。这些向量可能是多维的(通常为NxMx...P,N,M,...P≥1)并且是嵌套的,通常称为张量。
传统的Softmax计算通常涉及以下操作:(i)计算输入向量中的最大值,(ii)将指数应用于浮点数或定点数,(iii)执行指数值的求和,以及(iv)将指数值除以总和。传统的Softmax运算的公式是
Figure BDA0003234641640000041
传统的Softmax方程
传统Softmax的一种计算算法是:
Figure BDA0003234641640000042
传统的Softmax算法
该算法涉及对存储器的多次访问,并表现出低操作数重用,有时会导致性能不佳。循环2:-4:在向量V上(找到向量V的最大值成员mv)涉及从存储器中读取的向量;循环6:-8:计算指数的总和(涉及另一个);以及循环9:-11:归一化V(涉及再一个)。
在硬件中实现指数和倒数函数(为了速度)可能会导致高设计开销(电路面积和/或功耗)。例如,指数和倒数函数可以在配置有具有32位浮点精度的查找表(LUT)的GPU的特殊功能单元(SFU)中执行。这些组件的高电路面积开销可能会使复制SFU单元以实现高吞吐量的成本过高。
本文公开了提高Softmax计算效率的实施例。这些解决方案可用于在变换神经网络和其他神经网络中实现快速有效的深度学习推理。所公开的Softmax计算包括各种操作的降低精度实现,用2x代替ex以减少与计算ex相关联的指令开销,以及用整数最大计算代替向量元件的浮点最大计算。一种可扩展的实现将Softmax分解为单独的未归一化的(UnNormalized)Softmax和归一化(Normalization)操作。
所公开的方法通过制定2x值元件的向量来计算Softmax。表述“2x值元素的向量”是指元素的向量,每个元素都升到2的幂,其中利用来自元素的输入向量的输入值x来计算2的幂的指数。应该理解的是,当提到“2x值元素的向量”时,2的幂的实际指数实际上可能不是x,而是从x导出的值(例如,x-xmax),其中xmax是输入向量元素的运行计算最大值。
本文还描述了利用可扩展设计的高效、平铺DNN处理器的实施例。这些实施例可以受益于所公开的对Softmax计算的改进。所公开的实施例包括有益特征,包括:1)完全分布式的、基于区块的架构,2)在处理元件(PE)级、芯片级以及在一些实施例中封装级的灵活且有效的权重和激活区块,提高数据本地性,降低通信成本;3)多级数据流,提高数据重用和能源效率。
DNN处理器实施例利用设计用于解决神经网络层的低计算与存储器比的数据路径。在一些实现中,数据路径包括本地和全局处理元件。每个本地处理元件包括执行权重和输入激活的本地乘法累加的逻辑,以及后处理(诸如ReLu、MaxPool、Softmax等)。“逻辑”是指机器存储器电路和非暂时性机器可读介质,包括机器-可执行指令(软件和固件)和/或电路(硬件),通过其材料和/或材料-能量配置包括控制和/或程序信号,和/或设置和值(例如电阻、阻抗、电容、电感、电流/电压额定值等),可用于影响设备的运行。磁性介质、电子电路、电气和光学存储器(易失性和非易失性)和固件都是逻辑的示例。逻辑特别排除纯信号或软件本身(但不排除包含软件并由此形成物质配置的机器存储器)。
收集器和寄存器文件形式的存储器缓冲器可以布置在处理元件内和/或处理元件之间的数据路径中。“缓冲器”是指存储作为计算输入或计算结果的值的存储器。“收集器”是指设置在另一个缓冲器和数据处理器的输入或输出之间的缓冲器,例如乘法累加单元。“乘法累加单元”是指执行乘法累加运算的数据处理电路,其中涉及计算两个数字的乘积并将该乘积添加到累加器。乘法累加单元在本文中可以通过它们的首字母缩略词、MAC或MAC单元来指代。乘法累加单元执行a<-a+(b*c)形式的计算。向量乘法累加单元使用乘法器阵列计算两个向量的乘积,然后通过将乘法器的所有输出相加以产生部分和,然后将其添加到累加器来执行归约运算。“部分和”是指点积累加计算中的中间乘法累加结果。“点积累加”是指点积的计算。点积是两个数字序列(向量)的对应条目的乘积之和。使用向量乘法累加单元有效地计算点积。
DNN处理器实施例提供多级存储器和计算层次结构,其利用权重和输出激活本地地提高神经网络执行的能量效率。传统的神经网络加速器设计仅利用最内层执行级别(例如,循环)的重用机会,而所公开的架构提供多级存储器和处理层次结构以利用跨多个循环级别的数据重用机会,从而实现多样化的一组节能数据流。例如,代替仅针对权重或输出捕获时间重用,在执行期间利用权重和部分和重用可以实现多级数据流。
为了有效地实现特定的数据流,每个本地处理单元可以使用一个或更多个收集器(例如,小型寄存器文件):一个在权重缓冲器之前,另一个在累加缓冲器之前,另一个在输入激活缓冲器之前。“激活缓冲器”是指用于存储在神经网络计算中使用的激活值(激活)的存储器缓冲器。激活由神经网络层中的每个神经元使用激活函数计算的,有时也称为“传递函数”。激活可以是简单的二进制值(例如,“1”或“0”代表“ON”或“OFF”),或者它们可能采用某些激活函数的值范围。这些收集器过滤掉(减少)对权重和部分求和缓冲器(例如,SRAM)的昂贵读取和写入,从而提高整体能效。全局处理元件和/或芯片可以在神经网络计算的数据路径中提供额外的存储(例如,全局或共享寄存器文件)和处理能力。
所公开的DNN处理器实施例为不同类型的神经网络计算提供了基于异构块的计算平台。除了密集卷积,许多神经网络执行元件级计算和深度级卷积。为了辅助这种计算,该架构包括两种通用类型的处理元件。第一种类型称为本地处理元件,专门执行具有重要数据重用的密集卷积。第二种类型称为全局处理元件,在密集卷积期间为本地处理元件提供二级存储。此外,全局处理元件可以以低计算存储器比执行逐元件操作和逐深度卷积,而无需通过神经网络层传输大量数据。
图1描绘了利用人工神经网络的示例性系统100。神经网络广泛用于语音到文本转换、自然语言处理、语言翻译、图像识别和分类以及搜索等应用中。
在所描绘的具体示例中,人102对着数字设备118的麦克风110讲话,例如以与移动电话或家庭自动化设备(例如,
Figure BDA0003234641640000061
Figure BDA0003234641640000062
等)上的语音助手交互,或在汽车中或与机器人一起使用。语音命令或查询被转换为文本和/或命令,并被传送到物联网设备106和/或云计算机系统104,例如通过局域网108和/或广域网112。人102的语音的转换为由物联网设备106和/或云计算机系统104理解的文本和/或命令可以由一个或更多个神经网络114利用一个或更多个Softmax层116来执行。可用于这些目的的神经网络114的示例包括变换神经网络、循环神经网络、卷积神经网络和这些类型的混合,以及本领域已知的其他类型。
图2描绘了根据一些实施例的在利用Softmax计算的深度学习系统202中应用神经网络的示例性场景。深度学习系统202可用于计算系统204、车辆206和机器人208,仅举几个示例。深度学习系统202可以包括一个或更多个神经网络,提供图像识别和分类(机器视觉)、对话式AI、用于自动驾驶车辆和机器人的控制系统等等。
图3描绘了一个实施例中的变换神经网络302。如前所述,变换神经网络可以在注意力层中广泛使用Softmax计算。变换神经网络302在编码器堆栈308的第一编码器306处接收输入序列304。编码器306对输入序列304执行编码并将结果传递给编码器310,编码器310执行附加编码并将结果传递给编码器312。尽管在编码器堆栈308中描绘了三个编码器,但实际上可以存在任何可管理的数目。
将编码器堆栈308中最后一个编码器312的结果提供给解码器堆栈314。如图所示的解码器堆栈314包括三个解码器(解码器316、解码器318和解码器320),但实际上可能存在任何可管理的数量。最终编码器312的编码结果被提供给解码器堆栈314的第一解码器316,并且最终编码器312的注意结果可以与解码器堆栈314中的每个编码器的编码器-解码器注意力层504完全连接,在一个实施例中。解码器堆栈314对编码器堆栈308提供的结果进行操作以生成输入序列304的输出序列322变换。通常在最终解码器320级的输出处可以有线性层和Softmax层(未描绘)以产生输出序列322。
通常,可以将来自任何编码器自注意力层的注意向量提供给任何解码器编码器-解码器注意力层。此外,注意力层可以是本领域已知的“多头”。
图4描绘了一个实施例中的编码器402。编码器402在自注意力层404接收输入向量,其在将输入向量传递到前馈神经网络406之前变换输入向量。前馈神经网络406的结果被传递到下一个编码器阶段(如果有一个),和/或到解码器(如果编码器402是最终的编码器阶段)。取决于实施方式,自注意力层404的结果也可以传递到一个或更多个解码器阶段(例如,如果编码器402是最终编码器阶段)。在自注意力层404和前馈神经网络406中的每一个之后通常可以有求和和归一化层(未描绘)。
图5描绘了一个实施例中的解码器502。解码器502在自注意力层506接收输入(来自前面的解码器阶段或来自编码器阶段)。自注意力层506的结果被传递到编码器-解码器注意力层504,其还可以从编码器堆栈308的一个或更多个自注意力层404接收注意输入。编码器-解码器注意力层504帮助解码器502将注意集中在输入序列中特定位置的输入序列的更多相关部分上(类似于seq2seq模型中的注意)。编码器-解码器注意力层504之后是前馈神经网络508。在自注意力层506、编码器-解码器注意力层504和前馈神经网络508中的每一个之后,通常可以有求和和归一化层(未描绘)。
编码器-解码器注意力层504的结果被传递到前馈神经网络508,该神经网络生成到下一个解码器阶段的输出或最终输出结果(可能在由线性和Softmax层进行额外处理之后)。
图6描绘了一个实施例中的注意力层602。对注意力层602的输入向量执行矩阵乘法604以形成查询向量606、键向量608和值向量610。矩阵乘法604中应用的矩阵通过训练包括注意力层602的神经网络导出。
接下来,通过执行查询向量606和关键字向量608的点积614来导出分数向量612。分数向量612中的元件值确定在处理输入向量的特定标记时将多少注意力放在输入向量的其他部分(例如,标记(token))上。然后用Softmax616算法处理分数向量612以对分数进行归一化,因此它们都是正的并且加起来为1。Softmax分数确定输入序列的每个标记在特定输入序列标记位置表达的程度。
然后通过Softmax分数对值向量610执行乘法618,并且加权值向量610被求和(向量求和620)。
图7A,图7B,和图7C描绘了可以改善传统Softmax的一些缺点的Softmax算法700的实施例。在图7A中,指数的第7行计算被更有效的2的幂计算代替。2的幂用于第10行的归一化操作,而不是指数。
在图7B中,向量V中最大元件的计算与向量元件总和的计算(第3-8行)相结合,以消除向量元件V上的三个传递之一。这导致未归一化的Softmax向量V在第9-11行通过V重新归一化。
在图7C中,最大元件的计算是以整数精度计算的(第4行),这使得图7B第5行的计算成本高的乘法运算将被替换为图7C中第5行的计算成本较低的右移操作成为可能。图7B中的第10行的重归一化中的乘法运算也被图7C第10行的较便宜的右移代替。
未归一化的Softmax单元828和归一化单元830的实施例的架构在图8A至图8D中描绘。例如,这些单元可以协作来实现Softmax算法700。本领域技术人员将理解,这些单元可以实现为硬件(例如,在特殊功能单元1912中)、固件、软件或其组合(即,“逻辑”)。例如,单元的各方面可以在硬件中实现,其中某些功能(例如,线性分段逼近)被微编码为由处理器执行的扩展ISA(指令集架构)指令。一些实施例可以在高性能计算平台上的软件中实现单元的许多或所有组件。
Softmax的整体输入向量可以被分解成更小的向量,这些向量被馈送到未归一化的Softmax单元828。整体向量的这些更小的部分可以由多个处理元件并行处理(例如,参见图9),或者它们可以由未归一化的Softmax单元828依次输入和处理。
向量整数最大值单元802接收输入向量并计算向量元件中的整数最大值(LocalMax)。输入向量的每个元件被四舍五入为整数,并且在四舍五入和比较(最大比较器834)之后的最大值元件被选为本地最大(LocalMax)。如果输入向量是Softmax整体向量的一小部分,则向量的最大值元素是“本地”最大值。该本地最大值可以在处理整个向量的其他段的其他处理元件之间共享,用于比较和确定向量的全局最大值。在一个实施例中,用于协调跨处理元件的Softmax算法的执行的中央处理器/控制器还可收集LocalMax值并确定向量的全局最大值(GlobalMax)。“控制器”是指任何控制其他逻辑操作的逻辑。当控制器以硬件实现时,它可以是例如许多众所周知的微处理器模型、图形处理单元或使用专用集成电路(ASIC)实现的定制控制器、片上系统(SOC),或以本领域已知的许多其他方式之一。控制器也可以在软件或固件中实现,作为存储在易失性存储器或非易失性存储器中的计算机指令。控制器通常用于协调系统中一个或更多个其他组件的操作,例如向其他组件提供信号以开始和停止它们的操作,或使用特定命令指示其他组件执行。
2次幂计算单元804接收输入向量和向量整数最大值单元802计算的LocalMax值。2次幂计算单元804从输入向量的每个元件值x中减去LocalMax,然后利用线性分段计算单元822计算2(x-LocalMax)。可以实现低精度微架构以提高2次幂计算单元804中的计算效率(即,降低计算复杂度)。在一个实施例中,可以以低精度(意味着比典型的浮点或长整数更低的精度)定点表示(具有六个整数位和两个小数位)实现输入向量元件和LocalMax。线性分段计算单元822可利用定点小数分割器824将小数位引导至查找表832并将整数位引导至左移826逻辑以生成二值的幂。
线性分段计算单元822可以使用查找表832来实现,在一个实施例中,查找表832每个包括四个条目和十个位。整数最大(IntMax)的使用可以在电路面积、功耗和计算速度方面简化2次幂计算单元804和归一化单元830。这可以简化2次幂计算单元804中的浮点减法运算到整数并避免在归一化单元830中对2x的线性分段(LPW)计算的需要。
由2次幂计算单元804生成的未归一化的Softmax值可以在减少单元806中顺序减少以计算功率总和(PowSum)。对于本领域普通技术人员来说,如何在减少单元806中使用矢量元素加法器836、功率和选择器816(从向量元素加法器836或从另一个处理元件选择功率和)、右移器818和加法器820顺序地执行跨整个Softmax向量的PowSum的减少。
类似地,可以使用最大值选择器808和最大值比较器810以及存储在存储器缓冲器812中的结果来执行LocalMax值的减少。当Softmax计算的子向量跨多个处理元件在空间上分布时,本地PowSum和IntMax值的跨处理元件(PE)减少可以在处理元件之间执行和共享(经由存储器缓冲器812和功率和缓冲器814)以确定全局最大值(GlobalMax)和全局功率和(GlobalPowSum)。
归一化单元830可以接收UnnormedSoftmax(未归一化的Softmax向量)、LocalMax、GlobalMax和GlobalPowSum值作为输入,并通过首先使用低精度LPW倒数单元计算GlobalPowSum的倒数来执行归一化操作,在一个实施例中该倒数单元可以实现为大小为10字节的LUT。最终的Softmax向量元件可以通过右移未标准化SoftMax(UnnormedSoftMax)向量元素并乘以GlobalPowSum的倒数来计算。
通过使用减少的位宽操作数和减少的LUT,Softmax计算单元的实现成本(在面积、功率和/或速度方面)可以从用于在传统GPU上执行类似功能的浮点SFU显著降低。图8D描绘了针对Softmax计算中的各种因素的一个实施例的减少的位宽值Q(n,m),其中n是整数位的数目并且m是小数位的数目。
图9描绘了在一个实施例中可以被配置为实现可扩展神经网络处理器的分布式计算系统900。分布式计算系统900包括多个处理元件904,其使用本地路由器接口902在彼此之间传递值以执行分布式神经网络计算。深度神经网络的权重跨处理元件904的本地存储器空间平铺。处理元件904可以跨单个封装/设备/印刷电路板中的多个芯片分布,或者跨多个封装/设备/印刷电路板分布。
整体深度神经网络分布式计算由控制器906与存储在处理元件904的本地存储器或全局全局存储器缓冲器910中的计算的中间值协调。“全局存储器缓冲器”是指可供芯片上所有或至少多个处理元件使用的缓冲器。计算的张量、权重和其他值也可以至少在初始时从存储器912(例如,更大但更慢的DRAM设备)读取和写入。
在一个实施例中,控制器906被配置为协调处理元件904以执行未归一化的Softmax,其然后由归一化单元908归一化。
深度神经网络应用的需求可能会有很大不同。例如,典型的数据中心推理应用程序(如图像识别)可能会优先考虑低延迟下的性能和可扩展性,并且可能愿意牺牲分类准确度,而自动驾驶工作负载的推理可能会优先考虑实时约束内的能源效率,同时保持可实现的最佳网络准确性。分布式计算系统900是通用架构,其可以被配置为与通用解决方案相比具有性能和功率优势的专用推理加速器。
用于实现DNN加速器的多裸片封装1012实施例在图10中描绘。多裸片封装1012可以是包括多个裸片1018(芯片)的半导体封装。每个裸片1018包括多个处理元件1014、全局缓冲器1002和控制器1004(例如,开源RISC-V处理器)。每个芯片/裸片的元件经由片上网络路由器1008通信。封装中的多个芯片经由封装网络路由器1016彼此通信,并且还可以与包括DRAM1006或其他存储器的主机1020系统通信,经由现场可编程门阵列(FPGA1010)、联合测试行动组(JTAG)逻辑或本领域已知的其他接口技术。
一些或所有处理元件是本地处理元件,包括用于接收和存储深度神经网络的权重值的权重缓冲器。“权重缓冲器”是指存储权重值的缓冲器。本地处理元件包括一个激活缓冲器,用于接收深度神经网络的激活值。权重缓冲器和激活缓冲器可以是每个处理元件内的单独元件。本地处理元件还包括多个乘法累加单元以并行组合权重值和激活值以生成部分和。
多裸片封装1012可以被配置为在空间上和时间上(随着时间)在本地处理元件之间分配权重值和激活值。每个芯片的全局存储器缓冲器可以作为计算过程中激活值的二级缓冲器。“二级缓冲器”指的是当需要计算值但在一级缓冲器中不可用时存储和检索值的存储器。这里,芯片全局缓冲器可以充当芯片处理元件的一级激活缓冲器的二级缓冲器。计算期间权重和激活的分配可由芯片的控制器1004执行。控制器1004或任何处理元件1014的本地控制器可由存储在存储器中的指令配置以执行下文描述的各种数据流。以这种方式配置的存储器在本文中可以简称为“逻辑”。这种逻辑的位置是一种设计选择。存储这些指令的存储器可以是图中描绘的任何存储器,或者未描绘的不同存储器。
图11描绘了体现在单个芯片上的神经网络处理器1100。神经网络处理器1100可以利用多个处理元件1014之间的定点数据路径。神经网络处理器1100还包括前述的全局缓冲器1002和控制器1004,其例如可以是RISC-V处理器。处理元件1014和全局缓冲器1002经由片上网络路由器1008或其他互连技术(见GPU实现,下文进一步描述)进行通信。如果使用路由器,则它可以作为每个处理元件1014上的路由器集中或以分布式方式实现。处理元件1014利用路由器/互连与同一封装上的处理元件通信,或者在一些实施例中跨封装经由网络封装路由器1016通信。
图12在高层描绘了示例性本地处理元件1200。处理元件1200包括多个向量乘法累加单元1202、权重缓冲器1204、激活缓冲器1206、路由器1208、控制器1214、累加器存储器缓冲器1210和后处理器1212。
“累加存储器缓冲器”是指用于存储一个或更多个乘法累加单元的计算结果的存储器缓冲器。“后处理器”是指在乘法和累加之后应用的神经网络计算中的逻辑。在一个实施例中,激活缓冲器1206可以实现为双端口SRAM以经由路由器1208或其他互连从全局缓冲器1002或从其他本地或全局处理元件接收激活值。路由器1208可以是分布式片上网络路由器1008的组件,在一个实施例中,包括串行器/解串器、打包器、仲裁器、高级可扩展接口和本领域已知的其他组件。
在一个实施例中,权重缓冲器1204可以实现为存储权重值的单端口SRAM。向量乘-累加单元1202使用的权重值可以是“权重平稳的”,这意味着它们不是在每个时钟周期更新,而是一旦针对深度神经网络的特定层计算输出激活值时就更新。
累加存储器缓冲器1210可以包括一个或更多个SRAM设备以存储由向量乘法-累加单元1202计算的输出激活。路由器1208将这些输出激活和控制信号从处理元件1200传送到其他处理元件。
处理元件1200可以有效地执行DNN的卷积层和全连接层的所有操作,包括乘法累加、截断、缩放、偏置加法、ReLU和池化(后处理器1212中的最后五个)。“偏置加法”是指包含神经网络层的一个或更多个神经元的偏置(例如,一个固定的输出值或一个输出值的增量)。偏置添加是一种技术,用于确保当该层未检测到其输入中的任何特征时,该层的至少一个神经元对下一层产生非零激活。矢量乘法累加单元1202可以使用不同的滤波器对相同的输入进行操作。在一个实施例中,每个向量乘累加单元1202在每个时钟周期执行八输入通道的点积并将结果累加到累加存储器缓冲器1210中。存储在权重缓冲器1204中的权重不变,直到输出激活的整个计算完成。每个处理元件1200在每个时钟周期读取激活缓冲器1206中的输入激活,执行乘法-累加操作,并将输出激活写入累加存储器缓冲器1210。访问权重缓冲器1204的频率取决于输入激活矩阵维度和所使用的过滤器的数量。
每个处理元件1200的向量乘法-累加单元1202计算宽点积-累加的一部分作为部分结果并将该部分结果转发到相邻的处理元件。“相邻处理元件”是指距数据通信网络结构(例如片上网络或封装上网络)上的另一处理元件一跳距离处的处理元件。
后处理器1212将部分结果转换成最终结果并传送到全局缓冲器1002。全局缓冲器1002充当深度神经网络层之间的最终乘法累加结果的暂存区。
累加存储器缓冲器1210接收来自向量乘法-累加单元1202的输出。中央控制器1004在处理元件之间分配权重值和激活值,并利用全局存储器缓冲器作为激活值的二级缓冲器。当处理图像时,控制器1004在空间上通过输入/输出通道尺寸跨处理元件并且在时间上通过图像高度/宽度配置深度神经网络层的处理。
全局缓冲器1002存储来自处理元件1014的输入激活和输出激活两者,用于由前述收发器经由多播分发到处理元件。“多播”指的是组通信机制,由此数据传输同时寻址到一组目标设备(例如,处理元件)。多播可以实现一对多或多对多分发。在一个实施例中,每个处理元件1014包括路由器1208以在每个时钟周期传送64位数据输入和64位数据输出。这使得能够对宽点积的部分和进行累加,这些宽点积使它们的计算在处理元件1014上空间平铺。
图13更详细地描绘了示例性本地处理元件1300。处理元件1300包括前述向量乘法累加单元1202、权重缓冲器1204、激活缓冲器1206、路由器1208、控制器1214、累加存储器缓冲器1210和后处理器1212(例如后处理器1212)。还描绘了插入在权重缓冲器1204和向量乘法累加单元1202之间的权重收集器1320,以及插入在向量乘法累加单元1202和累加存储器缓冲器1210之间的累加收集器1322。累加收集器1322也可以在此称为“输出收集器”。还描绘了可以使用的各种存储器缓冲管理器(例如,权重存储器缓冲管理器1310、激活存储器缓冲管理器1312和累加存储器缓冲管理器1316)。“存储器缓冲管理器”是指用于管理存储器缓冲器内容的逻辑,例如在处理元件请求时管理缓冲器中某些数据(例如,权重、激活)的可用性。
处理元件1300包括向量乘法-累加单元1202,对于给定的数据流,其数量为N是可操作的。每个向量乘法累加单元1324在每个时钟周期执行V次乘法和加法。因此,在每个时钟周期中,处理元件1300可以将维度为NxV的权重矩阵与大小为V的输入激活向量相乘,以生成大小为N的部分和向量。换句话说,每个向量相乘-累加单元1202可以在每个时钟周期执行V-宽度点积计算。N和V之一或两者可以在控制器1004处配置。
输入激活缓冲器1206具有操作大小IA并且权重缓冲器1204具有操作大小W。“操作大小”是指可用于在设备操作期间执行计算的资源池,其可能小于资源池的总数或最大大小。可以使用寄存器或其他设置(例如,为了更高的性能或更低的功耗)来配置操作大小。W和IA之一或两者可以在控制器1004处配置。累加存储器缓冲器1210具有A的操作大小。
每个向量乘法累加单元1202包括权重收集器1320缓冲器,其具有可配置深度(例如,向量乘法累加单元1202在计算期间使用的寄存器文件中的不同寄存器或地址的数量)WD和宽度V x N x WP(WP也称为权重精度)。输入激活具有宽度IAP。每个向量乘-累加单元1202还包括累加收集器1322,其具有可配置的操作深度AD和宽度NxAP(AP也称为累加器精度)。V宽点积和N大小的部分和向量因此可以由每个向量乘法累加单元1324以混合精度计算。WD、WP、IAP、AD和AP中的一些或全部可由控制器1004配置。
权重缓冲器1204读取(输出)端口是WP x N x V位宽并且能够向向量乘法累加单元1202中的不同的向量提供不同的权重向量。激活缓冲器1206是IAP x V位宽因为相同的IA向量并行提供给所有N个向量乘-累加单元1202。
例如,可以调整V和N的值以实现一定量的计算并行性和权重重用。根据N和V的配置,可以调整W、IA、A等其他参数,以保证向量乘累加单元1202在卷积计算时保持忙碌。
权重缓冲器1204和激活缓冲器1206各自具有相关联的地址生成器(分别为地址生成器1314和地址生成器1318),其每个周期生成地址。“地址生成器”是指计算存储器中的地址值以从该地址读取或写入数据的逻辑。向量乘法-累加单元1202执行的操作顺序由这些地址生成器控制,这些地址生成器可配置为支持在累加收集器1322中针对不同类型的数据流在时钟周期内产生的权重或结果的时间重用。权重收集器1320的深度WD可以配置为根据数据流的要求实现部分和值的不同时间重用量。同样地,累加收集器1322的深度AD可以配置为根据数据流的要求实现权重值的不同时间重用量。
处理元件1300还可以包括设置在激活缓冲器1206和向量乘法累加单元1202之间的输入收集器1328。输入收集器1328的操作深度IC可以被配置为设置不同级别的输入激活固定数据流,如下文进一步描述。
权重缓冲器1204和激活缓冲器1206中的每一个还具有缓冲管理器(分别为权重存储器缓冲管理器1310和激活存储器缓冲管理器1312)响应于控制器1214并确定向量乘法累加单元1202的数据的可用性。在一些实施例中,地址生成器的维度和从权重缓冲器1204和激活缓冲器1206到向量乘法累加单元1202的数据移动的粒度可以在控制器1004处配置。
累加存储器缓冲器1210存储来自所有N个向量乘法累加单元1202的部分和并且可以被优化以在每个周期执行读-修改-写操作。来自N个向量乘法-累加单元1202的部分和被打包成宽度为AP×N的向量并存储在累加存储器缓冲器1210中。从那里,它们可以被直接发送到另一个处理元件以用于交叉处理元件减少或到后处理器1212产生最终输出激活。后处理器1212可以提供缩放和量化操作,以及额外的ReLU和池化操作以实现层融合。
输入权重1302通过路由器1208到达并存储在权重缓冲器1204中。输入激活1304也通过路由器1208到达并存储在激活缓冲器1206中。来自累积存储器缓冲器1210的计算输出激活1326(在后处理器1212的后处理之后)或部分和1306经由路由器1208分别输出到全局缓冲器1002或相邻处理元件。来自所述相邻处理元件的跨处理元件减少1308可由路由器1208接收并在累加存储器缓冲器1210中累加。“跨处理元件缩减”是指将第一处理元件的部分计算结果缩减为一个或更多个其他处理元件的最终或更完整的计算结果。
图14描绘了一个实施例中的后处理器1212。后处理器1212可以包括用于诸如池化、ReLu激活、偏置加法、舍入和缩放之类的常见神经网络操作的逻辑(例如,特殊功能单元1912)。在一些实施例中,未归一化的Softmax单元828可以被实现为处理处理元件1014的后处理器1212中的特殊功能单元。
图15示出了一个实施例中的全局处理元件1522。全局处理元件1522包括具有仲裁存储器组1520(例如,“暂存器”)的全局存储器缓冲器1502、对仲裁存储器组1520中的数据进行计算的控制器1504、以及激活地址生成器1506和目的地地址生成器1510分别生成源地址和目的地址用于计算。“存储器库”是指存储器存储的逻辑单元。存储器组可以由存储器控制器连同硬件存储器接口的物理组织一起确定。在典型的同步动态随机存取存储器(SDRAM)或双倍数据速率同步动态随机存取存储器(DDR SDRAM)中,存储器库包括多行多列的存储单元,可能分布在多个存储芯片上。全局处理元件1522经由路由器1208与其他处理元件通信。
去往和来自全局存储器缓冲器1502的数据路径1508包括寄存器文件1512,根据数据流的要求,其可以作为用于输入激活1518、输出激活1514和去往和来自本地处理元件的部分和1516中的一个或更多个的收集器。
许多神经网络利用诸如元件计算和深度卷积等计算来提高整体精度。本地处理元件专门用于执行具有重要数据重用的密集卷积。全局缓冲器1002可以在密集卷积期间被本地处理元件用作二级数据存储,并且还可以执行针对元件操作和深度卷积的计算。全局处理元件在本地以低计算存储器比执行计算,而无需通过神经网络的层(以及芯片)传输数据。
控制器1504对于每个全局处理元件1522可以是本地的或者可以由芯片主控制器(控制器1004)实现。同样地,全局存储器缓冲器1502对于全局处理元件1522可以是本地的或由全局缓冲器1002实现。
本文公开的算法和技术可以由利用至少一个图形处理单元(GPU)和/或通用数据处理器(例如,“中央处理单元或CPU”)的计算设备执行。描述了示例性架构,其可以被配置为在这样的设备上执行本文公开的技术。
以下描述可能会使用某些首字母缩写词和缩写词,如下所示:
·“DPC”指的是“数据处理集群”;
·“GPC”指的是“通用处理集群”;
·“I/O”指的是“输入/输出”;
·“L1缓存”是指“一级高速缓存”;
·“L2缓存”是指“二级高速缓存”;
·“LSU”是指“加载/存储单元”;
·“MMU”指的是“存储器管理单元”;
·“MPC”是指“M管线控制器”;
·“PPU”指的是“并行处理单元”;
·“PROP”指的是“预光栅操作单元”;
·“ROP”指的是“光栅操作”;
·“SFU”是指“特殊功能单元”;
·“SM”指的是“流式多处理器”;
·“视口SCC”是指“视口缩放、剔除和剪辑”;
·“WDX”指的是“工作分配交叉开关”;以及
·“XBar”指的是“交叉开关”。
并行处理单元
图16示出了根据一个实施例的并行处理单元2008b。在一个实施例中,并行处理单元2008b是在至少一个集成电路器件上实现的多线程处理器。并行处理单元2008b是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由并行处理单元2008b执行的指令集的实例。在一个实施例中,并行处理单元2008b是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,并行处理单元2008b可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应指出的是,该处理器出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代此处所述的处理器。。
至少一个并行处理单元2008b模块可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。并行处理单元2008b可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
如图16所示,并行处理单元2008b包括输入/输出(I/O)单元1602、前端单元1604、调度器单元1608、工作分配单元1610、集线器1606、交叉开关(Xbar)1614、至少一个通用处理集群(GPC)1700模块以及至少一个存储器分区单元1800模块。并行处理单元2008b可以经由至少一个高速NVLink1616互连连接到主机处理器或其他并行处理单元2008b模块。并行处理单元2008b可以经由互连1618连接到主机处理器或其他外围设备。并行处理单元2008b还可以连接到包括多个存储器设备1612的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM裸晶(die)堆叠在每个设备内。存储器1612可以包括用于配置并行处理单元2008b以执行本文公开的技术的方面的逻辑。
NVLink1616互连使得系统能够扩展并且包括与至少一个CPU结合的至少一个并行处理单元2008b模块,支持并行处理单元2008b模块和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink1616通过集线器1606发送到并行处理单元2008b的其他单元或从其发送,例如至少一个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图20更详细地描述NVLink1616。
I/O单元1602被配置为通过互连1618从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元1602可以经由互连1618直接与主机处理器通信,或通过至少一个中间设备(诸如存储器桥)与主机处理器通信。在一个实施例中,I/O单元1602可以经由互连1618与至少一个其他处理器(例如,至少一个并行处理单元2008b模块)通信。在一个实施例中,I/O单元1602实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连1618是PCIe总线。在替代的实施例中,I/O单元1602可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元1602对经由互连1618接收的数据包进行解码。在一个实施例中,数据包表示被配置为使并行处理单元2008b执行各种操作的命令。I/O单元1602按照命令指定将解码的命令发送到并行处理单元2008b的各种其他单元。例如,一些命令可以被发送到前端单元1604。其他命令可以被发送到集线器1606或并行处理单元2008b的其他单元,诸如至少一个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元1602被配置为在并行处理单元2008b的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向并行处理单元2008b提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和并行处理单元2008b两者访问(例如,读/写)的区域。例如,I/O单元1602可以被配置为经由通过互连1618传输的存储器请求访问连接到互连1618的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向并行处理单元2008b发送指向命令流开始的指针。前端单元1604接收指向至少一个命令流的指针。前端单元1604管理至少一个流,从流读取命令并将命令转发到并行处理单元2008b的各个单元。
前端单元1604耦合到调度器单元1608,其配置各种通用处理集群1700模块以处理由至少一个流定义的任务。调度器单元1608被配置为跟踪与由调度器单元1608管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个通用处理集群1700,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元1608管理至少一个通用处理集群1700模块上的多个任务的执行。
调度器单元1608耦合到工作分配单元1610,其被配置为分派任务以在通用处理集群1700模块上执行。工作分配单元1610可以跟踪从调度器单元1608接收到的若干调度的任务。在一个实施例中,工作分配单元1610为每个通用处理集群1700模块管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定通用处理集群1700处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由通用处理集群1700模块主动处理的任务。当通用处理集群1700完成任务的执行时,该任务从通用处理集群1700的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在通用处理集群1700上执行。如果通用处理集群1700上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从通用处理集群1700中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在通用处理集群1700上执行。
工作分配单元1610经由XBar(交叉开关)1614与至少一个通用处理集群1700模块通信。XBar1614是将并行处理单元2008b的许多单元耦合到并行处理单元2008b的其他单元的互连网络。例如,XBar1614可以被配置为将工作分配单元1610耦合到特定的通用处理集群1700。虽然没有明确示出,但并行处理单元2008b的至少一个其他单元也可以经由集线器1606连接到XBar1614。
任务由调度器单元1608管理并由工作分配单元1610分派给通用处理集群1700。通用处理集群1700被配置为处理任务并生成结果。结果可以由通用处理集群1700内的其他任务消耗,经由XBar1614路由到不同的通用处理集群1700,或者存储在存储器1612中。结果可以经由存储器分区单元1800模块写入存储器1612,存储器分区单元1800实现用于从存储器1612读取数据和向存储器1612写入数据的存储器接口。结果可以通过NVLink1616发送到另一个并行处理单元2008b或CPU。在一个实施例中,并行处理单元2008b包括数目为U的存储器分区单元1800模块,其等于耦合到并行处理单元2008b的独立且不同的存储器设备1612的数目。下面将结合图18更详细地描述存储器分区单元1800。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行应用程序以调度操作用于在并行处理单元2008b上执行。在一个实施例中,多个计算应用由并行处理单元2008b同时执行,并且并行处理单元2008b为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成任务以由并行处理单元2008b执行。驱动程序内核将任务输出到正在由并行处理单元2008b处理的流。每个任务可以包括至少一个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图19更详细地描述线程和协作线程。
图17示出了根据一个实施例的图16的并行处理单元2008b的通用处理集群1700模块。如图17所示,每个通用处理集群1700模块包括用于处理任务的多个硬件单元。在一个实施例中,每个通用处理集群1700模块包括管线管理器1702、预光栅操作单元1704、光栅引擎1708、工作分配交叉开关1714、存储器管理单元1716以及至少一个数据处理集群1706。应当理解,图17的通用处理集群1700可以包括代替图17中所示单元的其他硬件单元或除图17中所示单元之外的其他硬件单元。
在一个实施例中,通用处理集群1700的操作由管线管理器1702控制。管线管理器1702管理用于处理分配给通用处理集群1700的任务的至少一个数据处理集群1706模块的配置。在一个实施例中,管线管理器1702可以配置数据处理集群1706模块中的至少一个来实现图形渲染管线的至少一部分。例如,数据处理集群1706可以被配置为在可编程流式多处理器(SM)1900上执行顶点着色程序。管线管理器1702还可以被配置为将从工作分配单元1610接收的数据包路由到通用处理集群1700中适当的逻辑单元。例如,一些数据包可以被路由到预光栅操作单元1704和/或光栅引擎1708中的固定功能硬件单元,而其他数据包可以被路由到数据处理集群1706模块以供图元引擎1712或流式多处理器1900处理。在一个实施例中,管线管理器1702可以配置数据处理集群1706模块中的至少一个以实现神经网络模型和/或计算管线。
预光栅操作单元单元1704被配置为将由光栅引擎1708和数据处理集群1706模块生成的数据路由到光栅操作(ROP)单元,结合图18更详细地描述。预光栅操作单元单元1704还可以被配置为执行颜色混合的改进操作,组织像素数据,执行地址转换等。
光栅引擎1708包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎1708包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎1708的输出包括例如要由在数据处理集群1706内实现的片段着色器处理的片段。
包括在通用处理集群1700中的每个数据处理集群1706包括M管线控制器1710、图元引擎1712和至少一个流式多处理器1900模块。M管线控制器1710控制数据处理集群1706的操作,将从管线管理器1702接收到的数据包路由到数据处理集群1706中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎1712,图元引擎1712被配置为从存储器1612提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到流式多处理器1900。
流式多处理器1900包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个流式多处理器1900是多线程的并且被配置为并发地执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,流式多处理器1900实现单指令、多数据(SIMD)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,流式多处理器1900实现单指令、多线程(SIMT)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图19更详细地描述流式多处理器1900。
存储器管理单元1716提供通用处理集群1700和存储器分区单元1800之间的接口。存储器管理单元1716可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,存储器管理单元1716提供用于执行从虚拟地址到存储器1612中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图18示出了根据一个实施例的图16的并行处理单元2008b的存储器存储器分区单元1800。如图18所示,存储器存储器分区单元1800包括光栅操作单元1802、二级高速缓存1804和存储器接口1806。存储器接口1806耦合到存储器1612。存储器接口1806可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,并行处理单元2008b合并了U个存储器接口1806模块,每对存储器分区单元1800有一个存储器接口1806,其中每对存储器分区单元1800模块连接到对应的存储器设备1612。例如,并行处理单元2008b可以连接到多达Y个存储器设备1612,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口1806实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与并行处理单元2008b相同的物理封装上,提供与传统GDDR5SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸片并且Y等于4,其中HBM2堆叠包括每个裸片两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器1612支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了改进的可靠性。在大型集群计算环境中,并行处理单元2008b处理大量的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,并行处理单元2008b实现多级存储器层次。在一个实施例中,存储器存储器分区单元1800支持统一存储器以为CPU和并行处理单元2008b存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪并行处理单元2008b对位于其他处理器上的存储器的访问频率,以确保存储器页被移动到更频繁地访问该页的并行处理单元2008b的物理存储器。在一个实施例中,NVLink1616支持地址转换服务,其允许并行处理单元2008b直接访问CPU的页表并且提供由并行处理单元2008b对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个并行处理单元2008b模块之间或在并行处理单元2008b模块与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页错误。然后,存储器存储器分区单元1800可以服务页错误,将地址映射到页表中,之后复制引擎可以执行传输。在传统系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页是否驻留,并且复制过程是否透明。
来自存储器1612或其他系统存储器的数据可以由存储器存储器分区单元1800取回并存储在二级高速缓存1804中,二级高速缓存1804位于芯片上并且在各个通用处理集群1700模块之间共享。如图所示,每个存储器存储器分区单元1800包括与对应的存储器设备1612相关联的二级高速缓存1804的一部分。然后可以在通用处理集群1700模块内的多个单元中实现较低级高速缓存。例如,每个流式多处理器1900可以实现L1高速缓存。L1高速缓存是专用于特定流式多处理器1900的专用存储器。来自二级高速缓存1804的数据可以被获取并存储在每个L1高速缓存中,以在流式多处理器1900模块的功能单元中进行处理。二级高速缓存1804被耦合到存储器接口1806和交叉开关1614。
光栅操作单元1802执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。光栅操作单元1802还与光栅引擎1708一起实现深度测试,从光栅引擎1708的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则光栅操作单元1802更新深度缓冲区并将深度测试的结果发送给光栅引擎1708。将理解的是,存储器分区单元1800模块的数量可以不同于通用处理集群1700模块的数量,并且因此每个光栅操作单元1802可以耦合到每个通用处理集群1700模块。光栅操作单元1802跟踪从不同通用处理集群1700模块接收到的数据包并且确定由光栅操作单元1802生成的结果通过交叉开关1614被路由到哪个通用处理集群1700模块。尽管在图18中光栅操作单元1802被包括在存储器存储器分区单元1800内,但是在其他实施例中,光栅操作单元1802可以在存储器存储器分区单元1800之外。例如,光栅操作单元1802可以驻留在通用处理集群1700或另一个单元中。
图19示出了根据一个实施例的图17的流式多处理器1900。如图19所示,流式多处理器1900包括指令高速缓存1902、一个或更多个调度器单元1904模块(例如,调度器单元1608)、寄存器文件1908、一个或更多个处理核心1910模块、一个或更多个特殊功能单元1912、一个或更多个加载/存储单元1914模块、互连网络1916、共享存储器/L1高速缓存1918。
如上所述,工作分配单元1610调度任务以在并行处理单元2008b的通用处理集群1700模块上执行。任务被分配给通用处理集群1700内的特定数据处理集群1706,并且如果该任务与着色器程序相关联,则该任务可以被分配给流式多处理器1900。调度器单元1608接收来自工作分配单元1610的任务并且管理指派给流式多处理器1900的一个或更多个线程块的指令调度。调度器单元1904调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元1904可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心1910模块、特殊功能单元1912模块和加载/存储单元1914模块)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。传统的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元1906被配置在调度器单元1904内为向一个或更多个功能单元传送指令。在一个实施例中,调度器单元1904包括两个分派单元1906,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元1904可以包括单个分派单元1906或附加分派单元1906。
每个流式多处理器1900包括寄存器文件1908,其提供用于流式多处理器1900的功能单元的一组寄存器。在一个实施例中,寄存器文件1908在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件1908的专用部分。在另一个实施例中,寄存器文件1908在由流式多处理器1900执行的不同线程束之间被划分。寄存器文件1908为连接到功能单元的数据路径的操作数提供临时存储器。
每个流式多处理器1900包括L个处理核心1910模块。在一个实施例中,流式多处理器1900包括大量(例如128个等)不同的处理核心1910模块。每个核心1910可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE754-2008标准。在一个实施例中,核心1910模块包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心1910模块中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在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(诸如CUDA9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个流式多处理器1900还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个特殊功能单元1912模块。在一个实施例中,特殊功能单元1912模块可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,特殊功能单元1912模块可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器1612加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由流式多处理器1900执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存1918中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个流式多处理器1900包括两个纹理单元。
每个流式多处理器1900还包括N个加载/存储单元1914模块,其实现共享存储器/L1高速缓存1918和寄存器文件1908之间的加载和存储操作。每个流式多处理器1900包括将每个功能单元连接到寄存器文件1908以及将加载/存储单元1914连接到寄存器文件1908、共享存储器/L1高速缓存1918的互连网络1916。在一个实施例中,互连网络1916是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件1908中的任何寄存器,以及将加载/存储单元1914模块连接到寄存器文件1908和共享存储器/L1高速缓存1918中的存储器位置。
共享存储器/L1高速缓存1918是片上存储器阵列,其允许数据存储和流式多处理器1900与图元引擎1712之间以及流式多处理器1900中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存1918包括128KB的存储容量并且在从流式多处理器1900到存储器分区单元1800的路径中。共享存储器/L1高速缓存1918可以用于高速缓存读取和写入。共享存储器/L1高速缓存1918、二级高速缓存1804和存储器1612中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存1918内的集成使共享存储器/L1高速缓存1918起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图16所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元1610将线程块直接指派并分配给数据处理集群1706模块。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用流式多处理器1900执行程序并执行计算,使用共享存储器/L1高速缓存1918以在线程之间通信,以及使用加载/存储单元1914通过共享存储器/L1高速缓存1918和存储器存储器分区单元1800读取和写入全局存储器。当被配置用于通用并行计算时,流式多处理器1900还可以写入调度器单元1608可用来在数据处理集群1706模块上启动新工作的命令。
并行处理单元2008b可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,并行处理单元2008b包含在单个半导体衬底上。在另一个实施例中,并行处理单元2008b与一个或更多个其他器件(诸如附加并行处理单元2008b模块、存储器1612、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,并行处理单元2008b可以被包括在图形卡上,图形卡包括一个或更多个存储器设备。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,并行处理单元2008b可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图20是根据一个实施例的使用图16的并行处理单元2008b实现的处理系统2000的概念图。处理系统2000包括中央处理单元2006、交换机2004和多个并行处理单元2008b模块中的每一个以及相应的存储器1612模块。NVLink1616提供每个并行处理单元2008b模块之间的高速通信链路。尽管图20中示出了特定数量的NVLink1616和互连1618连接,但是连接到每个并行处理单元2008b和中央处理单元2006的连接的数量可以改变。交换机2004在互连1618和中央处理单元2006之间接口。并行处理单元2008b模块、存储器1612模块和NVLink1616连接可以位于单个半导体平台上以形成并行处理模块2002。在一个实施例中,交换机2004支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink1616在每个并行处理单元模块(并行处理单元2008a、并行处理单元2008b、并行处理单元2008c...并行处理单元2008d)和中央处理单元2006之间提供一个或更多个高速通信链路,并且交换机2004在互连1618和每个并行处理单元模块之间进行接口。并行处理单元模块、存储器1612模块和互连1618可以位于单个半导体平台上以形成并行处理模块2002。在又一个实施例(未示出)中,互连1618在每个并行处理单元模块和中央处理单元2006之间提供一个或更多个通信链路,并且交换机2004使用NVLink1616在每个并行处理单元模块之间进行接口,以在并行处理单元模块之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink1616在并行处理单元模块B和中央处理单元2006之间通过交换机2004提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连1618在每个并行处理单元模块之间直接地提供一个或更多个通信链路。可以使用与NVLink1616相同的协议将一个或更多个NVLink1616高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸片或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用传统总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块2002可以被实现为电路板衬底,并且并行处理单元模块和/或存储器1612模块中的每一个可以是封装器件。在一个实施例中,中央处理单元2006、交换机2004和并行处理模块2002位于单个半导体平台上。
在一个实施例中,每个NVLink1616的信令速率是20到25千兆位/秒,并且每个并行处理单元模块包括六个NVLink1616接口(如图20所示,每个并行处理单元模块包括五个NVLink1616接口)。每个NVLink1616在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当中央处理单元2006还包括至少一个NVLink1616接口时,NVLink1616可专门用于如图20所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink1616允许从中央处理单元2006到每个并行处理单元模块的存储器1612的直接加载/存储/原子访问。在一个实施例中,NVLink1616支持一致性操作,允许从存储器1612模块读取的数据被存储在中央处理单元2006的高速缓存分层结构中,减少了中央处理单元2006的高速缓存访问延迟。在一个实施例中,NVLink1616包括对地址转换服务(ATS)的支持,允许并行处理单元模块直接访问中央处理单元2006内的页表。至少一个NVLink1616还可以被配置为以低功率模式操作。
图21示出了示例性系统2100,其中可以实现各种先前实施例的各种体系架构和/或功能。如图所示,提供系统2100,其包括连接到通信总线2110的至少一个中央处理单元2006。通信总线2110可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或至少一个点对点通信协议。示例性处理系统2100还包括主存储器2102。控制逻辑(软件)和数据被存储在主存储器2102中,主存储器2102可以采取随机存取存储器(RAM)的形式。
示例性处理系统2100还包括输入设备2108、并行处理系统模块2002和显示设备2106,例如传统CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备2108(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成示例性处理系统2100。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,示例性处理系统2100可以出于通信目的通过网络接口2104耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
示例性处理系统2100还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器2102和/或辅助存储中。这些计算机程序在被执行时使得示例性处理系统2100能够执行各种功能。主存储器2102、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,示例性处理系统2100可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,实施例的宽度和范围不应受任何上述示例性实施例的限制,而应根据所附权利要求及其等同物来限定。
图形处理管线
图22是根据一个实施例的由图16的并行处理单元2008b实现的图形处理管线2200的概念图。在一个实施例中,并行处理单元2008b包括图形处理单元(GPU)。并行处理单元2008b被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。并行处理单元2008b可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器1612)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入至少一个流以执行操作来处理模型数据。这些命令可以参考要在并行处理单元2008b的流式多处理器1900模块上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,流式多处理器1900模块中的至少一个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的流式多处理器1900模块可以被配置为同时执行不同的着色程序。例如,流式多处理器1900模块的第一子集可以被配置为执行顶点着色程序,而流式多处理器1900模块的第二子集可以被配置为执行像素着色程序。流式多处理器1900模块的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入二级高速缓存1804和/或存储器1612。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,流式多处理器1900模块的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器1612中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
图形处理管线2200是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线2200接收从图形处理管线2200的一个阶段传送到下一阶段的输入数据601,以生成输出数据2204。在一个实施例中,图形处理管线2200可表示由
Figure BDA0003234641640000321
API定义的图形处理管线。作为选择,图形处理管线2200可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
如图22所示,图形处理管线2200包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装2206阶段、顶点着色2208阶段、图元组装2210阶段、几何着色2212阶段、视口SCC 2214阶段、光栅化2216阶段、片段着色2218阶段和光栅操作2220阶段。在一个实施例中,输入数据2202包括命令,其配置处理单元以实现图形处理管线2200的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据2204可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
数据组装2206阶段接收输入数据2202,其指定用于高阶表面、图元等的顶点数据。数据组装2206阶段收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色2208阶段以进行处理。
顶点着色2208阶段通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,<x,y,z,w>)。顶点着色2208阶段可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色2208阶段对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色2208阶段生成被传送到图元组装2210阶段的经变换的顶点数据。
图元组装2210阶段收集由顶点着色2208阶段输出的顶点并且将顶点分组成几何图元以由几何着色2212阶段处理。例如,图元组装2210阶段可以被配置为将每三个连续顶点分组为用于传送到几何着色2212阶段的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装2210阶段将几何图元(例如,相关联的顶点的集合)传送到几何着色2212阶段。
几何着色2212阶段通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色2212阶段可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线2200的其余部分进行处理。几何着色2212阶段将几何图元传送到视口SCC2214阶段。
在一个实施例中,图形处理管线2200可以在流式多处理器和顶点着色2208阶段、图元组装2210阶段、几何着色2212阶段、片段着色2218阶段和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC 2214阶段可以利用数据。在一个实施例中,由图形处理管线2200中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC 2214阶段可以访问高速缓存中的数据。在一个实施例中,视口SCC 2214阶段和光栅化2216阶段被实现为固定功能电路。
视口SCC 2214阶段执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化2216阶段。
光栅化2216阶段将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化2216阶段可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化2216阶段还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化2216阶段生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色2218阶段。
片段着色2218阶段通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色2218阶段可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色2218阶段生成像素数据,其被发送到光栅操作2220阶段。
光栅操作2220阶段可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stenciltest)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作2220阶段已经完成对像素数据(例如,输出数据2204)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
应当领会,除上述阶段中的至少一个以外或代替上述阶段中的至少一个,至少一个额外的阶段可以被包括在图形处理管线2200中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的至少一个可以从图形处理管线中排除(诸如几何着色2212阶段)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线2200的任何阶段可以由图形处理器(诸如并行处理单元2008b)内的至少一个专用硬件单元来实现。图形处理管线2200的其他阶段可以由可编程硬件单元(诸如并行处理单元2008b的流式多处理器1900)来实现。
图形处理管线2200可以经由由主机处理器(诸如CPU)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制并行处理单元2008b的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如并行处理单元2008b)来生成图形数据而不要求程序员利用并行处理单元2008b的特定指令集。应用程序可以包括被路由到并行处理单元2008b的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和并行处理单元2008b之间的输入/输出接口在并行处理单元2008b上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用并行处理单元2008b的硬件来实现图形处理管线2200。
可以在并行处理单元2008b内执行各种程序以便实现图形处理管线2200的各个阶段。例如,设备驱动程序可以启动并行处理单元2008b上的内核以在一个流式多处理器1900(或多个流式多处理器1900模块)上执行顶点着色2208阶段。设备驱动程序(或由PPU400执行的初始内核)还可启动PPU400上的其他内核以执行图形处理管线2200的其他阶段,诸如几何着色2212阶段和片段着色2218阶段。另外,图形处理管线2200的阶段中的一些可以在固定单元硬件(诸如在PPU400内实现的光栅器或数据组装器)上实现。应当领会,在被流式多处理器1900上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
绘图元件列表
100系统
102人
104云计算机系统
106物联网设备
108局域网
110话筒
112广域网
114神经网络
116 Softmax层
118数码设备
202深度学习系统
204计算系统
206车辆
208机器人
302变换神经网络
304输入序列
306编码器
308编码器栈
310编码器
312编码器
314解码器栈
316解码器
318解码器
320解码器
322输出序列
402编码器
404自注意力层
406前馈神经网络
502解码器
504编码器-解码器注意力层
506自注意力层
508前馈神经网络
602注意力层
604矩阵乘法
606查询向量
608键向量
610 值向量
612 分数向量
614点积
616 Softmax
618乘
620向量求和
700 Softmax算法
800 Softmax计算逻辑
802向量整数最大单元
804 2次幂计算单元
806减少单元
808最大选择器
810最大比较器
812存储器缓冲器
814电源和缓冲器
816功率和选择器
818右移
820加法器
822线性分段计算单元
824定点小数分路器
826左移
828未归一化Softmax单元
830归一化单元
832查表
834最大比较器
836向量元件加法器
900分布式计算系统
902路由器接口
904处理元件
906控制器
908归一化单元
910全局全局存储器缓冲器
912存储器
1002全局缓冲器
1004控制器
1006动态随机存取存储器
1008片上网络路由器
1010 FPGA
1012多芯片封装
1014处理元件
1016网络封装路由器
1018裸片
1020主机
1100神经网络处理器
1200处理元件
1202向量乘法累加单元
1204权重缓冲器
1206激活缓冲器
1208路由器
1210累积存储器缓冲器
1212后处理器
1214控制器
1300处理元件
1302输入权重
1304输入激活
1306部分和
1308跨处理元件减少
1310权重存储器缓冲管理器
1312激活存储器缓冲管理器
1314地址生成器
1316累加存储器缓冲管理器
1318地址生成器
1320权重收集器
1322累加收集器
1324矢量乘法累加单元
1326输出激活
1328输入收集器
1502全局存储器缓冲器
1504控制器
1506激活地址生成器
1508数据路径
1510目的地址生成器
1512寄存器文件
1514输出激活
1516部分和
1518输入激活
1520仲裁存储库
1522全局处理单元
1602输入/输出单元
1604前端单元
1606集线器
1608调度器单元
1610工作分配单元
1612存储器
1614交叉开关
1616 NVLink
1618互连
1700通用处理集群
1702管线管理器
1704预光栅操作单元
1706数据处理集群
1708光栅引擎
1710 M管控制器
1712图元引擎
1714工作分配交叉开关
1716存储器管理单元
1800存储器分区单元
1802光栅操作单元
1804二级高速缓存
1806存储器接口
1900流式多处理器
1902指令缓存
1904调度器单元
1906分派
1908寄存器文件
1910核心
1912特殊功能单元
1914加载/存储单元
1916互联网络
1918共享存储器/L1缓存
2000处理系统
2002并行处理模块
2004交换机
2006中央处理器
2008a并行处理单元
2008b并行处理单元
2008c并行处理单元
2008d并行处理单元
2100示范处理系统
2102主存储器
2104网络接口
2106显示设备
2108输入设备
2110通讯总线
2200图形处理管线
2202输入数据
2204输出数据
2206数据组装
2208顶点着色
2210图元装配
2212几何着色
2214视口SCC
2216光栅化
2218片段着色
2220光栅操作
可以在使用反映所述操作或功能的名词或名词短语所指代的逻辑中实现本文描述的各种功能操作。例如,关联操作可以由“关联器”或“相关器”执行。同样,切换可以通过“交换机”进行,通过“选择器”进行选择,等等。
在本公开中,不同的实体(可以不同地称为“单元”、“电路”、其他组件等)可以被描述或要求保护为“被配置”以执行一个或更多个任务或操作。这种表述——[实体]被配置为[执行一项或多项任务]——在本文中用于指代结构(即,物理的东西,例如电子电路)。更具体地,该公式用于指示该结构被布置为在操作期间执行一项或更多项任务。可以说结构被“配置为”执行某些任务,即使该结构当前没有被操作。“配置为将信用分配给多个处理器核心的信用分配电路”旨在涵盖,例如,具有在操作期间执行此功能的电路的集成电路,即使所讨论的集成电路当前没有被使用(例如,电源未连接到它)。因此,被描述或叙述为“被配置为”执行某些任务的实体指的是物理的东西,例如设备、电路、存储可执行以实现任务的程序指令的存储器等。该短语在本文中不用于指代无形的东西.
术语“配置为”并不意味着“可配置为”。例如,未编程的FPGA不会被视为“配置为”执行某些特定功能,尽管它可能“可配置为”在编程后执行该功能。
在所附权利要求中叙述结构被“配置为”执行一项或更多项任务,其明确意图不是援引35U.S.C.§112(f)用于该权利要求要素。因此,本申请中不包括“手段”[执行功能]构造的权利要求不应根据35U.S.C§112(f)解释。
如本文所用,术语“基于”用于描述影响确定的一个或更多个因素。该术语不排除其他因素可能影响确定的可能性。即,确定可以仅基于指定的因素或基于指定的因素以及其他未指定的因素。考虑短语“根据B确定A”。该短语指定B是用于确定A或影响A的确定的因素。该短语并不排除A的确定也可能基于某些其他因素,例如C。该短语也旨在涵盖仅基于B确定A的实施例。如本文所用,短语“基于”与短语“至少部分基于”同义。
如本文所用,短语“响应于”描述了触发效果的一个或更多个因素。该短语不排除其他因素可能影响或以其他方式触发效果的可能性。也就是说,效果可能仅对那些因素做出响应,或者可能对指定的因素以及其他未指定的因素做出响应。考虑短语“执行A以响应B”。该短语指定B是触发A执行的因素。该短语不排除执行A也可能响应某些其他因素,例如C。该短语还旨在涵盖A仅在响应B时执行。
如本文所用,术语“第一”、“第二”等用作它们前面的名词的标签,并不暗示任何类型的排序(例如,空间、时间、逻辑等),除非另有说明。例如,在具有八个寄存器的寄存器文件中,术语“第一寄存器”和“第二寄存器”可以用于指代八个寄存器中的任意两个,而不是例如具体的逻辑寄存器0和1。
当在权利要求中使用时,术语“或”用作包含性的或而非排除性的或。例如,短语“x、y或z中的至少一个”是指x、y和z中的任何一个,以及它们的任何组合。
如本文所用,关于两个或更多个元素的“和/或”的叙述应被解释为仅表示一个元素或元素的组合。例如,“元素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中的至少一种。
本公开的主题在本文中被具体描述以满足法定要求。然而,描述本身并不旨在限制本公开的范围。相反,所要求保护的主题还可以以其他方式体现,以包括与本文档中描述的步骤类似的不同步骤或步骤组合,并结合其他现有或未来技术。此外,尽管术语“步骤”和/或“块”在本文中可用于暗示所采用方法的不同要素,但这些术语不应被解释为暗示本文公开的各个步骤之中或之间的任何特定顺序,除非且除非该顺序明确描述了各个步骤。
已经如此详细地描述了说明性实施例,很明显,在不脱离所要求保护的本公开的范围的情况下,修改和变化是可能的。所公开主题的范围不限于所描绘的实施例,而是在以下权利要求中阐述。

Claims (25)

1.一种系统,包括:
一个或更多个处理器;以及
逻辑,当将所述逻辑应用于所述一个或更多个处理器时,通过以下方式根据输入向量计算未归一化的Softmax向量:
将所述输入向量的元素提高到2的幂;
计算所述输入向量的整数向量最大值;以及
逻辑,当将其应用于所述一个或更多个处理器时,将所述未归一化的Softmax向量转换为归一化的Softmax向量。
2.如权利要求1所述的系统,还包括:
所述一个或更多个处理器包括多个处理元件;以及
逻辑,用于配置所述多个处理元件以在分布式计算中计算所述未归一化的Softmax向量。
3.如权利要求2所述的系统,还包括逻辑,用以:
配置所述多个处理元件中的至少一些以计算它们各自输入向量的本地整数最大值;以及
配置所述多个处理元件中的至少一些以执行所述本地整数最大值到全局整数最大值的跨处理元件减少。
4.如权利要求2所述的系统,还包括逻辑,用以:
配置所述一个或更多个处理器以计算2的幂之和。
5.如权利要求4所述的系统,还包括逻辑,用以:
配置所述多个处理元件中的至少一些来计算它们各自输入向量的2的幂的本地和;以及
配置所述多个处理元件中的至少一些来执行将所述2的幂的本地和到2的幂的全局和的跨处理元件减少。
6.如权利要求2所述的系统,还包括:
中央归一化单元,用于将所述未归一化的Softmax向量转换为所述归一化的Softmax向量。
7.如权利要求1所述的系统,其中用于计算所述未归一化的Softmax向量的逻辑进一步将所述一个或更多个处理器配置为:
将所述输入向量的元素提高到2的幂,并在单个执行循环中计算所述整数向量最大值。
8.如权利要求7所述的系统,其中用于计算未归一化的Softmax向量的逻辑进一步将所述一个或更多个处理器配置为:
在所述单个执行循环中计算2的幂之和。
9.一种人工神经网络,包括:
一个或更多个前馈层;以及
一个或更多个Softmax层,其耦合到所述一个或更多个前馈层;
至少一个Softmax层,其被配置为通过以下方式根据输入向量计算未归一化的Softmax向量:
将所述输入向量的元素提高到2的幂;以及
计算所述输入向量的整数向量最大值。
10.如权利要求9所述的人工神经网络,所述至少一个Softmax层还被配置为:
将所述未归一化的Softmax向量转换为归一化的Softmax向量。
11.如权利要求10所述的人工神经网络,所述至少一个Softmax层还被配置为:
在不执行乘法运算的情况下,利用移位和倒数操作将所述未归一化的Softmax向量转换为归一化的Softmax向量。
12.如权利要求9所述的人工神经网络,所述至少一个Softmax层还被配置为:
在分布式计算中利用多个处理元件来计算所述未归一化的Softmax向量。
13.如权利要求12所述的人工神经网络,所述至少一个Softmax层还被配置为:
利用所述多个处理元件中的至少一些来计算它们各自输入向量的本地整数最大值;以及
利用所述多个处理元件中的至少一些来执行所述本地整数最大值到全局整数最大值的跨处理元件减少。
14.如权利要求12所述的人工神经网络,所述至少一个Softmax层还被配置为计算2的幂之和。
15.如权利要求14所述的人工神经网络,所述至少一个Softmax层还被配置为:
利用所述多个处理元件中的至少一些来计算它们各自输入向量的2的幂的本地和;以及
利用所述多个处理元件中的至少一些来执行将所述2的幂的本地和到2的幂的全局和的跨处理元件减少。
16.如权利要求12所述的人工神经网络,所述至少一个Softmax层还被配置为:
将所述未归一化的Softmax向量转换为归一化的Softmax向量。
17.如权利要求9所述的人工神经网络,所述至少一个Softmax层还被配置为:
将所述输入向量的元素提高到2的幂,并在单个执行循环中计算所述整数向量最大值。
18.如权利要求17所述的人工神经网络,所述至少一个Softmax层还被配置为:
在所述单个执行循环中计算2的幂之和。
19.一种变换人工神经网络,包括:
自注意力层;以及
编码器-解码器注意力层;
所述自注意力层和所述编码器-解码器注意力层中的每一个都包括Softmax层,所述Softmax层被配置为通过以下方式根据输入向量生成未归一化的Softmax向量:
将所述输入向量的元素提高到2的幂;以及
计算所述输入向量的整数向量最大值。
20.如权利要求19所述的变换人工神经网络,每个Softmax层还被配置为:
通过将所述输入向量的元素提高到2的幂来生成所述未归一化的Softmax向量,计算所述整数向量最大值,并在单个执行循环中计算2的幂之和;以及
在不执行乘法运算的情况下,利用移位和倒数操作将所述未归一化的Softmax向量转换为归一化的Softmax向量。
21.一种非暂时性计算机可读存储介质,所述计算机可读存储介质包括指令,当所述指令被计算机执行时,通过以下方式使所述计算机执行神经网络推理:
在Softmax计算中用公式表示2x值元素的向量,其中每个x是所述Softmax计算的输入向量的元素;以及
计算所述输入向量中x的整数最大值。
22.如权利要求21所述的非暂时性计算机可读存储介质,所述计算机可读存储介质还包括指令,当所述指令由所述计算机执行时使所述计算机:
从所述2x元素的向量和所述整数最大值生成未归一化的Softmax向量。
23.如权利要求22所述的非暂时性计算机可读存储介质,所述计算机可读存储介质还包括指令,当所述指令由所述计算机执行时使所述计算机:
归一化所述未归一化的Softmax向量。
24.如权利要求21所述的非暂时性计算机可读存储介质,所述计算机可读存储介质还包括指令,当所述指令由所述计算机执行时使所述计算机:
在Softmax计算中用公式表示所述2x元素的向量,计算所述输入向量中所述x的整数最大值,并在单个执行循环中计算所述2x元素的向量之和。
25.一种在人工神经网络层中执行的方法,所述方法包括:
执行第一机器指令,以在Softmax计算中用公式表示2x值元素的向量,其中每个x是所述Softmax计算的输入向量的元素;以及
执行第二指令以计算所述输入向量中x的整数最大值。
CN202111007923.6A 2020-08-28 2021-08-27 高效的softmax计算 Pending CN114118354A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063071968P 2020-08-28 2020-08-28
US63/071,968 2020-08-28
US17/112,795 US20220067513A1 (en) 2020-08-28 2020-12-04 Efficient softmax computation
US17/112,795 2020-12-04

Publications (1)

Publication Number Publication Date
CN114118354A true CN114118354A (zh) 2022-03-01

Family

ID=80221877

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111007923.6A Pending CN114118354A (zh) 2020-08-28 2021-08-27 高效的softmax计算

Country Status (3)

Country Link
US (1) US20220067513A1 (zh)
CN (1) CN114118354A (zh)
DE (1) DE102021120605A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117009729A (zh) * 2023-10-08 2023-11-07 之江实验室 基于softmax的数据处理方法及装置
TWI831588B (zh) * 2023-01-30 2024-02-01 創鑫智慧股份有限公司 神經網路演算裝置以及在神經網路演算中的數值轉換方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11494645B2 (en) * 2018-12-06 2022-11-08 Egis Technology Inc. Convolutional neural network processor and data processing method thereof
US20220244911A1 (en) * 2021-01-29 2022-08-04 Microsoft Technology Licensing, Llc Digital circuitry for normalization functions
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
US11514370B1 (en) * 2021-12-03 2022-11-29 FriendliAI Inc. Selective batching for inference system for transformer-based generation tasks
US11442775B1 (en) 2021-12-03 2022-09-13 FriendliAI Inc. Dynamic batching for inference system for transformer-based generation tasks
CN114626489A (zh) * 2022-05-17 2022-06-14 深圳比特微电子科技有限公司 一种softmax函数定点化实现方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11861452B1 (en) * 2019-06-17 2024-01-02 Cadence Design Systems, Inc. Quantized softmax layer for neural networks
EP4173292A4 (en) * 2020-06-25 2024-03-27 Ericsson Telefon Ab L M METHOD AND SYSTEM FOR IMAGE COMPRESSION AND CODING WITH DEEP LEARNING

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI831588B (zh) * 2023-01-30 2024-02-01 創鑫智慧股份有限公司 神經網路演算裝置以及在神經網路演算中的數值轉換方法
CN117009729A (zh) * 2023-10-08 2023-11-07 之江实验室 基于softmax的数据处理方法及装置
CN117009729B (zh) * 2023-10-08 2024-01-26 之江实验室 基于softmax的数据处理方法及装置

Also Published As

Publication number Publication date
DE102021120605A1 (de) 2022-03-03
US20220067513A1 (en) 2022-03-03

Similar Documents

Publication Publication Date Title
US11270197B2 (en) Efficient neural network accelerator dataflows
CN110363294B (zh) 利用网络中的路径来表示神经网络以提高神经网络的性能
US20220067513A1 (en) Efficient softmax computation
US11106261B2 (en) Optimal operating point estimator for hardware operating under a shared power/thermal constraint
CN110766778B (zh) 使用散列执行并行路径空间滤波的方法和系统
US11972354B2 (en) Representing a neural network utilizing paths within the network to improve a performance of the neural network
US11645533B2 (en) IR drop prediction with maximum convolutional neural network
US11886980B2 (en) Neural network accelerator using logarithmic-based arithmetic
US20200151571A1 (en) Transposed sparse matrix multiply by dense matrix for neural network training
EP3678037A1 (en) Neural network generator
US11379420B2 (en) Decompression techniques for processing compressed data suitable for artificial neural networks
CN114118347A (zh) 用于神经网络量化的细粒度每向量缩放
US20210158155A1 (en) Average power estimation using graph neural networks
CN112288619A (zh) 用于在渲染图形时预加载纹理的技术
US20220067530A1 (en) Fine-grained per-vector scaling for neural network quantization
US10684824B2 (en) Stochastic rounding of numerical values
CN114529443A (zh) 以目标采样率的自适应采样
CN113822975A (zh) 用于对图像进行有效采样的技术
CN115039076A (zh) 无障碍和无围栏共享存储器同步
US20220129755A1 (en) Incorporating a ternary matrix into a neural network
CN111221498A (zh) 动态方向舍入
US20240160406A1 (en) Low-precision floating-point datapath in a computer processor
US20220261650A1 (en) Machine learning training in logarithmic number system
CN116521056A (zh) 使用映射器定位与存储器地址相关联的存储器单元

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