用于神经网络的增强型乘法累加设备的制作方法

文档序号:27938741发布日期:2021-12-11 12:57阅读:152来源:国知局
用于神经网络的增强型乘法累加设备的制作方法

1.本发明涉及用于执行大量数学运算的系统和方法。


背景技术:

2.提高执行速度的最常见方法之一是并行执行操作,例如采用多个处理器内核。通过配置具有许多(例如,成千上万个)处理管线的图形处理单元(gpu),可以在更大的规模上利用此原理,其中每个处理管线可以被配置为执行一个数学功能。以这种方式,可以并行处理大量数据。尽管gpu最初用于图形处理应用程序,但gpu也经常用于其他应用,尤其是人工智能。
3.改进gpu管线或包括许多处理单元的任何处理设备的功能将是对本领域的一种改进。
附图说明
4.图1为可实现本发明实施例的方法的一个计算机系统的示意性框图。
5.图2为本发明实施例的一个乘法/累加电路的示意框图。
6.图3是为本发明实施例的一个用于对双宽度输入参数执行乘法/累加运算的方法流程图。
7.图4是为本发明实施例的另一个用于对双宽度输入参数执行乘法/累加运算的方法流程图。
8.图5是根据本发明实施例的用于执行组累加的方法流程图。
具体实施方式
9.为了容易理解本发明的优点,将通过参考附图中所示的具体实施例来呈现本发明的更为具体的描述。应当理解,这些附图仅描述本发明的典型实施例,而不构成对其范围的限制。以下将通过使用附图以额外的特异性和细节来描述和解释本发明。
10.本发明的组件可以以多种不同的方式来布置和设计。因此,如附图所示,以下对本发明的实施例的更详细的描述并非旨在限制本发明所要求的保护范围,而以示意方式说明本发明的基本构想。请参考附图以更好地理解此处描述的实施例,其中,相同的组件始终用相同的数字表示。
11.根据本发明的实施例可以体现为装置,方法或计算机程序产品。相应地,本发明可以采取全硬件实施例,全软件实施例(包括固件,常驻软件,微代码等)或,结合软件和硬件的实施例的形式,在本文中这些方面可被称为“模块”或“系统”。此外,本发明的形式可以是在任何有形表达介质中体现的计算机程序产品,在该介质中具有计算机可用的程序代码。
12.本发明可以利用一种或多种计算机可用或计算机可读介质的任何组合,包括非暂时性介质。例如,计算机可读介质可以包括便携式计算机软盘,硬盘,随机存取存储器(ram)设备,只读存储器(rom)设备,可擦除可编程只读存储器(eprom或闪存)设备,便携式光盘只
读存储器(cdrom),光学存储设备和磁性存储设备。在选定的实施例中,计算机可读介质可以包括任何非暂时性介质,其可以包含、存储、通信、传播或传输由指令执行系统、装置或设备使用或与其结合使用的程序。
13.本发明可以用一种或多种编程语言的任何组合来编写用于执行本发明的操作的计算机程序代码,所述编程语言包括诸如java,smalltalk,c++等之类的面向对象的编程语言以及诸如“c”编程语言之类的常规过程编程语言。所述程序代码可以完全在计算机系统上作为独立软件包执行,在独立硬件单元上执行,部分在与计算机间隔一定距离的远程计算机上执行,或者完全在远程计算机或服务器上执行。在最后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(lan)或广域网(wan))连接到计算机,或者可以与外部计算机建立连接(例如,通过使用互联网服务提供商的互联网)。
14.下面将参考根据本发明实施例的方法、装置(系统)、计算机程序产品的流程图和/或框图描述本发明。流程图图示和框图的每个部分都可以通过计算机程序指令或代码来实现。这些计算机程序指令可以被提供给通用计算机、专用计算机或用以生产机器的其他可编程数据处理设备的处理器,从而使计算机或其他可编程数据处理设备的处理器执行的指令可创建用于实现流程图和/或框图中指定的功能/动作。
15.这些计算机程序指令还可以存储在非暂时性计算机可读介质中,该介质可以指导计算机或其他可编程数据处理设备以特定方式运行,从而使存储在计算机可读介质中的指令产生制品,该制品包括指令装置,该指令装置可实现流程图和/或方框图中指定的功能/动作。
16.计算机程序指令也可被加载到计算机或其他可编程数据处理设备上,以使一系列操作步骤在计算机或其他可编程设备上执行,以产生计算机实现的过程,从而使计算机或其他可编程数据处理设备的处理器执行的指令提供用于实现流程图和/或框图中指定的功能/动作的过程。
17.图1为示例计算设备100的框图。计算设备100可以用于执行各种过程,诸如本文所讨论的过程。计算设备100可以用作服务器、客户端或任何其他计算实体。计算设备可以执行本文所公开的各种功能,并且可以执行一个或多个应用程序,例如本文公开的应用程序。计算设备100可以是多种计算设备中的任何一种,例如台式计算机、笔记本计算机、服务器计算机、手持式计算机、平板计算机等。
18.计算设备100包括一个或多个处理器102,一个或多个存储设备104,一个或多个接口106,一个或多个大容量存储设备108,一个或多个输入/输出(i/o)设备110,和显示设备130,均耦合到总线112。处理器102包括一个或多个执行存储在存储设备104和/或大容量存储设备108中的指令的处理器或控制器。处理器102还可以包括各种类型的计算机可读介质,例如高速缓冲存储器。
19.存储设备104包括各种计算机可读介质,例如易失性存储器(例如,随机存取存储器(ram)114)和/或非易失性存储器(例如,只读存储器(rom)116)。存储设备104还可以包括可擦写rom,例如闪存。
20.大容量存储设备108包括各种计算机可读介质,例如磁带、磁盘、光盘、固态存储器(例如,闪存)等。如图1所示,一个实例中的大容量存储设备是一个硬盘驱动器124。大容量存储设备108中还可以包括各种驱动器,以使得其能够从各种计算机可读介质读取和/或写
入各种计算机可读介质。大容量存储设备108包括可移动介质126和/或不可移动介质。
21.i/o设备110包括各种设备,这些设备可将数据和/或其他信息输入到计算设备100或从计算设备100检索所述数据或其他信息。示例i/o设备110包括光标控制设备、键盘、小键盘、麦克风、监视器或其他显示设备、扬声器、打印机、网络接口卡、调制解调器、镜头、ccd或其他图像捕获设备等。
22.显示设备130包括能够向计算设备100的一个或多个用户显示信息的任何类型的设备。显示设备130可以是监视器、显示终端或视频投影设备等。
23.图形处理单元(gpu)132可以耦合到处理器102和/或显示设备130。gpu可以用于渲染计算机生成的图像并执行其他图形处理。gpu可以拥有诸如处理器102之类的通用处理器的一些或全部功能。gpu还可以拥有特定于图形处理的附加功能。gpu可以拥有坐标变换、阴影、纹理、光栅化以及其他有助渲染计算机生成图像的功能相关的硬编码和/或固线的图形功能。
24.接口106包括允许计算设备100与其他系统,设备或计算环境进行交互的各种接口。接口106可包括任意数量的不同网络接口120,诸如到局域网(lan),广域网(wan),无线网络和因特网的接口。其他接口包括用户接口118和外围设备接口122。接口106还可以包括一个或多个用户接口元素118。接口106还可以包括一个或多个外围接口,用于例如打印机、指示设备(鼠标,触控板等)、键盘等。
25.总线112允许处理器102,存储器设备104,接口106,大容量存储设备108和i/o设备110彼此之间通信,或与其他耦合到总线112的组件或设备通信。总线112代表若干类型的总线结构中的一种或多种,例如系统总线、pci总线、ieee 1394总线、usb总线等等。
26.在一些实施例中,处理器102可以包括高速缓存134,诸如l1高速缓存和l2高速缓存之一或两者。类似地,gpu132可以包括缓存器136,该缓存器136可以同样包括l1缓存器和l2缓存器之一或两者。
27.为了更好地说明本发明,程序和其他可执行程序组件在本文中被示为离散的块,尽管这样的程序和组件可以在不同时间驻留在计算设备100的不同存储组件中,并且由处理器102执行。本文描述的系统和过程也可以以硬件、或硬件、软件和/或固件的组合来实现。例如,可以对一个或多个专用集成电路(asic)进行编程,以执行本文所述的系统或过程中的一个或多个。
28.参照图2,在一些实施例中,gpu 132,处理器102或其他计算设备可以包括诸如包括在高速缓存134、316,ram 114或某些其他硬件位置中的访问缓冲器200、202。存储在缓冲器200、202中的值具有第一宽度,例如16位。gpu 132,处理器102或其他计算设备的计算管线的其他部分可以具有较小的宽度,例如第一宽度的一半,例如8位,其中第一宽度是16位。存储在缓冲器200、202中的值可以是用于实现和应用卷积神经网络(cnn)或其他类型的神经网络的值。例如,缓冲器200可以存储cnn的系数,而缓冲器202存储cnn的激活值(例如,根据cnn被处理的值)。进行cnn处理的方式可以根据本领域中已知的任何方法,其中,一些或全部的乘法/累加运算根据本公开的方法执行。
29.定序器204可以从缓冲器200、202读取值,以便使用存储在缓冲器200,202中的值执行乘法/累加运算。特别地,定序器204可以输出一系列的参数206、208,这些参数具有第二宽度,且是来自缓冲器200的第一值和来自缓冲器202的第二值的一部分。下面参照图3至
图5详细描述定序器生成参数206、208的方式。
30.参数206、208被输入到计算管线210中,该计算管线210被配置为执行乘法/累加运算。为此,管线210可包括一乘法器212,该乘法器212将参数206、208相乘以产生乘积,以及一加法器214,该加法器214将乘积与累加缓冲器216的内容相加以获得一个和并将该和写入累加缓冲器216。
31.如下面所述,可以通过加法器218将累加缓冲器216的内容添加到组累加缓冲器220的内容,并且将该相加的结果写入组累加缓冲器220。下文还将详细描述该操作。组累加缓冲器220可以比累加缓冲器216宽得多。例如,当第一宽度是16位,第二宽度是8位时,组累加缓冲器可以具有48位的宽度,而累加缓冲器216具有宽度为24位。
32.组累加变量220的内容是,按照图3到5的方法进行处理,将来自寄存器200、202的值对进行相乘并累加的结果。然后,可以将组累加变量220的内容用于所需的任何目的,例如实现cnn或任何其他可能会受益于乘法/累加运算的过程。特别地,在执行这些运算的任何情景中,乘法/累加运算可用于实现点积或矩阵乘法。
33.参照图3,存储在缓冲器200、202中的每个值的比特位置可以定义高部和低部。高部比低部具有更高的幅度(例如,更高的重要性),并且不与低部重叠。高部的位数和低部的位数等于缓冲器200、202中存储的每个值的位数。例如,在缓冲器200、202中存储16位值的情况下,比特位置8到15可能是高位,比特位置0到7可能是低位,其中比特位置0被定义为最低有效位(lsb)。
34.方法300为用于实现乘法/累加运算的一种方法。为了以下讨论的目的,ahi代表在缓冲器200的缓冲位置i处的高部。bhi代表在缓冲器202的缓冲位置i处的高部。ali代表在缓冲器200的缓冲位置i处的低部。bli代表缓冲器202的缓冲位置i处的低部。
35.方法300可以包括对所有缓冲器位置i的ahi和bhi执行乘法/累加运算(302)。具体地,定序器204可以针对从0到n

1的每个值i(其中n是要处理的值的数目),根据流水线210输出ah
i
和bh
i
作为要处理的参数206、208。因此,在步骤302之后存储在累加缓冲器216中的结果将是
36.然后,方法300可以包括将累加缓冲器216的内容加到组累加缓冲器220的内容(304)中,并将相加的结果写入组累加缓冲器220。在执行方法300之前,组累加缓冲器220以及累加缓冲器216可以被初始化为零,使得步骤304包括,简单地将累加缓冲器216的内容写入组累加缓冲器220。如下面关于图5的描述,写入可以包括,在相加之前将累加缓冲器的内容移位第一宽度(例如16位),以应对高分ahi和bhi已被处理的事实。
37.方法300可以包括针对所有缓冲位置i的ahi和bli的执行乘法/累加运算(306)。具体地,定序器204可以针对从0到n

1的每个值i(其中n是要处理的值的数目),根据管线210输出ahi和bli以作为要处理的参数206、208。因此,在步骤306之后存储在累加缓冲器216中的结果将是
38.然后,方法300可以包括将累加缓冲器216的内容添加到组累加缓冲器220的内容中(步骤308),并将相加的结果写入组累加缓冲器220中。在执行方法步骤306之前,累加缓冲器216可以被初始化为零。如以下关于图5所描述的,相加步骤308可以包括在相加之前将累加缓冲器216的内容移位第二宽度(例如8位),以考虑高部ahi已被处理的事实。
39.方法300可以包括针对所有缓冲位置i执行310ali和bli的乘法/累加运算(步骤310)。具体地,定序器204可以针对从0到n

1的每个值i(其中n是要处理的值的数量),根据流水线210输出ali和bli作为要处理的参数206、208。因此,在步骤310之后存储在累加缓冲器216中的结果将是
40.然后,方法300可以包括将累加缓冲器216的内容添加到组累加缓冲器220的内容中(步骤312),并将相加的结果写入组累加缓冲器220中。在执行方法步骤310之前,累加缓冲器216可以被初始化为零。如以下关于图5所述,相加步骤312将不包括移位累加缓冲器216的内容,因为仅低精度部分ali,bli被处理。
41.方法300可以包括针对所有缓冲器位置i的ali和bhi执行乘法/累加运算(步骤314)。具体地,定序器204可以对于从0到n

1的每个值i(其中n是要处理的值的数量),输出ali和bhi作为参数206,208以根据管线210进行处理。因此,在步骤306之后存储在累加缓冲器216中的结果将是
42.然后,方法300可以包括:将累加缓冲器216的内容添加到组累加缓冲器220的内容中(步骤316),并将相加的结果写入组累加缓冲器220。累加缓冲器216可以被初始化为零。如以下关于图5所描述的,相加步骤316可以包括在相加之前将累加缓冲器216的内容移位第二宽度(例如8位),以考虑高部bhi已被处理的事实。
43.在执行方法300之后,对缓冲器200、202中的缓冲位置0至n

1中的所有值执行乘法/累加运算的结果,将被组累加缓冲器220存储在缓冲器200、202中。注意,步骤302、306、310和314的顺序,是任意的,可以重新排列并相互替换。同样要注意,上文提到了缓冲位置0到n

1,但是此方法和此处描述的其他方法的起始地址可以是定义缓冲区的内存中的任何位置。
44.图4展示更详细的方法400,其使用具有第二宽度为第一宽度一半的计算管线210来对具有第一宽度的值执行乘法/累加运算。
45.方法400可以包括将第一参数206的位置设置为低,即,缓冲器200中的第一值的低部(步骤402)。方法400可以进一步包括将第二参数208的位置设置为低(步骤404),即,缓冲器202中第二值的低部。在该示例中,低部首先被处理;但这仅是示例性的,也可以从高部开始。
46.方法400可以包括将当前缓冲位置初始化为零并且将累加器缓冲器216初始化为零(步骤406)。
47.然后,方法400可以包括对在第一参数位置处的第一值的部分和在第二参数位置处的第二值的部分执行乘法/累加运算(步骤408)。例如,步骤408可以包括使用计算管线210来执行以下操作:其中如果第一个参数位置为高,则p1=1;如果第一个参数位置较低,则p1=0;如果第一个参数位置为高,则p2=1;如果第一个参数位置较低,则p2=0;s=第二宽度。
48.可以迭代地执行步骤408的计算,例如,从i=0开始,(a)执行乘法a
i
[s(p1+1)

1:s*p1]*b
i
[s(p2+1)

1:s*p2]以获得乘积,将乘积加到累加缓冲器216中以获得一个和,并且将该和写入累加缓冲器216中,并且(b)如果i不等于n

1,则使i递增并重复(a)。
[0049]
然后,方法400可以包括将累加缓冲器216的内容添加到组累加缓冲器220的内容(步骤410),并将相加的结果写入组累加缓冲器220中。方法400可以在初始化组累加缓冲器220之前进行。
[0050]
然后,方法400可以包括评估第二参数位置是否为高(步骤414),如果不是,则将第二参数位置412设置为高,并且该处理过程从步骤406处继续;如果是,则方法400可以继续包括:评估第一参数位置是否为高(步骤416),如果不是,则将第一参数位置设置为高(步骤418),并且该处理过程从步骤404处继续;如果是,则方法400结束,组累加缓冲器220中存储的值是缓冲器200、20中的0至n

1的值的相乘/累加结果。如上所述,位置0至n

1仅是示例性的,可以根据该方法来处理任何范围的存储器地址。还需注意的是,缓冲器200的地址范围可以与根据方法400处理的缓冲器202中的地址范围相同或不同。
[0051]
参照图5,当将累加缓冲器216的内容添加到组累加缓冲器220的内容时,可以使用所图示的方法500。方法500可以包括,评估502第一和第二参数位置是否都为高。如果是,则将累加缓冲器216的内容左移(假定最左边的位是最高有效的)第一宽度(步骤504),例如16位,然后将在步骤504处移位的值添加到该组累加缓冲器220的内容中(步骤506),然后步骤506的结果被写入组累加缓冲器220中。
[0052]
方法500可以包括评估第一和第二参数位置中是否只有一个为高(步骤508)。如果是,则将累加缓冲器216的内容左移(假设最左边的位是最高有效的)第二宽度(步骤510),例如8位,然后将在步骤510处移位的值添加到组累加缓冲器220的内容中(步骤506),然后步骤506结果被加到组累加缓冲器220。
[0053]
如果两个参数位置都不为高,则不执行移位,并且对累加缓冲器216的未移位的内容执行步骤506。
[0054]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1