CN115809043A - 一种乘法器及其相关产品和方法 - Google Patents
一种乘法器及其相关产品和方法 Download PDFInfo
- Publication number
- CN115809043A CN115809043A CN202111087137.1A CN202111087137A CN115809043A CN 115809043 A CN115809043 A CN 115809043A CN 202111087137 A CN202111087137 A CN 202111087137A CN 115809043 A CN115809043 A CN 115809043A
- Authority
- CN
- China
- Prior art keywords
- multiplier
- multiplication
- sub
- multiplicand
- 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
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
本公开涉及一种乘法器、集成电路芯片、计算装置、板卡和计算机实现的乘法运算的方法,其中计算装置可以包括在组合处理装置中,该组合处理装置还可以包括通用互联接口和其他处理装置。所述计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于计算装置和其他处理装置的数据。通过本公开的方案,可以提升硬件执行乘法运算时的运算效率。
Description
技术领域
本公开一般地涉及芯片设计领域。更具体地,本公开涉及一种乘法器、集成电路芯片、计算装置、板卡和计算机实现的乘法运算的方法。
背景技术
乘法运算在计算领域的应用中十分普遍。以目前的人工智能领域中的主流算法(包括神经网络算法)为例,通常会涉及对具有一定数据位宽长度的乘数和被乘数执行乘法运算。尽管当前的处理器和算法支持一定性能水平的乘法运算,但由于执行乘法运算的器件的迭代速度较慢,并且针对不同数据位宽需采用不同的乘法器,从而造成计算资源的浪费。因此,如何获得一种能够提高资源利用率和乘法运算效率的乘法器及其相关产品成为现有技术中需要解决的问题。
发明内容
为了至少部分地解决背景技术中提到的技术问题,本公开的方案提出对具有一定数据位宽的乘数和被乘数进行拆分,并且就拆分后获得的子数据来执行并行乘法运算。通过这样的拆分和并行运算,可以加速乘法运算的执行并且提升硬件的运算性能。为此,本公开在如下的多个方面提供技术方案。
在一个方面中,本公开提供一种乘法器,包括:拆分单元,其配置用于基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度;多个乘法单元,其配置用于并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果;以及结果处理单元,其配置用于对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
在又一方面中,本公开提供一种集成电路芯片,其包括上文描述和下文将要讨论的乘法器。
在又一方面中,本公开提供一种计算装置,其包括上述乘法器或上述集成电路芯片。
在又一方面中,本公开提供一种板卡,其包括上述的计算装置。
在又一个方面中,本公开提供了一种计算机实现的乘法运算的方法,包括:接收待执行所述乘法运算的乘数和被乘数;基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度;并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果;以及对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
利用本公开的方案,可以将参与乘法运算的乘数和被乘数拆分成具有最小粒度的子乘数和子被乘数,从而可以实现子乘数和子被乘数的并行乘法运算,从而提升乘法运算时的并行性和运算速度。进一步地,由于将输入数据拆分成最小粒度,使得造成的运算资源浪费较小,从而能够有效提高资源的利用率,并且能够减少面积和功耗。当拆分的乘数和被乘数的数据位宽长度是最小粒度的整数倍时,本公开的方案还支持多种不同的拆分方式,从而增强了乘法运算方式的灵活性。另外,当应用于向量之间的乘法运算时,通过对向量元素进行拆分和并行地执行乘法运算,可以显著提高向量乘法运算的并行度,加速向量运算的计算过程。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1是示出根据本公开实施例的板卡的结构图;
图2是示出根据本公开实施例的集成电路装置的结构图;
图3是示出根据本公开实施例的单核计算装置的内部结构示意图;
图4是示出根据本公开实施例的多核计算装置的内部结构示意图;
图5是示出根据本公开实施例的处理器核的内部结构示意图;
图6是示出根据本公开实施例的用于向量间乘法操作的乘法器的示例性结构框图;
图7是示出根据本公开实施例的乘法单元执行乘法操作的示例性示意图;
图8是示出根据本公开实施例的结构处理器的示例性结构框图;
图9是示出根据本公开实施例的浮点数组成部分的示例性示意图;以及
图10是示出根据本公开实施例的乘法单元的又一个示例性结构框图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
应当理解,本公开的权利要求、说明书及附图中可能使用的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合附图来详细描述本公开的具体实施方式。
图1示出根据本公开实施例的一种板卡100的结构示意图。可以理解的是图1所示结构和组成仅仅是一种示例,其并不用于在任何方面对本公开的方案进行限制。
如图1所示,板卡100包括芯片101,其可以是一种系统级芯片(System on Chip,SoC),也即本公开上下文中所描述的片上系统。在一个实施场景中,其可以集成有一个或多个组合处理装置。前述组合处理装置可以是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求,特别是深度学习技术大量应用在云端智能领域。云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,而本实施例的板卡100适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
进一步如图中所示,芯片101通过对外接口装置102与外部设备103相连接。根据不同的应用场景,外部设备103例如可以是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡100还可以包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡100中的控制器件106可以配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(Micro Controller Unit,MCU)。
图2是示出根据上述实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置200可以包括计算装置201、接口装置202、处理装置203和动态随机存取存储器(Dynamic Random Access Memory,DRAM)DRAM 204。
计算装置201可以配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器。在一些操作中,其可以用于执行深度学习或机器学习方面的计算,并且还可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。前述计算装置可以包括本公开方案中用于执行乘法操作的乘法器,并且其可以配置成对拆分成最小粒度的输入数据(包括乘法数据和被乘数数据)执行乘法操作,以便获得输入数据的最终乘积结果。
接口装置202可以用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本公开的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
DRAM 204用以存储待处理的数据,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。根据本公开的方案,该DRAM可以用于存储待执行乘法运算的输入数据,例如包括关于乘数和被乘数的数据。
图3示出了计算装置201为单核的内部结构示意图。单核计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,单核计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(Instruction Fetch Unit,IFU)311及指令译码单元(Instruction Decode Unit,IDU)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。因此,可以理解的是,此处的运算模块32可以用于执行根据本公开方案的乘法运算操作。具体地,上述的向量运算单元321和矩阵运算单元322均可以包括本公开的乘法器,乘法器的具体实现可参见下文的描述。存储模块33用来存储或搬运相关数据,包括神经元存储单元(Neuron RAM,NRAM)331、参数存储单元(Weight RAM,WRAM)332、直接内存访问模块(Direct Memory Access,DMA)333。NRAM 331用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 332则用以存储深度学习网络的卷积核,即权值;DMA 333通过总线34连接DRAM 204,负责单核计算装置301与DRAM 204间的数据搬运。
图4示出了计算装置201为多核的内部结构示意图。多核计算装置41采用分层结构设计,多核计算装置41作为一个片上系统,其包括根据本公开的至少一个集群或簇(cluster),每个集群又包括多个处理器核。换言之,多核计算装置41是以片上系统-集群-处理器核的层次所构成的。以片上系统的层级来看,如图4所示,多核计算装置41包括外部存储控制器401、外设通信模块402、片上互联模块403、同步模块404以及多个集群405。
外部存储控制器401可以有多个(如图中示例性地示出2个),其用以响应处理器核发出的访问请求,访问外部存储设备,也即本公开上下文中的片外存储器(例如图2中的DRAM 204),从而自片外读取数据或是将数据写入。外设通信模块402用以通过接口装置202接收来自处理装置203的控制信号,启动计算装置201执行任务。片上互联模块403将外部存储控制器401、外设通信模块402及多个集群405连接起来,用以在各个模块间传输数据和控制信号。同步模块404是一种全局同步屏障控制器(Global Barrier Controller,GBC),用以协调各集群的工作进度,确保信息的同步。本公开的多个集群405是多核计算装置41的计算核心。尽管在图4中示例性地示出4个集群,然而,随着硬件的发展,本公开的多核计算装置41还可以包括8个、16个、64个、甚至更多的集群405。在一个应用场景中,集群405可以用于高效地执行深度学习算法。
以集群的层级来看,如图4所示,每个集群405可以包括多个处理器核(IPU core)406及一个存储核(MEM core)407,其例如可以包括高速缓冲存储器(例如LLC)。
处理器核406在图中示例性地示出为4个,本公开不限制处理器核406的数量,并且其内部架构如图5所示。每个处理器核406类似于图3的单核计算装置301,并且同样可以包括三个模块:控制模块51、运算模块52和存储模块53。控制模块51、运算模块52及存储模块53的功用及结构大致与控制模块31、运算模块32及存储模块33相同,此处不再赘述。需特别说明的是,存储模块53可以包括输入/输出直接内存访问模块(Input/Output DirectMemory Access,IODMA)533、搬运直接内存访问模块(Move Direct Memory Access,MVDMA)534。IODMA 533通过广播总线409控制NRAM 531/WRAM 532与DRAM 204的访存;MVDMA 534则用以控制NRAM 531/WRAM 532与存储单元(SRAM)408的访存。
回到图4,存储核407主要用以存储和通信,即存储处理器核406间的共享数据或中间结果、以及执行集群405与DRAM 204之间的通信、集群405间彼此的通信、处理器核406间彼此的通信等。在其他实施例中,存储核407可以具有标量运算的能力,用以执行标量运算。
存储核407可以包括静态随机存取存储器(Static Random-Access Memory,SRAM)408、广播总线409、集群直接内存访问模块(Cluster Direct Memory Access,CDMA)410及全局直接内存访问模块(Global Direct Memory Access,GDMA)411。在一个实施场景中,SRAM 408可以承担高性能数据中转站的角色。由此,在同一个集群405内不同处理器核406之间所复用的数据不需要通过处理器核406各自向DRAM 204获得,而是经SRAM 408在处理器核406间中转。进一步,存储核407仅需要将复用的数据从SRAM 408迅速分发给多个处理器核406即可,从而可以提高核间通信效率,并显著减少片上片外的输入/输出访问。
广播总线409、CDMA 410及GDMA 411则分别用来执行处理器核406间的通信、集群405间的通信和集群405与DRAM 204的数据传输。以下将分别说明。
广播总线409用以完成集群405内各处理器核406间的高速通信,此实施例的广播总线409支持核间通信方式包括单播、多播与广播。单播是指点对点(例如单一处理器核至单一处理器核)的数据传输,多播是将一份数据从SRAM 408传输到特定几个处理器核406的通信方式,而广播则是将一份数据从SRAM 408传输到所有处理器核406的通信方式,属于多播的一种特例。
CDMA 410用以控制在同一个计算装置201内不同集群405间的SRAM 408的访存。GDMA 411与外部存储控制器401协同,用以控制集群405的SRAM 408到DRAM 204的访存,或是将数据自DRAM 204读取至SRAM 408中。从前述可知,DRAM 204与NRAM 431或WRAM 432间的通信可以经由2种方式来实现。第一种方式是通过IODAM 433直接和DRAM 204与NRAM 431或WRAM 432通信;第二种方式是先经由GDMA 411使得数据在DRAM 204与SRAM 408间传输,再经过MVDMA 534使得数据在SRAM 408与NRAM 431或WRAM 432间传输。尽管第二种方式可能需要更多的元件参与且数据流较长,但实际上在部分实施例中,第二种方式的带宽远大于第一种方式,因此通过第二种方式来执行DRAM 204与NRAM 431或WRAM 432间的通信可能更为有效。可以理解的是,这里所描述的数据传输方式仅仅是示例性的,并且本领域技术人员根据本公开的教导,也可以根据硬件的具体布置来灵活地选择和适用各种数据传输方式。
在其他的实施例中,GDMA 411的功能和IODMA 533的功能可以整合在同一部件中。尽管本公开为了方便描述,将GDMA 411和IODMA 533视为不同的部件,然而对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与本公开类似,即属于本公开的保护范围。进一步地,GDMA 411的功能、IODMA 533的功能、CDMA 410的功能、MVDMA 534的功能也可以由同一部件来实现。
以上结合图1-图5对本公开的硬件架构及其内部结构进行了详细的描述。可以理解的是上述描述仅仅是示例性的而非限制性的。根据不同的应用场景和硬件规格,本领域技术人员也可以对本公开的板卡及其内部结构进行改变,而这些改变依然落入本公开的保护范围内。下面将对本公开的乘法器的方案进行详细地描述。
图6是示出根据本公开实施例的乘法器600的示例性结构框图。如图所示,该乘法器600包括拆分单元601、多个乘法单元602和结果处理单元603。在一个实施例中,拆分单元601可以配置用于基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度。这里,数据位宽长度可以是以比特(bit)计的长度。由此,本公开的乘数或被乘数可以具有8比特、16比特、32比特、64比特或更高比特的位宽长度。在一个场景中,上述的预定的数据位宽可以是乘法单元支持的数据位宽,该数据位宽可以是2n,其中,n可以为正整数。拆分单元可以根据待执行乘法操作的乘法单元所支持的最小数据位宽来对乘数和被乘数进行拆分。例如,当乘法单元支持4比特位宽的乘法运算并且输入数据(包括乘数和被乘数)的数据位宽长度为16位,则可以将输入数据拆分成4个4比特的子数据。
在一个实施例中,本公开乘法器中的多个乘法单元602配置用于并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果。基于此,乘法器中的结果处理单元603可以配置用于对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
尽管在图中未示出,在一个实施场景中,上述的每个乘法单元可以包括中间存储器,其用于存储每个乘法单元执行并行乘法操作时所得到的中间乘积结果。通过这样的设置,与乘法单元连接的结果处理单元可以在执行处理时调用中间存储器中的中间乘积结果,以便对中间乘积结果进行处理以得到最终乘积结果。可选地,该中间存储器可以集成于结果处理单元603中或乘法单元602中,该中间存储器可以是缓存(cache或buffer)或RAM、SPM(Scratchpad Memory)等等,此处不做具体限定。
在一个实施例中,由于本公开实施例中将乘数和被乘数按比特位进行拆分,因此,多个并行地乘法单元中有些处理高比特的子乘法和子被乘数,有些处理低比特的子乘数和子被乘数,为了保证乘法结果的正确性,本公开的结果处理单元可以通过对至少一个中间乘积结果进行移位操作和加法操作,以获得最终乘积结果。可选地,本公开的结果处理单元可以包括用于执行移位操作的移位器、用于执行加法操作的加法器以及用于保存执行所述加法操作后所获结果的结果寄存器。通过利用移位操作和加法操作,可以实现对中间乘积结果的处理,从而获得最终乘积结果。关于移位和加法操作,在一个实施场景中,移位器可以配置用于对所述中间乘积结果中的一个或多个中间乘积结果执行移位操作。相应地,加法器可以配置用于对移位后的中间乘积结果执行加法操作。即,可以首先对中间乘积结果进行移位操作,然后再执行加法操作。
附加地或替代地,移位器可以配置用于对中间乘积结果中的一个或多个部分中间乘积结果执行第一移位操作,并且加法器可以配置用于对执行第一移位操作后的部分中间乘积结果执行第一加法操作。此后,移位器还可以配置用于对执行所述第一加法操作后所获得的部分中间乘法结果进行第二移位操作。相应地,加法器还可以配置用于对执行第二移位操作后所获得的部分中间乘积结果执行第二加法操作。即,可以首先对部分中间乘积结果执行移位和加法操作,并且接着再对部分和(即部分中间乘积结果)进行移位和加法操作,以得到最终乘法结果。
在一个实施场景中,本公开的结果处理单元还可以包括移位计数器,其中在所述加法器对多个所述中间乘积结果执行累加操作期间,所述移位计数器配置用于进行移位计数,从而对于不同的中间乘积结果可以执行不同的移位。例如,通过移位计数器的计数可以指示中间乘积结果需移动4比特或8比特,则相当于中间乘积结果再乘以(2^4)或乘法(2^8)。通过这样的移位计数,可以对中间乘积结果的移位操作执行统一的调度,以便得到最终乘积结果。
在一个实施方式中,本公开此处的加法器可以包括全加器、串行加法器和超前进位加法器中的至少一种。作为示例,加法器还可以包括布斯编码电路,并且所述布斯编码电路配置用于在执行加法操作时进行布斯编码处理,以获得加法操作的运算结果。另外,关于中间乘积结果的获得,在一个实施方式中,还可以考虑利用查找表的方式来实现。例如,对于拆分后执行的4比特×4比特的乘积运算而言,可以通过查询具有256个可能乘积结果的表来获得。通过这样的查表方式,可以简化乘法运算,并且由此加速乘法运算的运算速度。
在一个实施例中,本公开结合上述图6所描述的乘法器可以执行定点数之间的拆分和并行乘法运算。进一步地,当乘数和被乘数均为定点数时,可以根据乘数和被乘数的小数点位置,确定最终乘积结果的小数点位置。
在另一个实施例,前述的乘法器也可以对浮点型数据的乘数和被乘数进行拆分和并行乘法运算。
具体来说,当所述乘数和被乘数是浮点数时,其可以分别包括各自的符号位、指数位和尾数位。其中该浮点型数据包括但不限于FP16、FP32、TF32和BF16等等。32位浮点数(单精度FP32)由1位符号(s)、8位指数(e)、23位尾数(m)组成。符号位s=0代表正号,符号位s=1代表负号,指数位e的取值范围为0-255,尾数m又称小数位。16位浮点数(半精度FP16)由1位符号(s)、5位指数(e)、10位尾数(m)组成。符号位s=0代表正号,符号位s=1代表负号,指数位e的取值范围为0-31,尾数m又称小数位。TF32浮点数由1位符号(s)、8位指数(e)、10位尾数(m)组成。符号位s=0代表正号,符号位s=1代表负号,指数位e的取值范围为0-255,尾数m又称小数位。bf16具有1位符号(s)、8位指数(e)、7位尾数(m)组成。bf16符号位、指数位、尾数位的含义与16位浮点数、32位浮点数的相同或类似,因此此处不再赘述。
在该应用场景下,本公开上述的拆分单元可以配置用于对乘数和被乘数的尾数位进行拆分,以得到多个子乘数和多个子被乘数,此时乘法单元可以将多个子乘数和对应的多个子被乘数分别对应相乘,以得到中间乘积结果。
另外,考虑了符号位和指数位的存在,本公开的乘法器还包括指数模块,其配置用于对乘数的指数位和被乘数的指数位进行运算,以获得所述最终乘积结果的指数位。例如,指数模块可以直接对乘数和被乘数的指数进行相加,以获得最终乘积结果的指数位数值。本公开实施例中,浮点数可以采用移码进行表示,此时指数模块可以根据移码值来确定最终乘积结果的指数位数值。其中,该最终乘积结果的指数位数值=乘数的指数位+被乘数的指数位-该浮点数的移码值。以32位浮点数为例,移码值为128。
相应地,本公开的乘法器还包括符号模块,其配置用于根据乘数的符号位和被乘数的符号来确定最终乘积结果的符号位。例如,当乘数和被乘数的符号均为正(“+”)或负(“-”)时,则符号模块可以确定最终乘积结果的符号为正(“+”)。反之,当乘数和被乘数的符号位不同时,即一个为正(“+”)而另一个为负(“-”)时,则最终乘积结果的符号位就为负(“-”)。
在一些特定的应用场景中,本公开的乘法器可以用于上述向量运算单元中,以实现向量运算功能。本公开的乘法运算方案还可以应用于向量运算,其中所述乘数和所述被乘数为向量,并且所述拆分单元配置成将所述向量中的元素按照预定的数据位宽拆分成多个子数据,所述子数据作为待执行所述乘法运算的子乘数或子被乘数。
具体来说,假定乘数为第一向量并且被乘数为第二向量,并且每个向量中都包含数目相同的若干个元素。在该情形下,本公开的拆分单元可以配置成分别将所述第一向量中元素按照预定的数据位宽拆分成多个子乘数,将所述第二向量中的元素按照预定的数据位宽拆分成多个子被乘数。相对应地,本公开的多个乘法单元可以被配置用于并行执行第一向量和第二向量中的对应元素的每个子乘数与对应的子被乘数之间的对位乘法运算,以获得多个中间乘积结果。由此,本公开的结果处理单元可以被配置用于对向量中元素的多个中间乘积结果进行处理,以便获得第一向量和第二向量中其中一个元素的对位相乘结果。可以理解的是,此处仅以两个向量中的对应元素的对位相乘操作为例来描述向量乘法操作的原理,但该对应元素的相乘操作实质上相当于前文乘数和被乘数的拆分和并行乘法操作。进一步,当对第一向量和第二向量的对应元素都执行了前述的“元素级”拆分和并行乘法运算时,就可以通过结果处理单元的处理来获得两个向量间的最终乘积结果。
图7是示出根据本公开实施例的乘法器执行向量间乘法操作的示例性示意图。需要理解是,图7是上述图6所描述的乘法器600的一个具体实施例,因此上述关于乘法器600的特征和描述也适用于以下结合图7所做的描述。另外,尽管这里以向量为例来描述本公开的方案,但该向量内向量元素间的乘法操作与上文结合图6所描述的乘数和被乘数的操作类似。
如图7中所示出的第一向量701和第二向量702,假设该第一向量701和第二向量702中的向量元素均为整数类型,并且各自的每个向量元素的数据位宽均为8比特。在对第一向量701和第二向量702进行对位乘法的运算过程中,可以分别对第一向量中的元素和第二向量中相应位置的元素分别进行运算。
具体来说,可以经拆分单元将第一向量701的第一向量元素拆分成数据位宽为4比特的向量子元素a1和向量子元素b1(即本公开上下文的子乘数)。类似地,可以将第二向量702中的第一向量元素经拆分单元拆分成数据位宽为4比特的向量子元素a2和向量子元素b2(即本公开上下文的子被乘数)。接着,通过设置的四个乘法单元602分别对前述拆分成的向量子元素a1和向量元素子b1以及向量子元素a2和向量子元素b2并行地执行乘法操作。
具体地,如图中从左到右依次示出的乘法单元602并行地对向量子元素(a1和a2),向量子元素(a1和b2),向量子元素(b1和a2)以及向量子元素(b1和b2)执行乘法操作,从而获得多个中间乘积结果,即a1*a2、a1*b2、b1*a2和b1*b2的乘积结果。进一步地,乘法单元将执行乘法操作所获得的中间乘积结果存储在其各自的中间存储器703中。最后,由结果处理单元603从前述中间存储器703中调用中间乘积结果并对其进行例如如前所述的移位操作和加法操作处理,从而能够获得第一向量和第二向量的各自第一向量元素间的最终乘积结果。类似地,可以执行第一向量和第二向量的各自第二向量元素间的最终乘积结果。以此类推,直至完成第一向量和第二向量的对应向量元素间的所有乘法操作,并且将所有得到的中间乘积结果进行求和,从而得到第一向量和第二向量点积运算的最终结果。
可以看出,利用本公开方案,可以将包括多个向量元素的输入数据拆分成最小粒度的多个向量子元素,从而能够通过多个乘法单元并行地执行对应向量子元素的乘法操作,从而提高了本公开乘法器的并行度,并且提高了向量点积运算的运算效率。进一步地,由于将输入数据拆分成最小粒度的向量子元素,使得减少了运算资源的浪费,从而能够有效提高资源利用率。
此外,本公开方案的灵活性更强,利用本公开方案可以处理任意数据位宽的输入数据。例如,对于数据位宽相同的乘数和被乘数,并且其数据位宽为最小粒度的倍数,则可以将乘数和被乘数进行任意合适的拆分,以适于由本公开的乘法器来执行乘法操作。例如,对于数据位宽长度均为8比特的乘数和被乘数,假设拆分的最小粒度为4比特(也即本公开的乘法单元在该例子中支持4比特的乘法操作),则可以将乘数和被乘数均拆分成数据位宽为4比特的子乘数和子被乘数来进行乘法操作。与之类似地,对于数据位宽不同的乘数和被乘数,本公开的方案也可以对乘数或被乘数进行适宜的任意拆分。例如,针对对于数据位宽为16比特的乘数和数据位宽为8比特的被乘数时,假设最小粒度为4比特时,则可以将乘数和被乘数分别拆分成四个子乘数和两个子被乘数来执行乘法操作。
图8是示出根据本公开实施例的结果处理单元的示例性结构框图。需要理解的是,图8是上述图6中所示结果处理单元603的一个具体实施例,因此,上述关于结果处理单元603的特征和描述也适用于针对图8所做描述。
如图8中所示,结果处理单元包括移位器801、加法器802和结果寄存器803。其中,前述移位器801可以用于多个中间乘积结果或者部分中间乘积结果执行移位操作。加法器802可以用于对移位后的多个中间乘积结果或者部分中间乘积结果执行加法操作或者还可以对多个所述中间乘积结果执行累加操作,并且将累加结果存储至结果寄存器。前述结果寄存器可以用于存储累加结果。
在一个实施例中,上述移位器801可以在乘法单元获得中间乘积结果后,对中间乘积结果执行移位操作。仍以前述结合图7所描述的例子来示例性说明。当通过乘法单元执行乘法操作后获得中间乘积结果a1*a2、a1*b2、b1*a2以及b1*b2后,可以将中间结果存储在中间存储器内。接着,结果处理单元可以对前述中间乘积结果进行调用,以便移位器对中间乘积结果执行移位操作。考虑到第一向量和第二向量的各自第一向量元素的乘积分别表达为“a1*a2*2^8”、“a1*b2*2^4”、“b1*a2*2^4”和“b1*b2”。因此,利用移位器可以完成例如“a1*a2*2^8”,“a1*b2*2^4”,“b1*a2*2^4”的计算。具体地,对于包含例如“2^8”和2^4项的中间结果执行移位操作,即对“a1*a2”中间乘积结果移动8位并且对“a1*b2”和“b1*a2”的中间乘积结果均移动4位。接着,加法器802可以对移位后的中间乘积结果执行加法操作,以便获得第一向量和第二向量间的针对第一向量元素相乘操作的最终乘积结果。
在一些实施例中,上述移位器801可以与乘法单元并行执行,以便提高运算效率。具体而言,乘法单元在对对应向量子元素执行乘法操作时,该移位器可以并行地对部分中间乘积执行移位操作。仍以上述的向量子元素a1、b1以及向量子元素a2、b2为例。在通过乘法单元执行乘法操作后获得“a1*a2”、“a1*b2”、“a2*b1”以及“b1*b2”的中间乘积结果后,前述移位器并行地对部分中间乘积结果例如“a1*a2”和“b1*a2”执行移位操作,例如对其均移动4位后获得“a1*a2*2^4”和“b1*a2*2^4”的中间乘积结果。在该场景下,加法器可以首先对前述移位后的部分中间乘积结果(即“a2*b1*2^4”和“a1*a2*2^4”的结果)执行加法操作,获得部分加和结果,例如sum1=a2*b1*2^4+b1*b2,sum2=a1*a2*2^4+a1*b2。进一步地,经移位器和加法器可以对前述获得的部分中间乘积结果移位加后的部分加和结果再次执行移位操作和加法操作,即sum2*2^4+sum1,从而可以获得针对第一向量元素的“(a1*a2*2^4+a1*b2)*2^4+a2*b1*2^4+b1*b2”的最终乘积结果。
在一些实施例中,在对中间乘积结果进行移位时,还可以对其进行调度。由此,本公开方案中的结果处理单元还可以包括移位计数器(例如图8中所示出的移位计数器804),该移位计数器可以用于在加法器对多个中间乘积结果执行累加操作,并且将累加结果存储至结果寄存器时进行移位计数。具体而言,乘法单元对拆分后的乘数的每个子乘数与被乘数中的每个子被乘数执行完对应的乘法运算后,加法器可以对其乘积结果进行累加操作。进一步地,将累加结果存储至结果寄存器时,移位计数器执行移位计数(例如计数值加1),以便确定下一子乘数和子被乘数在执行相乘操作后需移动的位数。
如前所述,本公开的方案还可以应用于输入数据为浮点数类型的运算。可以理解,浮点数类型的数据通常可以包括三个部分,例如图9所示出的符号(或符号位901)、指数(或指数位902)和尾数(或尾数位803)。对于无符号的浮点数则可以不存在符号或者符号位。在一些实施例中,前述浮点数可以包括半精度浮点数、单精度浮点数、脑浮点数、双精度浮点数、自定义浮点数中的至少一种。具体来说,前述浮点数格式可以是符合IEEE754标准的浮点格式,例如半精度浮点数(float16,简写为“FP16”)、双精度浮点数(float64,简写为“FP64”)或者单精度浮点数(float32,简写为“FP32”)。在一些实施场景中,前述每种数据类型的符号位、指数位和尾数位可以对应不同的位宽。例如,数据类型为FP16的符号位宽为1比特,指数位宽为5比特,尾数位宽为10比特;数据类型为FP32的符号位宽为1比特,指数位宽为8比特,尾数位宽为23比特。
基于上述关于浮点数的描述,本公开的每个乘法单元还可以包括指数处理模块和尾数处理模块。下面将结合图10详细描述前述乘法单元。
图10是示出根据本公开实施例的乘法单元的又一个示例性结构框图。需要理解的是,图10是上述图6中乘法单元602的另一个具体实施例,因此上述关于乘法单元的特征和描述也适用于图10。
如图10中所示,乘法单元602可以包括指数处理模块1001和尾数处理模块1002。前述指数处理模块1001可以用于对所述乘数的指数位和所述被乘数的指数位进行运算,以获得所述最终乘积结果的指数位。前述尾数处理模块可以用于对经拆分单元拆分后的尾数来执行乘法操作,以得到乘数和被乘数执行乘法操作后的尾数。这里,尾数的拆分仍可以遵循最小粒度的拆分方式。例如,对于FP16的尾数,当最小拆分粒度为4比特时,可以将其尾数从10比特补足到12比特,并且拆分成3组,即3个子乘数或子被乘数。
在一个实施例中,上述指数处理模块可以通过加减法电路来实现。例如,本公开的指数处理模块可以将乘数的指数与被乘数的指数相加,并且接着减去输出浮点数格式的移码值,从而获得执行乘法操作后的指数值。例如,对于FP32的指数,可以将移码值设定为128,则乘法操作后的指数值即为“乘数的指数+被乘数的指数-128”。
除了上述指数处理模块和尾数处理模块,本公开的乘法单元还包括符号处理模块(例如图10中所示出的符号处理模块1003),当输入的乘数和被乘数是带有符号位的浮点数时,则符号处理模块可以根据二者的符号位相同与否来确定最终乘积结果的符号位。例如,当乘数和被乘数的符号位分别为正(“+”)和负(“-”),则最终乘积结果的符号位为负(“-”)。
在一个实施例中,上述符号处理模块可以包括异或逻辑电路,并且所述异或逻辑电路配置用于根据乘数和被乘数的符号进行异或运算,以获得执行乘法运算后的符号。在一些实施例中,前述符号处理单元也可以通过真值表或逻辑判断来实现。
在本公开的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
在一些实施例里,本公开还公开了一种电子设备或装置,其包括了上述板卡。根据不同的应用场景,电子设备或装置可以包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本公开所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本公开所提供的几个实施例中,应该理解到,所公开的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述电路的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个电路或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或电路的间接耦合或通信连接,可以是电性、光学、声学、磁性或其它的形式。
所述作为分离部件说明的电路可以是或者也可以不是物理上分开的,作为电路显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能电路可以集成在一个处理单元中,也可以是各个电路单独物理存在,也可以两个或两个以上电路集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,当本公开的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(“ROM”,Read-OnlyMemory)、随机存取存储器(“RAM”,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
依据以下条款可更好地理解前述内容:
条款A1.一种乘法器,包括:
拆分单元,其配置用于基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度;
多个乘法单元,其配置用于并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果;以及
结果处理单元,其配置用于对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
条款A2.根据条款A1所述的乘法器,其中在对所述多个中间乘积结果进行处理时,所述结果处理单元进一步配置用于:
对所述乘法单元计算获得的多个所述中间乘积结果执行移位操作和加法操作,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
条款A3.根据条款A1所述的乘法器,其中所述结果处理单元包括用于执行移位操作的移位器、用于执行加法操作的加法器以及用于保存执行所述加法操作后所获结果的结果寄存器。
条款A4.根据条款A3所述的乘法器,其中:
所述移位器配置用于对所述中间乘积结果中的一个或多个中间乘积结果执行移位操作;并且
所述加法器配置用于对移位后的中间乘积结果执行加法操作。
条款A5.根据条款A3所述的乘法器,其中:
所述移位器配置用于对中间乘积结果中的一个或多个部分中间乘积结果执行第一移位操作;
所述加法器配置用于对执行第一移位操作后的部分中间乘积结果执行第一加法操作;
所述移位器还配置用于对执行所述第一加法操作后所获得的部分中间乘法结果进行第二移位操作;并且
所述加法器还配置用于对执行第二移位操作后所获得的部分中间乘积结果执行第二加法操作。
条款A6.根据条款A5所述的乘法器,其中所述结果处理单元还包括移位计数器,其中在所述加法器对多个所述中间乘积结果执行累加操作期间,所述移位计数器配置用于进行移位计数。
条款A7.根据条款A5所述的乘法器,其中所述加法器包括全加器、串行加法器和超前进位加法器中的至少一种,并且其中所述加法器包括布斯编码电路,并且所述布斯编码电路配置用于在执行加法操作时进行布斯编码处理,以获得加法操作的运算结果。
条款A8.根据条款A1-A7任意一项所述的乘法器,其中所述乘数和所述被乘数为定点数。
条款A9.根据条款A1-A7任意一项所述的乘法器,其中所述乘数和所述被乘数为浮点数,所述乘数和所述被乘数分别包括各自的符号位、指数位和尾数位,其中
所述拆分单元配置用于对所述乘数和被乘数的尾数位进行拆分,以得到所述多个子乘数和多个子被乘数,并且乘法单元还包括:
尾数处理模块,其配置用于对拆分后的尾数位执行乘法运算;
指数处理模块,其配置用于对所述乘数的指数位和所述被乘数的指数位进行运算,以获得所述最终乘积结果的指数位;以及
符号处理模块,其配置用于根据所述乘数的符号位和所述被乘数的符号来确定所述最终乘积结果的符号位。
条款A10.根据条款A1-A9任意一项所述的乘法器,其中所述乘数和所述被乘数为向量,并且所述拆分单元配置成将所述向量中的元素按照预定的数据位宽拆分成多个子数据,所述子数据作为待执行所述乘法运算的子乘数或子被乘数。
条款A11.根据条款A1-A10任意一项所述的乘法器,其中所述乘数为第一向量,所述被乘数为第二向量,所述拆分单元配置成分别将所述第一向量中元素按照预定的数据位宽拆分成多个子乘数,将所述第二向量中的元素按照预定的数据位宽拆分成多个子被乘数;
所述多个乘法单元被配置用于并行执行所述第一向量和第二向量中的对应元素的每个子乘数与对应的子被乘数之间的乘法运算,以获得多个中间乘积结果;
所述结果处理单元被配置用于对向量中元素的所述多个中间乘积结果进行处理,以便获得所述第一向量和第二向量中其中一个元素的对位相乘结果。
条款A12.根据条款A1-A11任意一项所述的乘法器,还包括用于存储中间乘积结果的乘法结果表,并且所述多个乘法单元还配置用于根据待执行乘法运算的子乘数来查询所述乘法结果表,以便获得所述中间乘积结果。
条款A13.一种集成电路芯片,包括条款A1-A12中任意一项所述的乘法器。
条款A14.一种计算装置,包括根据条款A1-A12中任意一项所述的乘法器或根据权利要求13所述的集成电路芯片。
条款A15.一种板卡,包括根据条款A14所述的计算装置。
条款A16.一种计算机实现的乘法运算的方法,包括:
接收待执行所述乘法运算的乘数和被乘数;
基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度;
并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果;以及
对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
虽然本文已经示出和描述了本公开的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本公开思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本公开的过程中,可以采用对本文所描述的本公开实施例的各种替代方案。所附权利要求书旨在限定本公开的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
Claims (16)
1.一种乘法器,包括:
拆分单元,其配置用于基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度;
多个乘法单元,其配置用于并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果;以及
结果处理单元,其配置用于对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
2.根据权利要求1所述的乘法器,其中在对所述多个中间乘积结果进行处理时,所述结果处理单元进一步配置用于:
对所述乘法单元计算获得的多个所述中间乘积结果执行移位操作和加法操作,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
3.根据权利要求1所述的乘法器,其中所述结果处理单元包括用于执行移位操作的移位器、用于执行加法操作的加法器以及用于保存执行所述加法操作后所获结果的结果寄存器。
4.根据权利要求3所述的乘法器,其中:
所述移位器配置用于对所述中间乘积结果中的一个或多个中间乘积结果执行移位操作;并且
所述加法器配置用于对移位后的中间乘积结果执行加法操作。
5.根据权利要求3所述的乘法器,其中:
所述移位器配置用于对中间乘积结果中的一个或多个部分中间乘积结果执行第一移位操作;
所述加法器配置用于对执行第一移位操作后的部分中间乘积结果执行第一加法操作;
所述移位器还配置用于对执行所述第一加法操作后所获得的部分中间乘法结果进行第二移位操作;并且
所述加法器还配置用于对执行第二移位操作后所获得的部分中间乘积结果执行第二加法操作。
6.根据权利要求5所述的乘法器,其中所述结果处理单元还包括移位计数器,其中在所述加法器对多个所述中间乘积结果执行累加操作期间,所述移位计数器配置用于进行移位计数。
7.根据权利要求5所述的乘法器,其中所述加法器包括全加器、串行加法器和超前进位加法器中的至少一种,并且其中所述加法器包括布斯编码电路,并且所述布斯编码电路配置用于在执行加法操作时进行布斯编码处理,以获得加法操作的运算结果。
8.根据权利要求1-7任意一项所述的乘法器,其中所述乘数和所述被乘数为定点数。
9.根据权利要求1-7任意一项所述的乘法器,其中所述乘数和所述被乘数为浮点数,所述乘数和所述被乘数分别包括各自的符号位、指数位和尾数位,其中
所述拆分单元配置用于对所述乘数和被乘数的尾数位进行拆分,以得到所述多个子乘数和多个子被乘数,并且乘法单元还包括:
尾数处理模块,其配置用于对拆分后的尾数位执行乘法运算;
指数处理模块,其配置用于对所述乘数的指数位和所述被乘数的指数位进行运算,以获得所述最终乘积结果的指数位;以及
符号处理模块,其配置用于根据所述乘数的符号位和所述被乘数的符号来确定所述最终乘积结果的符号位。
10.根据权利要求1-9任意一项所述的乘法器,其中所述乘数和所述被乘数为向量,并且所述拆分单元配置成将所述向量中的元素按照预定的数据位宽拆分成多个子数据,所述子数据作为待执行所述乘法运算的子乘数或子被乘数。
11.根据权利要求1-10任意一项所述的乘法器,其中所述乘数为第一向量,所述被乘数为第二向量,所述拆分单元配置成分别将所述第一向量中元素按照预定的数据位宽拆分成多个子乘数,将所述第二向量中的元素按照预定的数据位宽拆分成多个子被乘数;
所述多个乘法单元被配置用于并行执行所述第一向量和第二向量中的对应元素的每个子乘数与对应的子被乘数之间的乘法运算,以获得多个中间乘积结果;
所述结果处理单元被配置用于对向量中元素的所述多个中间乘积结果进行处理,以便获得所述第一向量和第二向量中其中一个元素的对位相乘结果。
12.根据权利要求1-11任意一项所述的乘法器,还包括用于存储中间乘积结果的乘法结果表,并且所述多个乘法单元还配置用于根据待执行乘法运算的子乘数来查询所述乘法结果表,以便获得所述中间乘积结果。
13.一种集成电路芯片,包括权利要求1-12中任意一项所述的乘法器。
14.一种计算装置,包括根据权利要求1-12中任意一项所述的乘法器或根据权利要求13所述的集成电路芯片。
15.一种板卡,包括根据权利要求14所述的计算装置。
16.一种计算机实现的乘法运算的方法,包括:
接收待执行所述乘法运算的乘数和被乘数;
基于预定的数据位宽对乘数和被乘数进行拆分,以得到多个子乘数和多个子被乘数,其中所述乘数和被乘数具有各自的数据位宽长度;
并行地执行多个子乘数的每个子乘数与所述多个子被乘数的对应一个子被乘数之间的乘法运算,以获得多个中间乘积结果;以及
对所述多个中间乘积结果进行处理,以便获得所述乘数和被乘数之间乘法运算的最终乘积结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111087137.1A CN115809043A (zh) | 2021-09-16 | 2021-09-16 | 一种乘法器及其相关产品和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111087137.1A CN115809043A (zh) | 2021-09-16 | 2021-09-16 | 一种乘法器及其相关产品和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115809043A true CN115809043A (zh) | 2023-03-17 |
Family
ID=85482283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111087137.1A Pending CN115809043A (zh) | 2021-09-16 | 2021-09-16 | 一种乘法器及其相关产品和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115809043A (zh) |
-
2021
- 2021-09-16 CN CN202111087137.1A patent/CN115809043A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110163357B (zh) | 一种计算装置及方法 | |
US20070074008A1 (en) | Mixed mode floating-point pipeline with extended functions | |
TWI763079B (zh) | 用於浮點運算的乘法器、方法、積體電路晶片和計算裝置 | |
TWI737652B (zh) | 併合乘-加(fma)低功能性單元 | |
CN111045728B (zh) | 一种计算装置及相关产品 | |
US10445064B2 (en) | Implementing logarithmic and antilogarithmic operations based on piecewise linear approximation | |
CN111047022A (zh) | 一种计算装置及相关产品 | |
WO2021078210A1 (zh) | 用于神经网络运算的计算装置、方法、集成电路和设备 | |
CN112101541B (zh) | 对高位宽值数据进行拆分的装置、方法、芯片及板卡 | |
CN111381808B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
US7769981B2 (en) | Row of floating point accumulators coupled to respective PEs in uppermost row of PE array for performing addition operation | |
CN111047021B (zh) | 一种计算装置及相关产品 | |
CN115809043A (zh) | 一种乘法器及其相关产品和方法 | |
CN209895329U (zh) | 乘法器 | |
CN109582279B (zh) | 数据运算装置及相关产品 | |
CN112801276A (zh) | 数据处理方法、处理器及电子设备 | |
CN113867799A (zh) | 计算装置、集成电路芯片、板卡、电子设备和计算方法 | |
CN113867686A (zh) | 运算方法、装置及相关产品 | |
CN113934678A (zh) | 一种计算装置、集成电路芯片、板卡、设备和计算方法 | |
CN115952848A (zh) | 卷积运算电路、编译方法及相关产品 | |
CN114647442A (zh) | 根据指令集运行的设备 | |
CN111930672A (zh) | 异构智能处理器及电子设备 | |
CN116185333A (zh) | 数字信号末尾1变0的方法、电路、芯片、介质及设备 | |
CN115237371A (zh) | 计算装置、数据处理方法及相关产品 | |
CN116882475A (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 |