改进的用于执行乘法/累加运算的设备

文档序号:1952070 发布日期:2021-12-10 浏览:6次 >En<

阅读说明:本技术 改进的用于执行乘法/累加运算的设备 (Improved apparatus for performing multiply/accumulate operations ) 是由 罗文杰 孟跃 张晋 于 2021-06-08 设计创作,主要内容包括:用于执行乘法/累加运算的电路,其评估一对输入值中的每个值的类型。带符号的值被分为符号和幅度。将一对或多对参数输入到乘法器,以使参数具有的位数少于带符号值或非带符号值的幅度。这可以包括将输入值分成多个参数,以及将单对输入值的多对参数输入到乘法器。(Circuitry for performing multiply/accumulate operations evaluates the type of each of a pair of input values. Signed values are divided into signs and amplitudes. One or more pairs of parameters are input to the multiplier such that the parameters have fewer bits than the magnitude of the signed or unsigned value. This may include splitting the input value into a plurality of parameters and inputting a plurality of pairs of parameters of a single pair of input values to the multiplier.)

具体实施方式

为了容易理解本发明的优点,将通过参考附图中所示的具体实施例来呈现本发明的更为具体的描述。应当理解,这些附图仅描述本发明的典型实施例,而不构成对其范围的限制。以下将通过使用附图以额外的特异性和细节来描述和解释本发明。

本发明的组件可以以多种不同的方式来布置和设计。因此,如附图所示,以下对本发明的实施例的更详细的描述并非旨在限制本发明所要求的保护范围,而以示意方式说明本发明的基本构想。请参考附图以更好地理解此处描述的实施例,其中,相同的组件始终用相同的数字表示。

根据本发明的实施例可以体现为装置,方法或计算机程序产品。相应地,本发明可以采取全硬件实施例,全软件实施例(包括固件,常驻软件,微代码等)或,结合软件和硬件的实施例的形式,在本文中这些方面可被称为“模块”或“系统”。此外,本发明的形式可以是在任何有形表达介质中体现的计算机程序产品,在该介质中具有计算机可用的程序代码。

本发明可以利用一种或多种计算机可用或计算机可读介质的任何组合,包括非暂时性介质。例如,计算机可读介质可以包括便携式计算机软盘,硬盘,随机存取存储器(RAM)设备,只读存储器(ROM)设备,可擦除可编程只读存储器(EPROM或闪存)设备,便携式光盘只读存储器(CDROM),光学存储设备和磁性存储设备。在选定的实施例中,计算机可读介质可以包括任何非暂时性介质,其可以包含、存储、通信、传播或传输由指令执行系统、装置或设备使用或与其结合使用的程序。

本发明可以用一种或多种编程语言的任何组合来编写用于执行本发明的操作的计算机程序代码,所述编程语言包括诸如Java,Smalltalk,C++等之类的面向对象的编程语言以及诸如“C”编程语言之类的常规过程编程语言。所述程序代码可以完全在计算机系统上作为独立软件包执行,在独立硬件单元上执行,部分在与计算机间隔一定距离的远程计算机上执行,或者完全在远程计算机或服务器上执行。在最后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到计算机,或者可以与外部计算机建立连接(例如,通过使用互联网服务提供商的互联网)。

下面将参考根据本发明实施例的方法、装置(系统)、计算机程序产品的流程图和/或框图描述本发明。流程图图示和框图的每个部分都可以通过计算机程序指令或代码来实现。这些计算机程序指令可以被提供给通用计算机、专用计算机或用以生产机器的其他可编程数据处理设备的处理器,从而使计算机或其他可编程数据处理设备的处理器执行的指令可创建用于实现流程图和/或框图中指定的功能/动作。

这些计算机程序指令还可以存储在非暂时性计算机可读介质中,该介质可以指导计算机或其他可编程数据处理设备以特定方式运行,从而使存储在计算机可读介质中的指令产生制品,该制品包括指令装置,该指令装置可实现流程图和/或方框图中指定的功能/动作。

计算机程序指令也可被加载到计算机或其他可编程数据处理设备上,以使一系列操作步骤在计算机或其他可编程设备上执行,以产生计算机实现的过程,从而使计算机或其他可编程数据处理设备的处理器执行的指令提供用于实现流程图和/或框图中指定的功能/动作的过程。

图1为示例计算设备100的框图。计算设备100可以用于执行各种过程,诸如本文所讨论的过程。计算设备100可以用作服务器、客户端或任何其他计算实体。计算设备可以执行本文所公开的各种功能,并且可以执行一个或多个应用程序,例如本文公开的应用程序。计算设备100可以是多种计算设备中的任何一种,例如台式计算机、笔记本计算机、服务器计算机、手持式计算机、平板计算机等。

计算设备100包括一个或多个处理器102,一个或多个存储设备104,一个或多个接口106,一个或多个大容量存储设备108,一个或多个输入/输出(I/O)设备110,和显示设备130,均耦合到总线112。处理器102包括一个或多个执行存储在存储设备104和/或大容量存储设备108中的指令的处理器或控制器。处理器102还可以包括各种类型的计算机可读介质,例如高速缓冲存储器。

存储设备104包括各种计算机可读介质,例如易失性存储器(例如,随机存取存储器(RAM)114)和/或非易失性存储器(例如,只读存储器(ROM)116)。存储设备104还可以包括可擦写ROM,例如闪存。

大容量存储设备108包括各种计算机可读介质,例如磁带、磁盘、光盘、固态存储器(例如,闪存)等。如图1所示,一个实例中的大容量存储设备是一个硬盘驱动器124。大容量存储设备108中还可以包括各种驱动器,以使得其能够从各种计算机可读介质读取和/或写入各种计算机可读介质。大容量存储设备108包括可移动介质126和/或不可移动介质。

I/O设备110包括各种设备,这些设备可将数据和/或其他信息输入到计算设备100或从计算设备100检索所述数据或其他信息。示例I/O设备110包括光标控制设备、键盘、小键盘、麦克风、监视器或其他显示设备、扬声器、打印机、网络接口卡、调制解调器、镜头、CCD或其他图像捕获设备等。

显示设备130包括能够向计算设备100的一个或多个用户显示信息的任何类型的设备。显示设备130可以是监视器、显示终端或视频投影设备等。

图形处理单元(GPU)132可以耦合到处理器102和/或显示设备130。GPU可以用于渲染计算机生成的图像并执行其他图形处理。GPU可以拥有诸如处理器102之类的通用处理器的一些或全部功能。GPU还可以拥有特定于图形处理的附加功能。GPU可以拥有坐标变换、阴影、纹理、光栅化以及其他有助渲染计算机生成图像的功能相关的硬编码和/或固线的图形功能。

接口106包括允许计算设备100与其他系统,设备或计算环境进行交互的各种接口。接口106可包括任意数量的不同网络接口120,诸如到局域网(LAN),广域网(WAN),无线网络和因特网的接口。其他接口包括用户接口118和外围设备接口122。接口106还可以包括一个或多个用户接口元素118。接口106还可以包括一个或多个外围接口,用于例如打印机、指示设备(鼠标,触控板等)、键盘等。

总线112允许处理器102,存储器设备104,接口106,大容量存储设备108和I/O设备110彼此之间通信,或与其他耦合到总线112的组件或设备通信。总线112代表若干类型的总线结构中的一种或多种,例如系统总线、PCI总线、IEEE1394总线、USB总线等等。

在一些实施例中,处理器102可以包括高速缓存134,诸如L1高速缓存和L2高速缓存之一或两者。类似地,GPU132可以包括缓存器136,该缓存器136可以同样包括L1缓存器和L2缓存器之一或两者。

为了更好地说明本发明,程序和其他可执行程序组件在本文中被示为离散的块,尽管这样的程序和组件可以在不同时间驻留在计算设备100的不同存储组件中,并且由处理器102执行。本文描述的系统和过程也可以以硬件、或硬件、软件和/或固件的组合来实现。例如,可以对一个或多个专用集成电路(ASIC)进行编程,以执行本文所述的系统或过程中的一个或多个。

参照图2,GPU 132或计算设备100的其他组件可以包括图2所示的组件。如图所示,缓冲器200、202可以存储将成为乘法/累加运算的对象的自变量。例如,一个缓冲器200可以存储用于实现图形处理操作(例如,内核)和人工智能操作(例如,作为卷积神经网络的一部分)的系数。另一个缓冲器202可以存储要乘以系数的值(通常称为“激活”)。当然,这仅是示例,并且任何值都可以被加载到缓冲器200、202中并且是乘法/累加运算的对象。缓冲器200、202可以被定义为存储器(RAM 114)的一部分或高速缓存134或136的一部分。

从缓冲器200、202取回的每个值可以被输入到分隔器204。分隔器204将所有值转换成无符号的值。例如,在某些应用程序中,值可以用以下格式表示:[类型][幅值]。[类型]字段指示[幅值]中的位代表带符号的还是无符号的数字,例如:0表示无符号,1表示带符号。当[类型]字段指示一带符号的值时,对于[幅度]字段中的最高有效位(MSB),负数将使用1表示,正数将使用0表示,并使用2的补码表示法。

分离器204的输出是来自缓冲器200的值的符号206和幅值208,以及来自缓冲器202的值的符号210和幅值212。

然后可以将符号206、210和幅度208、212输入到检查器214。检查器214评估幅度208、212以检测需要特殊处理的某些情况。特别地,为了限制执行实际的乘法和加法/累加运算的电路的大小,用于表示幅度208、212的位数可以被限制为位数N。例如,在将值定义为具有[类型][幅值]的形式时,N的值可以是实际输入到乘法电路的值的位数,并且可以小于[幅值]中的位数。例如,在输入值有9位的情况下,[幅值]字段中将有8位。因此,在一些实施例中,对于每个缓冲器200、202输入到乘法电路的位数N=7。

但是,对于一个带符号的值,七个位不足以表示八个带符号位可表示的最大负数的大小,例如,七个无符号的位只能表示0到127,而8个有符号的位可能表示-128到127。可以将有符号值的[幅值]字段表示的最大正数称为MaxSign,并且可以将其定义为2^N-1,其中[幅值]字段中的位数为N+1。

因此,检查器214可以检测幅度208、212超过MaxSign的实例,并做出响应来进行调整。下面参照图3描述处理该场景的方式。

对于无符号值,用N+1位表示的最大值为2^(N+1)-1。因此,从2^N到2^(N+1)-1的值不能用N个比特来表示。检查器214可以同样地测算无符号值的幅度208、212何时超过MaxSign,并相应地进行调整,如以下关于图3的描述。

检查器214的输出是参数对,例如,对于来自缓冲器200、202的一对值,检查器214的输出是要输入到定序器216的一对或多对参数。定序器216提交该参数对给计算单元218。特别地,可以有多个计算单元,例如,可以有8、64、1024或任意数量的计算单元。定序器216实现逻辑以将自变量提交给正确的计算单元。特别地,定序器216确保将来自缓冲器200、202的一对值的参数提交给计算单元218,以累积该对值的乘/加结果。

例如,在矩阵乘法中,输出矩阵中的每个值都是第一矩阵的行与第二矩阵的列的点积的结果。因此,在该示例中,定序器216提交来自缓冲器200、202的用于输入值对的参数,使得每个计算单元218可以累积特定行的元素与对应于列的元素的乘积之和。当然,这仅是一个示例,也可以对定序器216进行编程以根据任何期望的功能来累加乘积。

每个计算单元218可以包括:N位乘法器220,其将来自定序器216的一对参数作为输入;以及加法器222,其将乘法器220与累积缓冲器224内容的乘积作为输入。然后,将加法器222的输出写回到累积缓冲器224。累积缓冲器224的结果可以由一个GPU 132的控制器读取,或者由一个CPU 102根据某应用的控制读取,或根据本领域已知的读取、检索和处理乘法/累加运算结果的方法来读取。如图2所示,加法器222可以进一步将由分隔器204分隔的输入参数的符号作为输入。

参照图3,所示的方法300可以由检查器214执行,以便确定是将输入幅度208、212划分为两个参数还是输出包括输入幅度208、212的单个参数。方法300可以针对每个输入幅度208、212(以下称为“输入幅度”)执行该操作。

方法300可以包括步骤302:从分隔器204接收输入幅度的幅度和类型。如果为带符号的类型(步骤304),则方法300可以包括获取输入幅度的绝对值(步骤306)。

然后,方法300可以包括评估所述绝对值是否大于MaxSign(步骤308)。如果否,则可以将所述绝对值作为自变量(Arg)输入到定序器216(步骤314)。如果是,则方法300可以包括将所述绝对值分割成两个参数(Arg_1,Arg_2)(步骤310)。特别地,对于带符号的值,唯一可能大于MaxSign的值是MaxSign+1,因此,可以将Arg_1和Arg_2分别设置为(MaxSign+1)/2。例如,对于MaxSign=127,步骤310可以包括设置Arg_1=Arg_2=64。

然后,方法300可以包括将Arg_1和Arg_2输入到定序器216(步骤312)。

如果发现输入幅度不是来自带符号的数(步骤316),则方法300可以包括评估输入幅度是否大于MaxSign(步骤318)。如果是,则根据步骤318和320设置两个参数:Arg_1设置为等于输入参数减去MaxSign,而Arg_2设置为等于MaxSign。

然后,将Arg_1和Arg_2输入322到定序器。如果未发现输入大小超过MaxSign(步骤316),则将其作为自变量(Arg)输入到定序器216。

可以以协调的方式执行在步骤312、314、322和324处输入参数。具体地,针对来自缓冲器200的值的输入幅值而确定的参数,可以与针对来自缓冲器202的对应值的输入幅值而确定的参数协调地输入到定序器216。

如上所述,可以分别从缓冲器200、202中检索要相乘的第一值和第二值,并由分隔器204和检查器214进行处理。表1描述了,针对方法300的各种结果的,要被输入到定序器216的第一对和第二对参数对。特别地,对于第一值,方法300的可能结果是被指定为Arg1的单个输出自变量(步骤312或324),或是指定为Arg1_1和Arg1_2的两个输出参数(步骤312或步骤322)。对于第二值,可能的结果是被指定为单个参数Arg2(步骤312或324)或两个输出参数Arg2_1和Arg2_2(步骤312或步骤322)。在“定序器的输入”一列中,括号中的每对表示输入定序器216的一对参数,它们将被相乘并由计算单元218累加。

表1:输入到定序器的检查器输出

序列器216可以被编程为将成对的参数输入到对应于第一和第二值的同一计算单元218。定序器216可以类似地将每个自变量的符号与该自变量相关联。特别地,在将带符号的值分割成两个参数Arg_1,Arg_2时,定序器216把该符号与包含参数Arg_1,Arg_2中任何一个的所有参数对中的两个参数相关联。

图4示出了用于对由定序器216输入到计算单元218的一对参数执行倍数/累加计算的方法400。输入到定序器216的每对参数被输入到其中一个计算单元的乘法器220。该计算单元然后计算乘积P(步骤402)。方法400可以进一步包括评估一对参数中的参数的类型和/或符号(404)。例如,对于从不带符号的值获得的参数,在所有情况下,可以假定步骤404的符号为正。对于带符号的值,该符号将是符号206、210,其被分隔器204从带符号的值分开。

如果发现仅一个参数具有负号(步骤406),则方法400可以包括调整乘积P(步骤408)。在存在一个负参数的情况下,P的符号变为负,即,P被转换为负数,例如根据2的补码定义。然后,将负乘积P输入到加法器222(步骤410),然后求和器222将负乘积P与累加缓冲器224的当前内容求和,并将总和的结果写入累加缓冲器224。

如果发现没有参数是负数(步骤406),则将乘积P输入到加法器222(步骤410),然后求和器222将乘积P与累加缓冲器224的当前内容相加并将累加结果写入累加缓冲器224。

从以上描述显而易见的是,乘法器220可以制造得更小,同时仍具有图2和至图4中描述的方法提供的相同水平的精度。在诸如GPU的应用中,存在数百或数千个计算单元218,这使得电路面积和能耗大大减少。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于基8布斯折叠编码的平方器结构

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类