运算装置及方法与流程

文档序号:17221354发布日期:2019-03-27 11:59阅读:181来源:国知局
运算装置及方法与流程

本发明涉及计算机科学技术领域,尤其涉及一种运算装置及方法。



背景技术:

直接内存访问(directmemoryaccess,dma)是计算机科学中的一种内存访问技术。它允许某些硬件子系统(外存储器)独立地直接读写系统内存,而不需cpu介入处理。在同等程度的处理器负担下,dma是一种快速的数据传送方式。有时,数据除了往来处理器和外存储器之间之外,还需要在多个存储空间之间转移。我们并不希望让处理器在这种情况下也忙于数据拷贝,而dma就可以负担起此类工作,减少了系统资源的占用。此外,dma的传送能力并不总是用来移动数据,也可以用于将存储在外存储器中的将要运行的代码提前送入内存,加快执行效率。

dma控制器需要指令支持,才能正确执行处理器布置的多种任务。对于任何类型的dma传输,都需要规定源端地址、目标端地址和待传送数据的大小。这种类型的事务代表了简单的一维(“1d”)统一“跨度”(unitystride)的传输。不过,虽然1ddma得到了广泛的应用,但用处更大的则是二维(2d)dma,特别是在图像、视频等应用中。2ddma可以简单地理解为一个嵌套的循环,亦即对一个矩阵的行和列分别操作,最终完成遍历,每一层循环都相当于一个1ddma。

而更复杂的dma装置往往会同时与多个外存储器相连,一段时间内cpu需要交替从这些外存储器中获取多组数据,这些数据是根据任务所需不时切换的,但在同组内又是连续的。这时dma装置需要正确识别相关指令,确保同组数据的缓存尽可能命中,不受其他组的数据传送的影响。



技术实现要素:

本发明实施例提供的一种运算装置及方法,在图像、视频处理的应用场景下极大地提升了数据传送的效率和规范程度,弥补了数据密集型计算任务的i/o短板。

第一方面,本申请实施例提供了一种运算装置,所述运算装置包括存储器、标量数据存储单元、运算单元、控制单元和传输单元,其中,

所述存储器,用于存储矩阵;

所述标量数据存储单元,用于存储标量数据,所述标量数据至少包括:所述矩阵在所述存储器内的存储地址;

所述控制单元,用于控制所述运算单元获取第一运算指令,所述第一运算指令包括执行所述第一运算指令所需的矩阵读取指示;

所述运算单元,用于依据所述矩阵读取指示向所述存储器发送读取命令;采用批量读取方式读取所述矩阵读取指示对应的矩阵,对该矩阵执行所述第一运算指令;

所述传输单元,用于对目标数据进行传输,所述目标数据包括所述运算装置中的任一待传输的数据;

所述传输单元包括寄存器模块和直接内存访问dma控制模块,其中,

所述寄存器模块,用于存储目标数据在源存储器中存储的源地址、所述目标数据在目的存储器中存储的目的地址和每次传输目标数据的数据量;

所述dma控制模块,用于接收dma指令,并根据所述dma指令从所述寄存器模块或所述dma指令获取目标数据的源地址和目的地址;

所述dma控制模块,还用于根据所述目标数据的源地址从所述源存储器中获取所述目标数据,并将所述目标数据传输至所述目的存储器中所述目标数据的目的地址对应的存储空间;

其中,所述源存储器为所述目标数据的存储空间,所述目的存储器用于存储传输后的目标数据。

可选的,所述运算单元包括至少一个运算器,所述运算器包括:矩阵加法运算器、矩阵乘法运算器、大小比较运算器、非线性运算器和/或矩阵标量乘法运算器。

可选的,所述运算单元还用于对矩阵执行n级流水级运算,对所述矩阵执行n级流水级运算包括:

对所述矩阵执行第一流水级的计算,得到第一结果;

将所述第一结果输入到第二流水级,所述第二流水级对所述第一结果执行第二流水级的计算,得到第二结果;

重复上述步骤,直至执行完第n-1流水级的计算,得到第n-1计算结果,其中,n为大于1的正整数;

将所述第n-1计算结果输入到第n流水级,所述第n流水级对所述第n-1结果执行第n流水级的计算,得到第n结果,以及将所述第n结果输入到所述存储器。

可选的,若所述n=3,则所述第一流水级至少包括:矩阵加法计算器、矩阵乘法计算器;

所述第二流水级至少包括:大小比较计算器;

所述第三流水级至少包括:非线性运算器、矩阵标量乘法器。

可选的,所述控制单元还用于:

所述矩阵乘向量指令与矩阵乘向量指令之前的运算指令是否存在关联关系,若存在关联关系,将矩阵乘向量指令存储到缓存单元,若不存在关联关系,则通过传输单元将所述矩阵乘向量指令传输至运算单元。

可选的,所述控制单元包括:取指模块、译码模块和指令队列模块,其中,

所述取指模,用于从指令缓存单元中获取运算指令;

所述译码模块,用于对获取的运算指令进行译码;

所述指令队列,用于对译码后的运算指令进行顺序存储。

可选的,所述dma控制模块具体用于:

根据所述dma指令从所述寄存器模块中或者从所述dma指令中获取所述每次传输目标数据的数据量;

根据所述每次传输目标数据的数据量将所述目标数据传输至所述目的存储器中所述目标数据的目的地址对应的存储空间。

可选的,所述寄存器模块包括:

标量寄存器堆,用于存储数据规模、目标数据的源地址和目标数据的目的地址,目标数据在所述源地址的摆放间隔大小、目标数据在所述目的地址的摆放间隔大小、访问次数和数据变换规模;

其中所述数据规模为所述目标数据的每次传输的数据量、所述数据变换规模为所述目标数据进行数据变换的数据量。

可选的,所述目标数据的源地址和目的地址还标记所属的存储空间的类型,若所述存储空间是外存储器,则所述目标数据的源地址和目的地址还标记所属的流;若所述存储空间为内存储器,则所述目标数据的源地址和目的地址还标记所属内存储器的子模块;

其中,所述流为多组数据交替传送时的分组。

可选的,所述dma指令为定长指令,所述dma指令包括操作码和操作域,操作码用于指示该指令的功能,操作域用于指示该指令的数据地址;所述dma指令包括数据传送指令和地址跳转指令;

所述数据传送指令第一操作域、第二操作域、第三操作域和第四操作域,和第五操作域,所述第一操作域用于指示目标数据的源地址所属的存储空间,所述第二操作域用于指示目标数据的源地址,所述第三操作域用于指示目标数据的目的地址所属的存储空间,所述第四操作域用于指示目标数据的目的地址;

所述地址跳转指令包括第五操作域和第六操作域,所述第五操作域用于指示地址寄存器的编号,所述第六操作域用于指示跳转值寄存器的编号;

其中,所述地址寄存器用于所述源地址,所述跳转值寄存器用于存储源地址的跳转值;

所述dma指令还包括用于指示对目标数据进行数据转换的方式的操作域。

可选的,所述数据传输指令还包括第七操作域,所述第七操作域用于指示目标数据的每次传输的数据量。

可选的,所述运算装置还包括:

数据缓存单元,用于临时存储根据所述源地址从源存储器中读取的目标数据;

其中,所述数据缓存单元包括:

高速暂存存储器,用于支持不同大小的目标数据的传输,并写入所述目标存储器中所述目的地址对应的存储空间;

数据转换单元,用于对从源存储器中读取的目标数据作数据转换;

其中,所述数据转换包括但不限于数据精度转化、定浮点相互转换、数据排列方式转换、数据量大小转换;

地址映射单元,用于对源地址或是目的地址作地址的映射,用映射后的地址到对应的存储空间中取数据。

可选的,所述dma控制模块包括指令单元、加法单元和读写单元,其中,

所述指令单元,用于处理所述原始直接内存访问指令,以得到处理后的dma指令,其中,所述指令单元包括:

指令展开单元,用于将所述dma指令展开为系统dma指令;

指令缓存单元,用于存储所述系统dma指令,所述指令缓存单元包括重排序缓存,所述重排序缓存用于存储所述系统dma指令;

指令处理单元,用于处理所述指令缓存单元中的系统dma指令;

所述加法单元,用于根据所述处理后的dma指令,计算得到所述目标数据的源地址和所述目标数据的目的地址;

所述读写单元,用于根据所述目标数据的源地址从所述源存储器中读取所述目标数据,并将所述目标数据送至所述目的存储器中所述目标数据的目的地址对应的存储空间。

可选的,所述加法单元和读写单元为多流水级结构,所述加法单元处于第一流水级,所述读写单元在第二流水级。

可选的,当所述系统dma指令执行完之后,如果该系统dma指令同时也是所述指令缓存单元中未被提交指令中最早的一条系统dma指令,则该系统dma指令将被提交,一旦提交,该系统dma指令进行的操作对所述运算装置状态的改变将无法撤销。

第二方面,本申请实施例还提供了一种运算方法,包括:

存储器存储矩阵;

标量数据存储单元存储标量数据,所述标量数据至少包括:所述矩阵在所述存储器内的存储地址;

控制单元控制所述运算单元获取第一运算指令,所述第一运算指令包括执行所述第一运算指令所需的矩阵读取指示;

运算单元依据所述矩阵读取指示向所述存储器发送读取命令,以及采用批量读取方式读取所述矩阵读取指示对应的矩阵;

所述运算单元对所述矩阵执行所述第一运算指令中的运算方法,得到执行结果,以及将所述执行结果写入所述存储器的指定地址;

传输单元对目标数据进行传输,所述目标数据包括第一运算指令和矩阵;

所述传输单元包括寄存器模块和直接内存访问dma控制模块,其中,

所述寄存器模块存储目标数据在源存储器中存储的源地址、所述目标数据在目的存储器中存储的目的地址和每次传输目标数据的数据量;

所述dma控制模块接收dma指令,并根据所述dma指令从所述寄存器模块或所述dma指令获取目标数据的源地址和目的地址;

所述dma控制模块根据所述目标数据的源地址从所述源存储器中获取所述目标数据,并将所述目标数据传输至所述目的存储器中所述目标数据的目的地址对应的存储空间,其中,所述源存储器为所述目标数据的存储空间,所述目的存储器用于存储传输后的目标数据。

可选的,矩阵执行所述第一运算指令中的运算方法,得到执行结果,包括:

对所述矩阵执行第一流水级的计算,得到第一结果;

将所述第一结果输入到第二流水级,所述第二流水级对所述第一结果执行第二流水级的计算,得到第二结果;

重复上述步骤,直至执行完第n-1流水级的计算,得到第n-1计算结果,其中,n为大于1的正整数;

将所述第n-1计算结果输入到第n流水级,所述第n流水级对所述第n-1结果执行第n流水级的计算,得到第执行结果。

可选的,所述方法还包括:

所述控制单元确定所述矩阵乘向量指令与矩阵乘向量指令之前的运算指令是否存在关联关系,若存在关联关系,将矩阵乘向量指令存储到缓存单元,若不存在关联关系,则通过传输单元将所述矩阵乘向量指令传输至运算单元。

可选的,所述方法还包括:

dma控制模块根据所述dma指令从所述寄存器模块中获取每次传输目标数据的数据量,并根据每次传输目标数据的数据量将所述待传输的目标数据传输至所述目的地址对应的空间。

可选的,所述dma指令包括数据处理指令和地址跳转指令;

所述数据处理指令,用于指示dma控制模块中的读写单元根据源地址从源存储器中读取一定大小的数,写入目的存储器中目的地址对应的存储空间中,数据规模可以从寄存器模块或上述dma指令中获得;

所述地址跳转指令,用于指示dma控制模块中的加法单元将寄存器模块中的任两个寄存器(包括一个地址寄存器和一个跳转值寄存器)中的值相加,然后写回到其中一个上述地址寄存器中,从而完成所述dma指令中的换行操作;

其中,所述地址寄存器用于存储所述源地址,所述跳转值寄存器用于存储源地址的跳转值。

可选的,所述方法还包括:

数据缓存单元临时存储根据所述源地址从源存储器中读取的目标数据;

数据转换单元对从源存储器中读取的目标数据作数据转换;

地址映射单元对源地址或是目的地址作地址的映射,用映射后的地址到对应的存储空间中取数据。

可选的,所述方法还包括:

指令单元处理所述原始直接内存访问指令,以得到处理后的dma指令;

加法单元根据所述处理后的dma指令,计算得到所述目标数据的源地址和所述目标数据的目的地址;

读写单元根据所述目标数据的源地址从所述源存储器中读取所述目标数据,并将所述目标数据送至所述目的存储器中所述目标数据的目的地址对应的存储空间。

可选的,当系统dma指令执行完之后,如果该系统dma指令同时也是dma控制模块中的指令缓存单元中,未被提交指令中最早的一条系统dma指令,则该系统dma指令将被提交,一旦提交,该系统dma指令进行的操作对目标数据传输的状态的改变将无法撤销。

本公开提供的运算装置,可以支持二维dma指令,在图像、视频处理的应用场景下极大地提升了数据传送的效率和规范程度,弥补了数据密集型计算任务的i/o短板。同时,该装置还支持多组数据相互独立地交替传送,提升了并行数据处理任务中的缓存命中率。

本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a为本发明实施例提供了一种计算装置的结构示意图;

图1b为本发明实施例提供了另一种计算装置的结构示意图;

图2为本发明实施例提供了一种矩阵计算装置的流程示意图;

图2a为本发明实施例提供了另一种计算装置的结构示意图;

图2b为本发明实施例提供了一种流水级的操作流程图;

图3为本发明实施例提功能了一种矩阵计算方法的流程示意图;

图4为本申请提供了一种指令集的格式示意图;

图5a为本申请实施例提供了一种运算装置的结构示意图;

图5b为本申请实施例提供了一种运算装置中的控制单元503的结构示意图;

图5c为本申请实施例提供了一种传输单元的结构示意图;

图6为本发明一优选实施例的具体结构示意图;

图7为本申请实施例提供了一种运算方法的流程示意图;

图8为本申请实施例提供了另一种运算方法的流程示意图;

图9为本发明实施例的指令集的格式示意图;

图10为本发明实施例的dma控制模块执行2ddma命令的流水线时空图。

具体实施方式

基于上述技术问题,本申请提供了一种运算装置,解决现有技术中存在的矩阵传送效率低下、多组数据交替传送时缺失过多的问题,从而使得2ddma更广泛、高效地应用在图像、视频等应用中。

为使本申请的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本申请作进一步的详细说明。

需要说明的是,本申请具体实施方式中的矩阵具体可以为m*n矩阵、1*n矩阵或m*1矩阵,其中m、n为大于等于2的整数。当矩阵为1*n矩阵或m*1矩阵时,也可以称为向量,下述矩阵均可以为上述三种类型矩阵中的任意一种,下面不在赘述。在机器学习算法中,以人工神经网络算法为例,多种神经网络算法中都含有大量的矩阵运算。在神经网络中,输出神经元的运算表达式为y=f(wx+b),其中w是第一矩阵,x是第二矩阵、b是第三矩阵,计算输出矩阵y的过程为矩阵w与矩阵x相乘,加上矩阵b。因此,矩阵运算成为目前各种运算装置在设计时需要考虑的问题,现有的矩阵的计算速度慢,无法满足用户对运算装置的要求,效率低。

参阅图1a,图1a为一种计算装置,在如图1a所示的矩阵的计算装置中,其包含多个通用处理器101(cpu),每个cpu均包含自身的内存,其处理的方法可以为,多个cpu并行处理矩阵的计算,此方案虽在在矩阵的计算中采用并行处理的方式,但是其并不能有效的提高效率,因为对于矩阵运算中,第二矩阵运算的结果可能需要使用第一矩阵运算的结果,具体的,第一矩阵运算为f(1)=a+b,第二矩阵运算为:f(2)=f(1)+c,对于第二矩阵运算来说,其需要提取第一矩阵运算的结果f(1)才能够进行实际的矩阵计算处理,此种情况在神经网络计算中尤为突出,由于多个cpu并行处理矩阵运算,那么在矩阵计算的分配时,很有可能cpu1执行第一矩阵运算,cpu2执行第二矩阵运算,那么对于cpu2来说,其需要从cpu1提取第一矩阵运算的结果f(1),所以对于多cpu并行处理矩阵来说,多个cpu之间的通讯成为矩阵运算的瓶颈,影响矩阵计算的速度。

可选的,本申请实施例中计算装置和运算装置可以进行等同,即运算装置可以理解为计算装置,计算装置也可以理解为运算装置。

参阅图1b,图1b为另一种计算装置,在如图1b所示的计算装置中,其包含有图形处理器(gpu)102,通过gpu102来执行矩阵的运算,对于gpu来说,其本身也包含内存1021,gpu102在处理矩阵运算时,gpu102需要从内存1021中提取矩阵运算所需的矩阵,矩阵由于其数据量大,单个矩阵所占用的存储空间比标量要大很多,对于gpu102来说,虽然其运算能够非常强,但是gpu102的内存的容量不够,无法存储大量的矩阵,为了解决这个问题,图1b配置了片外数据库103,gpu102可以从片外数据库103中读取矩阵,具体的读取方式为,gpu102从片外数据库103中提取待计算的矩阵,将该矩阵存储在内存1021中,在执行矩阵运算时,进行矩阵指令的译码处理,然后从内存1021中提取该矩阵进行计算。此技术方案在执行矩阵计算中,gpu102进行矩阵指令的译码会占用gpu很大部分的计算能力,影响矩阵的计算速度,效率低。

本申请中提到的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络前馈运算下层中的神经元即为输入神经元,处于网络前馈运算上层中的神经元即为输出神经元。以卷积神经网络为例,设一个卷积神经网络有l层,k=1,2,...,l-1,对于第k层和第k+1层来说,我们将第k层称为输入层,其中的神经元为所述输入神经元,第k+1层称为输出层,其中的神经元为所述输出神经元。即除最顶层外,每一层都可以作为输入层,其下一层为对应的输出层。

本申请具体实施方式提供一种矩阵计算方法,该矩阵计算方法在如图2所示的运算装置内完成,如图2所示,该运算装置包括:

存储器201、用于存储矩阵。优选该存储器可以为高速暂存存储器,能够支持不同长度的矩阵数据;本申请将必要的计算数据暂存在存储器(优选的高速暂存存储器)上(scratchpadmemory),使本运算装置在进行矩阵运算过程中可以更加灵活有效地支持不同长度的数据。上述存储器还可以为片外数据库、数据库或其他的能够存储的介质等等。

标量数据存储单元202(例如标量寄存器单元),用于存储标量数据,其中,该标量数据包括但不限于:矩阵数据在存储介质201的地址以及矩阵与标量运算时的标量。在一种实施方式中,标量寄存器单元可以是标量寄存器堆,提供运算过程中所需的标量寄存器,标量寄存器不只存放矩阵地址,还存放有标量数据。当涉及到矩阵与标量的运算时,运算单元不仅要从寄存器单元中获取矩阵地址,还要从寄存器单元中获取相应的标量。

运算单元203,用于获取并执行第一运算指令。如图2a所示,该运算单元包括多个运算器,该运算器包括但不限于:矩阵加法运算器231、矩阵乘法运算器232、大小比较运算器233、非线性运算器234和矩阵标量乘法运算器235。

该矩阵计算方法如图3所示,包括如下步骤:

步骤s301、运算单元203获取第一运算指令,所述第一运算指令包括:执行该指令所需的矩阵读取指示。

在步骤s301中,上述执行该指令所需的矩阵读取指示具体可以为多种,例如,在本申请一个可选的技术方案中,上述执行该指令所需的矩阵读取指示可以为所需矩阵的存储地址。又如,在本申请另一个可选的技术方案中,上述执行该指令所需的矩阵读取指示可以为所需矩阵的标识,该标识的表现形式可以为多种,例如,矩阵的名称,又如,矩阵的识别号,再如该矩阵在寄存器单元的寄存器号或地址,标识还可以包括矩阵的大小。

下面通过一个实际的例子来说明上述第一运算指令包含的执行该指令所需的矩阵读取指示,这里假设该矩阵运算公式为f(x)=a+b,其中,a、b均为矩阵。那么在第一运算指令中除了携带该矩阵运算公式外,还可以携带该矩阵运算公式所需矩阵的存储地址,具体的,例如a的存储地址为0000-0fff,b的存储地址为1000-1fff。又如,可以携带a以及b的标识,例如a的标识为0101,b的标识为1010。

步骤s302、运算单元203依据该矩阵读取指示向所述存储器201发送读取命令。

上述步骤s302的实现方法具体可以为:

如该矩阵读取指示可以为所需矩阵的存储地址,运算单元203向该存储器201发送该读取该存储地址的读取命令并采用批量读取方式获取对应的矩阵。

又如该矩阵读取指示可以为所需矩阵的标识时,运算单元203依据该标识从标量数据存储单元处采用单个读取方式读取该标识对应的存储地址,然后运算单元203向该存储器201发送该读取该存储地址的读取命令并采用批量读取方式获取对应的矩阵。

上述单个读取方式具体可以为,每次读取均为单个的数据,例如1bit或者多bit,1字节,4字节,8字节数据。此时设置单个读取方式的原因为,对于标量数据来说,其占用的容量非常小,如果采用批量数据读取方式,那么读取的数据量容易大于所需的数据的容量,这样会导致带宽的浪费,所以对于标量的数据这里采用单个读取方式来读取以减少带宽的浪费。

步骤s303、运算单元203采用批量读取方式读取该指示对应的矩阵,对该矩阵执行所述第一运算指令。

上述步骤s303中批量读取方式具体可以为,每次读取均为多个的数据,,即无论其所需的数据量是多少,其每次读取的均为多个的数据,此批量读取的数据方式非常适合大数据的读取,对于矩阵来说,由于其所占用的容量大,如果采用单个读取方式,其读取的速度会非常慢,所以这里采用批量读取方式来获取多个的数据从而快速读取矩阵数据,避免因为读取矩阵数据过慢影响矩阵计算速度的问题。

本申请提供的技术方案的运算装置设置有标量数据存储单元和存储器,其分别存储标量数据以及矩阵数据,并且本申请为两种存储器分配了单位读取方式以及批量读取方式,通过对矩阵数据的特点分配匹配其特征的数据读取方式,能够很好的利用带宽,避免因为带宽的瓶颈对矩阵计算速度的影响,另外,对于标量数据存储单元来说,由于其存储的为标量数据,设置了标量数据的读取方式,提高了带宽的利用率,所以本申请提供的技术方案能够很好的利用带宽,避免带宽对计算速度的影响,所以其具有计算速度快,效率高的优点。

可选的,上述对该矩阵执行所述第一运算指令具体可以为:

对该矩阵执行n级流水级计算,具体的,对该矩阵执行第一流水级的计算得到第一结果,将第一结果输入到第二流水级执行第二流水级的计算得到第二结果,将第二结果输入到第三流水级执行第三流水级计算得到第三结果,一级一级向下执行后,将所述第n-1结果输入到第n流水级执行第n流水级的计算得到第n结果,将所述第n结果输入到所述存储器。n可以为大于等于2的整数。如n=3为例,上述流水级的操作流程图如图2b所示。

上述第一流水级包括但不限于:矩阵加法计算器、矩阵乘法计算器等等。

上述第二流水级包括但不限于:大小比较计算器等等。

上述第三流水级包括但不限于:非线性运算器、矩阵标量乘法器等等。

将矩阵分三个流水级运算主要是为了提高运算的速度,对于矩阵的计算来说,例如采用如图1a所示的通用处理器在计算时,其运算的步骤具体可以为,处理器对矩阵进行计算得到第一结果,然后将第一结果存储在内存中,处理器从内存读取第一结果执行第二次计算得到第二结果,然后将第二结果存储在内存中,处理器从内从读取第二结果执行第三次计算得到第三结果,然后将第三结果存储在内存中。从上述计算的步骤可以看出,在通用处理器进行矩阵计算时,其并没有分流水级进行计算,那么每次计算完毕后均需要将计算完的数据进行保存,下次计算时需要再次读取,所以此方案需要重复存储读取多次数据,对于本申请的技术方案来说,第一流水级计算的第一结果直接进入第二流水级进行计算,第二流水级计算的第二结果直接进入到第三流水级进行计算,第一流水级与第二流水级计算的第一结果和第二结果无需存储,首先其减少了内存的占用空间,其次,其避免了结果的多次存储以及读取,提高了带宽的利用率,进一步提高了计算效率。

在本申请另一实施例中,可以自由组合各流水部件或者采取一级流水级。例如将第二个流水级和第三个流水级合并,或者将第一和第二以及第三个流水线都合并或者各个流水级负责不同的运算可以排列组合。例如,第一级流水负责比较运算,部分乘法运算,第二级流水负责非线性运算和矩阵标量乘法等组合。

可选的,上述运算装置还可以包括:缓存单元204,用于缓存第一运算指令。指令在执行过程中,同时也被缓存在缓存单元中,当一条指令执行完之后,如果该指令同时也是缓存单元中未被提交指令中最早的一条指令,该指令将被提交,一旦提交,该条指令进行的操作对装置状态的改变将无法撤销。在一种实施方式中,指令缓存单元可以是重排序缓存。

可选的,上述方法在步骤s301之前还可以包括:

确定该第一运算指令与第一运算指令之前的第二运算指令是否存在关联关系,如第一运算指令与第一运算指令之前的第二运算指令存在关联关系,则在第二运算指令执行完毕以后,从缓存单元中提取出该第一运算指令传递至运算单元203。如第一运算指令与该第一运算指令之前的指令无关联关系,则直接将第一运算指令传递至运算单元。

上述确定该第一运算指令与第一运算指令之前的第二运算指令是否存在关联关系的具体实现方法可以为:

依据该第一运算指令提取该第一运算指令中所需矩阵的第一存储地址区间,依据该第二运算指令提取该第二运算指令中所需矩阵的第二存储地址区间,如第一存储地址区间与第二存储地址区间具有重叠的区域,则确定第一运算指令与第二运算指令具有关联关系。如第一存储地址区间与第二存储地址区间无重叠的区域,则确定第一运算指令与第二运算指令不具有关联关系。

此存储地区区间中有重叠区域出现说明第一运算指令与第二运算指令访问了相同的矩阵,对于矩阵来说,由于其存储的空间比较大,比如采用相同的存储区域作为判断是否为关联关系的条件,可能出现的情况是,第二运算指令访问的存储区域包含了第一运算指令访问的存储区域,例如,第二运算指令访问a矩阵存储区域、b矩阵存储区域和c矩阵存储区域,如果a、b存储区域相邻或a、c存储区域相邻,则第二运算指令访问的存储区域为,a、b存储区域以及c存储区域,或a、c存储区域以及b存储区域。这种情况下,如果第一运算指令访问的为a矩阵与d矩阵的存储区域,那么第一运算指令访问的矩阵的存储区域无法与第二运算指令范文的矩阵的存储区域相同,如果采用相同的判断条件,则确定第一运算指令与第二运算指令不关联,但是实践证明,此时第一运算指令与第二运算指令属于关联关系,所以本申请通过是否有重叠区域来判断是否为关联关系的条件,能够避免上述情况的误判。

下面以一个实际的例子来说明何种情况属于关联关系,何种情况属于非关联关系。这里假设第一运算指令所需的矩阵为a矩阵和d矩阵,其中a矩阵的存储区域为【0001,0fff】,d矩阵的存储区域为【a000,afff】,对于第二运算指令所需的矩阵为a矩阵、b矩阵和c矩阵,其分别对应的存储区域为【0001,0fff】、【1000,1fff】、【b000,bfff】,对于第一运算指令来说,其对应的存储区域为:【0001,0fff】、【a000,afff】,对于第二运算指令来说,其对应的存储区域为:【0001,1fff】、【b000,bfff】,所以第二运算指令的存储区域与第一运算指令的存储区域具有重叠区域【0001,0fff】,所以第一运算指令与第二运算指令具有关联关系。

这里假设第一运算指令所需的矩阵为e矩阵和d矩阵,其中a矩阵的存储区域为【c000,cfff】,d矩阵的存储区域为【a000,afff】,对于第二运算指令所需的矩阵为a矩阵、b矩阵和c矩阵,其分别对应的存储区域为【0001,0fff】、【1000,1fff】、【b000,bfff】,对于第一运算指令来说,其对应的存储区域为:【c000,cfff】、【a000,afff】,对于第二运算指令来说,其对应的存储区域为:【0001,1fff】、【b000,bfff】,所以第二运算指令的存储区域与第一运算指令的存储区域不具有重叠区域,所以第一运算指令与第二运算指令无关联关系。

图4是本申请提供的指令集的格式示意图,图4中的省略号表示可以包括多个寄存器或立即数。如图4所示,运算指令包括一操作码和至少一操作域,其中,操作码用于指示该运算指令的功能,运算单元通过识别该操作码可进行不同的矩阵运算,操作域用于指示该运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,例如,要获取一个矩阵时,根据寄存器号可以在相应的寄存器中获取矩阵起始地址和矩阵长度,再根据矩阵起始地址和矩阵长度在存储介质中获取相应地址存放的矩阵。

指令集包含有不同功能的运算指令:

矩阵乘向量指令(mmv),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的矩阵数据和向量数据,在运算单元中进行矩阵乘向量的乘法运算,并将结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址;值得说明的是,向量可以作为特殊形式的矩阵(只有一行元素的矩阵)存储于存储器(优选的高速暂存存储器或者标量寄存器堆)中。

向量乘矩阵指令(vmm),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的向量数据和矩阵数据,在运算单元中进行向量乘矩阵的乘法运算,并将结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址;值得说明的是,向量可以作为特殊形式的矩阵(只有一行元素的矩阵)存储于存储器(优选的高速暂存存储器或者标量寄存器堆)中。

矩阵乘标量指令(vms),根据该指令,装置存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的矩阵数据,从标量寄存器堆的指定地址中取出指定大小的矩阵数据,在运算单元中进行标量乘矩阵的乘法运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址,需要说明的是,标量寄存器堆不仅存储有矩阵的地址,还存储有标量数据。

张量运算指令(tens),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的两个指定地址取出分别取出设定长度的两块矩阵数据,在运算单元中对两矩阵数据进行张量运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵加法指令(ma),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的两个指定地址取出分别取出设定长度的两块矩阵数据,在运算单元中对两矩阵进行加法运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵减法指令(ms),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的两个指定地址取出分别取出设定长度的两块矩阵数据,在运算单元中对两矩阵进行减法运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵检索指令(mr),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的向量数据,从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出指定大小的矩阵数据,在运算单元中,该向量是索引向量,输出的向量中的第i个元素是以索引向量的第i个元素作为索引,在矩阵的第i列中找到的数,该输出向量写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵加载指令(ml),根据该指令,装置从指定外部源地址载入设定长度的数据至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵存储指令(ms),根据该指令,装置将存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址的设定长度的矩阵数据存至外部目的地址处。

矩阵搬运指令(mmove),根据该指令,装置将存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址的设定长度的矩阵数据存至存储器(优选的高速暂存存储器或者标量寄存器堆)的另一指定地址处。

上述指令中的设定长度可以由用户自行设定,在一个可选的实施方案中,用户可以将该设置长度设置为一个值,当然在实际应用中,用户也可以将该设置长度设置为多个值。本申请具体实施方式并不限定该设定长度的具体值以及个数。为使本申请的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本申请进一步详细说明。

参阅图5a,图5a为本申请实施例提供了一种运算装置的结构示意图,如图所示的实施例中的具体实施方案、细化方案或技术效果可以参见图2或图3所示实施例中的描述,此处不再赘述。如图5a所示,该运算装置包括存储器501、标量数据存储单元502、运算单元503、控制单元504和传输单元506,其中,

所述存储器501,用于存储矩阵;

所述标量数据存储单元502,用于存储标量数据,所述标量数据至少包括:所述矩阵在所述存储器内的存储地址;

所述控制单元504,用于控制所述运算单元获取第一运算指令,所述第一运算指令包括执行所述第一运算指令所需的矩阵读取指示;

所述运算单元503,用于依据所述矩阵读取指示向所述存储器发送读取命令;采用批量读取方式读取所述矩阵读取指示对应的矩阵,对该矩阵执行所述第一运算指令;

所述传输单元506,用于对目标数据进行传输,所述目标数据包括所述运算装置中的任一待传输的数据;

所述传输单元包括寄存器模块和直接内存访问dma控制模块,其中,

所述寄存器模块,用于存储目标数据在源存储器中存储的源地址、所述目标数据在目的存储器中存储的目的地址和每次传输目标数据的数据量;

所述dma控制模块,用于接收dma指令,并根据所述dma指令从所述寄存器模块或所述dma指令获取目标数据的源地址和目的地址;

所述dma控制模块,还用于根据所述目标数据的源地址从所述源存储器中获取所述目标数据,并将所述目标数据传输至所述目的存储器中所述目标数据的目的地址对应的存储空间;

其中,所述源存储器为所述目标数据的存储空间,所述目的存储器用于存储传输后的目标数据。

可选的,上述矩阵读取指示包括:所述指令所需的矩阵的存储地址或所述指令所需矩阵的标识。

可选的,如所述矩阵读取指示为所述指令所需矩阵的标识时,控制单元504,用于控制所述运算单元依据所述标识从所述寄存器单元采用单位读取方式读取所述标识对应的存储地址,控制所述运算单元向所述存储器发送读取所述存储地址的读取命令并采用批量读取方式获取所述矩阵。

可选的,运算单元503,具体用于对该矩阵执行第一流水级的计算得到第一结果,将第一结果输入到第二流水级执行第二流水级得到第二结果,将所述第二结果输入到第三流水级执行第三流水级得到第三结果,一级一级向下执行后,将所述第n-1结果输入到第n流水级执行第n流水级的计算得到第n结果,将所述第n结果输入到所述存储器。n可以为大于等于2的整数。

可选的,所述计算装置还包括:

缓存单元505,用于缓存待执行的运算指令;

所述控制单元504,用于将待执行的运算指令缓存于所述缓存单元504内。

可选的,控制单元504,用于确定所述第一运算指令与所述第一运算指令之前的第二运算指令是否存在关联关系,如所述第一运算指令与所述第二运算指令存在关联关系,则将所述第一运算指令缓存与所述缓存单元内,在所述第二运算指令执行完毕后,从所述缓存单元提取所述第一运算指令传输至所述运算单元;

所述确定该第一运算指令与第一运算指令之前的第二运算指令是否存在关联关系包括:

依据所述第一运算指令提取所述第一运算指令中所需矩阵的第一存储地址区间,依据所述第二运算指令提取所述第二运算指令中所需矩阵的第二存储地址区间,如所述第一存储地址区间与所述第二存储地址区间具有重叠的区域,则确定所述第一运算指令与所述第二运算指令具有关联关系,如所述第一存储地址区间与所述第二存储地址区间不具有重叠的区域,则确定所述第一运算指令与所述第二运算指令不具有关联关系。

可选的,上述控制单元503,可以用于从指令缓存单元获取运算指令,并对该运算指令进行处理后,提供给所述运算单元。其中,控制单元503可以划分为三个模块,如图5b所示,分别为:取指模块5031、译码模块5032和指令队列模块5033,

取指模5031,用于从指令缓存单元中获取运算指令;

译码模块5032,用于对获取的运算指令进行译码;

指令队列5033,用于对译码后的运算指令进行顺序存储,考虑到不同指令在包含的寄存器上有可能存在依赖关系,用于缓存译码后的指令,当依赖关系被满足之后发射指令。

可选的,请参阅图5c,图5c为本申请实施例提供了一种传输单元的结构示意图。如图5c所示,传输单元包括寄存器模块和dma控制模块,

所述寄存器模块,用于存储目标数据在源存储器中存储的源地址、所述目标数据在目的存储器中存储的目的地址和每次传输目标数据的数据量;

所述dma控制模块,用于接收dma指令,并根据所述dma指令从所述寄存器模块或所述dma指令获取目标数据的源地址和目的地址;

所述dma控制模块,还用于根据所述目标数据的源地址从所述源存储器中获取所述目标数据,并将所述目标数据传输至所述目的存储器中所述目标数据的目的地址对应的存储空间。

需要说明的是,上述源存储器为上述目标数据的存储空间,上述目的存储器用于存储传输后的目标数据。上述源存储器可为内寄存器或者外部寄存器,上述目的存储器可为内寄存器或者外部寄存器,且该源存储器和目的存储器可为同一存储空间,也可为不同的存储空间。

上述寄存器模块包括:

标量寄存器堆包括提供目标数据传输过程中所需的地址寄存器、存储目标数据规模的寄存器和存储数据量等参数的寄存器。标量寄存器堆可以用于存储目标数据地址、目标数据规模等信息。

其中,目标数据地址为数据在内存或外存储器中存储的地址,即上述目标数据的源地址和目的地址;目标数据规模为目标数据在内存或外存储器中存储的行、列大小;还可为上述目标数据在计算机中存储的字节数、比特数等。

需要说明的是,上述目标数据为图像数据或者视频数据,但是最终以图像数据的形式存储于源存储器中。图像数据存储于源存储器中的最小单位为图像数据的一个像素点,以rgb的形式。对于图像数据,可以看成m行n列的像素点。

上述dma控制模块,用于接收dma指令,并根据dma指令,从上述寄存器模块中获取目标数据的源地址,目的地址和每次传输目标数据的数据量;或者从上述dma指令中获取上述目标数据的源地址,目的地址和每次传输目标数据的数据量;

根据上述目标数据的源地址,从上述源存储器中获取上述目标数据;

根据上述每次传输目标数据的数据量将上述目标数据传输至目的存储器中上述目的地址对应存储空间。

如图6所示,上述dma控制模块包括:

指令单元,用于处理原始dma指令,得到处理后的dma指令;

加法单元,用于根据上述处理后的dma指令,计算得到目标数据的源地址和目标数据的目的地址;

读写单元,用于根据所述源地址从上述源存储器中读取上述目标数据,并根据上述目标数据的目的地址将上述目标数据写入上述目的存储器中。

进一步地,上述读取单元根据处理后的dma指令从上述寄存器模块中获取每次传输目标数据的数据量,并根据该每次传输目标数据的数据量分多次将上述目标数据传输至上述目的存储器中。

其中,上述加法单元和上述读写单元为多流水级结构,且上述加法单元处于第一流水级,上述读写单元在第二流水级。当连续串行的多条dma指令到达时,可以更加高效地实现这一连串dma指令所要求的操作。dma控制模块负责上述运算装置的所有dma操作,包括但不限于一维读取操作、一维写入操作、二维读取操作和二维写入操作。

进一步地,指令单元包括:

指令展开单元,用于将原始dma指令展开为系统dma指令,该系统dma指令是dma控制模块的控制指令。

当需要dma传送目标数据时,则上述dma控制模块收到dma指令命令,该dma指令表明所需目标数据的源地址、目标数据的目的地址和大小。其中,该源地址和目的地址还需要标记所属的存储空间,是内存还是外存储器,如果是外存储器,还需要标记所属的流。这里的“流”即前述多组数据交替传送时的分组,处理器对全部数据的需求可能是不连续的,但对某个特定的流来说,很可能是连续的。

指令缓存单元,用于存储系统dma指令,即在执行dma指令过程中,同时也被缓存在指令缓存单元中。当一条指令执行完之后,如果该指令同时也是指令缓存单元中未被提交指令中最早的一条指令,该指令将被提交,一旦提交,该条指令进行的操作对装置状态的改变将无法撤销。

在一种实施方式中,上述指令缓存单元可以是重排序缓存,也可以是其他缓存单元。

指令处理单元,用于处理指令缓存单元中的系统dma指令。

其中,指令处理单元可以包括:

取指单元,用于从指令缓存单元中获取系统dma指令;

译码单元,用于对系统dma指令进行译码;

指令队列,用于对译码后的系统直接内存访问指令进行顺序存储。

此外,dma控制模块还可以用于根据dma指令,从处理器模块中的原始数据中获取目标数据传送至存储器模块中未存储该目标数据的位置,或者从处理器模块中的处理数据中获取目标数据并传输至存储器模块。

需要说明的是,上述处理器模块可为源存储器,上述存储器模块中未存储该目标数据的位置为目的存储器或者上述存储器模块为目的存储器。

上述运算装置还可以包括数据缓存单元,用于与源地址存储空间的内存及dma控制模块进行数据传输,数据缓存单元可以为高速暂存存储器,可支持不同大小数据的传输,将待写入的数据暂存在高速暂存存储器中,稍后用于真正地写入存储器模块中。

上述运算装置还可以包括数据转换单元,用于对从源存储器中取出的数据作数据转换,其中数据转换包括但不限于数据精度转化、定浮点相互转换、数据排列方式转换、数据量大小转换。

在一种可行的实施例中,上述读写单元获取上述目标数据和该目标数据的目的地址后,直接根据目标数据的目的地址将目标数据写入目的存储器中。

在一种可行的实施例中,上述读写单元获取上述目标数据和该目标数据的目的地址后,将该目标数据及其目的地址传输至上述数据转换单元,该数据转换单元将该目标数据进行处理后,直接根据目标数据的目的地址将目标数据写入目的存储器中。

在一种可行的实施例中,上述读写单元获取上述目标数据和该目标数据的目的地址后,将该目标数据及其目的地址传输至上述数据转换单元,该数据转换单元将该目标数据进行处理后,将转换后的目标数据及其目的地址存储在上述数据缓存单元中。该数据缓存单元根据目标数据的目的地址将目标数据写入目的存储器中。

上述运算装置还可以包括地址映射单元,用于当源地址为虚拟地址时,对源地址作地址映射,将源地址转换为源地址对应的物理地址;当目的地址为虚拟地址时,对目的地址作地址映射,将目的地址转换为目的地址对应的物理地址。

本申请实施例提供的装置的dma指令集采用载入/存储(load/store)结构,读写单元不会对内存中的数据进行操作。优选的,dma指令集采用定长指令。

本申请实施例的另一方面,还提供了一种运算方法。请参阅图7,图7为本申请实施例提供了一种运算方法的流程示意图。如图7所示,运算方法包括如下步骤:

701、运算装置控制取指模块取出矩阵乘向量指令,并通过传输单元将所述矩阵乘向量指令传输至译码模块,其中,传输单元将所述矩阵乘向量指令传输至译码模块包括:

根据接收到的dma指令获取所述矩阵乘向量指令的原地址和目的地址;

根据所述矩阵乘向量指令的源地址从源存储器中获取所述矩阵乘向量指令,所述源存储器为所述矩阵乘向量指令的存储空间;

将所述矩阵乘向量指令存储至译码模块中的存储器中所述矩阵乘向量指令的目的地址对应的存储空间。

具体的,上述运算装置接收dma指令,根据该dma指令从寄存器模块获取上述的矩阵乘向量指令的源地址和目的地址,或者从dma指令中获取该矩阵乘向量指令的源地址和目的地址。

需要说明的是,上述寄存器模块存储有上述矩阵乘向量指令存储的源地址、目的地址及每次传输矩阵乘向量指令的数据量。

可选地,上述运算装置根据上述dma指令从上述寄存器模块中获取每次传输矩阵乘向量指令的数据量。

具体地,所有的数据预先存储在特定的源存储器中,该源存储器可以包括芯片内部的各个存储模块和外部的存储模块。上述运算装置根据获取到的矩阵乘向量指令的源地址,从上述源存储器中获取所述矩阵乘向量指令。

在一种可行的实施例中,在根据所述矩阵乘向量指令的源地址获取所述矩阵乘向量指令之前,当确定上述矩阵乘向量指令的源地址为虚拟地址时,上述运算装置对该矩阵乘向量指令的源地址进行地址映射,得到上述源地址的物理地址。上述运算装置根据上述源地址的物理地址从上述源存储器中获取上述矩阵乘向量指令。

具体地,上述运算装置从寄存器模块或从dma指令的字段中获取矩阵乘向量指令的目的地址后,根据矩阵的目的地址将上述矩阵乘向量指令传输至目的存储器。其中,该目的存储器可以包括芯片内部的各个存储模块和外部的存储模块。

其中,上述源存储器和上述目的存储器不为同一寄存器。

702、所述译码模块对所述矩阵乘向量指令进行译码,并将所述矩阵乘向量指令传输至指令队列。

703、在所述指令队列中,所述矩阵乘向量指令从标量寄存器堆中获取指令中的五个操作域所对应的标量寄存器中的数据,所述数据包括输入向量地址、输入向量长度、输入矩阵地址、输出向量地址和输出向量长度。

704、控制单元确定所述矩阵乘向量指令与矩阵乘向量指令之前的运算指令是否存在关联关系,若存在关联关系,将矩阵乘向量指令存储到缓存单元,若不存在关联关系,则通过传输单元将所述矩阵乘向量指令传输至运算单元。

705、所述运算单元根据所述五个操作域所对应的标量寄存器里的数据从高速暂存器中取出需要的矩阵和向量数据,然后在运算单元中完成乘法运算,得到运算结果。

706、所述运算单元将所述运算结果写入存储器的指定地址,重排序缓存中的该矩阵乘向量指令被提交。

在一种可行的实施例中,上述运算装置根据上述每次传输矩阵乘向量指令的数据量分多次将上述矩阵乘向量指令传输至上述目的存储器中上述目的地址对应的存储空间中。

在一种可行的实施例中,在根据矩阵乘向量指令的目的地址将所述矩阵乘向量指令传输至目的存储器之前,确定上述矩阵乘向量指令的目的地址为虚拟地址时,上述运算装置对上述目的地址进行地址映射,将该目的地址转换成该目的地址对应的物理地址。上述运算装置根据上述目的地址对应的物理地址将上述矩阵乘向量指令传输至上述目的存储器中。

在一种可行的实施中,上述运算装置根据上述每次传输矩阵乘向量指令的数据量分多次将上述矩阵乘向量指令传输至上述目的存储器中上述目的地址对应的物理地址对应的存储空间中。

本申请实施例的另一方面,还提供了另一种运算方法。请参阅图8,图8为本申请实施例提供了一种运算方法的流程示意图。如图8所示,运算方法包括如下步骤:

801、存储器存储矩阵;

802、标量数据存储单元存储标量数据,所述标量数据至少包括:所述矩阵在所述存储器内的存储地址;

803、控制单元控制所述运算单元获取第一运算指令,所述第一运算指令包括执行所述第一运算指令所需的矩阵读取指示;

804、运算单元依据所述矩阵读取指示向所述存储器发送读取命令,以及采用批量读取方式读取所述矩阵读取指示对应的矩阵;

805、所述运算单元对所述矩阵执行所述第一运算指令中的运算方法,得到执行结果,以及将所述执行结果写入所述存储器的指定地址;

806、传输单元对目标数据进行传输,所述目标数据包括第一运算指令和矩阵。

需要说明的是,步骤806为对数据进行传输,其与步骤801至步骤805并无执行先后顺序,步骤806在需要对数据进行传输时执行。

可选的,目标数据还可以第一运算指令和矩阵之外的任意需要进行传输的数据。

其中,所述目标数据包括第一运算指令和矩阵,所述传输单元包括寄存器模块和直接内存访问dma控制模块,传输单元对目标数据进行传输包括:

所述寄存器模块存储目标数据在源存储器中存储的源地址、所述目标数据在目的存储器中存储的目的地址和每次传输目标数据的数据量;

所述dma控制模块接收dma指令,并根据所述dma指令从所述寄存器模块或所述dma指令获取目标数据的源地址和目的地址;

所述dma控制模块根据所述目标数据的源地址从所述源存储器中获取所述目标数据,并将所述目标数据传输至所述目的存储器中所述目标数据的目的地址对应的存储空间,其中,所述源存储器为所述目标数据的存储空间,所述目的存储器用于存储传输后的目标数据。

可选的,矩阵执行所述第一运算指令中的运算方法,得到执行结果,包括:

对所述矩阵执行第一流水级的计算,得到第一结果;

将所述第一结果输入到第二流水级,所述第二流水级对所述第一结果执行第二流水级的计算,得到第二结果;

重复上述步骤,直至执行完第n-1流水级的计算,得到第n-1计算结果,其中,n为大于1的正整数;

将所述第n-1计算结果输入到第n流水级,所述第n流水级对所述第n-1结果执行第n流水级的计算,得到第执行结果。

可选的,所述方法还包括:

所述控制单元确定所述矩阵乘向量指令与矩阵乘向量指令之前的运算指令是否存在关联关系,若存在关联关系,将矩阵乘向量指令存储到缓存单元,若不存在关联关系,则通过传输单元将所述矩阵乘向量指令传输至运算单元。

可选的,所述方法还包括:

dma控制模块根据所述dma指令从所述寄存器模块中获取每次传输目标数据的数据量,并根据每次传输目标数据的数据量将所述待传输的目标数据传输至所述目的地址对应的空间。

可选的,所述dma指令包括数据处理指令和地址跳转指令;

所述数据处理指令,用于指示dma控制模块中的读写单元根据源地址从源存储器中读取一定大小的数,写入目的存储器中目的地址对应的存储空间中,数据规模可以从寄存器模块或上述dma指令中获得;

所述地址跳转指令,用于指示dma控制模块中的加法单元将寄存器模块中的任两个寄存器(包括一个地址寄存器和一个跳转值寄存器)中的值相加,然后写回到其中一个上述地址寄存器中,从而完成所述dma指令中的换行操作;

其中,所述地址寄存器用于存储所述源地址,所述跳转值寄存器用于存储源地址的跳转值。

可选的,所述方法还包括:

数据缓存单元临时存储根据所述源地址从源存储器中读取的目标数据;

数据转换单元对从源存储器中读取的目标数据作数据转换;

地址映射单元对源地址或是目的地址作地址的映射,用映射后的地址到对应的存储空间中取数据。

可选的,所述方法还包括:

指令单元处理所述原始直接内存访问指令,以得到处理后的dma指令;

加法单元根据所述处理后的dma指令,计算得到所述目标数据的源地址和所述目标数据的目的地址;

读写单元根据所述目标数据的源地址从所述源存储器中读取所述目标数据,并将所述目标数据送至所述目的存储器中所述目标数据的目的地址对应的存储空间。

可选的,当系统dma指令执行完之后,如果该系统dma指令同时也是dma控制模块中的指令缓存单元中,未被提交指令中最早的一条系统dma指令,则该系统dma指令将被提交,一旦提交,该系统dma指令进行的操作对目标数据传输的状态的改变将无法撤销。

图9示意性示出了本公开实施例的指令集的格式示意图,如图9所示,每条指令包括一个操作码和五个操作域,其中,操作码用于指示该指令的功能,dma控制模块通过识别该操作码可进行相应的操作,操作域用于指示该指令的数据地址信息。指令集包含有不同功能的dma指令:

dtt指令:根据该指令,读写单元从源地址读出一个字,写入目的地址,同时也写入数据缓存单元。数据传送指令包括五个操作域,分别为第一操作域、第二操作域、第三操作域、第四操作域和第五操作域。其中,上述第一操作域用于指示矩阵的源地址所属的存储空间,上述第二操作域用于指示矩阵的源地址,上述第三操作域用于指示矩阵的目的地址所属的存储空间,上述第四操作域用于指示矩阵的目的地址,上述第五操作域用于指示矩阵的每次传输矩阵的数据量。每条指令完成一个字大小的数据的传送。

adj指令:根据该指令,上述加法单元将上述寄存器模块中的任两个寄存器(包括一个地址寄存器和一个跳转值寄存器)中的值相加,然后写回到其中一个上述地址寄存器中,从而完成2ddma任务中的换行操作。

上述地址寄存器用于存储所述源地址,上述跳转值寄存器用于存储源地址的跳转值。

上述adj指令包括两个操作域,,分别为第六操作域和第七操作域。其中,第六操作域用于指示地址寄存器的编号,第七操作域用于指示第跳转值寄存器的编号。上述adj指令将地址寄存器中的值加上跳转值寄存器中的值后,并将结果写回上述地址寄存器中。

图10示意性示出了本公开实施例的dma控制模块执行2ddma命令的流水线时空图,如图7所示,假设该2ddma命令需要传送一块大小为3×3的数据,则整个过程一共需要9拍。也就是说,若该2ddma命令传送的数据块大小为m×n,其中,m,n均为正整数,此时,本公开实施例的数据传输过程一共需要m×n拍。

需要说明的是,上述一拍为上述运算装置的一个时钟周期。

以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1