一种矩阵与矢量的乘法运算方法及装置与流程

文档序号:15686282发布日期:2018-10-16 21:05阅读:520来源:国知局
本发明涉及数据处理领域,尤其涉及一种矩阵与矢量的乘法运算方法及装置。
背景技术
:由于卷积神经网络在图像识别、图像分类、音频识别等数据处理运用中的出色表现,使得卷积神经网络成为了各类学术研究的热门课题之一。然而,卷积神经网络中存在大量的浮点数乘加运算,包括矩阵与矢量的乘法运算,运算量大,耗时长,使得卷积神经网络的硬件能耗大。因此,如何减少卷积神经网络中的浮点数运算量成为当前亟待解决的技术问题之一。现有技术中,卷积神经网络中的矩阵与矢量运算时,通过实时检测矩阵中的非零元素,记录矩阵中非零元素的位置,并从矩阵中选取非零元素与矢量元素进行乘加运算。现有技术中的矩阵与矢量运算需要实时判断矩阵元素的值是否为零,实时记录非零元素的位置,实时判断、记录的实现复杂度高,操作复杂,数据处理效率低,适用性差。技术实现要素:本申请提供一种矩阵与矢量的乘法运行方法及装置,可降低数据处理的复杂度,降低数据处理的功耗,提高数据处理效率。第一方面提供了一种矩阵与矢量的乘法运算方法,其可包括:获取矩阵元素的第一指示信息,所述第一指示信息用于指示预置矩阵中的非零元素;根据所述第一指示信息从所述预置矩阵中读取非零元素的矩阵元素值,并确定读取的所述矩阵元素值的第一位置标码,所述第一位置标码为所述矩阵元素值在单次读取的矩阵数据中的位置标记;获取矢量元素的第二指示信息,所述第二指示信息用于指示待读取的矢量数据信息;根据所述第二指示信息从输入矢量数据中读取与所述第一位置标码对应的第二位置标码的矢量元素值;获取所述矩阵元素值与所述矢量元素值的乘法运算值。本申请通过矩阵读指针的指示信息指示待处理矩阵中的非零元素,从预置矩阵中读取非零元素值与矢量数据值进行乘法运算。本申请可根据矢量读指针的指示信息从输入矢量数据中读取与矩阵元素值的位置相对应的矢量数据值,可节省乘法运算过程中矩阵元素值的判断操作,进而可降低数据处理的复杂度,降低数据处理的功耗,提高数据处理效率。结合第一方面,在第一种可能的实现方式中,所述获取矩阵元素的第一指示信息之前,所述方法还包括:获取待处理矩阵,并将所述待处理矩阵中的各个矩阵元素进行位置标码以得到各个矩阵元素的预标码,其中,所述待处理矩阵中每行包括k个元素,k为大于零的整数;选取所述待处理矩阵中的非零元素,并根据所述待处理矩阵中的非零元素的预标码生成预置矩阵,所述预置矩阵中每行包括k个非零元素;根据所述预置矩阵及其包含的各个非零元素的预标码生成矩阵元素的第一指示信息。本申请可对参与乘法运算的待处理矩阵进行预处理,将待处理矩阵中的零元素剔除得到预置矩阵存储至指定存储空间,进而可根据预置矩阵中各个非零元素的位置关系生成矩阵读指针的指示信息。上述矩阵读指针的指示信息可在矩阵与矢量的乘法运算中调度矩阵元素,可矩阵元素调度的准确性和数据处理效率,降低矩阵元素读取的操作复杂度。结合第一方面第一种可能的实现方式,在第二种可能的实现方式中,所述根据所述待处理矩阵中的非零元素的预标码生成预置矩阵之后,所述方法还包括:根据预设的本次计算读取的矩阵数据大小将所述预置矩阵中包含的各个非零元素的预标码进行处理以得到各个非零元素的位置标码;将所述各个非零元素的位置标码添加至所述第一指示信息;其中,所述各个非零元素中任一非零元素的位置标码小于所述数据大小。本申请可根据单次运算读取的数据大小为预置矩阵的非零元素进行标码,任一非零元素的位置标码均小于上述单次运算读取的数据大小,可让标码位宽固定,降低数据处理复杂度。结合第一方面第一种可能的实现方式或者第一方面第二种可能的实现方式,在第三种可能的实现方式中,所述第一指示信息包括矩阵读指针、矩阵有效指针和有效矩阵元素个数;所述矩阵读指针用于指示所述预置矩阵中参与本次计算的待读取的矩阵元素行;所述矩阵有效指针指向参与本次计算的起始非零元素在所述待读取的矩阵元素行中的位置;所述有效矩阵元素个数用于指示参与本次计算的待读取的非零元素的个数m,所述m为大于或者等于1的整数;所述根据所述第一指示信息从预置矩阵中读取非零元素的矩阵元素值包括:从所述预置矩阵中查找所述矩阵读指针所指向的指定矩阵元素行,并从所述矩阵有效指针所指向的指定位置开始,从所述指定矩阵元素行中读取m个矩阵元素值。本申请可矩阵读指针、矩阵有效指针、有效矩阵元素个数等参数指示预置矩阵的非零元素的读取位置及读取个数等信息,可提高矩阵元素的调度便捷性,进而可提高数据处理效率。结合第一方面第三种可能的实现方式,在第四种可能的实现方式中,所述第一指示信息还包括矩阵读指针增量;所述矩阵读指针增量的初始值为零,表示本次计算中待读取的矩阵元素行为所述矩阵读指针所指示的矩阵元素行;所述根据所述预置矩阵及其包含的各个非零元素的预标码生成矩阵元素的第一指示信息包括:若所述m多于所述待读取的矩阵元素行中剩余非零元素的个数,则所述矩阵读指针增量加1,所述矩阵读指针增量加1表示下次计算中待读取的矩阵元素行为所述矩阵读指针所指示的矩阵元素行之后的两行;其中,所述剩余非零元素为所述待读取的矩阵元素行中包含的所述矩阵有效指针指向的位置之后的非零元素个数。本申请可通过矩阵读指针增量来标记矩阵读指针追踪的矩阵元素行,进一步保障的矩阵元素的调度准确性,提高数据处理的效率。结合第一方面第三种可能的实现方式,在第五种可能的实现方式中,所述方法还包括:根据所述矩阵读指针增量更新所述矩阵读指针以得到下次计算的矩阵读指针。本申请可通过矩阵读指针增量更新矩阵读指针以保证每次运算,矩阵读指针所指向的矩阵元素行的准确性,提高数据调度的准确性,适用性更高。结合第一方面第一种可能的实现方式至第一方面第五种可能的实现方式中任一种,在第六种可能的实现方式中,所述待读取的矢量数据信息包括本次计算中待读取的矢量数据行;所述获取矢量元素的第二指示信息之前,所述方法还包括:根据所述待处理矩阵中的非零元素的预标码确定所述待处理矩阵中各矩阵元素行包含的非零元素个数;根据所述各矩阵元素行包含的非零元素个数生成矢量元素的第二指示信息;其中,第二指示信息包括所述矢量读指针所指示的待读取的矢量数据行,以及矢量读指针增量;所述矢量读指针增量指示下次计算的待读取的矢量数据行与所述矢量读指针所指示的矢量数据行的间隔行数。本申请可根据待处理矩阵中各个矩阵元素行的非零元素个数确定矢量读指针的指示信息,通过矢量读指针的指示信息指示乘法运算时从输入矢量数据中读取矢量数据的矢量数据行,可保证矢量数据与矩阵元素值的乘法运算的准确性,提高了数据调度的准确性。结合第一方面第六种可能的实现方式,在第七种可能的实现方式中,所述根据所述各矩阵元素行包含的非零元素个数生成矢量元素的第二指示信息包括:若所述各矩阵元素行包含的非零元素个数均不为零,则将所述矢量读指针增量设为h,所述h为预设的本次计算读取的矩阵数据大小与所述k的比值;若所述各矩阵元素行中包含的非零元素为零的矩阵元素行的数目h1大于h,则将所述矢量读指针增量设为h1。本申请还可根据待处理矩阵中各矩阵元素行包括的零元素情况设定矢量读指针增量,通过矩阵读指针增量指定乘法运算所要读取的矢量数据行,进而可通过矢量读指针增量的设定将全零矩阵元素行跳过,可节省乘法运算的数据调度信令,提供数据处理效率。结合第一方面第六种可能的实现方式或第一方面第七种可能的实现方式,在第八种可能的实现方式中,所述根据所述第二指示信息从输入矢量数据中读取与所述第一位置标码对应的第二位置标码的矢量元素值包括:根据所述第二指示信息从所述输入矢量数据中查找待读取的矢量数据行,其中,所述输入矢量数据中包括t*k个元素,所述t为大于1的整数;从所述矢量数据行中读取与所述第一位置标码对应的第二位置标码的矢量元素值。本申请通过矢量读指针的指示信息从多于矩阵元素数量的输入矢量数据中查找待读取的矢量数据行,从查找得到的矢量数据行中读取与读取的矩阵元素值相对应的矢量元素值。本申请通过输入更多的矢量数据来保证加速器中运算算子的有效利用率,提高了矩阵与矢量的乘法运算的适用性。结合第一方面第六种可能的实现方式至第一方面第八种可能的实现方式中任一种,在第九种可能的实现方式中,所述方法还包括:根据所述矢量读指针的增量更新所述矢量读指针以得到下次计算的矢量读指针。本申请可通过矢量读指针增量更新矢量读指针以保证每次运算,矢量读指针所指向的矢量数据行的准确性,提高数据调度的准确性,适用性更高。第二方面提供了一种矩阵与矢量的乘法运算装置,其可包括:存储器、调度单元和运算器;所述存储器,用于存储预置矩阵以及所述预置矩阵的矩阵元素的第一指示信息,所述第一指示信息用于指示预置矩阵中的非零元素;所述调度单元,用于从所述存储器中获取所述第一指示信息,并根据所述第一指示信息从所述预置矩阵中读取非零元素的矩阵元素值,并确定读取的所述矩阵元素值的第一位置标码,所述第一位置标码为所述矩阵元素值在单次读取的矩阵数据中的位置标记;所述存储器,还用于存储输入矢量数据以及所述输入矢量数据的矢量元素的第二指示信息,所述第二指示信息用于指示待读取的矢量数据信息;所述调度单元,还用于从所述存储器中读取所述第二指示信息,并根据所述第二指示信息从所述输入矢量数据中读取与所述第一位置标码对应的第二位置标码的矢量元素值;所述运算器,用于计算所述调度单元读取的所述矩阵元素值与所述矢量元素值的乘法运算值。结合第二方面,在第一种可能的实现方式中,所述乘法运算装置还包括:通用处理器,用于获取待处理矩阵,并将所述待处理矩阵中的各个矩阵元素进行位置标码以得到各个矩阵元素的预标码,其中,所述待处理矩阵中每行包括k个元素,k为大于零的整数;所述通用处理器,还用于选取所述待处理矩阵中的非零元素,并根据所述待处理矩阵中的非零元素的预标码生成预置矩阵并存储至所述存储器,所述预置矩阵中每行包括k个非零元素;所述通用处理器,还用于根据所述预置矩阵及其包含的各个非零元素的预标码生成矩阵元素的第一指示信息并存储至所述存储器。结合第二方面第一种可能的实现方式,在第二种可能的实现方式中,所述通用处理器还用于:根据预设的本次计算读取的矩阵数据大小将所述预置矩阵中包含的各个非零元素的预标码进行处理以得到各个非零元素的位置标码,将所述各个非零元素的位置标码添加至所述第一指示信息;其中,所述各个非零元素中任一非零元素的位置标码小于所述数据大小。结合第二方面第一种可能的实现方式或者第二方面第二种可能的实现方式,在第三种可能的实现方式中,所述第一指示信息包括矩阵读指针、矩阵有效指针和有效矩阵元素个数;所述矩阵读指针用于指示所述预置矩阵中参与本次计算的待读取的矩阵元素行;所述矩阵有效指针指向参与本次计算的起始非零元素在所述待读取的矩阵元素行中的位置;所述有效矩阵元素个数用于指示参与本次计算的待读取的非零元素的个数m,所述m为大于或者等于1的整数;所述调度单元用于:从所述预置矩阵中查找所述矩阵读指针所指向的指定矩阵元素行,并从所述矩阵有效指针所指向的指定位置开始,从所述指定矩阵元素行中读取m个矩阵元素值。结合第二方面第三种可能的实现方式,在第四种可能的实现方式中,所述第一指示信息还包括矩阵读指针增量;所述矩阵读指针增量的初始值为零,表示本次计算中待读取的矩阵元素行为所述矩阵读指针所指示的矩阵元素行;所述通用处理器用于:若所述m多于所述待读取的矩阵元素行中剩余非零元素的个数,则将所述矩阵读指针增量加1,所述矩阵读指针增量加1表示下次计算中待读取的矩阵元素行为所述矩阵读指针所指示的矩阵元素行之后的两行;其中,所述剩余非零元素为所述待读取的矩阵元素行中包含的所述矩阵有效指针指向的位置之后的非零元素个数。结合第二方面第三种可能的实现方式,在第五种可能的实现方式中,所述通用处理器还用于:根据所述矩阵读指针增量更新所述矩阵读指针以得到下次计算的矩阵读指针。结合第二方面第一种可能的实现方式至第二方面第五种可能的实现方式中任一种,在第六种可能的实现方式中,所述待读取的矢量数据信息包括本次计算中待读取的矢量数据行;所述通用处理器还用于:根据所述待处理矩阵中的非零元素的预标码确定所述待处理矩阵中各矩阵元素行包含的非零元素个数,根据所述各矩阵元素行包含的非零元素个数生成矢量元素的第二指示信息;其中,第二指示信息包括所述矢量读指针所指示的待读取的矢量数据行,以及矢量读指针增量;所述矢量读指针增量指示下次计算的待读取的矢量数据行与所述矢量读指针所指示的矢量数据行的间隔行数。结合第二方面第六种可能的实现方式,在第七种可能的实现方式中,所述通用处理器用于:若所述各矩阵元素行包含的非零元素个数均不为零,则将所述矢量读指针增量设为h,所述h为预设的本次计算读取的矩阵数据大小与所述k的比值;若所述各矩阵元素行中包含的非零元素为零的矩阵元素行的数目h1大于h,则将所述矢量读指针增量设为h1。结合第二方面第六种可能的实现方式或第二方面第七种可能的实现方式,在第八种可能的实现方式中,所述调度单元用于:根据所述第二指示信息从所述输入矢量数据中查找待读取的矢量数据行,其中,所述输入矢量数据中包括t*k个元素,所述t为大于1的整数;从所述矢量数据行中读取与所述第一位置标码对应的第二位置标码的矢量元素值。结合第二方面第六种可能的实现方式至第二方面第八种可能的实现方式中任一种,在第九种可能的实现方式中,所述通用处理器还用于:根据所述矢量读指针的增量更新所述矢量读指针以得到下次计算的矢量读指针。本申请通过矩阵读指针、矩阵有效指针、有效矩阵元素个数以及矩阵读指针增量等信息指示待处理矩阵中的非零元素,从预置矩阵中读取非零元素值与矢量数据值进行乘法运算,可提高矩阵元素的调度准确性,减少矩阵元素值的调度之前矩阵元素的非零判断等操作,降低了矩阵元素的调度操作复杂度。本申请可根据矢量读指针以及矢量读指针增量等指示信息从输入矢量数据中读取与矩阵元素值的位置相对应的矢量数据值,可节省乘法运算过程中矩阵元素值的判断操作,进而可降低数据处理的复杂度,降低数据处理的功耗,提高数据处理效率。本申请还可根据单次读取的数据大小为预置矩阵中的矩阵元素进行位置标码,可保证标码宽度固定,降低数据处理的操作复杂度。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例中所需要使用的附图进行说明。图1是本发明实施例提供的矩阵与矢量的乘法运算的示意图;图2是本发明实施例提供的矩阵与矢量的乘法运算装置的一结构示意图;图3是本发明实施例提供的矩阵与矢量的乘法运算方法的流程示意图;图4是稀疏矩阵预处理的示意图;图5是本发明实施例提供的矩阵元素的位置标码获取示意图;图6是本发明实施例提供的矩阵/矢量读指针的指示信息示意图;图7是本发明实施例提供的pe的架构示意图;图8是本发明实施例提供的矩阵与矢量的乘法运算装置的结构示意图。具体实施方式下面结合本发明实施例中的附图对本发明实施例进行描述。参见图1,是本发明实施例提供的矩阵与矢量的乘法运算的示意图。如图1所示,假设参与乘法运算的待处理矩阵为一个a*b的矩阵,参与乘法运算的输入矢量数据为一个b*1的矢量。上述a*b的矩阵和上述b*1的矢量相乘可得到一个a*1的矢量。即待处理矩阵为a行b列的矩阵,并且待处理矩阵中包括一个或者多个的零元素。输入矢量数据为一个b列的矢量。在矩阵与矢量的乘法运算中,矩阵的每一行的矩阵元素与矢量元素两两配对,把每一对中的两个元素相乘,再把这些乘积累加起来,最后得到的值则为第一行的结果。例如待处理矩阵中的第一行的矩阵元素与矢量元素两两配对,例如(1,1)、(0,3)、(0,5)、(1,2),再将每一对中的两个元素相乘得到每一对的乘积,进而将乘积相加得到第一行的结果。每一行的矩阵元素进行相同的操作,则可得到一个4*1的矢量。为了加速稀疏矩阵(即包含0元素的矩阵,如图1中的矩阵)与矢量的乘法运算,现有技术将稀疏矩阵稠密化(即将矩阵中的0元素丢弃,剩下的非零元素重新生成一个矩阵),可以节省数据存储空间,减少参与乘法运算的矩阵元素的数量。然而,现有技术将矩阵稠密化处理之后,稠密化处理得到的矩阵与矢量的乘法运算将变得更加复杂。例如,稠密化处理之后的矩阵需要记录每个矩阵元素的标码与值,其中,上述标码表示该矩阵元素在矩阵中的位置。例如,图1中第一行第一个元素的标码可为1,第一行第二个元素的标码为2,以此类推,第二行第一个元素的标码为4,最后一行最后一个元素的标码为20等。在矩阵与矢量的乘法运算中,需要从矩阵中读取元素,判断读取的元素值是否为0。若是,则丢弃,否则记录该元素值及其标码。此外,现有技术中,矩阵与矢量的乘法运算中,读取矩阵元素的过程中还需要判断是否有足够的运算单元来运算,若没有足够的运算单元来运算,则需要记录本次运算读取到哪个元素,下次运算则需要接着该元素后面开始读取。若本次运算读取的矩阵元素行的所有元素运算完毕,则换行读取元素。现有技术中,矩阵元素的读取过程中需要判断的数据较多,操作繁琐,适用性不高。在现有技术中,矩阵与矢量的乘法运算中,可根据记录下来的非0元素来选取与之相对应的矢量元素进行相乘,即在稠密化处理之前,与该非0元素两两配对的矢量元素则为该非0元素相对应的矢量元素。若矢量元素跨度太大,则要找出下一个矢量元素在内存中的位置。右上可知,在实时运算稀疏矩阵和矢量的乘法运算过程中需要用到大量复杂的判断,并且需要保存读出的标码和值,操作繁琐,适用性低。本发明实施例提供一种矩阵与矢量的乘法运算方法及装置,可利用矩阵是已知数据的特性,通过软件生成一套矩阵与矢量的乘法运算的控制信号,利用这套控制信号来从矩阵数据和矢量数据中选取正确的数据来执行乘法运算。在本发明实施例提供的实现方式中,矩阵与矢量的乘法运算过程中,乘法运算装置只需根据控制信号来执行相应操作即可,无需进行数据的判断和实时记录等操作,操作简单,数据处理效率高。在本发明实施例提供的实现方式中,上述乘法运算的控制信号只需要生成一次,之后乘法运算装置的所有操作都会可过控制信号触发执行,不需要实时的判断和数据记录,可降低矩阵元素的调度复杂度,提供数据处理效率。参见图2,是本发明实施例提供的矩阵与矢量的乘法运算装置的一结构示意图。本发明实施例提供的乘法运算装置具体可为乘法运算加速器。图2所示的乘法运算加速器的顶层架构中包括x个处理单元(processengine,pe)、一个矢量随机存取存储器(randomaccessmemory,ram)、一个矩阵信息ram和一个控制器等。其中,每个pe中还包括一个矩阵ram,用于存储参与乘法运算的矩阵。每个pe都是做一个浮点乘加运算(floating-pointmultiply-accumulate,fmac),下面将以单个pe(任一个pe)执行fmac为例进行说明。上述矩阵信息ram,矩阵ram和矢量ram都是包含一个写端口,两个读端口。每次乘法运算中,从上述矩阵ram和矢量ram中读取数据都是同时读取矩阵ram和矢量ram中的第l和l+1行的两行数据。其中,上述矩阵ram和矢量ram的每行都存有k个元素(矩阵ram的行中还存有每个元素对应的位置标码)。矩阵ram的输出宽度为k个元素,即,上述矩阵ram的输出宽度表示每个pe单次运算从矩阵ram中读取的元素个数(即k),而矢量ram的输出宽度为t*k个元素。其中,上述t可为预定义倍数,具体可根据参与运算的矩阵中包含的元素0在矩阵中包含的所有元素中的百分比确定,在此不做限制。需要说明的是,由于矩阵ram中存储的矩阵可为稠密化之后的矩阵,矩阵中可能不包括零元素,即,pe单次运算从矩阵ram中读取的一行数据中的k个元素可为剔除了零元素之后k个非零元素,因此,实际读取的k个矩阵元素可能包括标码大于k的矩阵元素。此时实际k个非零矩阵元素两两配对的矢量元素则需要多于k个,矢量元素为实时输入的数据,矢量ram是不经过稠密化处理的数据,则矢量ram输出的数据应该多于k个。例如,假设k为8。稠密化处理之前,矩阵的l行和l+1行数据中包括的16(即2k)个数据中零元素为4个。其中,第l行包括的元素为(2,4,3,0,5,0,1,0),第l+1行包括的元素为(7,6,9,0,8,2,1,4),则稠密化处理之后读取的k个非零元素则可为(2,4,3,5,1,7,6,9)。此时,稠密化处理之后读取的k个非零元素中包括了l行和l+1行的数据。由于稠密化处理之前,参与乘法运行的矩阵元素和矢量元素是两两配对的,矢量元素是输入数据的数据,未经过稠密化处理,因为此时读取的矢量元素应该多于k个,,l+1行的矢量元素配对的为标码大于k的矩阵元素,可保证与k个非零矩阵元素两两配对的矢量元素均被读取得到。即,当矩阵中有大量零元素时,如果矢量元素只取k个将很难有效地利用pe中所有的运算算子。若矢量元素取t*k个(t>1)则表示矢量元素可以取值的范围更大,从而更容易选出更多非零元素,参与fmac运算,可提高pe内部乘法器的利用率。fmac运算中的两个操作数分别是矩阵元素和矢量元素。其中,矩阵元素被预先处理好并存储在pe中的矩阵ram中。矢量元素可以是存储在远端一个较大的ram中,并作为实时输入数据输入至pe中参与fmac运算。运算开始时,矢量ram会向总线广播t*k个元素。这里t可自定义,在本发明实施例中为了方便理解,我们用t=2为例进行说明。同时,矩阵信息ram中存储的各个pe的矩阵信息将会跟着广播总线被送入各个pe。当矢量元素和矩阵信息进入pe后,pe将根据矩阵信息来提取与矢量对应的元素,来与其进行乘加操作。下面将参见图3对本发明实施例提供的矩阵元素和矢量元素的读取以及乘加操作的具体实现方式进行描述。本发明实施例提供的矩阵与矢量的乘法运算方法的执行主体可为上述pe,也可为pe中的功能模块,也可为上述控制器等,在此不做限制。下面将以pe为执行主体为例进行说明。参见图3,是本发明实施例提供的矩阵与矢量的乘法运算方法的流程示意图。本发明实施例提供的方法可包括步骤:在一些可行的实施方式中,fmac运算开始之前,可获取参与fmac运算的待处理矩阵,对待处理矩阵进行预处理得到矩阵初始化信息。具体的,可将待处理矩阵中各个矩阵元素进行位置标码得到各个矩阵元素的预标码。其中,上述待处理矩阵中每行包括k个元素,k为大于零的整数。例如,假设待处理矩阵为一个5*8的稀疏矩阵,即k=8,如下表1:表11200405010025002302009234130001821000000000000pe可按照各个矩阵元素在待处理矩阵中的位置,按照先行再列的方式对各个矩阵元素进行标码,得到各个矩阵元素的预标码。如图4,图4为稀疏矩阵预处理的示意图。图4“稠密化”箭头左侧的数据为待处理矩阵中包括的矩阵元素及其对应的预标码。进一步的,pe可从待处理矩阵中选取非零元素,并根据非零元素的预标码生成预置矩阵。其中,上述预置矩阵为待处理矩阵稠密化处理之后的矩阵,预置矩阵中不包括零元素,并且预置矩阵中每行也包括k个元素。如图4“稠密化”箭头右侧所示的数据则为待处理矩阵中的非零元素及其对应的预标码。需要说明的是,图4所示的数据进行表1所示的矩阵中的部分数据,未示出的数据可根据已示出的数据处理得到,在此不做限制。进一步的,在一些可行的实施方式中,pe可根据预设的单次运算(例如本次计算)读取的数据大小(例如2k)将上述预置矩阵中包含的各个非零元素的预标码进行处理以得到各个非零元素的位置标码(即第一位置标码)。即,对于预标码大于k的值,将对其除以2k取余数来得出该矩阵元素的实际标码(即第一位置标码)。进而可将处理好的矩阵元素和其对应的位置标码存入pe的矩阵ram中。如图5,是本发明实施例提供的矩阵元素的位置标码获取示意图。以pe0为例,可对预置矩阵中各个非零元素的预标码进行处理得到各个非零元素的位置标码。本发明实施例将各个矩阵元素的预标码除以2k取余数得到各个非零矩阵元素的位置标码,可使得每个非零矩阵元素的位置标码均不大于2k,使得非零矩阵元素的位置标码的位宽固定,节省位置标码的存储空间,提高数据处理的适用性。需要说明的是,由于单次读取的矩阵数据为2k,因此将大于k的预标码除以2k取余数之后得到的实际标码可为矩阵元素在单次读取的矩阵数据中的位置的标记。例如,单次读取16个矩阵元素,即预标码为0-15的16个矩阵元素,预标码为15的矩阵元素指代该矩阵元素在16个矩阵元素中标号为15的位置上的数据。若第一次运算时单次读取的16个矩阵元素为预标码为16-31的16个矩阵元素,则预标码为16-31的16个矩阵元素的实际标码为0-15,预标码为31的矩阵元素指代该矩阵元素在本次读取的16个矩阵元素中标号为15的位置上的数据。在一些可行的实施方式中,对待处理矩阵进行处理得到预置矩阵之后,还可根据预置矩阵中各个非零元素的预标码生成预置矩阵的矩阵元素的第一指示信息。其中,上述第一种指示信息可包括矩阵读指针、矩阵有效指针和有效矩阵元素个数等。如图6,图6为本发明实施例提供的矩阵/矢量读指针的指示信息示意图。其中,标码即为本发明实施例中描述的预标码。具体实现中,假设k为8,则单次运算读取的数据为16(即2k)个数据。生成预置矩阵的矩阵元素的第一指示信息时,可根据预置矩阵中各个矩阵元素的预标码将预置矩阵的矩阵元素划分为每16个一组,例如预标码为0-15的矩阵元素为一组,预标码为16-21的矩阵元素一组等。进一步的,可根据每组矩阵元素中包含的非零元素的个数确定有效矩阵元素个数,例如预标码为0-15的一组矩阵元素中非零元素为3个,因此有效矩阵元素个数为3。上述矩阵读指针用于指示预置矩阵中参与本次计算的待读取的矩阵元素行。例如预标码为0-15的矩阵元素组对应的矩阵读指针为0指代第一次运算时矩阵读指针读取的矩阵元素行为当前行及其下一行(即每次读取两行),例如预置矩阵的第一行和第二行等。矩阵有效指针指向参与本次计算的起始非零元素在待读取的矩阵元素行中的位置。例如预标码为0-15的矩阵元素组对应的矩阵有效指针为0指代待读取的矩阵元素从预置矩阵的第一行中实际标码为0的元素开始读取。有效矩阵元素个数用于指示参与本次计算的待读取的非零元素的个数m,即可以相乘的元素个数,同时以也表示在[i*k,(i+2)*k]范围内能读出的有效元素。其中,上述i为大于或者等于0的整数,待处理矩阵的[i*k,(i+2)*k范围内的数据则为两行数据。例如,当i为0,k为8时,上述[i*k,i+2*k]则指代预标码为0-15的两行数据。有效矩阵元素个数表示该范围内的有效元素个数,例如3个。假设第二次运算读取的矩阵元素为预标码为16-31的一组矩阵元素,在该组元素中非零元素为2个(如图6中所示的标码为23和31的2个矩阵元素),因此有效矩阵元素个数为2。预标码为16-31的矩阵元素组对应的矩阵读指针为0指代矩阵读指针读取的矩阵元素行为当前行及其下一行。例如,预置矩阵的第一行和第二行等。需要说明的是,预置矩阵的第一行包括的非零矩阵元素为8个,第一次运算读取了3个,因此第二次运算矩阵读指针依然为0,即依然从第一行开始读取。此时,预标码为16-31的矩阵元素组对应的矩阵有效指针为3指代待读取的矩阵元素从预置矩阵的第一行中实际标码为3的元素开始读取,即从预置矩阵的第一行的第4个矩阵元素开始读取,并且本次读取的矩阵元素为2个。有效矩阵元素个数用于指示参与本次计算的待读取的非零元素的个数m为2。假设第五次运算读取的矩阵元素为预标码为64-79的一组矩阵元素,在该组元素中非零元素为2个(如图6中所示的标码为71和79的2个矩阵元素),因此有效矩阵元素个数为2。预标码为64-79的矩阵元素组对应的矩阵读指针为+1(即矩阵读指针增量为1)指代矩阵读指针读取的矩阵元素行为矩阵读指针所指向的待读取的矩阵元素行的下一行和下下行。例如,预置矩阵的第二行和第三行等。需要说明的是,预置矩阵的第一行包括的非零矩阵元素为8个,前四次次运算已读取的矩阵元素为9个,即3+2+2+2个。上述9个矩阵元素中包括预置矩阵的第一行的8个矩阵元素和第二行的第一个矩阵元素。因此,第五次运算矩阵读指针为+1,即从第一行的下一行开始读取。此时,预标码为64-79的矩阵元素组对应的矩阵有效指针为1指代待读取的矩阵元素从预置矩阵的第二行中实际标码为1的元素开始读取,即从预置矩阵的第二行的第2个矩阵元素开始读取,并且本次读取的矩阵元素为2个。有效矩阵元素个数用于指示参与本次计算的待读取的非零元素的个数m为2。如上所述方式,生成每个矩阵元素组对应的矩阵读指针,矩阵有效指针和有效矩阵元素个数等矩阵元素的第一指示信息。如图6所示,在本发明实施例中,矩阵元素的第一指示信息还包括矩阵读指针增量。其中,上述矩阵读指针增量的初始值为零,表示本次计算中待读取的矩阵元素行为矩阵读指针所指示的矩阵元素行(每次读取两行,从矩阵读指针所指向的行开始读取)。若在本次计算所要读取的非零矩阵元素的个数大于矩阵读指针所指示的矩阵元素行包含的非零矩阵元素的剩余个数,则本次运行的矩阵读指针的增量为1,用于更新下一次运行的矩阵读指针。即,若本次运算读取的矩阵元素个数m多于矩阵读指针所指向的矩阵元素行中剩余非零元素的个数,则矩阵读指针增量加1。矩阵读指针增量加1表示下次计算中待读取的矩阵元素行为本次运算的矩阵读指针所指示的矩阵元素行之后的两行。其中,上述剩余非零元素为本次运算的矩阵读指针所指示的矩阵元素行中包含的矩阵有效指针指向的位置之后的非零元素个数。例如,第四次运算中,预置矩阵的第一行中,矩阵有效指针所指向的位置标码为7的非零元素之后的元素为0个,少于2个,则第四次运算之后对应生成的矩阵读指针增量为1,指代第五次运行时矩阵读指针指向矩阵的第二行。第四次运算之后可根据上述矩阵读指针增量更新矩阵读指针以得到第五次运算的矩阵读指针。s301,获取矩阵元素的第一指示信息。在一些可行的实施方式中,上述图6所述的矩阵元素的第一指示信息可存储在上述矩阵信息ram中,pe执行fmac运算时,可从广播总线中获取上述矩阵信息ram送入的第一指示信息,以根据上述第一指示信息从预置矩阵中读取用于执行fmac运算所需的非零元素(即非零矩阵元素)。具体实现中,上述第一指示信息即可为上述待处理矩阵初始化之后得到的矩阵指示信息,存储于矩阵信息ram中。pe执行fmac运算时可从广播总线获取上述矩阵指示信息,根据上述矩阵指示信息中包括的矩阵读指针、矩阵有效指针以及有效矩阵元素个数等参数调度预置矩阵中用于执行fmac运算所需的非零元素。本发明实施例所描述的待处理矩阵等矩阵数据是已知数据,已知数据不会变化,因此通过对待处理矩阵进行预处理得到矩阵的初始化信息则可通过初始化信息引导乘法运算器进行每一拍的数据调度和运算。其中,一拍的数据调度和运算可为一个处理周期的数据调度和运算,可提高数据运算的处理效率,降低矩阵与矢量的乘法运算的操作复杂度。s302,根据所述第一指示信息从所述预置矩阵中读取非零元素的矩阵元素值,并确定读取的所述矩阵元素值的第一位置标码。在一些可行的实施方式中,pe可根据上述第一指示信息从预置矩阵中查找矩阵读指针所指向的指定矩阵元素行,并从所述矩阵有效指针所指向的指定位置开始,从所述指定矩阵元素行中读取m个矩阵元素值。例如,第一次fmac运算时,可根据上述矩阵读指针从预置矩阵的第一行的第一个矩阵元素位置开始读取3个非零元素的矩阵元素值。进一步的,还可确定读取的矩阵元素值的位置标码(即第一位置标码),以从输入矢量元素中读取与之配对的矢量元素。例如,读取预置矩阵的第一个非零元素的矩阵元素值,则可确定该矩阵元素值的位置标码,进而可从矢量数据中读取乘加运算中与之配对的第一个元素值。s303,获取矢量元素的第二指示信息。在一些可行的实施方式中,对待处理矩阵进行预处理得到待处理矩阵的初始化信息时,还可根据待处理矩阵中各矩阵元素行包含的非零元素个数确定矢量数据的指示信息(即第二指示信息)。具体实现中,本发明实施例通过矢量读指针来指示待读取的矢量数据的行。上述第二指示信息包括矢量读指针所指示的待读取的矢量数据行,还包括矢量读指针增量。需要说明的是,在矩阵和矢量的乘法运算中,读取的矢量数据需要与矩阵数据进行两两配对,因此,当矩阵数据的单次读取的数据大小为2k(即两行)时,矢量数据的单次读取的数据大小也应该为2k,因此可将矢量读指针增量设定为两拍输出的矢量元素所间隔的矢量ram行数。即矢量读指针增量指示下次计算的待读取的矢量数据行与本次计算中矢量读指针所指示的矢量数据行的间隔行数,其中,矢量读指针所指示的矢量数据行即为本次读取的矢量数据行。具体实现中,若上述待处理矩阵中各矩阵元素行包含的元素不是全零,则矢量读指针的增量可设定为2,即本次读取数据的数据大小(2k)与k的比值h为2。若待处理矩阵的各矩阵元素行中包含的元素全为零,则可直接跳过,即全零的矩阵元素行不需要进行乘法运算。此时,矢量读指针增量可设定需要跳过的行的数目,假设待处理矩阵中[i*k,(i+2)*k]范围内的元素为全零,则可直接跳过2行,此时矢量读指针增量可设定为2或者4。即h1为2。若待处理矩阵中,连续[i*k,(i+n)*k]范围内的元素为全零,则可直接跳过n行,此时矢量读指针的增量可设定为n。如图6所示,根据待处理矩阵中各矩阵元素的标码可知,标码为127和标码为300之间的元素均为零,标码127和标码300的元素之间间隔22行,因此可将矢量读指针的增量设定为22。若标码c与标码d之间的元素间隔小于2k,则将矢量读指针的增量设定为2,具体可参见图6所示的示例,在此不再赘述。需要说明的是,上述矢量的指示信息可预先处理得到并存储于矢量ram中,进而可在pe进行fmac运算时通过广播总线传输给pe。上述矢量读指针增量可在每次读取数据之后,对矢量读指针进行更新以得到下一次计算的矢量读指针,进而可实现对矢量数据的准确调度。s304,根据所述第二指示信息从输入矢量数据中读取与所述第一位置标码对应的第二位置标码的矢量元素值。在一些可行的实施方式中,pe从预置矩阵读取矩阵元素值并且确定读取的矩阵元素值的第一位置标码之后,可根据矢量元素的第二指示信息从输入矢量数据中查找矢量读指针所指示的矢量数据行,并从矢量数据行中读取与第一位置标码相对应的第二位置标码的矢量元素值。其中,上述与第一位置标码相对应的第二位置标码即为与第二位置标码上的矩阵元素值进行两两配对的矩阵元素值所在的位置。其中,上述输入矢量数据可为矢量ram的输出宽度,具体可为t*k个元素,t为大于1的整数。即,若矩阵ram输出宽度为k个非零元素,矢量ram可输出t*k个元素,以保证足够的矢量元素与矩阵元素配对,提高矩阵与矢量的乘法运算的准确性。s305,获取所述矩阵元素值与所述矢量元素值的乘法运算值。在一些可行的实施方式中,pe获取得到矩阵元素值和矢量元素值之后,则可进行矩阵元素值和矢量元素值乘加运算,进而得到矩阵元素值和矢量元素值的乘法运算值。下面将结合图7,图7为pe的架构示意图,对pe是如何根据矩阵信息ram中存储的矩阵元素的指示信息和矢量ram中存储的矢量元素的指示信息进行数据调度和乘加处理操作的过程进行大概介绍。如图7所示,每个pe实际上都是做了一个fmac运算。pe的结构经过流水线处理,可分为2+n层流水线,其中,包括2层数据调度流水线(包括读取层和数据层)和n层运算流水线(即运算层),如c0,c1,…,c5所示。在读取层中,加法器将根据矩阵ram传回的矩阵读指针和广播总线传输过来的矩阵读指针增量来更新矩阵读指针。同时,pe可将维护一个矩阵掩码寄存器,利用从矩阵信息ram通过广播总线输入的矩阵有效指针和有效矩阵元素个数等指示信息,生成可以过滤掉已经计算过的矩阵元素的掩码。进一步的,可通过矩阵元素的掩码对从矩阵ram中存储的预置矩阵中读取的数据中过滤掉已经运算过的矩阵元素,即根据矩阵有效指针和有效矩阵元素个数从矩阵ram输出的矩阵元素中选择参与本次famc运行的有效矩阵元素,进而可将预置矩阵中的有效矩阵元素输入至运算流水线。同时,在该处理周期内,矢量输入(即输入矢量数据)也将从外部输入并存入矢量ram中。矢量读指针以及矢量读指针增量也可在此之前存入矢量ram中,在此不做限制。其中,输入矢量数据可包括2k个元素,并且可分为上层矢量和下层矢量。pe可从矢量ram中读取输入矢量数据,并可通过32-1选择器根据矩阵ram传输过来的矩阵元素值的预标码等信息从输入矢量数据中选择相应的矢量元素值输入至运算流水线上进行矩阵与矢量的乘加运算。在数据层中,可将从矩阵ram中读出矩阵数据。在通过过滤后得到的有效矩阵元素,预置矩阵中有k个或少于k个的有效矩阵元素被传入运算层。与此同时,可通过多个选择器(如图所示的32-1选择器)根据通过矩阵ram中读出的预标码来选中相应的矢量元素,并传入运算层。其中,上述多个选择器中每个选择器可从2k个元素中选取一个矢量元素,该矢量元素为上述预标码对应的矩阵元素相对应。对于预置矩阵的操作数少于k的情况,可将对没有用到的预标码位置的数据传入0,或传入使能信号使乘法器不工作,进而可节省乘法器的运算量。在运算层中,加速器将把传入的数据进行乘加操作,并在最后一层将运算结果与上一次的结果累加到一起存入累加寄存器。由于在本加速器的运算单元中没有反压的需要,所以所有的流水线都可以并行运行,从而使得该架构的吞吐率为每拍k个fmac累加运算。本发明实施例通过矩阵读指针、矩阵有效指针、有效矩阵元素个数以及矩阵读指针增量等信息指示待处理矩阵中的非零元素,从预置矩阵中读取非零元素值与矢量数据值进行乘法运算,可提高矩阵元素的调度准确性,减少矩阵元素值的调度之前矩阵元素的非零判断等操作,降低了矩阵元素的调度操作复杂度。本发明实施例还可根据矢量读指针以及矢量读指针增量等指示信息从输入矢量数据中读取与矩阵元素值的位置相对应的矢量数据值,可节省乘法运算过程中矩阵元素值的判断操作,进而可降低数据处理的复杂度,降低数据处理的功耗,提高数据处理效率。本申请还可根据单次读取的数据大小为预置矩阵中的矩阵元素进行位置标码,可保证标码宽度固定,降低数据处理的操作复杂度。参见图8,是本发明实施例提供的矩阵与矢量的乘法运算装置的结构示意图。本发明实施例提供的乘法运算装置具体可为本发明实施例中所描述的pe。本发明实施例提供的乘法运算装置可包括:存储器801、调度单元802、运算器802和通用处理器804(如中央处理器cpu)等。其中,上述存储器801可为本发明实施例提供的矩阵ram、矩阵信息ram以及矢量ram等,具体可根据实际应用需求确定,在此不做限制。上述调度单元802可为pe中的读指针、过滤器或者选择器等功能模块,也可为其他表现形式的用于调度存储器801中存储的数据的功能模块,在此不做限制。上述运算器802可为pe中的加法器、加速器等功能模块,在此不做限制。上述通用处理器804也可为pe外部的数据预处理模块,或者数据初始化模块,用于执行矩阵数据的预处理或者初始化等操作,在此不做限制。上述存储器801,用于存储预置矩阵以及所述预置矩阵的矩阵元素的第一指示信息,所述第一指示信息用于指示预置矩阵中的非零元素。上述调度单元802,用于从所述存储器801中获取所述第一指示信息,并根据所述第一指示信息从所述预置矩阵中读取非零元素的矩阵元素值,并确定读取的所述矩阵元素值的第一位置标码,所述第一位置标码为所述矩阵元素值在单次读取的矩阵数据中的位置标记;上述存储器801,还用于存储输入矢量数据以及所述输入矢量数据的矢量元素的第二指示信息,所述第二指示信息用于指示待读取的矢量数据信息。上述调度单元802,还用于从所述存储器801中读取所述第二指示信息,并根据所述第二指示信息从所述输入矢量数据中读取与所述第一位置标码对应的第二位置标码的矢量元素值。上述运算器803,用于计算所述调度单元读取的所述矩阵元素值与所述矢量元素值的乘法运算值。在一些可行的实施方式中,上述乘法运算装置还包括:通用处理器804,用于获取待处理矩阵,并将所述待处理矩阵中的各个矩阵元素进行位置标码以得到各个矩阵元素的预标码,其中,所述待处理矩阵中每行包括k个元素,k为大于零的整数。上述通用处理器804,还用于选取所述待处理矩阵中的非零元素,并根据所述待处理矩阵中的非零元素的预标码生成预置矩阵并存储至所述存储器,所述预置矩阵中每行包括k个非零元素。上述通用处理器804,还用于根据所述预置矩阵及其包含的各个非零元素的预标码生成矩阵元素的第一指示信息并存储至所述存储器。在一些可行的实施方式中,上述通用处理器804还用于:根据预设的本次计算读取的矩阵数据大小将所述预置矩阵中包含的各个非零元素的预标码进行处理以得到各个非零元素的位置标码,将所述各个非零元素的位置标码添加至所述第一指示信息;其中,所述各个非零元素中任一非零元素的位置标码小于所述数据大小。在一些可行的实施方式中,上述第一指示信息包括矩阵读指针、矩阵有效指针和有效矩阵元素个数;所述矩阵读指针用于指示所述预置矩阵中参与本次计算的待读取的矩阵元素行;所述矩阵有效指针指向参与本次计算的起始非零元素在所述待读取的矩阵元素行中的位置;所述有效矩阵元素个数用于指示参与本次计算的待读取的非零元素的个数m,所述m为大于或者等于1的整数;所述调度单元用于:从所述预置矩阵中查找所述矩阵读指针所指向的指定矩阵元素行,并从所述矩阵有效指针所指向的指定位置开始,从所述指定矩阵元素行中读取m个矩阵元素值。在一些可行的实施方式中,上述第一指示信息还包括矩阵读指针增量;所述矩阵读指针增量的初始值为零,表示本次计算中待读取的矩阵元素行为所述矩阵读指针所指示的矩阵元素行;所述通用处理器用于:若所述m多于所述待读取的矩阵元素行中剩余非零元素的个数,则将所述矩阵读指针增量加1,所述矩阵读指针增量加1表示下次计算中待读取的矩阵元素行为所述矩阵读指针所指示的矩阵元素行之后的两行;其中,所述剩余非零元素为所述待读取的矩阵元素行中包含的所述矩阵有效指针指向的位置之后的非零元素个数。在一些可行的实施方式中,上述通用处理器804还用于:根据所述矩阵读指针增量更新所述矩阵读指针以得到下次计算的矩阵读指针。在一些可行的实施方式中,上述待读取的矢量数据信息包括本次计算中待读取的矢量数据行;所述通用处理器804还用于:根据所述待处理矩阵中的非零元素的预标码确定所述待处理矩阵中各矩阵元素行包含的非零元素个数,根据所述各矩阵元素行包含的非零元素个数生成矢量元素的第二指示信息;其中,第二指示信息包括所述矢量读指针所指示的待读取的矢量数据行,以及矢量读指针增量;所述矢量读指针增量指示下次计算的待读取的矢量数据行与所述矢量读指针所指示的矢量数据行的间隔行数。在一些可行的实施方式中,上述通用处理器804用于:若所述各矩阵元素行包含的非零元素个数均不为零,则将所述矢量读指针增量设为h,所述h为预设的本次计算读取的矩阵数据大小与所述k的比值;若所述各矩阵元素行中包含的非零元素为零的矩阵元素行的数目h1大于h,则将所述矢量读指针增量设为h1。在一些可行的实施方式中,上述调度单元802用于:根据所述第二指示信息从所述输入矢量数据中查找待读取的矢量数据行,其中,所述输入矢量数据中包括t*k个元素,所述t为大于1的整数;从所述矢量数据行中读取与所述第一位置标码对应的第二位置标码的矢量元素值。在一些可行的实施方式中,上述通用处理器804还用于:根据所述矢量读指针的增量更新所述矢量读指针以得到下次计算的矢量读指针。具体实现中,上述乘法运算装置可通过其内置的各个功能单元执行上述实施例所描述的实现方式,在此不再赘述。本发明实施例通过矩阵读指针、矩阵有效指针、有效矩阵元素个数以及矩阵读指针增量等信息指示待处理矩阵中的非零元素,从预置矩阵中读取非零元素值与矢量数据值进行乘法运算,可提高矩阵元素的调度准确性,减少矩阵元素值的调度之前矩阵元素的非零判断等操作,降低了矩阵元素的调度操作复杂度。本发明实施例还可根据矢量读指针以及矢量读指针增量等指示信息从输入矢量数据中读取与矩阵元素值的位置相对应的矢量数据值,可节省乘法运算过程中矩阵元素值的判断操作,进而可降低数据处理的复杂度,降低数据处理的功耗,提高数据处理效率。本申请还可根据单次读取的数据大小为预置矩阵中的矩阵元素进行位置标码,可保证标码宽度固定,降低数据处理的操作复杂度。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1