CN115408061B - 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 - Google Patents
复数矩阵运算的硬件加速方法、装置、芯片及存储介质 Download PDFInfo
- Publication number
- CN115408061B CN115408061B CN202211359341.9A CN202211359341A CN115408061B CN 115408061 B CN115408061 B CN 115408061B CN 202211359341 A CN202211359341 A CN 202211359341A CN 115408061 B CN115408061 B CN 115408061B
- Authority
- CN
- China
- Prior art keywords
- calculation
- multiplicand
- part data
- multiplier
- matrix
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请提供一种复数矩阵运算的硬件加速方法、装置、芯片及存储介质,属于芯片处理技术领域。该方法包括:读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据;确定各组运算复数矩阵中乘数复数矩阵的元素,以及被乘数复数矩阵的元素,每个元素含实部和虚部;将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果;将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果。本申请可以显著提高复数矩阵运算的效率,提高计算性能,降低访存带宽,降低计算功耗。
Description
技术领域
本申请涉及芯片处理技术领域,具体而言,涉及一种复数矩阵运算的硬件加速方法、装置、芯片及存储介质。
背景技术
在高性能的处理器、人工智能芯片等处理器件中,为了保证较为强大的算力,通常需要具有矩阵的运算能力,目前的处理器件中,通常都可以实现实数矩阵的运算,但是对于虚数的运算,存在计算效率低下等问题,因此,亟需一种对于复数矩阵进行运算的加速器件。
现有技术中,通常是在采用实数运算器件的基础上,进行多次运算以实现虚数中实部和虚部的结合运算,从而得到复数矩阵运算的结果。
然而,仅仅采用实数运算的硬件结构以及计算方式对复数矩阵进行运算,会导致计算的过程较为复杂,消耗的计算时间较多,占用更多访存带宽,并且在计算的过程中也可能会存在算力的浪费等情况。
发明内容
本申请的目的在于提供复数矩阵运算的硬件加速方法、装置、芯片及存储介质中,可以提高计算的效率,降低放存带宽,减少算力的浪费以及降低功耗。
本申请的实施例是这样实现的:
本申请实施例的一方面,提供一种复数矩阵运算的硬件加速方法,该方法应用于计算芯片的硬件加速器,硬件加速器包括:控制单元、缓存单元以及计算单元,计算单元包括多个双点乘计算模块以及累加计算模块,该方法包括:
读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据,以复数矩阵的格式存储的计算数据包括:至少一组运算复数矩阵,各运算复数矩阵中包括乘数复数矩阵和被乘数复数矩阵,乘数复数矩阵和被乘数复数矩阵为可相乘矩阵;
确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据;
将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果;
将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果。
可选地,各双点乘计算模块包括:第一点乘子模块和第二点乘子模块;
将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果,包括:
将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,得到第一点乘结果;
将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,得到第二点乘结果。
可选地,各双点乘计算模块还包括:第一选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;
将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,得到第一点乘结果,包括:
将各组运算复数矩阵中被乘数实部数据以及被乘数虚部数据输入至第一选择子模块,将各组运算复数矩阵中乘数实部数据输入至第一点乘子模块;
在第一计算周期中,控制第一选择子模块将被乘数实部数据发送给第一点乘子模块与乘数实部数据进行运算,得到第一计算周期的第一计算结果;
在第二计算周期中,控制第一选择子模块将被乘数虚部数据发送给第一点乘子模块与乘数实部数据进行运算,得到第二计算周期的第一计算结果;
将第一计算周期的第一计算结果和第二计算周期的第一计算结果作为第一点乘结果。
可选地,各双点乘计算模块还包括:第二选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;
将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,得到第二点乘结果,包括:
将各组运算复数矩阵中被乘数实部数据以及被乘数虚部数据输入至第二选择子模块,将各组运算复数矩阵中乘数虚部数据输入至第二点乘子模块;
在第一计算周期中,控制第二选择子模块将被乘数虚部数据发送给第二点乘子模块与乘数虚部数据进行运算,得到第一计算周期的第二计算结果;
在第二计算周期中,控制第二选择子模块将被乘数实部数据发送给第二点乘子模块与乘数虚部数据进行运算,得到第二计算周期的第二计算结果;
分别对第一计算周期的第二计算结果和第二计算周期的第二计算结果进行处理,得到第二点乘结果。
可选地,分别对第一计算周期的第二计算结果和第二计算周期的第二计算结果进行处理,得到第二点乘结果,包括:
通过使能信号控制第一计算周期的第二计算结果和第二计算周期的第二计算结果进行取反处理得到第一计算周期取反后的计算结果以及第二计算周期取反后的计算结果;
对第一计算周期取反后的计算结果进行加一处理,得到第一计算周期加一后的计算结果;
将第一计算周期加一后的计算结果和第二计算周期取反后的计算结果作为第二点乘结果。
可选地,读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据之前,该方法还包括:
确定计算数据中各个矩阵行列的大小;
若存在矩阵行列的大小大于预设矩阵行列大小的目标矩阵,对目标矩阵进行矩阵分割处理,预设矩阵行列大小小于或者等于计算单元可运算矩阵行列大小的上限。
可选地,通过缓存单元以复数矩阵的格式存储计算数据,包括:
对于每组运算复数矩阵,按照如下方式进行存储:
通过缓存单元按照行优先存储的方式进行连续存储得到乘数复数矩阵;
通过缓存单元按照列优先存储的方式进行连续存储得到被乘数复数矩阵,其中,乘数复数矩阵的列与被乘数复数矩阵的行相等。
本申请实施例的另一方面,提供一种复数矩阵运算的硬件加速装置,该装置应用于计算芯片的硬件加速器,硬件加速器包括:控制单元、缓存单元以及计算单元,计算单元包括多个双点乘计算模块以及累加计算模块,该装置包括:读取模块、确定模块、点乘计算模块以及累加计算模块;
读取模块,用于读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据,以复数矩阵的格式存储的计算数据包括:至少一组运算复数矩阵,各运算复数矩阵中包括乘数复数矩阵和被乘数复数矩阵,乘数复数矩阵和被乘数复数矩阵为可相乘矩阵;
确定模块,用于确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据;
点乘计算模块,用于将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果;
累加计算模块,用于将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果。
本申请实施例的另一方面,提供一种计算芯片,包括:控制单元、缓存单元以及计算单元,缓存单元中存储有可在控制单元上运行的计算机程序,控制单元执行计算机程序时,通过计算单元进行计算,实现复数矩阵运算的硬件加速方法的步骤。
本申请实施例的另一方面,提供一种计算机可读存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现复数矩阵运算的硬件加速方法的步骤。
本申请实施例的有益效果包括:
本申请实施例提供的复数矩阵运算的硬件加速方法中,可以读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据,从而可以实现数据的一次性读取,避免了多次数据读取的情况,避免了访存带宽和功耗的消耗、降低了访存的复杂性;并且,可以确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据,将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,可以更加高效、准确地得到点乘结果,进而将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果,采用流水线形式的计算,可以是计算过程中无资源浪费,提高各个计算模块的利用率,降低计算时延,提高硬件整体对复数矩阵运算的性能。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的计算芯片的硬件加速器的结构示意图;
图2为本申请实施例提供的复数矩阵运算的硬件加速方法的流程示意图;
图3为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图;
图4为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图;
图5为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图;
图6为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图;
图7为本申请实施例提供的行优先存储方式进行矩阵存储的关系示意图;
图8为本申请实施例提供的列优先存储方式进行矩阵存储的关系示意图;
图9为本申请实施例提供的目标输出结果的实部计算过程的关系示意图;
图10为本申请实施例提供的目标输出结果的实部计算过程的另一关系示意图;
图11为本申请实施例提供的目标输出结果的虚部计算过程的关系示意图;
图12为本申请实施例提供的目标输出结果的虚部计算过程的另一关系示意图;
图13为本申请实施例提供的复数数据计算方法整体流程示意图;
图14为本申请实施例提供的复数矩阵运算的硬件加速装置的结构示意图;
图15为本申请实施例提供的计算芯片的硬件加速器的又一结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本申请的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在现有技术中,若要实现复数矩阵的运算,通常是在采用实数运算器的基础上,进行多次运算:
对于矩阵之间的运算关系,可以简化为以矩阵A、矩阵B和矩阵C之间的计算,具体可以是矩阵A*矩阵B+矩阵C,采用实数运算器需要以下步骤来实现:
第一步:矩阵A的虚部乘矩阵B的虚部,减去矩阵C对应的元素的实部;
第二步:矩阵A的实部乘矩阵B的实部,减去第一步的计算结果;
第三步:矩阵A的实部乘矩阵B的虚部,加上矩阵C对应的元素的虚部;
第四步:矩阵A的虚部乘矩阵B的实部,加上第三步的计算结果。
其中,乘加结果的一个元素也含实部和虚部,被乘数复数矩阵A和乘数复数矩阵B相乘,A的一行乘B的一列可以完成实部的点乘,同一个元素点乘结果不是加,而是减,不同元素间以及累加复数矩阵C对应元素的实部进行累加方能得到复数矩阵D对应元素的实部,对于一个被乘数为M×K大小的矩阵,计算一个实部需要2K次乘法、K次减法、K次加法。虚部计算时,需要先交换乘法矩阵的实部和虚部,然后再和被乘数相乘,共需要K次数据交换,2K次乘法、2K次加法。与实数相比,复数计算乘法多了一倍,加法多了一半,多了K次数据交换和K次减法。
显然,采用实数运算器的基础上进行上述运算,需要执行较多的步骤,才能得到复数矩阵运算的结果,导致了计算过程消耗的时间较多,并且,在计算的过程中,也并没有流水线的规划配置,导致在计算过程中存在算力浪费等情况的发生。
为了避免上述问题的发生,本申请实施例中提供了一种支持复数矩阵数据计算硬件加速方法,下面来具体解释该方法所应用的计算芯片中硬件加速器的具体结构。
图1为本申请实施例提供的计算芯片的硬件加速器的结构示意图,请参照图1,硬件加速器包括:控制单元110、缓存单元以及计算单元120,计算单元120包括多个双点乘计算模块121以及累加计算模块122。
其中,缓存单元可以划分为输入缓存131和输出缓存132。
硬件加速器还可以包括:访问单元140,其中,访问单元140分别与输入缓存131、输出缓存132以及控制单元110连接,输入缓存131和输出缓存132还均与计算单元120连接,控制单元110还与计算单元120以及输入缓存131连接。
在具体工作的过程中,访问单元140可以在控制单元110的控制下访问外部芯片或芯片内部存储器,从而获取相关的计算数据,并可以将计算数据存储在输入缓存131中,输入缓存131可以在控制单元110的控制下将计算数据输入至计算单元120中进行计算,其中,可以通过多个双点乘计算模块121进行点乘计算,以及可以通过累加计算模块122进行累加计算,得到目标输出结果后,计算单元120可以在控制单元110的控制下将目标输出结果输出至输出缓存132中,再由输出缓存132通过访问单元140发送给计算芯片的其他部分或者其他芯片。
下面来解释本申请实施例中复数矩阵运算的硬件加速方法的具体实施过程。
图2为本申请实施例提供的硬件加速的复数数据计算方法的流程示意图,请参照图2,该方法包括:
S210:读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据。
其中,以复数矩阵的格式存储的计算数据包括:至少一组运算复数矩阵,各运算复数矩阵中包括乘数复数矩阵和被乘数复数矩阵,乘数复数矩阵和被乘数复数矩阵为可相乘矩阵。
可选地,该方法的执行主体可以是上述硬件加速器,具体可以是硬件加速器中的控制单元。
其中,可以通过访问单元对芯片内存储器(如:寄存器等)或其他的存储芯片进行访问,从而实现对计算数据的读取,计算数据具体可以是以固定大小的矩阵的形式进行存储的,或者也可以是以离散的数据的形式进行存储的,在此不作具体限制,在读取的过程可以按照一定读取规则进行读取,得到对应的计算数据之后,可以通过缓存单元中的输入缓存对这些计算数据以矩阵的格式进行存储。
具体地,在输入缓存中可以预先配置有矩阵的大小,可以按照对应的矩阵大小进行存储。
以复数矩阵的格式存储的计算数据中可以包括至少一组运算复数矩阵,这些运算复数矩阵需要通过计算单元中的双点乘计算模块进行点乘计算,对于每组运算复数矩阵,可以包括乘数复数矩阵和被乘数复数矩阵,乘数复数矩阵与被乘数复数矩阵之间为可以进行点乘计算的矩阵,例如:对于乘数复数矩阵的大小为M×K,对于被乘数复数矩阵的大小为K×N(K、M、N均为大于等于1的正整数),则乘数复数矩阵与被乘数复数矩阵为可相乘矩阵。
可选地,在计算数据中还可以包括累加矩阵,这类矩阵不需要进行双点乘计算模块的点乘计算,而是需要进行加法计算,则其对应的大小可以为M×2N,也即是需要和点乘后的矩阵大小相等。
需要说明的是,上述运算复数矩阵以及累加矩阵均可以预先在输入缓存中存储。
S220:确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据。
可选地,由于运算复数矩阵中的每个元素由实部和虚部组成,可以在确定各组运算复数矩阵之后,对各个矩阵的实部和虚部进行拆分,可以得到乘数复数矩阵的乘数实部数据、乘数虚部数据和被乘数复数矩阵的被乘数实部数据、被乘数虚部数据。
S230:将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果。
可选地,对各组运算复数矩阵中的上述四类数据进行确定之后,可以将其输入至运算复数矩阵对应的双点乘计算模块进行点乘计算。
需要说明的是,每组运算复数矩阵均可以对应一个双点乘计算模块,通过该双点乘计算模块可以计算得到该复数矩阵的点乘结果,也即是该组运算复数矩阵中的乘数复数矩阵与被乘数复数矩阵的点乘结果。
具体的,双点乘计算模块具体可以是基于拆分后的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据进行复数矩阵点乘计算的计算模块。
S240:将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果。
可选地,通过各个双点乘计算模块输出的点乘结果后可以输入至累加模块进行累加,进行累加计算,另外,若存在有累加矩阵,则也可以通过累加计算模块进行累加计算。
通过累加计算最终可以得到目标输出结果。目标输出结果即为复数数据计算的最终计算结果。
本申请实施例提供的复数矩阵运算的硬件加速方法中,可以读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据,从而可以实现数据的一次性读取,避免了多次数据读取的情况,避免了访存带宽和功耗的消耗、降低了访存的复杂性;并且,可以确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据,将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,可以更加高效、准确地得到点乘结果,进而将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果,采用流水线形式的计算,可以是计算过程中无资源浪费,提高各个计算模块的利用率,降低计算时延,提高硬件整体对复数矩阵运算的性能。
可选地,各双点乘计算模块包括:第一点乘子模块和第二点乘子模块;将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果,包括:
将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,得到第一点乘结果;将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,得到第二点乘结果。
需要说明的是,第一点乘子模块和第二点乘子模块均可以是实现矩阵点乘的计算模块,其中,将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,可以由第一点乘子模块计算出乘数实部数据与被乘数实部数据的点乘结果以及乘数实部数据和被乘数虚部数据的点乘结果;将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,可以由第二点乘子模块计算出乘数虚部数据与被乘数虚部数据的计算结果以及被乘数实部数据与乘数虚部数据的点乘结果。
也即是说,第一点乘结果可以表示乘数实部数据与被乘数实部数据的点乘结果以及乘数实部数据和被乘数虚部数据的点乘结果;第二点乘结果可以表示乘数虚部数据与被乘数虚部数据的计算结果以及被乘数实部数据与乘数虚部数据的点乘结果。可以将第一点乘结果和第二点乘结果作为该双点乘计算模块的点乘结果。
下面来具体解释本申请实施例中提供的复数矩阵运算的硬件加速方法中确定第一点乘结果的实施过程。
图3为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图,请参照图3,各双点乘计算模块还包括:第一选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,得到第一点乘结果,包括:
S310:将各组运算复数矩阵中被乘数实部数据以及被乘数虚部数据输入至第一选择子模块,将各组运算复数矩阵中乘数实部数据输入至第一点乘子模块。
其中,第一选择子模块可以是在时钟控制下进行选择的模块,在工作的过程中,可以存储有被乘数实部数据以及被乘数虚部数据,基于时钟的不同周期,可以将不同的数据输入至第一点乘子模块。从而可以实现乘数实部数据的不同计算过程。
S320:在第一计算周期中,控制第一选择子模块将被乘数实部数据发送给第一点乘子模块与乘数实部数据进行运算,得到第一计算周期的第一计算结果。
可选地,可以划分为两个连续的计算周期,在第一计算周期中,第一选择子模块可以将被乘数实部数据发送给第一点乘子模块,从而可以使乘数实部数据与被乘数实部数据进行运算,进而得到第一计算周期的第一计算结果,第一计算周期的第一计算结果即为乘数实部数据与被乘数实部数据的计算结果。
S330:在第二计算周期中,控制第一选择子模块将被乘数虚部数据发送给第一点乘子模块与乘数实部数据进行运算,得到第二计算周期的第一计算结果。
可选地,在第二计算周期中,第一选择子模块可以将被乘数虚部数据发送给第一点乘子模块,从而可以使乘数实部数据与被乘数虚部数据进行运算,进而得到第二计算周期的第一计算结果,第二计算周期的第一计算结果即为乘数实部数据与被乘数虚部数据的计算结果。
S340:将第一计算周期的第一计算结果和第二计算周期的第一计算结果作为第一点乘结果。
可选地,得到第一计算周期的第一计算结果和第二计算周期的第一计算结果,可以将其作为第一点乘结果。
本申请实施例提供的复数矩阵运算的硬件加速方法中,可以将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,得到第一点乘结果,具体可以通过第一选择模块按照计算周期进行选择输入,从而可以通过双点乘计算模块,在控制单元的控制下,更加快速的在两个连续的计算周期内完成复数矩阵运算,降低了控制复杂度,提升了计算的效率以及复数矩阵的峰值算力。
下面来具体解释本申请实施例中提供的复数矩阵运算的硬件加速方法中确定第二点乘结果的实施过程。
图4为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图,请参照图4,各双点乘计算模块还包括:第二选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,得到第二点乘结果,包括:
S410:将各组运算复数矩阵中被乘数实部数据以及被乘数虚部数据输入至第二选择子模块,将各组运算复数矩阵中乘数虚部数据输入至第二点乘子模块。
其中,第二选择子模块可以是在时钟控制下进行选择的模块,在工作的过程中,可以存储有被乘数实部数据以及被乘数虚部数据,基于时钟的不同周期,可以将不同的数据输入至第二点乘子模块。从而可以实现乘数虚部数据的不同计算过程。
S420:在第一计算周期中,控制第二选择子模块将被乘数虚部数据发送给第二点乘子模块与乘数虚部数据进行运算,得到第一计算周期的第二计算结果。
可选地,可以划分为两个连续的计算周期,在第一计算周期中,第二选择子模块可以将被乘数虚部数据发送给第二点乘子模块,从而可以使乘数虚部数据与被乘数虚部数据进行运算,进而得到第一计算周期的第二计算结果,第一计算周期的第二计算结果即为乘数虚部数据与被乘数虚部数据的计算结果。
S430:在第二计算周期中,控制第二选择子模块将被乘数实部数据发送给第二点乘子模块与乘数虚部数据进行运算,得到第二计算周期的第二计算结果。
可选地,在第二计算周期中,第二选择子模块可以将被乘数实部数据发送给第二点乘子模块,从而可以使被乘数实部数据与乘数虚部数据进行运算,进而得到第二计算周期的第二计算结果,第二计算周期的第二计算结果即为被乘数实部数据与乘数虚部数据的计算结果。
S440:分别对第一计算周期的第二计算结果和第二计算周期的第二计算结果进行处理,得到第二点乘结果。
可选地,得到第一计算周期的第二计算结果和第二计算周期的第二计算结果之后,可以对第一计算周期的第二计算结果和第二计算周期的第二计算结果进行进一步计算处理,处理完毕后可以将其作为第二点乘结果。
需要说明的是,对于第一选择子模块和第二选择子模块在工作的过程中可以采用同一时钟进行控制。
按照上述方式分别得到第一点乘结果和第二点乘结果后,可以发送给累加模块进行累加,在累加计算的过程中可以针对每个双点乘计算模块的输出进行累加,若仅针对该组的双点乘计算模块的输出进行累加,累加结果即为对应的运算复数矩阵的点乘结果。
本申请实施例提供的复数矩阵运算的硬件加速方法中,可以将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,得到第二点乘结果,具体可以通过第二选择模块按照计算周期进行选择输入,从而可以通过双点乘计算模块,在控制单元的控制下,更加快速的在两个连续的计算周期内完成复数矩阵运算,降低了控制复杂度,提升了计算的效率以及复数矩阵的峰值算力。
下面来具体解释本申请实施例中复数矩阵运算的硬件加速方法的另一具体实施过程。
图5为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图,请参照图5,分别对第一计算周期的第二计算结果和第二计算周期的第二计算结果进行处理,得到第二点乘结果,包括:
S510:通过使能信号控制第一计算周期的第二计算结果和第二计算周期的第二计算结果进行取反处理得到第一计算周期取反后的计算结果以及第二计算周期取反后的计算结果。
需要说明的是,在执行复数的计算过程中,因为最终得到的结果的矩阵的实部中,需要乘数实部数据和被乘数实部数据的点乘结果减去乘数虚部数据和被乘数虚部数据的点乘结果(计算过程中全部取正值),因此为了实现减法,可以对第二计算结果进行取反加一操作实现;类似的,也需要对被乘数实部数据和乘数虚部数据进行取反处理。则可以进行以下处理:
可选地,使能信号可以是时钟控制的信号,可以在连续的两个计算周期结束后生成该使能信号,通过该使能信号可以控制第一计算周期的第二计算结果和第二计算周期的第二计算结果进行取反处理,其中,取反处理具体指的是若第二计算结果为X,则将该计算结果变为-X,从而得到第一计算周期取反后的计算结果以及第二计算周期取反后的计算结果。
S520:对第一计算周期取反后的计算结果进行加一处理,得到第一计算周期加一后的计算结果。
可选地,可以对于第一计算周期取反后的计算结果进行加一处理,其中,加一处理具体指的是,若取反后的计算结果为-X,则将还计算结果变为1-X,从而得到第一计算周期加一后的计算结果。
S530:将第一计算周期加一后的计算结果和第二计算周期取反后的计算结果作为第二点乘结果。
可选地,可以将第一计算周期加一后的计算结果和第二计算周期取反后的计算结果作为第二点乘结果。得到第二点乘结果之后,可以将第二点乘结果输入至累加计算模块中进行累加计算,对于每组运算复数矩阵,可以将第二点乘结果和第二点乘结果的和作为该运算复数矩阵的结果,相应地,可以将每组运算复数矩阵的结果的和作为整体计算的结果。
需要说明的是,在点乘结果上增加了使能取反,可以增加元素内点积相减产生的加1点积项,共K/2个1的常数项。
本申请实施例中提供的复数矩阵运算的硬件加速方法中,可以通过使能信号控制第一计算周期的第二计算结果和第二计算周期的第二计算结果进行取反处理得到第一计算周期取反后的计算结果以及第二计算周期取反后的计算结果;对第一计算周期取反后的计算结果进行加一处理,得到第一计算周期加一后的计算结果;将第一计算周期加一后的计算结果和第二计算周期取反后的计算结果作为第二点乘结果。其中,通过在使能信号的控制下实现对第一计算周期的第二计算结果和第二计算周期的第二计算结果的取反处理以及对第一计算周期的第二计算结果的加一处理,可以得到第二点乘结果,基于该方式可以解决实数点乘结果不能减只能加的问题,并且也可以避免额外设置流水线,导致计算周期增加的问题,可以充分利用计算单元的算力,提高计算的效率和性能。
下面来具体解释本申请实施例中提供的复数矩阵运算的硬件加速方法的又一具体实施过程。
图6为本申请实施例提供的复数矩阵运算的硬件加速方法的另一流程示意图,请参照图6,读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据之前,该方法还包括:
S610:确定计算数据中各个矩阵行列的大小。
需要说明的是,在存储芯片中,各个计算数据具体可以是以离散的数据进行存储的,也可以是以固定大小的矩阵的格式进行存储的,在此不作具体限制。
对于以固定大小的矩阵的格式进行存储的计算数据,可以确定这些计算数据对应的矩阵行列的大小。
S620:若存在矩阵行列的大小大于预设矩阵行列大小的目标矩阵,对目标矩阵进行矩阵分割处理。
其中,预设矩阵行列大小小于或者等于计算单元可运算矩阵行列大小的上限。
可选地,可以确定是否存在矩阵行列的大小大于预设矩阵行列大小的目标矩阵,若存在此类目标矩阵,可以对目标矩阵进行分割。
需要说明的是,矩阵行列的大小大于预设矩阵行列大小具体可以是指该矩阵中包括的元素的数量大于预设矩阵中包括的元素的数量,例如矩阵A的大小为4×5,其可以包括20个元素;预设矩阵行列大小为3×7,其可以包括21个元素,则可以确定该矩阵行列的大小小于预设矩阵行列大小,也即是不可以作为目标矩阵。
对于预设矩阵行列的大小可以是预先配置好的大小,但是其大小不可以超过计算单元可运算矩阵行列大小的上限。
其中,对目标矩阵进行矩阵分割处理具体可以是指对元素较多的矩阵进行拆分处理,可以按照预设的拆分规则将一个矩阵拆分为至少两个矩阵,保证每个拆分后的矩阵行列大小小于或者等于预设矩阵行列大小即可。
本申请实施例中提供的复数矩阵运算的硬件加速方法中,可以确定计算数据中各个矩阵行列的大小;若存在矩阵行列的大小大于预设矩阵行列大小的目标矩阵,对目标矩阵进行矩阵分割处理。其中,通过对矩阵的分割处理,可以便于对这些矩阵的读取和写入,从而可以更加快速地实现对计算数据的读取以及存储。
下面来具体解释本申请实施例中在读取到计算数据之后以矩阵格式进行存储的具体过程。
可选地,通过缓存单元以复数矩阵的格式存储计算数据,包括:
对于每组运算复数矩阵,按照如下方式进行存储:通过缓存单元按照行优先存储的方式进行连续存储得到乘数复数矩阵;通过缓存单元按照列优先存储的方式进行连续存储得到被乘数复数矩阵,其中,乘数复数矩阵的列与被乘数复数矩阵的行相等。
需要说明的是,为了便于整体的运算,可以规定乘数复数矩阵和被乘数复数矩阵的点乘关系,例如:可以将乘数复数矩阵作为被乘数矩阵,将被乘数复数矩阵作为乘数矩阵,也即是说,为了使得乘数复数矩阵和被乘数复数矩阵之间可以相乘,乘数复数矩阵的列与被乘数复数矩阵的行相等。
其中,乘数复数矩阵可以是按照行优先存储的方式进行存储得到的;相对地,被乘数复数矩阵可以是按照列优先存储的方式进行存储得到的。
例如:若乘数复数矩阵为M×K,则被乘数复数矩阵为K×N。
下面来具体解释对于乘数复数矩阵,以行优先存储方式进行矩阵存储的具体关系。
图7为本申请实施例提供的行优先存储方式进行矩阵存储的关系示意图,请参照图7,图7中所示即为乘数复数矩阵的矩阵存储方式,在存储的过程中可以按照行优先存储的方式进行存储。所谓行优先存储,即为优先存储每行的数据。
其中,在行优先存储矩阵中,可以将实部与虚部分开进行存储,例如:第一行的第一列为第一个元素的实部、第一行第二列即可以是第一个元素的虚部,图7中包括M行K列,共M*K/2个元素(一个实部加一个虚部为一个元素),在存储过程中,按行连续存储,每行共K/2个元素,每个元素含实部和虚部,存储时先实部后虚部。其中,M和K的大小可以根据实际大小来配置。
其中,AR00即为第一个元素的实部、AI00即为第一个元素的虚部,依此类推,进行第二个元素到第M*K/2个元素的排布。
下面来具体解释对于被乘数复数矩阵,以列优先存储方式进行矩阵存储的具体关系。
图8为本申请实施例提供的列优先存储方式进行矩阵存储的关系示意图,请参照图8,图8中所示即为被乘数复数矩阵的矩阵存储方式,在存储的过程中可以按照列优先存储的方式进行存储。所谓列优先存储,即为优先存储每列的数据。
其中,在列优先存储矩阵中,可以将实部与虚部分开进行存储,例如:第一列的第一行为第一个元素的实部、第一列第二行即可以是第一个元素的虚部,图8中包括K行N列,共N*K/2个元素(一个实部加一个虚部为一个元素),在存储过程中,按列连续存储,每列共K/2个元素,每个元素含实部和虚部,存储时先实部后虚部。其中,N和K的大小可以根据实际大小来配置。
其中,AR00即为第一个元素的实部、AI00即为第一个元素的虚部,依此类推,进行第二个元素到第N*K/2个元素的排布。
下面来具体解释对于目标输出结果的实部进行计算时矩阵层级的计算关系。
图9为本申请实施例提供的目标输出结果的实部计算过程的关系示意图,请参照图9,图9所示即为对于实部计算时矩阵的计算关系,图9中包括四个矩阵,其中矩阵A即为乘数复数矩阵,矩阵B即为被乘数复数矩阵,矩阵C可以是累加矩阵,矩阵D可以作为结果矩阵,也即是最终的计算结果。具体的,其中矩阵A和矩阵B进行的是点乘运算,具体是在上述双点乘计算模块中完成,后续与矩阵C进行的是累加运算,具体可以是在上述累加计算模块中完成。
需要说明的是,对于目标输出结果的实部的计算中,可以依次取矩阵A的行与矩阵B的列相乘,每个乘法得到一个点积,元素内点积相减,元素间点积相加,并与累加矩阵对应元素的实部进行相加,结果保存到结果矩阵对应元素的实部。完成实部计算共需要M*N*K个乘法器,M*N*K/2个减法器、M*N*K/2个加法器,共得到M*N个元素的实部,加/减法有多种实现方法,其中使用基于压缩的加法树,从而提高实现性能。结果矩阵按行优先,元素连续存储,可以得到长度为2N、宽度为M。
为了更加对图9中计算过程进行解释,现对矩阵A的第一行与矩阵B的第一列相点乘为例,解释具体实现的目标输出结果的实数部分计算过程。
图10为本申请实施例提供的目标输出结果的实部计算过程的另一关系示意图,请参照图10,其中,具体计算关系如下:
以结果矩阵第一行第一个元素的实部计算为例,DR00=AR00*BR00-AI00*BI00+AR01*BR10-AI01*BI10+…+AR0k-1*BRk-10-AI0k-1*BIk-10+CR00,元素内点积相减,元素间累加。
图9中的DR00计算过程即为如图10所示,其他元素的计算过程相类似,在此不作具体解释。
下面来具体解释对于目标输出结果的虚部进行计算时矩阵层级的计算关系。
图11为本申请实施例提供的目标输出结果的虚部计算过程的关系示意图,请参照图11,图11所示即为对于虚部计算时矩阵的计算关系,图9中包括四个矩阵,其中矩阵A即为乘数复数矩阵,矩阵B即为被乘数复数矩阵,矩阵C可以是累加矩阵,矩阵D可以作为结果矩阵,也即是最终的计算结果。具体的,其中矩阵A和矩阵B进行的是点乘运算,具体是在上述双点乘计算模块中完成,后续与矩阵C进行的是累加运算,具体可以是在上述累加计算模块中完成。
需要说明的是,对于目标输出结果的虚部的计算中,可以依次取矩阵A的行与矩阵B的列相乘,与实部计算不同的是矩阵B先虚部后实部,也就是矩阵B元素内进行了交换,每个乘法得到一个点积,所有点积相加,并与累加矩阵对应元素的虚部进行相加,结果保存到结果矩阵对应元素的虚部。完成虚部计算共需要M*N*K个乘法器,M*N*K个加法器,共得M*N个元素的虚部,加法有多种实现方法,其中使用基于压缩的加法树,从而提高实现性能。结果矩阵按行优先,元素连续存储,可以得到长度为2N、宽度为M。
为了更加对图11中计算过程进行解释,现对矩阵A的第二行与矩阵B的第二列相点乘为例,解释具体实现的目标输出结果的虚数部分计算过程。
图12为本申请实施例提供的目标输出结果的虚部计算过程的另一关系示意图,请参照图12,其中,具体计算关系如下:
以结果矩阵第二行第一个元素的虚部计算为例,DI10=AR10*BI00-AI10*BR00+AR11*BI10-AI11*BR10+…+AR1k-1*BIk-10-AI1k-1*BRk-10+CI10,所有点积累加。
图11中的DR10计算过程即为如图12所示,其他元素的计算过程相类似,在此不作具体解释。
下面来通过一个具体的流程示意步骤来解释复数数据计算方法的具体实施过程。
图13为本申请实施例提供的复数数据计算方法整体流程示意图,请参照图13,其中包括输入的多个数据:乘数实部数据、乘数虚部数据、被乘数实部数据、被乘数虚部数据;其中,双点乘模块中包括:第一选择子模块、第二选择子模块、第一点乘子模块、第二点乘子模块以及取反子模块。
其中,请参照图13,时钟可以控制第一选择子模块和第二选择子模块的输出以及取反子模块的使能输入,最终第一点乘子模块和第二点乘子模块的所有输入均可以输入至累加计算模块中进行计算。
可选地,图13所示的为多个双点乘计算模块和一个累加计算模块工作的过程,具体流程在前述已经进行了解释,在此不作重复赘述。
需要说明的是,本申请实施例中提供的复数矩阵运算的硬件加速方法既可以支持实数矩阵运算,也能支持复数矩阵运算。
另外,将目标输出结果的实部运算和虚部运算在连续两个周期完成,两个周期数据完成相同,只是在第二个周期将乘数或被乘数的元素实部和虚部通过数据选择进行交换,避免了相同数据多次访问其他存储芯片的问题,整个复数矩阵均只需读一次数据。
在实部计算时,元素内点乘结果相减,元素间点乘结果累加,虚部计算所有点乘结果累加,解决实数点乘结果不能减只能加的问题,避免流水线问题,可以充分利用运算单元的算力。
并且,数据存储按元素连续,计算结果也是按元素连续存储,不存在访问地址连续性或地址切换的问题,访存控制简单,可以节省能耗。
在计算的过程中采用两个连续的计算周期,可以使得整个工作过程呈流水线形式,并且连续存储的方式可以避免流水气泡,提高了计算性能。
下述对用以执行的本申请所提供的复数矩阵运算的硬件加速方法对应的装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图14为本申请实施例提供的复数矩阵运算的硬件加速装置的结构示意图,请参照图14,复数矩阵运算的硬件加速装置,该装置应用于计算芯片的硬件加速器,硬件加速器包括:控制单元、缓存单元以及计算单元,计算单元包括多个双点乘计算模块以及累加计算模块,该装置包括:读取模块210、确定模块220、点乘计算模块230以及累加计算模块240;
读取模块210,用于读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据,以复数矩阵的格式存储的计算数据包括:至少一组运算复数矩阵,各运算复数矩阵中包括乘数复数矩阵和被乘数复数矩阵,乘数复数矩阵和被乘数复数矩阵为可相乘矩阵;
确定模块220,用于确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据;
点乘计算模块230,用于将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果;
累加计算模块240,用于将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果。
可选地,各双点乘计算模块包括:第一点乘子模块和第二点乘子模块;点乘计算模块230,具体用于将各组运算复数矩阵中乘数实部数据、被乘数实部数据以及被乘数虚部数据输入至第一点乘子模块进行运算,得到第一点乘结果;将各组运算复数矩阵中被乘数实部数据、乘数虚部数据以及被乘数虚部数据输入至第二点乘子模块进行运算,得到第二点乘结果。
可选地,各双点乘计算模块还包括:第一选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;点乘计算模块230,具体用于将各组运算复数矩阵中被乘数实部数据以及被乘数虚部数据输入至第一选择子模块,将各组运算复数矩阵中乘数实部数据输入至第一点乘子模块;在第一计算周期中,控制第一选择子模块将被乘数实部数据发送给第一点乘子模块与乘数实部数据进行运算,得到第一计算周期的第一计算结果;在第二计算周期中,控制第一选择子模块将被乘数虚部数据发送给第一点乘子模块与乘数实部数据进行运算,得到第二计算周期的第一计算结果;将第一计算周期的第一计算结果和第二计算周期的第一计算结果作为第一点乘结果。
可选地,各双点乘计算模块还包括:第二选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;点乘计算模块230,具体用于将各组运算复数矩阵中被乘数实部数据以及被乘数虚部数据输入至第二选择子模块,将各组运算复数矩阵中乘数虚部数据输入至第二点乘子模块;在第一计算周期中,控制第二选择子模块将被乘数虚部数据发送给第二点乘子模块与乘数虚部数据进行运算,得到第一计算周期的第二计算结果;在第二计算周期中,控制第二选择子模块将被乘数实部数据发送给第二点乘子模块与乘数虚部数据进行运算,得到第二计算周期的第二计算结果;分别对第一计算周期的第二计算结果和第二计算周期的第二计算结果进行处理,得到第二点乘结果。
可选地,点乘计算模块230,具体用于通过使能信号控制第一计算周期的第二计算结果和第二计算周期的第二计算结果进行取反处理得到第一计算周期取反后的计算结果以及第二计算周期取反后的计算结果;对第一计算周期取反后的计算结果进行加一处理,得到第一计算周期加一后的计算结果;将第一计算周期加一后的计算结果和第二计算周期取反后的计算结果作为第二点乘结果。
可选地,确定模块220,还用于确定计算数据中各个矩阵行列的大小;若存在矩阵行列的大小大于预设矩阵行列大小的目标矩阵,对目标矩阵进行矩阵分割处理,预设矩阵行列大小小于或者等于计算单元可运算矩阵行列大小的上限。
可选地,读取模块210,具体用于对于每组运算复数矩阵,按照如下方式进行存储:通过缓存单元按照行优先存储的方式进行连续存储得到乘数复数矩阵;通过缓存单元按照列优先存储的方式进行连续存储得到被乘数复数矩阵,其中,乘数复数矩阵的列与被乘数复数矩阵的行相等。
本申请实施例提供的复数矩阵运算的硬件加速装置中,可以读取计算数据并通过缓存单元以复数矩阵的格式存储计算数据,从而可以实现数据的一次性读取,避免了多次数据读取的情况,避免了访存带宽和功耗的消耗、降低了访存的复杂性;并且,可以确定各组运算复数矩阵中乘数复数矩阵的乘数实部数据、乘数虚部数据以及被乘数复数矩阵的被乘数实部数据和被乘数虚部数据,将各组运算复数矩阵中的乘数实部数据、乘数虚部数据、被乘数实部数据以及被乘数虚部数据输入至运算复数矩阵对应的双点乘计算模块进行点乘计算,可以更加高效、准确地得到点乘结果,进而将各双点乘计算模块输出的点乘结果输入至累加计算模块进行累加计算得到目标输出结果,采用流水线形式的计算,可以是计算过程中无资源浪费,提高各个计算模块的利用率,降低计算时延,提高硬件整体对复数矩阵运算的性能。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器,或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图15为本申请实施例提供的计算芯片的硬件加速器的又一结构示意图,请参照图15,硬件加速器包括:控制单元110、缓存单元130以及计算单元120,缓存单元130中存储有可在控制单元110上运行的计算机程序,控制单元110执行计算机程序时,通过计算单元120进行计算,实现复数矩阵运算的硬件加速方法的步骤。
本申请实施例的另一方面,还提供一种计算机可读存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现复数矩阵运算的硬件加速方法的步骤。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种复数矩阵运算的硬件加速方法,其特征在于,应用于计算芯片中的硬件加速器,所述硬件加速器包括:控制单元、缓存单元以及计算单元,所述计算单元包括多个双点乘计算模块以及累加计算模块,所述方法包括:
读取计算数据并通过所述缓存单元以复数矩阵的格式存储所述计算数据,以矩阵的格式存储的计算数据包括:至少一组运算复数矩阵,各所述运算复数矩阵中包括乘数复数矩阵和被乘数复数矩阵,所述乘数复数矩阵和所述被乘数复数矩阵为可相乘矩阵;
确定各组运算复数矩阵中所述乘数复数矩阵的元素,以及所述被乘数复数矩阵的元素,每个元素含实部和虚部;
将各组运算复数矩阵中的所述乘数实部数据、所述乘数虚部数据、所述被乘数实部数据以及所述被乘数虚部数据输入至所述运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果;
将各双点乘计算模块输出的所述点乘结果输入至所述累加计算模块进行累加计算得到目标输出结果。
2.如权利要求1所述的复数矩阵运算的硬件加速方法,其特征在于,各所述双点乘计算模块包括:第一点乘子模块和第二点乘子模块;
所述将各组运算复数矩阵中的所述乘数实部数据、所述乘数虚部数据、所述被乘数实部数据以及所述被乘数虚部数据输入至所述运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果,包括:
将各组运算复数矩阵中所述乘数实部数据、所述被乘数实部数据以及所述被乘数虚部数据输入至所述第一点乘子模块进行运算,得到第一点乘结果;
将各组运算复数矩阵中所述被乘数实部数据、所述乘数虚部数据以及所述被乘数虚部数据输入至所述第二点乘子模块进行运算,得到第二点乘结果。
3.如权利要求2所述的复数矩阵运算的硬件加速方法,其特征在于,各所述双点乘计算模块还包括:第一选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;
所述将各组运算复数矩阵中所述乘数实部数据、所述被乘数实部数据以及所述被乘数虚部数据输入至所述第一点乘子模块进行运算,得到第一点乘结果,包括:
将各组运算复数矩阵中所述被乘数实部数据以及所述被乘数虚部数据输入至所述第一选择子模块,将各组运算复数矩阵中所述乘数实部数据输入至所述第一点乘子模块;
在第一计算周期中,控制所述第一选择子模块将所述被乘数实部数据发送给所述第一点乘子模块与所述乘数实部数据进行运算,得到第一计算周期的第一计算结果;
在第二计算周期中,控制所述第一选择子模块将所述被乘数虚部数据发送给所述第一点乘子模块与所述乘数实部数据进行运算,得到第二计算周期的第一计算结果;
将所述第一计算周期的第一计算结果和所述第二计算周期的第一计算结果作为所述第一点乘结果。
4.如权利要求2所述的复数矩阵运算的硬件加速方法,其特征在于,各所述双点乘计算模块还包括:第二选择子模块;在进行点乘计算的过程中,包括两个连续的计算周期;
所述将各组运算复数矩阵中所述被乘数实部数据、所述乘数虚部数据以及所述被乘数虚部数据输入至所述第二点乘子模块进行运算,得到第二点乘结果,包括:
将各组运算复数矩阵中所述被乘数实部数据以及所述被乘数虚部数据输入至所述第二选择子模块,将各组运算复数矩阵中所述乘数虚部数据输入至所述第二点乘子模块;
在第一计算周期中,控制所述第二选择子模块将所述被乘数虚部数据发送给所述第二点乘子模块与所述乘数虚部数据进行运算,得到第一计算周期的第二计算结果;
在第二计算周期中,控制所述第二选择子模块将所述被乘数实部数据发送给所述第二点乘子模块与所述乘数虚部数据进行运算,得到第二计算周期的第二计算结果;
分别对所述第一计算周期的第二计算结果和所述第二计算周期的第二计算结果进行处理,得到所述第二点乘结果。
5.如权利要求4所述的复数矩阵运算的硬件加速方法,其特征在于,所述分别对所述第一计算周期的第二计算结果和所述第二计算周期的第二计算结果进行处理,得到所述第二点乘结果,包括:
通过使能信号控制所述第一计算周期的第二计算结果和所述第二计算周期的第二计算结果进行取反处理得到第一计算周期取反后的计算结果以及第二计算周期取反后的计算结果;
对所述第一计算周期取反后的计算结果进行加一处理,得到第一计算周期加一后的计算结果;
将所述第一计算周期加一后的计算结果和所述第二计算周期取反后的计算结果作为所述第二点乘结果。
6.如权利要求1所述的复数矩阵运算的硬件加速方法,其特征在于,所述读取计算数据并通过所述缓存单元以矩阵的格式存储所述计算数据之前,所述方法还包括:
确定所述计算数据中各个矩阵行列的大小;
若存在矩阵行列的大小大于预设矩阵行列大小的目标矩阵,对所述目标矩阵进行矩阵分割处理,所述预设矩阵行列大小小于或者等于所述计算单元可运算矩阵行列大小的上限。
7.如权利要求1所述的复数矩阵运算的硬件加速方法,其特征在于,所述通过所述缓存单元以矩阵的格式存储所述计算数据,包括:
对于每组运算复数矩阵,按照如下方式进行存储:
通过所述缓存单元按照行优先存储的方式进行连续存储得到所述乘数复数矩阵;
通过所述缓存单元按照列优先存储的方式进行连续存储得到所述被乘数复数矩阵,其中,所述乘数复数矩阵的列与所述被乘数复数矩阵的行相等。
8.一种复数矩阵运算硬件加速装置,其特征在于,应用于计算芯片中的硬件加速器,所述硬件加速器包括:控制单元、缓存单元以及计算单元,所述计算单元包括多个双点乘计算模块以及累加计算模块,所述装置包括:读取模块、确定模块、点乘计算模块以及累加计算模块;
所述读取模块,用于读取计算数据并通过所述缓存单元以复数矩阵的格式存储所述计算数据,以矩阵的格式存储的计算数据包括:至少一组运算复数矩阵,各所述运算复数矩阵中包括乘数复数矩阵和被乘数复数矩阵,所述乘数复数矩阵和所述被乘数复数矩阵为可相乘矩阵;
所述确定模块,用于确定各组运算复数矩阵中所述乘数复数矩阵的乘数实部数据、乘数虚部数据以及所述被乘数复数矩阵的被乘数实部数据和被乘数虚部数据;
所述点乘计算模块,用于将各组运算复数矩阵中的所述乘数实部数据、所述乘数虚部数据、所述被乘数实部数据以及所述被乘数虚部数据输入至所述运算复数矩阵对应的双点乘计算模块进行点乘计算,得到点乘结果;
所述累加计算模块,用于将各双点乘计算模块输出的所述点乘结果输入至所述累加计算模块进行累加计算得到目标输出结果。
9.一种计算芯片,其特征在于,包括:控制单元、缓存单元以及计算单元,所述缓存单元中存储有可在所述控制单元上运行的计算机程序,所述控制单元执行所述计算机程序时,通过所述计算单元进行计算,实现权利要求1至7任一项所述的方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211359341.9A CN115408061B (zh) | 2022-11-02 | 2022-11-02 | 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211359341.9A CN115408061B (zh) | 2022-11-02 | 2022-11-02 | 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115408061A CN115408061A (zh) | 2022-11-29 |
CN115408061B true CN115408061B (zh) | 2023-01-31 |
Family
ID=84169185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211359341.9A Active CN115408061B (zh) | 2022-11-02 | 2022-11-02 | 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115408061B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116881618A (zh) * | 2023-08-25 | 2023-10-13 | 之江实验室 | 通用矩阵乘计算优化方法、装置及处理器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8650240B2 (en) * | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
CN110147347B (zh) * | 2019-03-18 | 2023-01-06 | 腾讯科技(深圳)有限公司 | 用于矩阵处理的芯片、矩阵处理方法、装置及存储介质 |
CN111291320B (zh) * | 2020-01-16 | 2023-12-15 | 西安电子科技大学 | 基于hxdsp芯片的双精度浮点复数矩阵运算优化方法 |
US20210256092A1 (en) * | 2020-02-19 | 2021-08-19 | Nvidia Corporation | Application programming interface to accelerate matrix operations |
CN112748898B (zh) * | 2021-02-14 | 2023-03-14 | 成都启英泰伦科技有限公司 | 一种复数向量运算装置及运算方法 |
-
2022
- 2022-11-02 CN CN202211359341.9A patent/CN115408061B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115408061A (zh) | 2022-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10810484B2 (en) | Hardware accelerator for compressed GRU on FPGA | |
CN107729989B (zh) | 一种用于执行人工神经网络正向运算的装置及方法 | |
CN109240746B (zh) | 一种用于执行矩阵乘运算的装置和方法 | |
CN109543832B (zh) | 一种计算装置及板卡 | |
CN115880132B (zh) | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 | |
CN111915001A (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN115408061B (zh) | 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 | |
KR20210071073A (ko) | 부분 행렬 순서화를 이용하는 행렬 곱셈기 | |
CN109144469A (zh) | 流水线结构神经网络矩阵运算架构及方法 | |
CN113032723B (zh) | 一种矩阵乘法器的实现方法及矩阵乘法器装置 | |
CN108647007B (zh) | 运算系统及芯片 | |
Kawashima et al. | FPGA implementation of hardware-oriented chaotic Boltzmann machines | |
CN107368459B (zh) | 基于任意维数矩阵乘法的可重构计算结构的调度方法 | |
WO2021083101A1 (zh) | 数据处理方法、装置及相关产品 | |
CN116888591A (zh) | 一种矩阵乘法器、矩阵计算方法及相关设备 | |
CN107678781B (zh) | 处理器以及用于在处理器上执行指令的方法 | |
CN109460535B (zh) | 一种基于云的有限域矩阵求逆装置及求逆方法 | |
CN115860080B (zh) | 计算核、加速器、计算方法、装置、设备、介质及系统 | |
CN110232289A (zh) | 椭圆曲线密码的高速倍点运算方法 | |
CN111930674B (zh) | 乘累加运算装置及方法、异构智能处理器及电子设备 | |
CN115310037A (zh) | 矩阵乘法计算单元、加速单元、计算系统和相关方法 | |
CN113591031A (zh) | 低功耗矩阵运算方法及装置 | |
CN111026258B (zh) | 处理器及降低电源纹波的方法 | |
JP2003244190A (ja) | データフロー制御スイッチ用プロセッサ及びデータフロー制御スイッチ | |
CN220773595U (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |