掌桥专利:专业的专利平台
掌桥专利
首页

运算单元和矩阵转置及运算融合执行方法

文献发布时间:2023-06-19 19:28:50


运算单元和矩阵转置及运算融合执行方法

技术领域

本公开涉及芯片领域,更具体而言,涉及一种运算单元和矩阵转置及运算融合执行方法。

背景技术

深度神经网络(Deep Neural Networks,DNN)中,通常涉及矩阵的转置运算,以及转置矩阵与其他矩阵间的乘法等融合运算,例如:在DNN反向传播阶段的激活梯度计算任务中,将节点权重矩阵对应的转置矩阵与其他矩阵进行乘法运算。

目前,在运算单元内部,矩阵转置及运算融合操作的执行过程通常为:先通过CUDACore等通用执行单元从寄存器中获取源矩阵,对该源矩阵执行转置操作,得到转置后矩阵,并将转置后矩阵存储至共享内存,之后,通用执行单元从共享内存将转置后矩阵加载至寄存器;寄存器再将转置后矩阵发送至另一专用于执行矩阵乘法等运算的执行单元,以使专用于执行矩阵乘法等运算的执行单元对转置后矩阵和其他矩阵进行乘法等运算。

在上述方式中,数据加载次数较多,数据转移过程较为复杂,因此矩阵转置及运算融合过程的效率较低。

发明内容

有鉴于此,本公开旨在提升矩阵转置及运算融合过程的效率。

根据本公开的一方面,提供了一种运算单元,包括:调度器、寄存器、转置单元以及执行单元,其中,所述转置单元位于所述寄存器和所述执行单元之间,其中,

所述调度器接收矩阵转置及运算融合指令,所述矩阵转置及运算融合指令包括第一源地址、第一目的地地址、转置操作的标识、第一运算操作的标识;

所述调度器按照所述第一源地址从所述运算单元外部的主存储器加载第一源矩阵到所述寄存器;

所述转置单元从所述寄存器获取所述第一源矩阵,将所述第一源矩阵转置为转置后矩阵;

所述执行单元对所述转置后矩阵执行所述第一运算操作,将运算结果按照所述第一目的地地址存储到所述寄存器;

所述调度器将所述运算结果加载至所述主存储器。

可选地,所述第一源矩阵包括转置前数据部分和转置前索引部分,所述第一源地址包括所述转置前数据部分的源地址和所述转置前索引部分的源地址;

所述调度器按照所述转置前数据部分的源地址从所述主存储器加载所述转置前数据部分到所述寄存器,按照所述转置前索引部分的源地址从所述主存储器加载所述转置前索引部分到所述寄存器;

所述转置单元从所述寄存器获取所述转置前数据部分和所述转置前索引部分,将所述转置前数据部分和所述转置前索引部分转置为转置后数据部分和转置后索引部分;

所述执行单元对所述转置后数据部分和所述转置后索引部分执行所述第一运算操作。

可选地,所述转置单元包括:

数据转置子单元,用于基于所述转置前数据部分和所述转置前索引部分,得到所述转置后数据部分;

索引转置子单元,用于基于所述转置前数据部分和所述转置前索引部分,得到所述转置后索引部分。

可选地,所述矩阵转置及运算融合指令还包括第二源地址;

所述调度器按照所述第二源地址从所述主存储器加载第二源矩阵到所述寄存器;

所述执行单元对所述转置后矩阵和所述第二源矩阵执行所述第一运算操作。

可选地,所述第一源矩阵划分为多个矩阵块,所述多个矩阵块间具有预设的位置关系;

所述调度器逐个从所述运算单元外部的主存储器加载所述多个矩阵块到所述寄存器;

所述转置单元逐个从所述寄存器取出所述多个矩阵块,将各矩阵块转置为转置后矩阵块;

所述执行单元将各转置后矩阵块按照所述预设的位置关系进行合并,并对合并后的转置后矩阵执行所述第一运算操作。

可选地,所述执行单元与所述寄存器连接;

所述调度器还接收矩阵直接运算指令,所述矩阵直接运算指令包括第三源地址、第二目的地地址、第二运算操作的标识;

所述调度器按照所述第三源地址从所述运算单元外部的主存储器加载第三源矩阵到所述寄存器;

所述执行单元从所述寄存器获得所述第三源矩阵,对所述第三源矩阵执行所述第二运算操作,将运算结果按照所述第二目的地地址存储到所述寄存器。

可选地,所述执行单元与所述寄存器、所述转置单元之间的连接关系包括以下之一:

所述执行单元连接到多路复用器,所述多路复用器分别与所述寄存器和所述转置单元连接,所述多路复用器的选通信号决定接通所述寄存器还是接通所述转置单元;

所述执行单元通过第一开关连接到所述寄存器,并通过第二开关连接到所述转置单元,通过所述第一开关和第二开关的开闭决定接通所述寄存器还是接通所述转置单元;

所述执行单元同时与所述寄存器和所述转置单元连接,由所述执行单元的内部逻辑控制采用从所述寄存器接收到的第三源矩阵还是从所述转置单元接收到的转置后矩阵。

根据本公开的第二方面,提供了一种计算装置,包括上述第一方面所述的运算单元。

根据本公开的第三方面,提供了一种片上系统,包括上述第一方面所述的运算单元。

根据本公开的第三方面,提供了一种矩阵转置及运算融合执行方法,用于运算单元,所述运算单元包括调度器、寄存器、转置单元以及执行单元,其中,所述转置单元位于所述寄存器和所述执行单元之间,其中,

通过所述调度器,接收矩阵转置及运算融合指令,所述矩阵转置及运算融合指令包括第一源地址、第一目的地地址、转置运算的标识、第一运算操作的标识;

通过所述调度器,按照所述第一源地址从所述运算单元外部的主存储器加载第一源矩阵到所述寄存器;

通过所述转置单元,从所述寄存器获取所述第一源矩阵,将所述第一源矩阵转置为转置后矩阵;

通过所述执行单元,对所述转置后矩阵执行所述第一运算操作,以将运算结果按照所述第一目的地地址存储到所述寄存器;

通过所述调度器,将所述运算结果加载至所述主存储器。

可选地,所述第一源矩阵包括转置前数据部分和转置前索引部分,所述第一源地址包括所述转置前数据部分的源地址和所述转置前索引部分的源地址;

所述按照所述第一源地址从所述运算单元外部的主存储器加载第一源矩阵到所述寄存器,包括:按照所述转置前数据部分的源地址从所述主存储器加载所述转置前数据部分到所述寄存器,按照所述转置前索引部分的源地址从所述主存储器加载所述转置前索引部分到所述寄存器;

所述从所述寄存器获取所述第一源矩阵,将所述第一源矩阵转置为转置后矩阵,包括:从所述寄存器获取所述转置前数据部分和所述转置前索引部分,将所述转置前数据部分和所述转置前索引部分转置为转置后数据部分和转置后索引部分;

所述对所述转置后矩阵执行所述运算操作,包括:对所述转置后数据部分和所述转置后索引部分执行所述第一运算操作。

可选地,所述将所述转置前数据部分和所述转置前索引部分转置为转置后数据部分和转置后索引部分,包括:

基于所述转置前数据部分和所述转置前索引部分,得到所述转置后数据部分;

基于所述转置前数据部分和所述转置前索引部分,得到所述转置后索引部分。

可选地,所述矩阵转置及运算融合指令还包括第二源地址;所述方法还包括:

通过所述调度器,按照所述第二源地址从所述主存储器加载第二源矩阵到所述寄存器;

所述对所述转置后矩阵执行所述运算操作,包括:

对所述转置后矩阵和所述第二源矩阵执行所述第一运算操作。

可选地,所述第一源矩阵划分为多个矩阵块,所述多个矩阵块间具有预设的位置关系;

所述按照所述第一源地址从所述运算单元外部的主存储器加载第一源矩阵到所述寄存器,包括:

按照所述第一源地址,逐个从运算单元外部的主存储器加载所述多个矩阵块到所述寄存器;

所述从所述寄存器获取所述第一源矩阵,将所述第一源矩阵转置为转置后矩阵,包括:

逐个从所述寄存器取出所述多个矩阵块,将各矩阵块转置为转置后矩阵块;

所述对所述转置后矩阵执行所述第一运算操作,包括:

将各转置后矩阵块按照所述预设的位置关系进行合并,并对合并后的转置后矩阵执行所述第一运算操作。

可选地,所述执行单元与所述寄存器连接;所述方法还包括:

通过所述调度器,接收矩阵直接运算指令,所述矩阵直接运算指令包括第三源地址、第二目的地地址、第二运算操作的标识;

通过所述调度器,按照所述第三源地址从所述运算单元外部的主存储器加载第三源矩阵到所述寄存器;

通过所述执行单元,从所述寄存器获得所述第三源矩阵,对所述第三源矩阵执行所述第二运算操作,以将运算结果按照所述第二目的地地址存储到所述寄存器。

本公开实施例提供的运算单元中,通过位于寄存器和执行单元之间的转置单元,将寄存器存储的第一源矩阵转置为转置后矩阵,之后,由执行单元对转置后矩阵执行后续的运算操作,以将运算结果存储至寄存器中的目的地地址,再转至主存储器中。与现有的运算单元相比,本公开实施例提供的运算单元在执行矩阵转置及后续运算操作的过程中,数据加载次数较少,数据转移过程较为简单,因此,提升了矩阵转置及后续运算融合过程的效率。

附图说明

通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:

图1为本公开一个实施例的运算单元的结构示意图;

图2为本公开一个实施例的转置单元的结构示意图;

图3为对第一源矩阵进行矩阵块划分的示意图;

图4为本公开另一个实施例的运算单元的结构示意图;

图5为本公开又一个实施例的运算单元的结构示意图;

图6为本公开又一个实施例的运算单元的结构示意图;

图7为本公开一个实施例的矩阵转置及运算融合执行方法的流程示意图。

具体实施方式

以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。

本公开总体概述

运算单元是指可以用于执行运算任务并输出运算结构的单元,例如:GPU中包含的各运算核,上述运算核可用于执行DNN中的乘法、加法等一系列运算。

DNN中通常会涉及矩阵的转置及其他运算的融合操作,具体地,如在反向传播阶段的激活梯度计算任务中,需要对节点的权重矩阵进行转置操作,并将得到的转置后矩阵与其他矩阵进行乘法等运算。

现有的用于执行矩阵转置及运算融合操作的运算单元,其内部通常设置有两种不同的执行单元:通用的可用于执行各种不同运算的通用执行单元,和专用于执行矩阵乘法等运算的专用执行单元。上述现有运算单元实现矩阵转置及运算融合操作的步骤通常是:先通过通用执行单元从内部寄存器中获取源矩阵,对该源矩阵执行转置操作,得到转置后矩阵,并将转置后矩阵存储至共享内存,之后,通用执行单元从共享内存将转置后矩阵加载至内部寄存器。内部寄存器再将转置后矩阵发送至专用执行单元,以使专用执行单元对转置后矩阵和其他矩阵进行乘法等运算,得到最终的运算结果。通过现有的运算单元执行矩阵转置及运算融合操作,数据加载的次数较多,且数据转移过程较为复杂,因此,操作过程的效率较低。

而本公开实施例的运算单元中,在寄存器和执行后续运算的执行单元之间,设置了用于对源矩阵进行转置操作的转置单元,这样,转置单元得到转置后矩阵之后,可以直接将转置后矩阵发送至执行单元,再由执行单元对转置后矩阵执行后续的运算操作,得到最终的运算结果。本公开实施例中,数据加载次数较少,数据转移过程较为简单,因此,可以有效提升矩阵转置及后续运算融合过程的效率。

本公开实施例的详细实现过程

参见图1,图1为本公开一个实施例的运算单元的结构示意图。其中,运算单元100包括:调度器110、寄存器120、转置单元130以及执行单元140,其中,转置单元130位于寄存器120和执行单元140之间。

具体地,如上所述,运算单元100是指可用于执行运算任务并输出运算结构的单元,例如GPU中包含的各运算核,上述运算核可用于执行DNN中的乘法、加法等一系列运算。调度器110是指用于进行运算指令调度和控制的单元,调度器110可以将接收到的各种运算指令高效地分配至运算单元中的各单元,使得各单元执行相应的操作。寄存器120为运算单元100内部的用于存储数据(操作数)的单元。

矩阵转置及运算融合指令为用于将运算单元100外部的主存储器200第一源地址处的第一源矩阵转置,并对转置后矩阵执行第一运算操作得到运算结果,将运算结果存储至寄存器120的第一目的地地址中以便返回至主存储器200的指令。

在本公开一个实施例中,调度器110接收矩阵转置及运算融合指令,矩阵转置及运算融合指令包括第一源地址、第一目的地地址、转置操作的标识、第一运算操作的标识。调度器110按照第一源地址从运算单元100外部的主存储器200加载第一源矩阵到寄存器120。转置单元130从寄存器120获取第一源矩阵,将第一源矩阵转置为转置后矩阵。执行单元140对转置后矩阵执行第一运算操作,将运算结果按照第一目的地地址存储到寄存器120,调度器110将运算结果加载至主存储器200。

上述矩阵转置及运算融合指令中至少可以包括:第一源地址、第一目的地地址、转置操作的标识以及第一运算操作的标识。进一步地,上述矩阵转置及运算融合指令中也可以包括:第一源地址中存储的第一源矩阵的类型,如:稀疏矩阵,或者,稠密矩阵、第一源矩阵的尺寸等等。本公开实施例中,对于矩阵转置及运算融合指令的具体格式不做限定,示例性地,矩阵转置及运算融合指令的格式可以为:“HMMA.SP.TRANS.16.32.Rd.Ra”,其中,“Ra”表示第一源地址;“Rd”表示目的地地址;“16.32”表示第一源地址中存储的第一源矩阵的尺寸为16×32;“TRANS”为转置操作的标识;“SP”表示第一源矩阵的类型为稀疏矩阵;“HMMA”为矩阵乘法运算(第一运算操作)的标识。

上述矩阵转置及运算融合指令中,第一源地址可以表示运算单元100外部的主存储器200中的第一源矩阵的地址,其中,第一源矩阵为转置单元130所针对的待进行转置操作的矩阵。第一目的地地址可以表示在运算单元100的寄存器120中要存储的运算结果的存储地址;第一运算操作可以为针对转置后矩阵进行的运算操作,在本公开中,对于第一运算操作的具体类型不做限定,例如可以为转置后矩阵与其他矩阵进行矩阵的乘法运算,也可以对上述转置后矩阵与其他矩阵进行矩阵的加法运算,还可以先将上述转置后矩阵与某个矩阵(例如矩阵A)进行矩阵的乘法运算,得到乘法运算结果,再将上述乘法运算结果与另一个矩阵(例如矩阵B)进行矩阵的加法运算,等等。

本公开实施例的运算单元100,通过位于寄存器120和执行单元140之间的转置单元130,将寄存器120存储的第一源矩阵转置为转置后矩阵,之后,由执行单元140对转置后矩阵执行后续的运算操作,以将运算结果存储至寄存器120中的目的地地址,再转至主存储器200中。与现有的运算单元相比,本公开实施例提供的运算单元100在执行矩阵转置及后续运算操作的过程中,数据加载次数较少,数据转移过程较为简单,因此,提升了矩阵转置及后续运算融合过程的效率。

可选地,在其中一些实施例中,第一源矩阵包括转置前数据部分和转置前索引部分,第一源地址包括转置前数据部分的源地址和转置前索引部分的源地址。调度器110按照转置前数据部分的源地址从主存储器200加载转置前数据部分到寄存器120,按照转置前索引部分的源地址从主存储器200加载转置前索引部分到寄存器120。转置单元130从寄存器120获取转置前数据部分和转置前索引部分,将转置前数据部分和转置前索引部分转置为转置后数据部分和转置后索引部分。执行单元140对转置后数据部分和转置后索引部分执行第一运算操作。

具体地,矩阵按照其包括的0元素与非0元素的比例的不同,可分为稀疏矩阵和稠密矩阵,其中,稀疏矩阵是指在矩阵中数值为0的元素数目远远多于非0元素的数目的矩阵。针对稀疏矩阵,为便于存储,可以将其分为数据部分和索引部分,存储时分别存储,其中,数据部分即为矩阵中的元素部分,索引部分则为用于指示各元素在整个矩阵中的位置信息的部分。对应地,在后续矩阵加载以及转置过程中,也可以对数据部分和索引部分分别进行,以提高矩阵加载和转置的速度。

因此,本公开实施例中,若第一源矩阵为稀疏矩阵,则可以将第一源矩阵分为转置前数据部分和转置前索引部分,存储时也分别存储。对应地,后续调度器110的加载过程也是分为两个子过程:加载转置前数据部分到寄存器,以及,加载转置前索引部分到寄存器120。转置单元130的转置过程包括:分别将转置前数据部分和转置前索引部分转置为转置后数据部分和转置后索引部分。借此,本公开实施例可以有效提高矩阵加载和转置的速度,进一步提高矩阵转置及运算融合过程的整体效率。

如上所述,由于矩阵的转置过程可以分为得到转置后数据部分的子过程,以及得到转置后索引部分的子过程,因此,对应地,转置单元130也可以包括:用于得到转置后数据部分的数据转置子单元1301,以及,用于得到转置后索引部分的索引转置子单元1302。

进一步地,参见图2,图2为本公开一个实施例的转置单元的结构示意图,转置单元130包括:数据转置子单元1301,用于基于转置前数据部分和转置前索引部分,得到转置后数据部分;以及索引转置子单元1302,用于基于转置前数据部分和转置前索引部分,得到转置后索引部分。

具体地,例如可以结合数据部分和索引部分,先将以数据部分和索引部分存储的第一源矩阵还原为常规形式的矩阵,然后,针对还原后矩阵,沿对角线将对称分布的各元素进行交换,得到交换后矩阵。之后,再由数据转置子单元1301,基于交换后矩阵得到转置后数据部分,由索引转置子单元1302基于交换后矩阵得到转置后索引部分。

在一些情况下,待与转置后矩阵执行第一运算操作的矩阵可能为第一源矩阵或者转置后矩阵本身,此时,则无需从主存储器200中加载其他的源矩阵。但是通常情况下,待与转置后矩阵执行第一运算操作的矩阵并不是第一源矩阵或者转置后矩阵本身,而是另一个矩阵例如第二源矩阵。此种情况下,在执行单元140执行第一运算操作之前,需要先获取上述第二源矩阵。

可选地,在其中一些实施例中,矩阵转置及运算融合指令还包括第二源地址;调度器110按照第二源地址从主存储器200加载第二源矩阵到寄存器120;执行单元140对转置后矩阵和第二源矩阵执行第一运算操作。

具体地,上述第二源地址可以表示运算单元100外部的主存储器200中的第二源矩阵的地址,其中,第二源矩阵可以表示待与转置后矩阵进行上述第一运算操作的矩阵,例如:假设转置后矩阵为AT,第一运算操作为矩阵乘法操作,则第二源矩阵为待与AT相乘的矩阵。

可选地,在其中一些实施例中,第一源矩阵划分为多个矩阵块,多个矩阵块间具有预设的位置关系。调度器110逐个从运算单元外部的主存储器200加载多个矩阵块到寄存器120;转置单元130逐个从寄存器120取出多个矩阵块,将各矩阵块转置为转置后矩阵块;执行单元140将各转置后矩阵块按照预设的位置关系进行合并,并对合并后的转置后矩阵执行第一运算操作。

具体地,当第一源矩阵的尺寸较大时,若直接对整个矩阵进行加载和转置操作,即先将第一源矩阵作为一个整体加载至转置单元130,待加载完毕后,再由转置单元130对整个第一源矩阵进行转置操作,得到转置后矩阵,则加载操作及转置操作的效率较低。

为提升加载操作以及转置操作的效率,使得加载操作与转置操作可以并行开展,本公开实施例中,将第一源矩阵划分为多个具有预设的位置关系的矩阵块,然后以单个矩阵块为单位,先对矩阵块进行加载操作,再执行转置操作,得到各转置后矩阵块。再按照上述预设关系,对各转置后矩阵块进行合并,即可得到转置后矩阵。这样在调度器110进行矩阵块加载的同时,转置单元130即可执行转置操作,提升了加载以及转置过程的整体效率,进而提升了整个矩阵转置及运算融合过程的效率。

在进行第一源矩阵划分时,位置关系可以根据实际情况设定,本公开中对于划分得到的各矩阵块间的位置关系不做限定。例如,可以将第一源矩阵划按列进行划分,也可以将第一源矩阵划按列进行划分,等等。

在一个实施例中,参见图3,图3为第一源矩阵进行矩阵块划分的示意图。图3右侧的矩阵为第一源矩阵C,其中包含8列,可以将C的前4列划分为第一矩阵块C1,C的后4列划分为第二矩阵块C2。第一矩阵块C1和第二矩阵块C2的位置关系为,第一矩阵块C1位于第二矩阵块C2的左侧,也即第二矩阵块C2位于第一矩阵块C1的右侧。之后以单个矩阵块为单位,分别进行加载及转置操作,进而得到第一矩阵块C1对应的第一转置后矩阵块C1T,以及第二矩阵块C2对应的第二转置后矩阵块C2T。然后,由于第一矩阵块C1位于第二矩阵块C2的左侧,对应地,第一转置后矩阵块C1T则应该位于第二转置后矩阵块C2T的上方,此时可以按照第一转置后矩阵块C1T位于第二转置后矩阵块C2T的上方的方式,将第一转置后矩阵块C1T和第二转置后矩阵块C2T合并,即可得到与完整的第一源矩阵对应的转置后矩阵CT。

运算单元100所执行的运算中,在一些需求下,是以某个源矩阵对应的转置矩阵作为运算的输入条件的,但是在另一些需求中,可能需要直接对存储于主存储器200中的源矩阵执行某种运算。例如,直接对源矩阵与其他矩阵进行矩阵的乘法运算,或者直接对源矩阵与其他矩阵进行矩阵的加法运算,又或者,先将上述源矩阵与某个矩阵(例如矩阵A)进行矩阵的乘法运算,得到乘法运算结果,再将上述乘法运算结果与另一个矩阵(例如矩阵B)进行矩阵的加法运算,等等。

为满足上述第二种需求,可选地,在其中一些实施例中,执行单元也140可以与寄存器120连接,对应地,调度器110还接收矩阵直接运算指令,矩阵直接运算指令包括第三源地址、第二目的地地址、第二运算操作的标识。调度器110按照第三源地址从运算单元100外部的主存储器200加载第三源矩阵到寄存器120;执行单元140从寄存器120获得第三源矩阵,对第三源矩阵执行第二运算操作,将运算结果按照第二目的地地址存储到寄存器120。具体的,执行单元140接收矩阵直接运算指令用于对主存储器200第三源地址处的第三源矩阵执行第二运算操作,将运算结果存储至寄存器120的第二目的地地址中以便返回至主存储器200的指令。第三源地址可以表示运算单元100外部的主存储器200中的第三源矩阵的地址,第三源矩阵为待直接进行第二运算操作的矩阵。第二目的地地址可以表示在运算单元100的寄存器120中要存储的运算结果的存储地址;第二运算操作可以为针对上述第三源矩阵进行的运算操作。在本公开中,对于第三运算操作的具体类型也不做限定,例如可以为第三源矩阵与其他矩阵进行矩阵的乘法运算,也可以对上述第三源矩阵与其他矩阵进行矩阵的加法运算,还可以先将上述第三源矩阵与某个矩阵(例如矩阵A)进行矩阵的乘法运算,得到乘法运算结果,再将上述乘法运算结果与另一个矩阵(例如矩阵B)进行矩阵的加法运算,等等。

本公开中,运算单元不仅可以基于矩阵转置及运算融合指令实现矩阵转置,以及转置后矩阵与其他矩阵的再次运算任务,而且还可以基于矩阵直接运算指令,实现源矩阵直接与其他矩阵之间的运算任务,也就是说,本公开实施例中的运算单元至少能够执行如上所述的两种不同的运算任务,适用场景更为广泛,并且运算更加高效。

为了使得运算单元100可根据调度器110接收到的指令的不同,从上述两种运算任务中确定与具体指令对应的运算任务,本公开实施例中,执行单元与寄存器120、转置单元130之间的连接关系可以为如下关系中的一种:

第一种连接关系:执行单元140连接到多路复用器150,多路复用器150分别与寄存器120和转置单元130连接,多路复用器150的选通信号决定接通寄存器120还是接通转置单元130。

第二种连接关系:执行单元140通过第一开关160连接到寄存器120,并通过第二开关170连接到转置单元130,通过第一开关160和第二开关170的开闭决定接通寄存器120还是接通转置单元130。

第三种连接关系:执行单元140同时与寄存器120和转置单元130连接,由执行单元100的内部逻辑控制采用从寄存器120接收到的第三源矩阵还是从转置单元130接收到的转置后矩阵。

具体地,针对第一种连接关系,可参见图4,在转置单元130与执行单元140之间,增加一多路复用器150,并且该多路复用器150的一端同时与转置单元130以及寄存器120连接。另一端则连接于执行单元140。多路复用器150的选通信号决定接通寄存器120还是接通转置单元130,本公开中,对于选通信号的具体设置方式及如何根据选通信号的值确定接通寄存器120还是转置单元130,不做限定。例如,可以设置采用变量if_trans来表示选通信号,并且当if_trans=1时,执行单元140接通转置单元130;反之,当if_trans=0时,执行单元140接通寄存器120,等等。

针对第二种连接关系,可参见图5,在执行单元140和寄存器120之间,设置第一开关160,在执行单元140和转置单元130之间,设置第二开关170。通过第一开关160和第二开关170的开闭决定接通寄存器120还是接通转置单元130。具体地,若第一开关160开启,第二开关170关闭,则执行单元140接通转置单元130;反之,若第一开关160关闭,第二开关170开启,则执行单元140接通寄存器120。

针对第三种连接关系,可参见图6,执行单元140与寄存器120连接,同时,执行单元140也和转置单元130连接。执行单元140根据自身内部的逻辑控制,确定从寄存器120获取第三源矩阵,或者,从转置单元130获取转置后矩阵。

如图7所示,本公开的一个实施例还提供了一种矩阵转置及运算融合执行方法,用于图1所示的运算单元100,运算单元100包括调度器110、寄存器120、转置单元130以及执行单元140,其中,转置单元130位于寄存器120和执行单元140之间,所示方法包括:

步骤701,通过调度器,接收矩阵转置及运算融合指令,矩阵转置及运算融合指令包括第一源地址、第一目的地地址、转置运算的标识、第一运算操作的标识。

步骤702,通过调度器,按照第一源地址从运算单元外部的主存储器加载第一源矩阵到寄存器。

步骤703,通过转置单元,从寄存器获取第一源矩阵,将第一源矩阵转置为转置后矩阵。

步骤704,通过执行单元,对转置后矩阵执行第一运算操作,以将运算结果按照第一目的地地址存储到寄存器。

步骤705,通过调度器,将运算结果加载至主存储器。

可选地,第一源矩阵包括转置前数据部分和转置前索引部分,第一源地址包括转置前数据部分的源地址和转置前索引部分的源地址。按照第一源地址从运算单元外部的主存储器加载第一源矩阵到寄存器,包括:按照转置前数据部分的源地址从主存储器加载转置前数据部分到寄存器,按照转置前索引部分的源地址从主存储器加载转置前索引部分到寄存器;

从寄存器获取第一源矩阵,将第一源矩阵转置为转置后矩阵,包括:从寄存器获取转置前数据部分和转置前索引部分,将转置前数据部分和转置前索引部分转置为转置后数据部分和转置后索引部分。

对转置后矩阵执行运算操作,包括:对转置后数据部分和转置后索引部分执行第一运算操作。

可选地,将转置前数据部分和转置前索引部分转置为转置后数据部分和转置后索引部分,包括:基于转置前数据部分和转置前索引部分,得到转置后数据部分;基于转置前数据部分和转置前索引部分,得到转置后索引部分。

可选地,第一源矩阵为稀疏矩阵。

可选地,矩阵转置及运算融合指令还包括第二源地址;所述方法还包括:通过所述调度器,按照第二源地址从主存储器加载第二源矩阵到寄存器。

对转置后矩阵执行运算操作,包括:对转置后矩阵和第二源矩阵执行第一运算操作。

可选地,第一源矩阵划分为多个矩阵块,多个矩阵块间具有预设的位置关系;按照第一源地址从运算单元外部的主存储器加载第一源矩阵到寄存器,包括:按照第一源地址,逐个从运算单元外部的主存储器加载多个矩阵块到寄存器。

从寄存器获取第一源矩阵,将第一源矩阵转置为转置后矩阵,包括:逐个从寄存器取出多个矩阵块,将各矩阵块转置为转置后矩阵块。

对转置后矩阵执行第一运算操作,包括:将各转置后矩阵块按照预设的位置关系进行合并,并对合并后的转置后矩阵执行第一运算操作。

可选地,执行单元与寄存器连接;所述方法还包括:通过调度器,接收矩阵直接运算指令,矩阵直接运算指令包括第三源地址、第二目的地地址、第二运算操作的标识;通过调度器,按照第三源地址从运算单元外部的主存储器加载第三源矩阵到寄存器;通过执行单元,从寄存器获得第三源矩阵,对第三源矩阵执行第二运算操作,以将运算结果按照第二目的地地址存储到寄存器。

由于上述过程的实现细节已在前述装置实施例的描述中详细介绍,故不赘述。

应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。

应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。

还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。

相关技术
  • 一种用于执行全连接层神经网络正向运算的装置和方法
  • 用于执行LSTM运算的装置和方法
  • 运算装置、运算执行设备及运算执行方法
  • 运算装置、运算执行设备及运算执行方法
技术分类

06120115922052