CN111221498A - 动态方向舍入 - Google Patents

动态方向舍入 Download PDF

Info

Publication number
CN111221498A
CN111221498A CN201911165847.4A CN201911165847A CN111221498A CN 111221498 A CN111221498 A CN 111221498A CN 201911165847 A CN201911165847 A CN 201911165847A CN 111221498 A CN111221498 A CN 111221498A
Authority
CN
China
Prior art keywords
floating
point
rounding
point result
result
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
CN201911165847.4A
Other languages
English (en)
Inventor
亚历克斯·菲特-弗洛雷亚
B·金斯伯格
P·达乌迪
A·吴拉米内贾德
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 CN111221498A publication Critical patent/CN111221498A/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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • G06F7/49957Implementation of IEEE-754 Standard
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Nonlinear Science (AREA)
  • Neurology (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

本发明公开了动态方向舍入,具体公开了一种用于舍入浮点值的方法、计算机可读介质和系统。动态方向舍入是用于浮点运算的舍入技术。对操作数执行浮点运算(加、减、乘等)以计算浮点结果。标识操作数的符号(正或负)。在一个实施例中,符号确定浮点结果舍入的方向(向负或正无穷大)。当在反向传播期间用于更新神经网络的参数时,动态方向舍入可确保在梯度方向上执行舍入。

Description

动态方向舍入
技术领域
本公开涉及舍入数值,并且更具体地,涉及舍入浮点值。
背景技术
传统舍入技术由IEEE(电气和电子工程师协会)标准定义(向最接近舍入、向零舍入、向正无穷大舍入、向负无穷大舍入)。最近,已经开发了依赖于随机值来舍入浮点数的随机舍入技术。为此,随机舍入技术需要生成随机值。需要解决这些问题和/或与现有技术相关联的其他问题。
附图说明
图1A示出了根据一个实施例的用于舍入浮点结果的方法的流程图。
图1B示出了根据一个实施例的系统的框图。
图1C示出了根据一个实施例的根据符号舍入浮点结果的概念图。
图1D示出了根据一个实施例的根据符号舍入浮点结果的概念图。
图1E示出了根据一个实施例的根据符号舍入浮点结果的概念图。
图2A示出了根据一个实施例的舍入单元的框图。
图2B示出了根据一个实施例的用于舍入浮点结果的方法的流程图。
图3示出了根据一个实施例的并行处理单元。
图4A示出了根据一个实施例的图3的并行处理单元内的通用处理集群。
图4B示出了根据一个实施例的图3的并行处理单元的存储器分区单元。
图5A示出了根据一个实施例的图4A的流式多处理器。
图5B是根据一个实施例的使用图3的PPU实现的处理系统的概念图。
图5C示出了在其中可以实现各种先前实施例的各种架构和/或功能的示例性系统。
具体实施方式
图1A示出了根据一个实施例的用于舍入浮点结果的方法100的流程图。尽管在处理单元的上下文中描述了方法100,但是方法100也可以由程序、定制电路或定制电路和程序的结合来执行。在一个实施例中,方法100 可以由GPU(图形处理单元)、CPU(中央处理单元)或能够执行算术计算的任何处理器执行。此外,本领域普通技术人员将理解,执行方法100 的任何系统都在本文所述实施例的范围和精神内。
在步骤110,接收两个或更多个浮点操作数。在一个实施例中,以包括符号、指数和尾数的浮点格式表示两个或更多个浮点操作数。在一个实施例中,两个或更多个浮点操作数由程序指令指定。在一个实施例中,两个或更多个浮点操作数中的至少一个是表达式。在一个实施例中,两个或更多个浮点操作数中的至少一个是算术表达式。在一个实施例中,程序指令是算术运算指令。
在步骤120,至少部分地基于对两个或更多个浮点操作数运算的至少一个数学运算来生成浮点结果。在一个实施例中,至少一个数学运算由包括两个或更多个浮点操作数的程序指令指定。在一个实施例中,数学运算包括加法。在一个实施例中,数学运算包括减法。在一个实施例中,数学运算包括乘法。
在步骤130中,至少部分地基于浮点操作数中的至少一个对浮点结果进行舍入。在一个实施例中,执行舍入而无需生成随机值。在一个实施例中,标识浮点操作数之一的符号。在一个实施例中,浮点操作数之一由程序指令指定。在一个实施例中,浮点操作数之一由程序指令内的位置(例如,第一、第二、最后)或顺序指定,并且该位置是固定的或可编程的。在一个实施例中,浮点操作数之一由设置指定,并且该设置可以是固定的或可编程的。在一个实施例中,该设置指定第一操作数是浮点结果的舍入所基于的一个操作数。
在一个实施例中,在与浮点操作数之一的符号相对应的方向上舍入浮点结果。在一个实施例中,基于至少一个数学运算生成的浮点结果在动态确定的方向(即符号的方向)上舍入。在一个实施例中,当符号为正时,浮点结果在正方向上舍入。在一个实施例中,当符号为正时,浮点结果在正无穷大的方向上舍入。在一个实施例中,当符号为负时,浮点结果在负方向上舍入。
在一个实施例中,当符号为正并且浮点结果的结果符号也为正时,浮点结果在正方向上舍入。在一个实施例中,当符号为正且结果符号为负时,浮点结果在正方向上舍入。在一个实施例中,当符号与结果符号均为负时,浮点结果在负方向上舍入。在一个实施例中,当符号为负且结果符号为正时,浮点结果在负方向上舍入。换句话说,在一个实施例中,舍入可以排他地跟随操作数的符号,并且可以独立于结果的符号。
在一个实施例中,在对应于浮点操作数之一的一位或更多位的方向上舍入浮点结果。浮点操作数之一的一位或更多位可以设置为真(TRUE)或假(FALSE),以控制舍入方向。此外,改变操作数的值可以反过来改变浮点结果的值。
在一个实施例中,至少部分地基于浮点操作数中的至少一个的值来执行舍入。在一个实施例中,如果该值在第一数值范围内,则浮点结果在正方向上舍入。在一个实施例中,如果该值在第二数值范围内,则浮点结果在负方向上舍入。在一个实施例中,第一和第二数值范围可以是固定的或可编程的。在一个实施例中,第一和第二数值范围重叠。在一个实施例中,第一和第二数值范围是排他的。
现在将根据用户的需求,给出关于可用于实现前述框架的各种可选架构和特征的更多说明性信息。应该特别注意的是,以下信息是出于说明目的而提出的,不应以任何方式解释为限制。下面的任何特征可以有选择地与所描述的其他特征合并或不合并。
在一个实施例中,降低表示数学计算的数值的精度在某些情况下可能是有益的。可以用精度不高的16位浮点值替换32位浮点值,以减少用于训练神经网络的电路、功率和带宽。与使用全精度值相比,降低的精度值在数据传输期间仅需要一半的带宽,并且管芯面积和功耗不到一半。但是,可以使用16位浮点格式表示的值的范围远小于可以使用32位浮点格式表示的值的范围。小于由16位浮点格式表示的最小值的数字将丢失(例如,变为零),并且精度可能降低。
随机舍入是传统上用于扩展数值范围的技术。采用传统的舍入到最近,确定性地将数字向上或向下舍入,例如,将介于0.5和1之间的值舍入为1,低于0.5的值总是舍入为0。采用随机舍入,则舍入为概率。使用随机舍入,个体舍入事件实际上会引入更多的误差,但是对较长的累加序列的平均而言,结果的误差将较小。例如,当在每个数字累加后使用传统的舍入方法累加1000个值为0.1的数字时,结果将为零,而对于随机舍入,结果应更接近于正确答案100。
因此,尽管当对一长串数值应用累加和舍入运算时,随机舍入是优选的,但是挑战是在软件或硬件中有效地实现随机舍入的随机舍入行为。一种方法可以是为每个舍入运算生成随机数,但是这在附加电路和/或功耗方面很昂贵。在一个实施例中,可以使用图1A的方法100和/或下面公开的任何其他特征来避免这种花费。再次,然而,应当注意的是,这种花费避免仅仅是可选的,并且可以想到其中省略了这种特征的至少一个实施例。
根据一个实施例,在训练神经网络期间,使用反向传播来连续或周期性地更新神经网络的参数。基于梯度来更新参数,以减小神经网络的输出与期望的(ground truth,地面实况)输出相比的差异。在一个实施例中,使用梯度下降技术来最小化成本函数,并且在梯度的方向上更新参数。随着训练的进行和成本函数最小化,梯度通常会越来越小。由于参数的有限精度,梯度的大小可能变得太小而无法改变参数的值。当梯度变得太小时,无法实现参数在梯度指定的方向上的运动。
在一个实施例中,动态方向舍入可用于在反向传播期间更新神经网络的参数,以确保参数沿梯度方向上改变。在一个实施例中,动态方向舍入可用于确保浮点结果在操作数符号定义的方向上舍入。在一个实施例中,动态方向舍入可以用于确保在操作数的值定义的方向上舍入浮点结果。在一个实施例中,可以使用动态方向舍入来确保在操作数定义的方向上舍入浮点结果。在一个实施例中,操作数基于梯度,并且浮点结果是参数。
图1B示出了根据一个实施例的系统140的框图。在一个实施例中,系统140包括浮点运算单元145和舍入单元150。尽管在处理单元的上下文中描述了系统140,但是一个或更多个单元,例如浮点运算单元145和舍入单元150,可以被实现为程序、定制电路或由定制电路和程序的组合来实现。在一个实施例中,系统140可以由GPU(图形处理单元)、CPU(中央处理单元)或能够执行浮点运算的任何处理器来实现。此外,本领域普通技术人员将理解,执行系统140的操作的任何系统都在本文描述的实施例的范围和精神内。
浮点运算单元145接收两个或更多个浮点操作数,并至少部分地基于对两个或更多个浮点操作数运算的至少一个数学运算来生成浮点结果。在一个实施例中,两个或更多个浮点操作数分别使用IEEE浮点格式来表示。
在一个实施例中,动态方向舍入用于执行加法运算。对于加法运算A=B+C,如果操作数符号为正或负,则结果A与输入B或C任一都不相同。当将C指定为用于舍入的操作数时,和B+C将在C的符号方向上进行舍入。当C等于零时,A=B。否则,当C>0时,A=B+C+V,其中V是舍入值,而当C<0时,A=B+C-V。因此,当C等于一个小的非零数时,当C的符号为正时,动态方向舍入将产生A>B,而当C的符号为负时,则将产生 A<B。在一个实施例中,V等于最后一位(ulp)中的一个单元,最低精度或最低有效位(lsb)的单元。换句话说,舍入值的大小是可以使用浮点操作数之一的尾数中的位数表示的最小值。当舍入值V为1ulp时,对于C> 0,A=A+ulp,对于C<0,A=A-ulp,对于C=0,A=A。
舍入单元150包括舍入值生成单元155和单元160。在一个实施例中,单元160是被配置为执行带符号浮点加法的累加器,并且舍入值是带符号的浮点数。在一个实施例中,单元160是可配置为基于控制信号执行加法或减法的加法器/减法器,并且舍入值包括无符号的浮点数和控制信号,其中,根据控制信号无符号浮点数被加到浮点结果或从浮点结果减去。
在一个实施例中,舍入单元150接收浮点结果,该浮点结果至少包括尾数和浮点操作数中的至少一个。舍入值生成单元155基于操作数符号生成舍入值。在一个实施例中,舍入值是最后一位(ulp)的单元,最低精度的单元或浮点操作数之一的最低有效位(lsb)。在一个实施例中,当浮点操作数之一的值在第一数值范围内时,舍入值为正;当浮点操作数之一的值在第二数值范围内时,舍入值为负。舍入值的大小可以是固定的、计算的或编程的。
在一个实施例中,舍入单元150接收浮点结果,该浮点结果至少包括尾数和浮点操作数中的至少一个的(操作数)符号。当操作数符号为正时,舍入值为正;当操作数符号为负时,舍入值为负。舍入值的大小可以是固定的、计算的或编程的。在一个实施例中,舍入单元150可以被配置为执行动态方向舍入和传统的IEEE 754-2008舍入。
在一个实施例中,单元160将舍入值与浮点结果相加以计算经舍入的浮点结果。在一个实施例中,单元160接收以无符号格式表示的舍入值,并且当操作数符号为正时执行加法,并且当操作数符号为负时执行减法。在一个实施例中,单元160在累加结果上溢或下溢时对累加结果进行归一化。在一个实施例中,浮点结果和经舍入的浮点结果各自均包括23位尾数和浮点格式数的符号。在一个实施例中,浮点结果和经舍入的浮点结果各自均包括15位尾数。在一个实施例中,浮点结果和经舍入的浮点结果各自均包括7位尾数。
在一个实施例中,针对一个操作数的浮点运算启用/禁用动态方向舍入。在一个实施例中,针对浮点运算程序指令启用/禁用动态方向舍入。在一个实施例中,专用程序指令针对一个或更多个浮点运算启用/禁用动态方向舍入。在一个实施例中,可以选择性地针对执行算术运算(例如,乘加、求和等)的程序指令启用动态方向舍入。
在一个实施例中,可以执行算术运算,包括但不限于以下表1所列的算术运算。
表1
1.ADD:z=x+y,然后符号(y)定义了舍入模式,但其他参数(x)的符号无关
2.ACCUMULAT_ADD:z+=y符号(y)定义了舍入模式,但是z的符号无关
3.融合乘法加法,当舍入模式取决于中间结果的符号而不取决于操作数的符号时:Z=z+x*y:舍入模式取决于符号(x*y)。
图1C示出了根据一个实施例的根据符号对浮点结果进行舍入的概念图。浮点数的精度受到限制,因此,当浮点运算单元145生成的浮点结果为与量化值(例如F-1、F0或F1)不完全相等时,浮点结果将向F-1或F1舍入。可以根据浮点格式的精度精确表示量化值。每个量化值之间的距离为1 ulp,因此F1=F0+1ulp和F-1=F0-1ulp。如图1C所示,当浮点结果是一个正值,沿着从零到正无穷大的正轴位于F-1和F0之间或F0和F1之间时,浮点结果将被舍入以生成经舍入的浮点结果,其等于量化值F-1、F0或F1
当使用动态方向舍入时,在一个实施例中,经舍入的浮点结果至少部分地基于输入到浮点运算单元145的浮点操作数中的至少一个的符号。当操作数为零,则符号既不是正也不是负,浮点结果和经舍入的浮点结果都等于F0。当操作数的符号为正时,浮点结果在正方向上向F1或正无穷大舍入。对于正符号,大于F0的浮点结果将被舍入,因此,经舍入的浮点结果等于F1,而小于F0的浮点结果将被舍入,因此经舍入的浮点结果等于F0。当操作数的符号为负时,浮点结果将在负方向上向F-1或负无穷大舍入。对于负符号,大于F0的浮点结果将被舍入,因此,经舍入的浮点结果等于F0,而小于F0的浮点结果将被舍入,因此经舍入的浮点结果等于F-1
在一个实施例中,将浮点结果计算为和W1=W0+D0,其中W0是神经网络的权重,其在反向传播期间由梯度D0更新以生成W1。当D0的大小小于W0的1/2ulp时,当使用传统舍入时,针对W1计算的浮点结果可能等于 W0。即使使用随机舍入,计算与W0不同的W1的概率也很低。相反,动态方向舍入可确保W1的值不等于W0,除非D0等于零时。因此,计算出的权重W1沿梯度方向移动,从而增加了成本函数趋向于全局最小值而不会保持在局部最小值或平稳状态的可能性。在一个实施例中,D0被表达式(例如, D0*A0)代替,并且所评估的表达式的符号控制W1=W0+(D0*A0)的舍入方向。
在一个实施例中,W0=1.2531e12,D0=1.0001e2,并且浮点结果 W0+D0=1.25310000010001e12。F-1是1.2530e12,F0是1.2531e12,F1是 1.2532e12,所以浮点结果位于F0和F1之间。使用操作数的浮点精度表示时,W0+D0=W0,因为D0的大小比W0小。在一个实施例中,舍入值为1ulp。当浮点结果在正方向上舍入时,基于D0的符号,经舍入的浮点结果W1被计算为等于F1。当D0的符号为负时,浮点结果在负方向上舍入,并且经舍入的浮点结果被计算为等于F0。当D0为零时,将W1设置为等于F0
图1D示出了根据一个实施例的根据符号舍入浮点结果的概念图。如图1D所示,浮点结果是一个正值,沿着从零到正无穷大的正轴位于F0和 F1之间。当(操作数)符号为正时,浮点结果在正方向上向F1舍入,并且经舍入的浮点结果等于F1。当(操作数)符号为负时,浮点结果在负方向上向F-1舍入,并且经舍入的浮点结果等于F0
图1E示出了根据一个实施例的根据符号舍入浮点结果的概念图。如图1E所示,浮点结果是介于F-1和F0之间的正值。当(操作数)符号为正时,浮点结果在正方向上向F1舍入,并且经舍入的浮点结果等于F0。当(操作数)符号为负时,浮点结果在负方向上向F-1舍入,并且经舍入的浮点结果等于F-1
图2A示出了根据一个实施例的舍入单元170的框图。舍入单元170 包括舍入值生成单元155、单元160、零条件单元175和多路复用器180。尽管在处理单元的上下文中描述了舍入单元170,但是一个或更多个单元 (例如舍入值生成单元155、单元160和零条件单元175)可以被实现为程序、定制电路或由定制电路和程序的组合来实现。在一个实施例中,舍入单元170可以由GPU(图形处理单元)、CPU(中央处理单元)或能够执行浮点运算的任何处理器来实现。此外,本领域普通技术人员将理解,执行舍入单元170的操作的任何系统都在本文描述的实施例的范围和精神内。
在一个实施例中,舍入单元170接收浮点操作数中的至少一个,并且浮点结果至少包括尾数。如前所述,舍入值生成单元155基于操作数符号生成舍入值。在一个实施例中,还基于用于生成浮点结果的浮点操作数之一的ulp或lsb生成舍入值。
在一个实施例中,单元160将舍入值与浮点结果相加,以计算输入到多路复用器180的加和(sum)。多路复用器180还接收浮点结果作为输入。零条件单元175向多路复用器180输出选择信号,其用于选择加和或浮点结果之一作为经舍入的浮点结果。在一个实施例中,零条件单元175接收包括操作数符号的操作数,并确定操作数是否等于零。当操作数等于零时,多路复用器180使用选择信号来选择浮点结果作为经舍入的浮点结果。否则,当操作数不等于零时,多路复用器180使用选择信号来选择加和作为经舍入的浮点结果。
在一个实施例中,零条件单元175确定浮点结果是否被精确表示。当浮点结果等于量化值时,浮点结果被精确表示。当浮点结果被精确地表示时,多路复用器180使用选择信号来选择浮点结果作为经舍入的浮点结果。否则,当浮点结果没有被精确表示时,多路复用器180使用零符号信号来选择加和作为经舍入的浮点结果。
图2B示出了根据一个实施例的用于舍入浮点结果的方法200的流程图。尽管在舍入单元170的上下文中描述了方法200,但是方法200也可以由程序、定制电路,或使用定制电路和程序的组合来执行。在一个实施例中,方法200可以由GPU(图形处理单元)、CPU(中央处理单元)或任何能够执行算术计算的处理器执行。此外,本领域普通技术人员将理解,执行方法200的任何系统都在本文所述实施例的范围和精神内。
在步骤210,舍入单元170接收浮点结果。在一个实施例中,浮点结果以包括符号、指数和尾数的浮点格式表示。在一个实施例中,通过执行程序指令来生成浮点结果。在一个实施例中,程序指令是算术运算指令。
在步骤215处,标识被提供为用于计算浮点结果的输入的操作数的符号。在一个实施例中,将操作数提供为被执行以生成浮点结果的程序指令的输入。在一个实施例中,操作数是被估计的表达式,并且符号是所估计的表达式的符号。在一个实施例中,该表达式是算术表达式。
在步骤225,通过舍入单元170在符号的方向上舍入浮点结果,以产生经舍入的浮点结果。在一个实施例中,将浮点结果在与符号相对应的方向上舍入。
在步骤230中,零条件单元175确定是否满足零条件,如果是,则在步骤235中,多路复用器180将经舍入的浮点结果设置为浮点结果。在步骤230,如果零条件单元175确定不满足零条件,则经舍入的浮点结果不变。在步骤240,基于经舍入的浮点结果输出至少一个符号。在一个实施例中,经舍入的浮点结果是在神经网络的训练期间计算的经更新的权重值的至少一部分,并且经舍入的浮点结果被提供给神经网络。
在一个实施例中,当在神经网络的训练期间使用动态方向舍入时,经更新的权重值的大小被改变,并且经更新的权重值在梯度的符号方向上被改变。在梯度方向上对权重进行舍入可以提高神经网络的准确性,也可以减少训练时间。与生成用于执行随机舍入的随机值相比,使用操作数的符号需要更少的电路。
并行处理架构
图3示出了根据一个实施例的并行处理单元(PPU)300。在一个实施例中,PPU 300是在一个或更多个集成电路器件上实现的多线程处理器。 PPU 300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 300执行的指令集的实例。在一个实施例中, PPU 300是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD) 设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
一个或更多个PPU 300可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 300可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
如图3所示,PPU 300包括输入/输出(I/O)单元305、前端单元315、调度器单元320、工作分配单元325、集线器330、交叉开关(Xbar)370、一个或更多个通用处理集群(GPC)350以及一个或更多个分区单元380。 PPU 300可以经由一个或更多个高速NVLink 310互连连接到主机处理器或其他PPU 300。PPU 300可以经由互连302连接到主机处理器或其他外围设备。PPU 300还可以连接到包括多个存储器设备304的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个 DRAM裸晶(die)堆叠在每个设备内。
NVLink 310互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 300,支持PPU 300和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 310通过集线器330发送到 PPU 300的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 310。
I/O单元305被配置为通过互连302从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元305可以经由互连302直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,I/O单元305可以经由互连302与一个或更多个其他处理器(例如,一个或更多个PPU 300)通信。在一个实施例中,I/O 单元305实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连302是PCIe总线。在替代的实施例中,I/O单元305可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元305对经由互连302接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 300执行各种操作的命令。I/O单元305按照命令指定将解码的命令发送到PPU 300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或PPU 300 的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元305被配置为在PPU 300 的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 300提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU 300两者访问(例如,读/写)的区域。例如,所述I/O单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到PPU 300的各个单元。
前端单元315耦合到调度器单元320,其配置各种GPC350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个 GPC350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个GPC350上的多个任务的执行。
调度器单元320耦合到工作分配单元325,其被配置为分派任务以在 GPC350上执行。工作分配单元325可以跟踪从调度器单元320接收到的若干调度的任务。在一个实施例中,工作分配单元325为每个GPC350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙 (例如,32个时隙),其包含被指派为由特定GPC350处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由GPC350主动处理的任务。当GPC350完成任务的执行时,该任务从GPC350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC350 上执行。如果GPC350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC350上执行。
工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC350 通信。XBar370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的 GPC350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。
任务由调度器单元320管理并由工作分配单元325分派给GPC350。 GPC350被配置为处理任务并生成结果。结果可以由GPC350内的其他任务消耗,经由XBar 370路由到不同的GPC350,或者存储在存储器304中。结果可以经由分区单元380写入存储器304,分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。结果可以通过NVLink310发送到另一个PPU 304或CPU。在一个实施例中,PPU 300包括数目为U的分区单元380,其等于耦合到PPU 300的独立且不同的存储器设备304的数目。下面将结合图4B更详细地描述分区单元380。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 300上执行。在一个实施例中,多个计算应用由PPU 300同时执行,并且PPU 300为多个计算应用程序提供隔离、服务质量(QoS) 和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 300执行。驱动程序内核将任务输出到正在由PPU 300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图5A更详细地描述线程和协作线程。
图4A示出了根据一个实施例的图3的PPU 300的GPC350。如图4A 所示,每个GPC350包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC350包括管线管理器410、预光栅操作单元(PROP)415、光栅引擎425、工作分配交叉开关(WDX)480、存储器管理单元(MMU)490 以及一个或更多个数据处理集群(DPC)420。应当理解,图4A的GPC350 可以包括代替图4A中所示单元的其他硬件单元或除图4A中所示单元之外的其他硬件单元。
在一个实施例中,GPC350的操作由管线管理器410控制。管线管理器410管理用于处理分配给GPC350的任务的一个或更多个DPC420的配置。在一个实施例中,管线管理器410可以配置一个或更多个DPC420中的至少一个来实现图形渲染管线的至少一部分。例如,DPC420可以被配置为在可编程流式多处理器(SM)440上执行顶点着色程序。管线管理器410还可以被配置为将从工作分配单元325接收的数据包路由到GPC350中适当的逻辑单元。例如,一些数据包可以被路由到PROP 415和/或光栅引擎 425中的固定功能硬件单元,而其他数据包可以被路由到DPC420以供图元引擎435或SM 440处理。在一个实施例中,管线管理器410可以配置一个或更多个DPC420中的至少一个以实现神经网络模型和/或计算管线。
PROP单元415被配置为将由光栅引擎425和DPC420生成的数据路由到光栅操作(ROP)单元,结合图4B更详细地描述。PROP单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎425包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且未剔除的片段被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎 425的输出包括例如要由在DPC420内实现的片段着色器处理的片段。
包括在GPC350中的每个DPC420包括M管线控制器(MPC)430、图元引擎435和一个或更多个SM 440。MPC430控制DPC420的操作,将从管线管理器410接收到的数据包路由到DPC420中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 440。
SM 440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 440实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在一个实施例中,SM 440实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5A更详细地描述SM440。
MMU 490提供GPC350和分区单元380之间的接口。MMU 490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图4B示出了根据一个实施例的图3的PPU 300的存储器分区单元 380。如图4B所示,存储器分区单元380包括光栅操作(ROP)单元450、二级(L2)高速缓存460和存储器接口470。存储器接口470耦合到存储器304。存储器接口470可以实现用于高速数据传输的32、64、128、1024 位数据总线等。在一个实施例中,PPU 300合并了U个存储器接口470,每对分区单元380有一个存储器接口470,其中每对分区单元380连接到对应的存储器设备304。例如,PPU 300可以连接到多达Y个存储器设备304,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口470实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 300相同的物理封装上,提供与常规GDDR5 SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器304支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,PPU 300处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,PPU 300实现多级存储器层次。在一个实施例中,存储器分区单元380支持统一存储器以为CPU和PPU 300存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪PPU 300对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的PPU 300的物理存储器。在一个实施例中,NVLink 310支持地址转换服务,其允许PPU 300直接访问 CPU的页表并且提供由PPU 300对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 300之间或在PPU 300与CPU 之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元380可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器304或其他系统存储器的数据可以由存储器分区单元380 取回并存储在L2高速缓存460中,L2高速缓存460位于芯片上并且在各个GPC350之间共享。如图所示,每个存储器分区单元380包括与对应的存储器设备304相关联的L2高速缓存460的一部分。然后可以在GPC350 内的多个单元中实现较低级高速缓存。例如,每个SM 440可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 440的专用存储器。来自 L2高速缓存460的数据可以被获取并存储在每个L1高速缓存中,以在SM 440的功能单元中进行处理。L2高速缓存460被耦合到存储器接口470和 XBar 370。
ROP单元450执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。ROP单元450还与光栅引擎425一起实现深度测试,从光栅引擎425的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元450更新深度缓冲区并将深度测试的结果发送给光栅引擎425。将理解的是,分区单元380的数量可以不同于GPC350 的数量,并且因此每个ROP单元450可以耦合到每个GPC350。ROP单元 450跟踪从不同GPC350接收到的数据包并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC350。尽管在图4B中ROP单元450 被包括在存储器分区单元380内,但是在其他实施例中,ROP单元450可以在存储器分区单元380之外。例如,ROP单元450可以驻留在GPC350 或另一个单元中。
图5A示出了根据一个实施例的图4A的流式多处理器440。如图5A 所示,SM 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元 (SFU)552、一个或更多个加载/存储单元(LSU)554、互连网络580、共享存储器/L1高速缓存570。
如上所述,工作分配单元325调度任务以在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32 个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、SFU 552和LSU554)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏 (barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元515被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元510包括两个分派单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个分派单元515或附加分派单元515。
每个SM 440包括寄存器文件520,其提供用于SM 440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在另一个实施例中,寄存器文件520在由SM 440执行的不同线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储器。
每个SM 440包括L个处理核心550。在一个实施例中,SM 440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心550包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8 个张量核心(tensorCore)。在一个实施例中,核心550被配置为使用方法 100或200执行舍入运算。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。在一个实施例中,张量核心被配置为使用方法100或200执行舍入运算。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 440还包括执行特殊函数(例如,属性评估、倒数平方根等) 的M个SFU552。在一个实施例中,SFU 552被配置为使用方法100或200 执行舍入运算。在一个实施例中,SFU 552可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU552可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器304加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由SM 440执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存470中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个SM 440包括两个纹理单元。
每个SM 440还包括N个LSU 554,其实现共享存储器/L1高速缓存 570和寄存器文件520之间的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、共享存储器/L1高速缓存570的互连网络580。在一个实施例中,互连网络 580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和共享存储器/L1高速缓存570中的存储器位置。
共享存储器/L1高速缓存570是片上存储器阵列,其允许数据存储和 SM 440与图元引擎435之间以及SM 440中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存570包括128KB的存储容量并且在从SM 440到分区单元380的路径中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存储器/L1高速缓存570、L2高速缓存460和存储器304中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存570内的集成使共享存储器/L1高速缓存570起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给DPC420。块中的线程执行相同的程序,使用计算中的唯一线程 ID来确保每个线程生成唯一结果,使用SM 440执行程序并执行计算,使用共享存储器/L1高速缓存570以在线程之间通信,以及使用LSU 554通过共享存储器/L1高速缓存570和存储器分区单元380读取和写入全局存储器。当被配置用于通用并行计算时,SM 440还可以写入调度器单元320 可用来在DPC420上启动新工作的命令。
PPU 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 300包含在单个半导体衬底上。在一个实施例中,PPU 300与一个或更多个其他器件(诸如附加PPU 300、存储器304、精简指令集计算机 (RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等) 一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备304。图形卡可以被配置为与台式计算机的主板上的 PCIe插槽接口。在又一个实施例中,PPU 300可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加
图5B是根据一个实施例的使用图3的PPU 300实现的处理系统500 的概念图。示例性系统565可以被配置为实现图1中所示的方法100。处理系统500包括CPU 530、交换机510和多个PPU 300中的每一个以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU 300和CPU 530的连接的数量可以改变。交换机510在互连302和CPU 530之间接口。PPU300、存储器304和NVLink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 530 之间提供一个或更多个高速通信链路,并且交换机510在互连302和每个 PPU 300之间进行接口。PPU300、存储器304和互连302可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连302在每个PPU 300和CPU 530之间提供一个或更多个通信链路,并且交换机510使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300 之间提供一个或更多个高速通信链路。在一个实施例(未示出)中,NVLink 310在PPU 300和CPU 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连302在每个PPU 300之间直接地提供一个或更多个通信链路。可以使用与NVLink 310相同的协议将一个或更多个NVLink 310高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且PPU 300和/或存储器304中的每一个可以是封装器件。在一个实施例中,CPU 530、交换机510和并行处理模块525位于单个半导体平台上。
在一个实施例中,每个NVLink 310的信令速率是20到25千兆位/秒,并且每个PPU300包括六个NVLink 310接口(如图5B所示,每个PPU 300 包括五个NVLink 310接口)。每个NVLink 310在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当CPU 530还包括一个或更多个NVLink 310接口时,NVLink 310可专门用于如图5B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 310允许从CPU 530到每个PPU 300的存储器304的直接加载/存储/原子访问。在一个实施例中,NVLink 310支持一致性操作,允许从存储器304读取的数据被存储在CPU 530的高速缓存分层结构中,减少了CPU 530的高速缓存访问延迟。在一个实施例中, NVLink 310包括对地址转换服务(ATS)的支持,允许PPU 300直接访问CPU 530内的页表。一个或更多个NVLink 310还可以被配置为以低功率模式操作。
图5C示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现图1中所示的方法 100或图2B中所示的方法260。
如图所示,提供系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以使用任何合适的协议来实现,诸如PCI (外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取随机存取存储器(RAM)的形式。
系统565还包括输入设备560、并行处理系统525和显示设备545,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备560(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统565可以出于通信目的通过网络接口535耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统565还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB) 闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器540和/或辅助存储中。这些计算机程序在被执行时使得系统565能够执行各种功能。存储器540、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
机器学习
在处理器(诸如PPU 300)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性水平分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高水平的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理 (inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别沉积在ATM机中的支票存款上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险、或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。

Claims (24)

1.一种方法,包括:
接收两个或更多个浮点操作数;
至少部分地基于对所述两个或更多个浮点操作数运算的至少一个数学运算来生成浮点结果;以及
至少部分地基于所述浮点操作数中的至少一个舍入所述浮点结果。
2.根据权利要求1所述的方法,还包括:
确定所述浮点操作数中的所述至少一个等于零;以及
基于所述确定,将经舍入的浮点结果设置为等于所述浮点结果。
3.根据权利要求1所述的方法,其中,所述舍入包括:如果所述浮点操作数之一的符号为正,则将最小精度的单位添加至所述浮点结果,并且如果所述符号为负,则从所述浮点结果减去最小精度的单位。
4.根据权利要求3所述的方法,其中,所述浮点操作数之一由所述浮点操作数的排序指示。
5.根据权利要求3所述的方法,其中,所述浮点操作数之一由设置指示。
6.根据权利要求1所述的方法,其中,所述浮点操作数中的所述至少一个是到算术运算指令的输入。
7.根据权利要求1所述的方法,其中,所述浮点操作数中的所述至少一个是表达式。
8.一种计算机实现的方法,包括:
接收两个或更多个浮点操作数;
至少部分地基于对所述两个或更多个浮点操作数运算的至少一个数学运算来生成浮点结果;以及
至少部分地基于所述浮点操作数中的至少一个的值舍入所述浮点结果。
9.根据权利要求8所述的方法,其中,所述舍入包括:如果所述值在预定范围内,则将最小精度的单位添加到所述浮点结果。
10.根据权利要求8所述的方法,其中,所述舍入包括:如果所述值在预定范围内,则从所述浮点结果中减去最小精度的单位。
11.根据权利要求8所述的方法,其中,所述舍入包括当所述值为正时,将lsb添加到所述浮点结果。
12.根据权利要求8所述的方法,其中,所述舍入包括当所述值为负时,从所述浮点结果减去lsb。
13.根据权利要求8所述的方法,还包括:
确定所述值等于零;以及
根据所述确定,将经舍入的浮点结果设置为等于所述浮点结果。
14.根据权利要求8所述的方法,还包括:
确定所述浮点结果被精确表示;以及
基于所述确定,将经舍入的浮点结果设置为等于所述浮点结果。
15.根据权利要求8所述的方法,还包括:基于经舍入的浮点结果输出至少一个信号,其中所述至少一个信号被配置为用于更新神经网络的一个或更多个参数。
16.根据权利要求8所述的方法,其中,生成随机值避免与产生经舍入的浮点结果相关。
17.一种装置,包括:
电路,所述电路被配置为:
接收两个或更多个浮点操作数;
至少部分地基于对所述两个或更多个浮点操作数运算的至少一个数学运算来生成浮点结果;以及
至少部分地基于所述浮点操作数中的至少一个的符号舍入所述浮点结果。
18.根据权利要求17所述的装置,其中,所述电路还被配置为:
确定所述浮点结果被精确表示;以及
基于所述确定,将经舍入的浮点结果设置为等于所述浮点结果。
19.根据权利要求17所述的装置,其中,所述电路被配置为使得所述舍入包括:如果所述符号为正,则向正无穷大舍入。
20.根据权利要求17所述的装置,其中,所述电路被配置为使得所述舍入包括:如果所述符号为负,则向负无穷大舍入。
21.根据权利要求17所述的装置,其中,所述电路进一步被配置为基于经舍入的浮点结果输出至少一个信号。
22.根据权利要求21所述的装置,其中,所述电路被配置为使得所述至少一个信号被配置为用于更新神经网络的一个或更多个参数。
23.根据权利要求17所述的装置,其中,所述浮点结果是浮点格式数的尾数。
24.根据权利要求17所述的装置,还包括归一化经舍入的浮点结果,以产生浮点格式数的尾数。
CN201911165847.4A 2018-11-26 2019-11-25 动态方向舍入 Pending CN111221498A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/200,325 US10908878B2 (en) 2018-11-26 2018-11-26 Dynamic directional rounding
US16/200,325 2018-11-26

Publications (1)

Publication Number Publication Date
CN111221498A true CN111221498A (zh) 2020-06-02

Family

ID=68696345

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911165847.4A Pending CN111221498A (zh) 2018-11-26 2019-11-25 动态方向舍入

Country Status (3)

Country Link
US (2) US10908878B2 (zh)
EP (1) EP3657322A1 (zh)
CN (1) CN111221498A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113076083B (zh) * 2021-06-04 2021-08-31 南京后摩智能科技有限公司 数据乘加运算电路

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5373461A (en) * 1993-01-04 1994-12-13 Motorola, Inc. Data processor a method and apparatus for performing postnormalization in a floating-point execution unit
US6684232B1 (en) * 2000-10-26 2004-01-27 International Business Machines Corporation Method and predictor for streamlining execution of convert-to-integer operations
US7069289B2 (en) * 2001-05-25 2006-06-27 Sun Microsystems, Inc. Floating point unit for detecting and representing inexact computations without flags or traps
US8066911B2 (en) * 2008-07-31 2011-11-29 Invista North America S.A.R.L. Method of improving flowability of adipic acid
JP2010238011A (ja) * 2009-03-31 2010-10-21 Nec Computertechno Ltd ベクトル乗算処理装置および方法ならびにプログラム
WO2018189728A1 (en) 2017-04-14 2018-10-18 Cerebras Systems Inc. Floating-point unit stochastic rounding for accelerated deep learning

Also Published As

Publication number Publication date
EP3657322A1 (en) 2020-05-27
US20200167125A1 (en) 2020-05-28
US20210232366A1 (en) 2021-07-29
US10908878B2 (en) 2021-02-02

Similar Documents

Publication Publication Date Title
US11106261B2 (en) Optimal operating point estimator for hardware operating under a shared power/thermal constraint
US10614613B2 (en) Reducing noise during rendering by performing parallel path space filtering utilizing hashing
US11043028B2 (en) Reducing level of detail of a polygon mesh to decrease a complexity of rendered geometry within a scene
US12008475B2 (en) Transposed sparse matrix multiply by dense matrix for neural network training
US11341369B2 (en) Distributed batch normalization using partial populations
CN112445713A (zh) 用于对内存有效分区的技术
US11961001B2 (en) Parallel forward and backward propagation
US10684824B2 (en) Stochastic rounding of numerical values
US11379420B2 (en) Decompression techniques for processing compressed data suitable for artificial neural networks
EP3678037A1 (en) Neural network generator
CN112416297A (zh) 基于对数算法的神经网络加速器
CN112783554A (zh) 用于程序间数据交换的持久便签内存
CN114970803A (zh) 对数系统中的机器学习训练
CN110908929B (zh) 用于高带宽缩放的一致数据高速缓存
CN116736624A (zh) 在光学接近度校正流中对演进掩模形状的并行掩模规则检查
CN115797543A (zh) 单个图像逆向渲染
CN113822975B (zh) 用于对图像进行有效采样的技术
US11476852B2 (en) Glitch-free multiplexer
CN115039076A (zh) 无障碍和无围栏共享存储器同步
US20210232366A1 (en) Dynamic directional rounding
CN116127685A (zh) 使用机器学习执行模拟
US11809989B2 (en) Preventing glitch propagation

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