CN106325812B - 一种针对乘累加运算的处理方法及装置 - Google Patents
一种针对乘累加运算的处理方法及装置 Download PDFInfo
- Publication number
- CN106325812B CN106325812B CN201510331183.XA CN201510331183A CN106325812B CN 106325812 B CN106325812 B CN 106325812B CN 201510331183 A CN201510331183 A CN 201510331183A CN 106325812 B CN106325812 B CN 106325812B
- Authority
- CN
- China
- Prior art keywords
- instruction
- accumulating
- multiply
- binary group
- multiplies
- 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
Landscapes
- Advance Control (AREA)
Abstract
本发明公开了一种针对乘累加运算的处理方法及装置,用以解决现有技术中存在的数据处理效率低、计算机功耗高的问题,该方法为:为读取的每个乘累加指令分配寄存器标识,在对每个乘累加指令处理得到加操作数后,将该加操作数、为该乘累加指令分配的寄存器标识作为二元组进行缓存,读取一个二元组作为基准二元组,其包含的加操作数作为第一加操作数,并读取关联二元组,其包含的加操作数作为第二加操作数,或读取基准二元组包含的寄存器标识对应的寄存器中的数据作为第二加操作数,基于第一加操作数、第二加操作数,生成加计算结果,并将加计算结果存储于第二加操作数来源处。这样,提高了计算并行度、数据吞吐量及数据处理效率,降低了计算机功耗。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种针对成累加运算的处理方法及装置。
背景技术
在计算机现代图像处理、科学计算、云计算等领域的数据处理过程中,通常存在大量的乘累加运算,如矩阵乘法运算,其基本操作即为乘累加运算。乘累加运算的公式为C+=A*B,表示首先计算A*B,然后将计算结果和累加寄存器C相加,并将相加后的结果写回到累加寄存器中,每个矩阵乘法运算,需要多个乘累加运算单元,其中,每个乘累加运算单元中还包括乘法器和加法器。
由于矩阵乘法运算是一种计算密集型的运算,因此,对乘累加运算单元的处理能力的运算效率要求较高,如提高工作主频以及每个时钟周期内处理能力。显然,高速运算,并且能在每个时钟周期内处理多个数据成为乘累加运算单元的发展趋势。
然而现有的乘累加运算单元面临以下问题:
1、乘累加运算单元可能处理多个乘累加指令,由于乘累加指令之间存在数据相关,因此产生流水线停顿。在连续多条乘累加指令中,若第i个乘累加指令中的加法运算需要多个时钟周期完成,后续的第i+1个乘累加指令在需要读第i个乘累加指令的累加寄存器中的操作数时,第i个乘累加指令中加法运算还没有计算完成,存在数据相关,需要流水线停顿,直至第i个乘累加指令中所有计算完成。
2、乘累加运算单元的计算并行度低,数据吞吐量低。由于每个乘累加运算单元在一个时钟周期最内最多只能处理一条乘累加指令,在乘累加指令之间由于数据相关引起的流水线停顿,某些时钟周期可能没有处理乘累加指令而是在流水线停顿状态,因此,实际情况下每一时钟周期内执行的指令数(Instruction Per Clock,IPC)小于或等于1。
总之,现有技术中采用乘累加运算单元处理乘累加指令,在乘累加指令之间存在数据相关时,由于存在流水线停顿,且计算并行度低,数据吞吐量低等原因,将导致数据处理效率低,同时增加了计算机的功耗。
发明内容
本发明实施例提供一种针对乘累加运算的处理方法及装置,用以解决现有技术中在乘累加指令之间存在数据相关,由于流水线停顿,且计算并行度低,数据吞吐量低等因素导致的数据处理效率低、计算机功耗高的问题。
本发明实施例提供的具体技术方案如下:
第一方面,一种针对乘累加运算的处理装置,包括:
乘调度单元,用于依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元;
乘运算单元,用于依次对所述乘调度单元发送的每个乘累加指令分别执行:对该该乘累加指令进行处理得到加操作数,并将得到的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;
加缓冲单元,用于缓存所述乘运算单元针对每个乘累加指令发送的二元组,并在加调度单元读取缓存的一个二元组后,删除被读取的二元组;
加调度单元,用于读取所述加缓冲单元中缓存的一个二元组作为基准二元组,若在加缓冲单元缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,所述关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;
加运算单元,用于对所述加调度单元确定的第一加操作数、第二加操作数进行加法计算,生成加计算结果,并将加计算结果返回所述加调度单元;
所述加调度单元,还用于在第二加操作数为关联二元组中包括的加操作数时,在所述加缓冲单元中缓存一个新的二元组,所述新的二元组中的加操作数为所述加计算结果,所述新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将所述加计算结果存储到所述寄存器中。
结合第一方面,在第一种可能的实现方式中,所述装置还包括:
乘缓冲单元,用于依次接收并缓存每个乘累加指令;
所述乘调度单元,用于依次从所述乘缓冲单元中读取缓存的每个乘累加指令;
所述乘缓冲单元,还用于在所述乘调度单元读取缓存的一个乘累加指令后,删除被读取的乘累加指令。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,乘缓冲单元,具体用于:
依次接收乘累加指令组中的每个乘累加指令,所述乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
所述乘累加指令中还包含指令类型,所述指令类型用于指示所述乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
所述乘调度单元,具体用于:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当所述指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当所述指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述乘调度单元,还用于:
为该乘累加指令分配新的寄存器标识后,将所述新的寄存器标识对应的寄存器中存储的数据进行清零。
结合第一方面的以上任一种可能的实现方式,在第四种可能的实现方式中,所述乘调度单元,用于:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
结合第一方面的第一至第三中任一种可能的实现方式,在第五种可能的实现方式中,所述乘调度单元,还用于:
针对读取的每个乘累加指令执行:
在为该乘累加指令分配寄存器标识后,在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并
将生成的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;以及
在将分配寄存器标识后的该乘累加指令发送到乘运算单元之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1;
所述加缓冲单元,还用于缓存所述乘调度单元发送的该乘累加指令对应的二元组。
结合第一方面的第四或第五种可能的实现方式,在第六种可能的实现方式中,所述乘调度单元,具体用于:
按照先进先出的原则,读取所述乘缓冲单元中当前最先缓存的乘累加指令。
结合第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述乘调度单元,用于:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘运算单元后,确定所述乘缓冲单元中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取所述乘缓冲单元中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取所述乘缓冲单元中当前最先缓存的乘累加指令。
结合第一方面或第一方面的以上任一种可能的实现方式,在第八种可能的实现方式中,所述加调度单元,具体用于:
按照先进先出的原则,读取所述加缓冲单元中最先缓存的二元组作为基准二元组。
第二方面,一种针对乘累加运算的处理方法,包括:
依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘法器;
获得所述乘法器对接收的该乘累加指令进行处理得到加操作数,并将得到的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;
在缓存的二元组中读取一个二元组作为基准二元组,并在缓存的二元组中删除该基准二元组,若在缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,并在缓存二元组中删除该关联二元组,所述关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数,将第一加操作数、第二加操作数发送到加法器;
获取所述加法器对确定的第一加操作数、第二加操作数进行加法计算,生成的加计算结果;
在第二加操作数为关联二元组中包括的加操作数时,缓存一个新的二元组,所述新的二元组中的加操作数为所述加计算结果,所述新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将所述加计算结果存储到所述寄存器中。
结合第二方面,在第一种可能的实现方式中,依次读取每个乘累加指令之前,还包括:
依次接收并缓存每个乘累加指令;
在读取一个乘累加指令后,还包括:
在缓存的乘累加指令中,删除被读取的该乘累加指令。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,依次接收并缓存每个乘累加指令,包括:
依次接收乘累加指令组中的每个乘累加指令,所述乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
所述乘累加指令中还包含指令类型,所述指令类型用于指示所述乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
对读取的每个乘累加指令分配寄存器标识,包括:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当所述指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当所述指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,在为该乘累加指令分配新的寄存器标识后,还包括:
将所述新的寄存器标识对应的寄存器中存储的数据进行清零。
结合第二方面的以上任一种可能的实现方式,在第四种可能的实现方式中,依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,包括:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
结合第二方面的第一至第三中任一种可能的实现方式,在第五种可能的实现方式中,在对读取的每个乘累加指令分配寄存器标识后,还包括:
在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并将生成的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;以及
在将分配寄存器标识后的该乘累加指令发送到乘法器之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1。
结合第二方面的第四或第五种可能的实现方式,在第六种可能的实现方式中,读取一个乘累加指令,包括:
按照先进先出的原则,读取缓存的乘累加指令中当前最先缓存的乘累加指令。
结合第二方面的第六种可能的实现方式,在第七种可能的实现方式中,依次读取每个乘累加指令,包括:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘法器后,确定缓存的乘累加指令中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取缓存的乘累加指令中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取缓存的乘累加指令中当前最先缓存的乘累加指令。
结合第二方面或第一方面的以上任一种可能的实现方式,在第八种可能的实现方式中,,在缓存的二元组中读取一个二元组作为基准二元组,包括:
按照先进先出的原则,读取缓存的二元组中最先缓存的二元组作为基准二元组。
采用本发明提供的针对乘累加运算的处理装置,乘调度单元读取乘累加指令后对读取的乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元,乘运算单元针对乘累加指令进行处理得到加操作数,并将该加操作数、乘调度单元为该乘累加指令分配的寄存器标识作为二元组发送至加缓冲单元,令其缓存,加调度单元读取加缓冲单元缓存的一个二元组作为基准二元组,同时加缓冲单元删除该基准二元组,若在加缓冲单元中存在包含的寄存器标识与基准二元组相同的关联二元组,则加调度单元读取该关联二元组,否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;加运算单元根据第一加操作数和第二加操作数生成加计算结果后,加调度单元在第二加操作数是关联二元组中包括的加操作数时,将该加计算结果、基准二元组中的寄存器标识作为新的二元组缓存至加缓冲单元;在第二加操作数为寄存器中存储的数据时,将加计算结果存储到该寄存器中。这样,该针对乘累加运算的处理装置作为单个乘累加单元可以同时处理多个乘累加指令组,可以同时进行乘计算和加计算,使得单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果先写入对应的寄存器,在相关数据处理完成时,在基于该相关数据和寄存器中的数据进行累加生成加计算结果,进一步提高了乘累加运算的计算速度。
附图说明
图1为本发明实施例提供的一种针对乘累加运算的处理装置结构示意图;
图2为本发明实施例提供的一种基于针对乘累加运算的处理装置处理乘累加运算的流程示意图;
图3为本发明实施例提供的乘缓冲单元缓存乘累加指令的示意图;
图4为本发明实施例提供的一种基于针对乘累加运算的处理装置处理乘累加运算的流程示意图之一;
图5为本发明实施例提供的一种基于针对乘累加运算的处理装置处理乘累加运算的流程示意图之二;
图6为本发明实施例提供的一种基于针对乘累加运算的处理装置处理乘累加运算的流程示意图之三;
图7为本发明实施例提供的一种基于针对乘累加运算的处理装置处理乘累加运算的流程示意图之四;
图8为本发明实施例提供的一种基于针对乘累加运算的处理装置处理乘累加运算的流程示意图之五;
图9为本发明实施例提供的一种针对乘累加运算的处理方法的流程图;
图10为本发明实施例提供的一种针对乘累加运算的处理设备的结构图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供一种针对乘累加运算的处理方法及装置,用以解决现有技术中采用乘累加运算单元处理乘累加指令,在乘累加指令之间存在数据相关时,由于存在流水线停顿,且计算并行度低,数据吞吐量低等原因,导致数据处理效率低,同时增加了计算机的功耗的问题。其中,方法和装置是基于同一发明构思的,由于方法及装置解决问题的原理相似,因此装置与方法的实施可以相互参见,重复之处不再赘述。
在现有技术中,乘累加运算单元在处理多个乘累加指令时,由于乘累加指令之间存在数据相关,因此厂商流水线停顿,进而导致计算并行度低,数据吞吐量低,降低了数据处理效率;采用本发明实施例提供的技术方案,乘调度单元依次读取乘累加指令,对读取的乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元,乘运算单元针对乘累加指令进行处理得到加操作数,并将该加操作数、乘调度单元为该乘累加指令分配的寄存器标识作为二元组发送至加缓冲单元,令其缓存,加调度单元读取加缓冲单元缓存的一个二元组作为基准二元组,同时加缓冲单元删除该基准二元组,若在加缓冲单元中存在包含的寄存器标识与基准二元组相同的关联二元组,则加调度单元读取该关联二元组,否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;加运算单元根据第一加操作数和第二加操作数生成加计算结果后,加调度单元在第二加操作数是关联二元组中包括的加操作数时,将该加计算结果、基准二元组中的寄存器标识作为新的二元组缓存至加缓冲单元;在第二加操作数为寄存器中存储的数据时,将加计算结果存储到该寄存器中。这样,该针对乘累加运算的处理装置作为单个乘累加单元可以同时处理多个乘累加指令组,可以同时进行乘计算和加计算,使得单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果先写入对应的寄存器,在相关数据处理完成时,在基于该相关数据和寄存器中的数据进行累加生成加计算结果,进一步提高了乘累加运算的计算速度,降低了计算机的功耗。
下面结合附图对本发明优选的实施方式进行详细说明。
参阅图1所示,本发明实施例提供的一种针对乘累加运算的处理装置,应用于各类计算设备中,该装置100包括:乘调度单元102、乘运算单元103、加缓冲单元104、加调度单元105,以及加运算单元106,其中,
乘调度单元102,用于依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元103;
乘运算单元103,用于依次对乘调度单元102发送的每个乘累加指令分别执行:对该该乘累加指令进行处理得到加操作数,并将得到的加操作数和乘调度单元102为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元104;
加缓冲单元104,用于缓存乘运算单元103针对每个乘累加指令发送的二元组,并在加调度单元105读取缓存的一个二元组后,删除被读取的二元组;
加调度单元105,用于读取加缓冲单元104中缓存的一个二元组作为基准二元组,若在加缓冲单元104缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,该关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;
加运算单元106,对加调度单元105确定的第一加操作数、第二加操作数进行加法计算,生成加计算结果,并将加计算结果返回加调度单元105;
加调度单元105,还用于在第二加操作数为关联二元组中包括的加操作数时,在加缓冲单元104中缓存一个新的二元组,该新的二元组中的加操作数为该加计算结果,该新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将该加计算结果存储到该寄存器中。
可选的,乘运算单元103为基本乘法器(Multiplier,Mul),加运算单元106为基本加法器,即算数逻辑单元(Arithmetic Logic Unit,ALC)。
可选的,该装置100还包括:乘缓冲单元101,用于依次接收并缓存每个乘累加指令;
乘调度单元102,用于依次从乘缓冲单元101中读取缓存的每个乘累加指令;
乘缓冲单元101,还用于在乘调度单元102读取缓存的一个乘累加指令后,删除被读取的乘累加指令。
其中,乘缓冲单元101和加缓冲单元104均由先进先出的缓冲器件构成。在后续单元读取乘缓冲单元101或加缓冲单元104中缓冲的内容后,乘缓冲单元101和加缓冲单元104删除该内容,并将删除该内容后剩下的内容均进行迁移,例如,加缓冲单元104中四个0-3存储位置中按照先后顺序依次保存2,4,5,6,那么从0存储位置取出最先缓存的2时,加缓冲单元104中0-3存储位置中保存的内容分别为4,5,6,空(或最新缓冲内容)。
乘缓冲单元101可以缓存的乘累加指令个数可以根据乘缓冲单元101的配置进行设定,或者用户根据实际应用场景具体配置,同理,加缓冲单元104中缓存的加操作数的个数也可以根据加缓冲单元104的配置进行设定,或者用户根据实际应用场景具体配置。
可选的,乘缓冲单元101,具体用于:依次接收乘累加指令组中的每个乘累加指令,其中,乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
乘累加指令中还包含指令类型,指令类型用于指示该乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
乘调度单元102,具体用于:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当该指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当该指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
这样,由于乘累加指令组中每个乘累加指令的乘计算结果进行累加计算,得到该乘累加指令组的最终计算结果。因此,乘调度单元102为每个乘累加指令组分配一个对应的寄存器,用于存储每个乘累加指令组的计算结果。不同的乘累加指令对应的寄存器不同。
可选的,乘调度单元102,还用于:
为该乘累加指令分配新的寄存器标识后,将该新的寄存器标识对应的寄存器中存储的数据进行清零。
当为一个乘累加指令组中首个乘累加指令分配累加寄存器标识后,即为该乘累加指令分配对应的累加寄存器后,将该累加寄存器中的数据进行清零,保证最终该累加寄存器中保存的数据为乘累加指令组中的每个乘累积指令的乘计算结果的累加计算结果。
可选的,乘调度单元102,具体用于:按照先进先出的原则,读取乘缓冲单元101中当前最先缓存的乘累加指令。
由于乘缓冲单元101为由先进先出的缓冲器件构成,因此,只能按照先进先出的原则,选择当前乘缓冲单元101中,最先缓存的乘累加指令。在乘调度单元102读取该最先缓存的乘累加指令后,乘缓冲单元101删除被读取的乘累加指令,这样,保证乘缓冲单元101中下一条乘累加指令作为当前时刻的最先缓存的乘累加指令,乘调度单元102可以继续读取到该下一条乘累加指令。
可选的,乘调度单元102,用于:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
在乘调度单元102读取乘累加指令后,还需要对乘累加指令中包含的操作数进行判断,若第一源操作数和第二源操作数中任一项的数值为0,则可以肯定该乘累加指令中两个源操作数进行相乘,得到的乘计算结果为0,若直接进行后续步骤,将该乘累加指令发送到乘运算单元,不仅会造成计算资源浪费,也增加运算时间。因此,可以直接舍弃,节省了计算资源,缩减了运算时间,提高了计算效率。
可选的,乘调度单元102,还用于:
针对读取的每个乘累加指令执行:
在为该乘累加指令分配寄存器标识后,在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并
将生成的加操作数和乘调度单元102为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;以及
在将分配寄存器标识后的该乘累加指令发送到乘运算单元103之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1;
加缓冲单元104,还用于缓存乘调度单元102发送的该乘累加指令对应的二元组。
在乘调度单元102读取乘累加指令,分配寄存器标识后,还可以对该乘累加指令中包含的操作数进行进一步判断,若第一源操作数和第二源操作数中每一项的数值不为0,且其中一项为1或-1,可以肯定该乘累加指令中两个源操作数进行相乘,得到的乘计算结果为另一项或另一项的负数,同时,若直接进行后续步骤,将该乘累加指令发送到乘运算单元103,不仅会造成资源浪费,也增加运算时间。因此,可以直接生成乘计算结果,并将乘计算结果作为加操作数,基于该加操作数和乘调度单元102为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元104,节省了计算资源,缩减了运算时间,提高了计算效率。
通过以上方法,尤其是将以上两种方式进行结合,在乘累加指令中包含0,1,-1,这些特殊数据的源操作数时,不需要经过乘运算单元的处理,即不经过乘运算流水线,可以提高数据运算速度,对于包含多个特殊数据的乘累加指令组,如在计算包含稀疏矩阵的乘法运算时,可以显著提高数据运算速度,节省了计算资源。
可选的,乘调度单元102,用于:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘运算单元103后,确定乘缓冲单元101中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取乘缓冲单元101中当前最先缓存的乘累加指令,直至该时钟周期结束,在下一个时钟周期,继续读取乘缓冲单元101中当前最先缓存的乘累加指令。
由于乘运算单元103的每个流水线在一个时钟周期只能处理一个乘累加指令,若一个流水线处理多个乘累加指令,会造成运行故障,以及计算结果出错等问题,因此,为了保证乘运算单元103的安全性,通过以上方式,乘调度单元102在一个时钟周期内,只向乘运算单元103发送一个乘累加指令。
可选的,加调度单元105,具体用于:
按照先进先出的原则,读取加缓冲单元104中最先缓存的二元组作为基准二元组。
由于加缓冲单元104为按照先进先出的原则进行缓存的,因此,读取基准二元组相关联的关联二元组时,该关联二元组在加缓冲单元104中的缓存位置与基准二元组相邻,即关联二元组是加缓冲单元在删除基准二元组后,加缓冲单元104中最先缓存的二元组。
采用本发明实施例提供的针对乘累加运算的处理装置,乘调度单元依次读取乘累加指令后为其分配寄存器标识,并将分配了寄存器标识的乘累加指令发送到乘运算单元,乘运算单元针对乘累加指令进行处理得到加操作数,并将该加操作数、乘调度单元为该乘累加指令分配的寄存器标识作为二元组发送至加缓冲单元,令其缓存,加调度单元读取加缓冲单元缓存的一个二元组作为基准二元组,同时加缓冲单元删除该基准二元组,若在加缓冲单元中存在包含的寄存器标识与基准二元组相同的关联二元组,则加调度单元读取该关联二元组,否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;加运算单元根据第一加操作数和第二加操作数生成加计算结果后,加调度单元在第二加操作数是关联二元组中包括的加操作数时,将该加计算结果、基准二元组中的寄存器标识作为新的二元组缓存至加缓冲单元;在第二加操作数为寄存器中存储的数据时,将加计算结果存储到该寄存器中。这样,该针对乘累加运算的处理装置可以作为单个乘累加单元可以同时处理多个乘累加指令组,可以同时进行乘计算和加计算,使得单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果先写入对应的寄存器,在相关数据处理完成时,在基于该相关数据和寄存器中的数据进行累加生成加计算结果,进一步提高了乘累加运算的计算速度。进一步的,乘调度单元在读取乘累加指令后,在确定乘累加指令中的第一源操作数、第二源操作数中包含0,或1,或-1这些特殊数值时,直接对该乘累加指令进行处理,而不将该乘累加指令发送到乘运算单元进行计算,节省了计算资源,缩减了运算时间,提高了计算效率,降低了计算机的功耗。
基于以上本发明实施例提供的针对乘累加运算的处理装置,参阅图2所示,采用该装置处理乘累加指令的具体处理流程,包括:
第一步:乘缓冲单元依次接收并缓存乘累加指令组中每个乘累加指令。
其中,乘累加指令组为对编译生成的各个乘累加指令进行分组得到的。
具体的,乘缓冲单元根据存储位置的数目缓存与该数目相同的乘累加指令,在存储位置的数目大于一个乘累加指令组中乘累加指令的数目时,该乘缓冲单元可以继续缓存下一个乘累加指令组中的部分或全部乘累加指令;在存储位置的数目小于一个乘累加指令组中乘累加指令的数目时,先缓存存储位置的数目的乘累积指令,并在乘调度单元取出最先缓存的乘累加指令后,不断将其余的乘累加指令存储进去。
每个乘累加指令包含第一源操作数和第二源操作数,可选的,还包含指令类型,例如,乘累加指令一:MACC X,Y;乘累加指令二MAC X,Y,其中,乘累加指令一为乘累加指令组中的首个乘累加指令,由于乘缓冲单元是按照顺序依次存储的,因此,从乘累加指令一开始,直至下一个乘累加指令一出现前的乘累加指令,这下乘累加指令为一个乘累加指令组,需要分配一个寄存器;乘累加指令二为乘累加指令组中的非首个乘累加指令,乘累加指令二所在的乘累加指令组为乘缓冲单元中,先于该乘累加指令缓存的,距离该乘累加指令二最近的指令类型为MACC的乘累加指令所在的乘累加指令组。
第二步:乘调度单元在确定乘缓冲单元中缓存有乘累加指令后,为乘缓冲单元中最先缓存的乘累加指令分配寄存器标识,若该乘累加指令包含0,1,-1等特殊源操作数,则直接对该乘累加指令进行处理,舍弃或产生加操作数;否则,将乘累加指令发送至乘运算单元。
首先,针对乘累加运算的处理装置还包括寄存器组,或者与寄存器组相连,寄存器组中的多个寄存器保证该装置可以同时运行多组乘累加指令,该寄存器组中的寄存器的数目可以根据实际应用场景具体设置,本发明对此不做限定。
具体的,乘调度单元为乘缓冲单元中最先缓存的乘累加指令分配寄存器标识,包括:
确定乘缓冲单元中最先缓存的乘累加指令包含的指令类型;
当该指令类型指示该乘累加指令为该乘累加指令所属乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当该指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令组中首个乘累加指令分配的累加寄存器标识作为该乘累加指令的累加寄存器标识。
其中,为乘累加指令分配新的累加寄存器标识后,将新的寄存器标识对应的寄存器中的数据进行清零。
根据以上论述可知,在出现指令类型为MACC的乘累加指令时,说明开始新的乘累加指令组处理,乘调度单元为该新的乘累加指令组分配一个寄存器标识ACC0,并保存;乘调度在出现下个指令类型为MACC的乘累加指令之前,将后续处理的其它指令类型为MAC的乘累加指令分配最后保存的寄存器标识ACC0。
具体的,该乘调度单元还用于对乘累加指令中的源操作数进行判断及处理,包括:
当该乘累加指令中的第一源操作数和第二源操作数中任一项的数值为0时,将该乘累加指令舍弃;或者
当该乘累加指令中的第一源操作数和第二源操作数中每一项的数值不为0,且其中任一项的数值为1或-1时,根据另一项的数值直接生成加操作数,并将该加操作数、为该乘累加指令分配的寄存器标识作为二元组,发送到加缓冲单元。
这样,具有0,1,-1这些特殊数据的乘累加指令可以不用经过乘运算单元的处理,节省了计算资源,提高了计算速度,由于在计算包含多个特殊数据的乘累加指令组中,计算速度可以显著提高。
第三步:乘调度单元为乘缓冲单元中最先缓存的乘累加指令分配寄存器标识后,乘缓冲单元将该乘累加指令删除,并将剩余的乘累加指令进行迁移。
第四步:针对乘调度单元发送的乘累加指令,对第一源操作数、第二源操作数进行乘法计算,得到加操作数,并将得到的加操作数和乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元。
第五步:加缓冲单元按照接收的先后顺序缓存乘调度单元、乘运算单元发送的二元组。
第六步:加调度单元读取加缓冲单元中最先缓存的二元组作为基准二元组,加缓冲单元删除该基准二元组。
第七步:加调度单元确定在加缓冲单元中当前最先缓存的二元组是基准二元组的关联二元组时,读取该关联二元组,加缓冲单元删除该基准二元组,其中,关联二元组与基准二元组包含的寄存器标识相同;加调度单元确定在加缓冲单元中不包含基准二元组的关联二元组时,读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数,并将第一加操作数、第二加操作数发送至加计算单元。
第八步:加运算单元对加调度单元中发送的第一加操作数、第二加操作数,进行加法计算,生成加计算结果,并将加计算结果返回加调度单元。
第九步:接收加运算单元返回的加计算结果,在第二加操作数为关联二元组中包括的加操作数时,将该加计算结果继续作为加操作数,并基于该加操作数、基准二元组中的寄存器生成新的二元组缓存至加缓冲单元;在第二加操作数为寄存器中存储的数据时,将该加计算结果存储到该寄存器中。
第二步至第九步会循环执行,直至乘缓冲单元中不存在缓冲的乘累加指令结束。
通过上述针对乘累加运算的处理装置处理乘累加运算时,可以同时处理多个乘累加指令组,且在同一个时钟周期内,可以同时处理多条乘累加指令,也可以同时进行乘计算和加计算,使得单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果写入对应累加寄存器,在相关数据处理完成时,在基于该相关数据和累加寄存器中的数据进行累加生成累加结果,进一步提高了乘累加运算的计算速度;在对乘累加指令处理过程中,将具有0,1,-1这些特殊数据的乘累加指令可以不用经过乘运算单元的处理,节省了计算资源,提高了计算速度,由于在计算包含多个特殊数据的乘累加指令组中,计算速度可以显著提高。
例如,通过上述针对乘累加运算的处理装置,计算矩阵C8,8=矩阵A8,8*矩阵B8,8:
其中,矩阵A中第一行Α1,j=[2 -1 0 0 1 2 0 0],矩阵B中第一列Βi,1=[3 0 00 3 1 -1 1]Τ,则在计算矩阵C中第一个元素C1,1时,需要将矩阵A的第一行和矩阵B的第一列进行乘累加运算,即
C1,1=A1,1*B1,1+A1,2*B2,1+A1,3*B3,1+A1,4*B4,1+A1,5*B5,1+A1,6*B6,1+A1,7*B7,1+A1,8*B8,1
根据该公式进行译码后产生的乘累加指令如下:
Inst1:MACC A1,1,B1,1;
Inst2:MAC A1,2,B2,1;
Inst3:MAC A1,3,B3,1;
Inst4:MAC A1,4,B4,1;
Inst5:MAC A1,5,B5,1;
Inst6:MAC A1,6,B6,1;
Inst7:MAC A1,7,B7,1;
Inst8:MAC A1,8,B8,1;
若乘缓冲单元中可以存放8条指令,则可以将Inst1-Inst8全部缓存进乘缓冲单元中,参阅图3所示,其中,Inst1-Inst8为一乘累加指令组;
在乘缓冲单元中缓存有乘累加指令时,乘调度单元为乘缓冲单元中最先缓存的乘累加指令分配累加寄存器标识,即首先为Inst1分配累加寄存器标识,由于该Inst1的指令类型为MACC,所以为该乘累加指令分配新的累加寄存器标识ACC0,同时,将累加寄存器标识ACC0对应的累加寄存器中的数据进行清零;
判断该Inst1中的第一源操作数、第二源操作数中是否包含特殊数据,由于Inst1中的操作数为2,3,所以直接将Inst1发送至乘运算单元进行乘法计算;
乘缓冲单元将分配了累加寄存器标识的指令删除,这时,Inst2为乘缓冲单元中最先缓存的的乘累加指令,乘调度单元继续为Inst2分配累加寄存器标识,由于Inst2以及后续Inst3-Inst8的指令类型均为MAC,确定Inst2-Inst8与Inst1属于同一乘累加指令组,按照如上方式,为Inst2-Inst8分配累加寄存器标识ACC0;且乘调度单元在分别为每个乘累加指令分配累加寄存器标识后,在该乘累加指令中的源操作数中包含特殊值0时,直接舍弃该乘累加指令;在该乘累加指令中的源操作数不包含特殊值0,但其中一个源操作数为1或-1时,直接根据另一个源操作数生成乘计算结果,例如,Inst2、Inst3、Inst4、Inst7、Inst8,中的源操作数均包含0,因此,需要舍弃,另外,Inst5、Inst6中的源操作数包含1,可以直接生成乘法计算结果,将生成的计算结果作为加操作数,并将生成的加操作数和ACC0发送至加缓冲单元,如图4所示;
若当前为时刻A,时钟周期为T;在加缓冲单元中缓存有加操作数时,加调度单元将加缓冲单元中最先缓存的加操作数作为第一加操作数,即将Inst5生成的加操作数3作为第一加操作数,第一加操作数对应的ACC0为第一累加寄存器标识,同时,加调度单元确定加缓冲单元中包含对应的累加寄存器与ACC0相同的加操作数——Inst6生成的加操作数2,将2作为第二加操作数,并将2,3发送至加运算单元,加缓冲单元删除第一加操作数、第二加操作数,参阅图5所示;加运算单元根据接收的两个加操作数生成加计算结果5,并将5,以及第一累加寄存器标识ACC0返回至加缓冲单元,参阅图6所示,由于加法操作需要两个时钟周期,因此,此时的时刻为A+2T,由于乘运算单元处理Inst1需要3个时钟周期,因此,此时,加缓冲单元中只有一个加操作数5;
加调度单元将加缓冲单元中最先缓存的加操作数5作为第一加操作数,ACC0作为第一累加寄存器标识,加缓冲单元删除第一加操作数,加调度单元确定加缓冲单元中无累加寄存器标识与第一累加寄存器标识相同的加操作数,则将第一累加寄存器标识对应的累加寄存器中的数据0作为第二加操作数,将5,0发送至加运算单元,加运算单元得到加计算结果5,返回至加调度单元;加调度单元再将加计算结果5保存至ACC0对应的累加寄存器,当前时刻为A+4T,乘运算单元生成Inst1的乘计算结果6,保存至加缓冲单元中,参阅图7所示;
加调度单元将加缓冲单元中最先缓存的加操作数6作为第一加操作数,ACC0作为第一累加寄存器标识,加缓冲单元删除第一加操作数,加调度单元确定加缓冲单元中无累加寄存器标识与第一累加寄存器标识相同的加操作数,则将第一累加寄存器标识对应的累加寄存器中的数据5作为第二加操作数,将6,5发送至加运算单元,加运算单元得到加计算结果11,返回至加调度单元;加调度单元再将加计算结果11保存至ACC0对应的累加寄存器,当前时刻为A+6T,参阅图8所示;
在后续生成的加操作数对应的累加寄存器均不为ACC0时,ACC0中保存的数据11,即为矩阵C中第一个元素C1,1的最后取值。
在上述实施例中,仅以针对乘累加运算的处理装置处理一个乘累加指令组为例,在乘缓冲单元中缓存多个乘累加指令组时,该装置可以同时处理多个乘累加指令组,并通过乘调度单元为各个乘累加指令组分配的累加寄存器标识进行区分,使累加结果准确无误。
显然,通过上述实施例可知,该针对乘累加运算的处理装置可以同时处理多个乘累加指令组,且在同一个时钟周期内,可以同时处理多条乘累加指令,也可以同时进行乘计算和加计算,使得单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,降低了计算机的功耗,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果写入对应累加寄存器,在相关数据处理完成时,在基于该相关数据和累加寄存器中的数据进行累加生成累加结果,进一步提高了乘累加运算的计算速度;在对乘累加指令处理过程中,将具有0,1,-1这些特殊数据的乘累加指令可以不用经过乘运算单元的处理,节省了计算资源,提高了计算速度,由于在计算包含多个特殊数据的乘累加指令组中,计算速度可以显著提高。
需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
基于以上实施例,本发明实施例还提供了一种针对乘累加运算的处理方法,参阅图9所述,该方法的流程为:
步骤901:依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘法器。
可选的,依次读取每个乘累加指令之前,还包括:
依次接收并缓存每个乘累加指令。
在接收并缓存每个乘累加指令后,在读取一个乘累加指令后,还包括:
在缓存的乘累加指令中,删除被读取的该乘累加指令。
可选的,依次接收并缓存每个乘累加指令,包括:
依次接收乘累加指令组中的每个乘累加指令,该乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
乘累加指令中还包含指令类型,指令类型用于指示该乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
可选的,对读取的每个乘累加指令分配寄存器标识,包括:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当该指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当该指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
同一个乘累加指令组中所有乘累加指令的乘计算结果需要进行累加,得到一个最终计算结果,存储到累加寄存器中,因此,需要为每个乘累加指令组分配一个对应的寄存器,用于存储每个乘累加指令组的计算结果。不同的乘累加指令对应的寄存器不同。
可选的,在为该乘累加指令分配新的寄存器标识后,还包括:
将该新的寄存器标识对应的寄存器中存储的数据进行清零。
当为一个乘累加指令组中首个乘累加指令分配累加寄存器标识后,即为该乘累加指令分配对应的累加寄存器后,将该累加寄存器中的数据进行清零,保证最终该累加寄存器中保存的数据为乘累加指令组中的每个乘累积指令的乘计算结果的累加计算结果。
可选的,依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,包括:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
通过以上方式,在读取乘累加指令后,还需要对乘累加指令中包含的操作数进行判断,若第一源操作数和第二源操作数中任一项的数值为0,则可以肯定该乘累加指令中两个源操作数进行相乘,得到的乘计算结果为0,若直接进行后续步骤,将该乘累加指令发送到乘法器,不仅会造成计算资源浪费,也增加运算时间。因此,可以直接舍弃,节省了计算资源,缩减了运算时间,提高了计算效率。
在对读取的每个乘累加指令分配寄存器标识后,还包括:
在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并将生成的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;以及
在将分配寄存器标识后的该乘累加指令发送到乘法器之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1。
通过以上方式,在读取乘累加指令,分配寄存器标识后,还可以对该乘累加指令中包含的操作数进行进一步判断,若第一源操作数和第二源操作数中每一项的数值不为0,且其中一项为1或-1,可以肯定该乘累加指令中两个源操作数进行相乘,得到的乘计算结果为另一项或另一项的负数,同时,若直接进行后续步骤,将该乘累加指令发送到乘乘法器,不仅会造成资源浪费,也增加运算时间。因此,可以直接生成乘计算结果,并将乘计算结果作为加操作数,基于该加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组进行缓存,节省了计算资源,缩减了运算时间,提高了计算效率。
通过以上方法,尤其是将以上两种方式进行结合,在乘累加指令中包含0,1,-1,这些特殊数据的源操作数时,不需要经过乘运算单元的处理,即不经过乘运算流水线,可以提高数据运算速度,对于包含多个特殊数据的乘累加指令组,如在计算包含稀疏矩阵的乘法运算时,可以显著提高数据运算速度,节省了计算资源。
可选的,读取一个乘累加指令,包括:
按照先进先出的原则,读取缓存的乘累加指令中当前最先缓存的乘累加指令。
可选的,依次读取每个乘累加指令,包括:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘法器后,确定缓存的乘累加指令中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取缓存的乘累加指令中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取缓存的乘累加指令中当前最先缓存的乘累加指令。
由于乘法器的每个流水线在一个时钟周期只能处理一个乘累加指令,若一个流水线处理多个乘累加指令,会造成运行故障,以及计算结果出错等问题,因此,为了保证乘法器的安全性,通过以上方式,在一个时钟周期内,只向乘法器发送一个乘累加指令。
步骤902:获得该乘法器对接收的该乘累加指令进行处理得到加操作数,并将得到的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存。
具体的,对乘累加指令进行缓存时,是缓存至第一缓冲器,而对二元组进行缓存时,是缓存至第二缓冲器,将不同的对象缓存至不同的缓冲器,是方便读取时,可以准确读取需要读取的对象。
步骤903:在缓存的二元组中读取一个二元组作为基准二元组,并在缓存的二元组中删除该基准二元组,若在缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,并在缓存二元组中删除该关联二元组,该关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数,将第一加操作数、第二加操作数发送到加法器。
可选的,在缓存的二元组中读取一个二元组作为基准二元组,包括:
按照先进先出的原则,读取缓存的二元组中最先缓存的二元组作为基准二元组。
可选的,由于二元组是按照先进先出的原则进行缓存的,因此,读取基准二元组相关联的关联二元组时,该关联二元组的缓存位置与基准二元组相邻,即关联二元组是在删除缓存的二元组中的基准二元组后,最先缓存的二元组。
步骤904:获取该加法器对确定的第一加操作数、第二加操作数进行加法计算,生成的加计算结果。
步骤905:在第二加操作数为关联二元组中包括的加操作数时,缓存一个新的二元组,该新的二元组中的加操作数为所述加计算结果,该新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将该加计算结果存储到所述寄存器中。
采用本发明上述实施例中的针对乘累加运算的处理方法,依次读取乘累加指令后为其分配寄存器标识,并将分配了寄存器标识的乘累加指令发送到乘法器,在乘法器针对乘累加指令进行处理得到加操作数,将该加操作数、为该乘累加指令分配的寄存器标识作为二元组,进行缓存,在缓存的二元组中读取一个二元组作为基准二元组,同时在缓存的二元组中删除该基准二元组,若在缓存的未被读取的二元组中存在包含的寄存器标识与基准二元组相同的关联二元组,则读取该关联二元组,并在缓存的二元组中删除该关联二元组;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数,将第一加操作数、第二加操作数发送到加法器;获取加法器根据第一加操作数和第二加操作数生成加计算结果,在第二加操作数是关联二元组中包括的加操作数时,将该加计算结果、基准二元组中的寄存器标识作为新的二元组进行缓存;在第二加操作数为寄存器中存储的数据时,将加计算结果存储到该寄存器中。通过以上方法,可以同时处理多个乘累加指令组,可以同时进行乘计算和加计算,使得运用该方法的单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果先写入对应的寄存器,在相关数据处理完成时,在基于该相关数据和寄存器中的数据进行累加生成加计算结果,进一步提高了乘累加运算的计算速度。进一步的,在读取乘累加指令后,在确定乘累加指令中的第一源操作数、第二源操作数中包含0,或1,或-1这些特殊数值时,直接对该乘累加指令进行处理,而不将该乘累加指令发送到乘法器进行计算,节省了计算资源,缩减了运算时间,提高了计算效率。
基于以上实施例,本发明还提供了一种针对乘累加运算的处理设备,参阅图10所示,该设备1000包括:收发器1001、处理器1002、总线1003以及存储器1004,其中:
收发器1001、处理器1002以及存储器1004通过总线1003相互连接;总线1003可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
收发器1001用于与该设备1000相连的其它设备进行通信,如在乘累加指令存储在其它设备中时,读取乘累加指令等。
处理器1002用于实现本发明实施例图9所示的针对乘累加运算的处理方法,其中,处理器1002中包含乘法器和加法器,该方法包括:
依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘法器;
获得该乘法器对接收的该乘累加指令进行处理得到加操作数,并将得到的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;
在缓存的二元组中读取一个二元组作为基准二元组,并在缓存的二元组中删除该基准二元组,若在缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,并在缓存二元组中删除该关联二元组,该关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数,将第一加操作数、第二加操作数发送到加法器;
获取该加法器对确定的第一加操作数、第二加操作数进行加法计算,生成的加计算结果;
在第二加操作数为关联二元组中包括的加操作数时,缓存一个新的二元组,该新的二元组中的加操作数为该加计算结果,该新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将该加计算结果存储到所述寄存器中。
可选的,依次读取每个乘累加指令之前,还包括:
依次接收并缓存每个乘累加指令;
在读取一个乘累加指令后,还包括:
在缓存的乘累加指令中,删除被读取的该乘累加指令。
可选的,依次接收并缓存每个乘累加指令,包括:
依次接收乘累加指令组中的每个乘累加指令,该乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
乘累加指令中还包含指令类型,该指令类型用于指示该乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
对读取的每个乘累加指令分配寄存器标识,包括:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当该指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当该指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
可选的,在为该乘累加指令分配新的寄存器标识后,还包括:
将该新的寄存器标识对应的寄存器中存储的数据进行清零。
可选的,依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,包括:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
可选的,在对读取的每个乘累加指令分配寄存器标识后,还包括:
在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并将生成的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;以及
在将分配寄存器标识后的该乘累加指令发送到乘法器之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1。
可选的,读取一个乘累加指令,包括:
按照先进先出的原则,读取缓存的乘累加指令中当前最先缓存的乘累加指令。
可选的,依次读取每个乘累加指令,包括:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘法器后,确定缓存的乘累加指令中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取缓存的乘累加指令中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取缓存的乘累加指令中当前最先缓存的乘累加指令。
可选的,在缓存的二元组中读取一个二元组作为基准二元组,包括:
按照先进先出的原则,读取缓存的二元组中最先缓存的二元组作为基准二元组。
该设备1000还包括存储器1004,用于存放程序、缓存乘累加指令、二元组等。具体地,程序可以包括程序代码,该程序代码包括计算机操作指令。存储器604可能包含随机存取存储器(random access memory,RAM),也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器,还包含缓冲器。处理器1002执行存储器1004所存放的应用程序,实现如上针对乘累加运算的处理方法。
采用本发明实施例中提供的方法和装置,乘调度单元依次读取乘累加指令,对读取的乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元,乘运算单元针对乘累加指令进行处理得到加操作数,并将该加操作数、乘调度单元为该乘累加指令分配的寄存器标识作为二元组发送至加缓冲单元,令其缓存,加调度单元读取加缓冲单元缓存的一个二元组作为基准二元组,同时加缓冲单元删除该基准二元组,若在加缓冲单元中存在包含的寄存器标识与基准二元组相同的关联二元组,则加调度单元读取该关联二元组,否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;加运算单元根据第一加操作数和第二加操作数生成加计算结果后,加调度单元在第二加操作数是关联二元组中包括的加操作数时,将该加计算结果、基准二元组中的寄存器标识作为新的二元组缓存至加缓冲单元;在第二加操作数为寄存器中存储的数据时,将加计算结果存储到该寄存器中。这样,该针对乘累加运算的处理装置作为单个乘累加单元可以同时处理多个乘累加指令组,可以同时进行乘计算和加计算,使得单个乘累加单元的IPC大于1,提高了计算并行度、数据吞吐量,以及数据处理效率,同时,在乘累加指令之间存在数据相关时,无需流水线停顿,可以直接将加计算结果先写入对应的寄存器,在相关数据处理完成时,在基于该相关数据和寄存器中的数据进行累加生成加计算结果,进一步提高了乘累加运算的计算速度。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (20)
1.一种针对乘累加运算的处理装置,其特征在于,包括:
乘调度单元,用于依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元;
乘运算单元,用于依次对所述乘调度单元发送的每个乘累加指令分别执行:对该乘累加指令进行处理得到加操作数,并将得到的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;
加缓冲单元,用于缓存所述乘运算单元针对每个乘累加指令发送的二元组,并在加调度单元读取缓存的一个二元组后,删除被读取的二元组;
加调度单元,用于读取所述加缓冲单元中缓存的一个二元组作为基准二元组,若在加缓冲单元缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,所述关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;
加运算单元,用于对所述加调度单元确定的第一加操作数、第二加操作数进行加法计算,生成加计算结果,并将加计算结果返回所述加调度单元;
所述加调度单元,还用于在第二加操作数为关联二元组中包括的加操作数时,在所述加缓冲单元中缓存一个新的二元组,所述新的二元组中的加操作数为所述加计算结果,所述新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将所述加计算结果存储到所述寄存器中。
2.如权利要求1所述的装置,其特征在于,还包括:
乘缓冲单元,用于依次接收并缓存每个乘累加指令;
所述乘调度单元,用于依次从所述乘缓冲单元中读取缓存的每个乘累加指令;
所述乘缓冲单元,还用于在所述乘调度单元读取缓存的一个乘累加指令后,删除被读取的乘累加指令。
3.如权利要求2所述的装置,其特征在于,乘缓冲单元,具体用于:
依次接收乘累加指令组中的每个乘累加指令,所述乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
所述乘累加指令中还包含指令类型,所述指令类型用于指示所述乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
所述乘调度单元,具体用于:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当所述指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当所述指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
4.如权利要求3所述的装置,其特征在于,所述乘调度单元,还用于:
为该乘累加指令分配新的寄存器标识后,将所述新的寄存器标识对应的寄存器中存储的数据进行清零。
5.如权利要求2-4任一项所述的装置,其特征在于,所述乘调度单元,用于:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
6.如权利要求5所述的装置,其特征在于,所述乘调度单元,具体用于:
按照先进先出的原则,读取所述乘缓冲单元中当前最先缓存的乘累加指令。
7.如权利要求2-4任一项所述的装置,其特征在于,所述乘调度单元,还用于:
针对读取的每个乘累加指令执行:
在为该乘累加指令分配寄存器标识后,在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并
将生成的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;以及
在将分配寄存器标识后的该乘累加指令发送到乘运算单元之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1;
所述加缓冲单元,还用于缓存所述乘调度单元发送的该乘累加指令对应的二元组。
8.如权利要求7所述的装置,其特征在于,所述乘调度单元,具体用于:
按照先进先出的原则,读取所述乘缓冲单元中当前最先缓存的乘累加指令。
9.如权利要求6或8所述的装置,其特征在于,所述乘调度单元,用于:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘运算单元后,确定所述乘缓冲单元中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取所述乘缓冲单元中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取所述乘缓冲单元中当前最先缓存的乘累加指令。
10.如权利要求1-4、6以及8中任一项所述的装置,其特征在于,所述加调度单元,具体用于:
按照先进先出的原则,读取所述加缓冲单元中最先缓存的二元组作为基准二元组。
11.一种针对乘累加运算的处理方法,其特征在于,包括:
依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘法器;
获得所述乘法器对接收的该乘累加指令进行处理得到加操作数,并将得到的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;
在缓存的二元组中读取一个二元组作为基准二元组,并在缓存的二元组中删除该基准二元组,若在缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,并在缓存二元组中删除该关联二元组,所述关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数,将第一加操作数、第二加操作数发送到加法器;
获取所述加法器对确定的第一加操作数、第二加操作数进行加法计算,生成的加计算结果;
在第二加操作数为关联二元组中包括的加操作数时,缓存一个新的二元组,所述新的二元组中的加操作数为所述加计算结果,所述新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将所述加计算结果存储到所述寄存器中。
12.如权利要求11所述的方法,其特征在于,依次读取每个乘累加指令之前,还包括:
依次接收并缓存每个乘累加指令;
在读取一个乘累加指令后,还包括:
在缓存的乘累加指令中,删除被读取的该乘累加指令。
13.如权利要求12所述的方法,其特征在于,依次接收并缓存每个乘累加指令,包括:
依次接收乘累加指令组中的每个乘累加指令,所述乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;
所述乘累加指令中还包含指令类型,所述指令类型用于指示所述乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;
对读取的每个乘累加指令分配寄存器标识,包括:
针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;
当所述指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;
当所述指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。
14.如权利要求13所述的方法,其特征在于,在为该乘累加指令分配新的寄存器标识后,还包括:
将所述新的寄存器标识对应的寄存器中存储的数据进行清零。
15.如权利要求12-14任一项所述的方法,其特征在于,依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,包括:
依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;
若是,将该乘累加指令舍弃;
否则,对该乘累加指令分配寄存器标识。
16.如权利要求15所述的方法,其特征在于,读取一个乘累加指令,包括:
按照先进先出的原则,读取缓存的乘累加指令中当前最先缓存的乘累加指令。
17.如权利要求12-14任一项所述的方法,其特征在于,在对读取的每个乘累加指令分配寄存器标识后,还包括:
在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并将生成的加操作数和为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组,进行缓存;以及
在将分配寄存器标识后的该乘累加指令发送到乘法器之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1。
18.如权利要求17所述的方法,其特征在于,读取一个乘累加指令,包括:
按照先进先出的原则,读取缓存的乘累加指令中当前最先缓存的乘累加指令。
19.如权利要求16或18所述的方法,其特征在于,依次读取每个乘累加指令,包括:
在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘法器后,确定缓存的乘累加指令中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取缓存的乘累加指令中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取缓存的乘累加指令中当前最先缓存的乘累加指令。
20.如权利要求11-14、16以及18中任一项所述的方法,其特征在于,在缓存的二元组中读取一个二元组作为基准二元组,包括:
按照先进先出的原则,读取缓存的二元组中最先缓存的二元组作为基准二元组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510331183.XA CN106325812B (zh) | 2015-06-15 | 2015-06-15 | 一种针对乘累加运算的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510331183.XA CN106325812B (zh) | 2015-06-15 | 2015-06-15 | 一种针对乘累加运算的处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106325812A CN106325812A (zh) | 2017-01-11 |
CN106325812B true CN106325812B (zh) | 2019-03-08 |
Family
ID=57732294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510331183.XA Active CN106325812B (zh) | 2015-06-15 | 2015-06-15 | 一种针对乘累加运算的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106325812B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108108150B (zh) * | 2017-12-19 | 2021-11-16 | 云知声智能科技股份有限公司 | 乘累加运算方法及装置 |
CN110765413B (zh) * | 2018-07-25 | 2024-05-07 | 赛灵思公司 | 矩阵求和结构及神经网络计算平台 |
WO2020061762A1 (zh) * | 2018-09-25 | 2020-04-02 | 深圳市大疆创新科技有限公司 | 数据处理装置和方法 |
CN112579042B (zh) * | 2019-09-29 | 2024-04-19 | 广州希姆半导体科技有限公司 | 计算装置及方法、芯片、电子设备及计算机可读存储介质 |
CN112181492A (zh) * | 2020-09-23 | 2021-01-05 | 北京奕斯伟计算技术有限公司 | 一种指令处理方法、指令处理装置和芯片 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176767A (zh) * | 2013-03-01 | 2013-06-26 | 浙江大学 | 一种低功耗高吞吐的浮点数乘累加单元的实现方法 |
CN103294446A (zh) * | 2013-05-14 | 2013-09-11 | 中国科学院自动化研究所 | 一种定点乘累加器 |
US8626815B1 (en) * | 2008-07-14 | 2014-01-07 | Altera Corporation | Configuring a programmable integrated circuit device to perform matrix multiplication |
CN103677739A (zh) * | 2013-11-28 | 2014-03-26 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 |
CN103699355A (zh) * | 2013-12-30 | 2014-04-02 | 南京大学 | 一种变阶流水串行乘累加器 |
CN104252331A (zh) * | 2013-06-29 | 2014-12-31 | 华为技术有限公司 | 乘累加器 |
-
2015
- 2015-06-15 CN CN201510331183.XA patent/CN106325812B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8626815B1 (en) * | 2008-07-14 | 2014-01-07 | Altera Corporation | Configuring a programmable integrated circuit device to perform matrix multiplication |
CN103176767A (zh) * | 2013-03-01 | 2013-06-26 | 浙江大学 | 一种低功耗高吞吐的浮点数乘累加单元的实现方法 |
CN103294446A (zh) * | 2013-05-14 | 2013-09-11 | 中国科学院自动化研究所 | 一种定点乘累加器 |
CN104252331A (zh) * | 2013-06-29 | 2014-12-31 | 华为技术有限公司 | 乘累加器 |
CN103677739A (zh) * | 2013-11-28 | 2014-03-26 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 |
CN103699355A (zh) * | 2013-12-30 | 2014-04-02 | 南京大学 | 一种变阶流水串行乘累加器 |
Also Published As
Publication number | Publication date |
---|---|
CN106325812A (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106325812B (zh) | 一种针对乘累加运算的处理方法及装置 | |
JP7469407B2 (ja) | ニューラルネットワーク計算ユニットにおける入力データのスパース性の活用 | |
Umuroglu et al. | Bismo: A scalable bit-serial matrix multiplication overlay for reconfigurable computing | |
CN109740747B (zh) | 运算方法、装置及相关产品 | |
CN110073329B (zh) | 访存设备、计算设备和应用于卷积神经网络运算的设备 | |
CN105426160B (zh) | 基于sprac v8指令集的指令分类多发射方法 | |
CN108197705A (zh) | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 | |
CN109902819A (zh) | 神经网络计算方法、装置、移动终端及存储介质 | |
US9632790B2 (en) | Select logic for the instruction scheduler of a multi strand out-of-order processor based on delayed reconstructed program order | |
Venkatesh et al. | A case for application-oblivious energy-efficient MPI runtime | |
CN104765640B (zh) | 一种智能服务调度方法 | |
Shin et al. | Deadline-guaranteed scheduling algorithm with improved resource utilization for cloud computing | |
CN102609303B (zh) | MapReduce系统的慢任务调度方法和装置 | |
Huang et al. | Novel heuristic speculative execution strategies in heterogeneous distributed environments | |
CN109144469A (zh) | 流水线结构神经网络矩阵运算架构及方法 | |
CN108304218A (zh) | 一种汇编代码的编写方法、装置、系统和可读存储介质 | |
CN116501505B (zh) | 负载任务的数据流生成方法、装置、设备及介质 | |
KR20210084220A (ko) | 부분 판독/기입을 갖는 재구성 가능한 시스톨릭 어레이를 위한 시스템 및 방법 | |
WO2024103896A1 (zh) | 实现矩阵转置乘的方法、协处理器、服务器及存储介质 | |
JP2023505177A (ja) | 積和演算用のプロセッサ・ユニット | |
CN112051981B (zh) | 一种数据流水线计算路径结构及单线程数据流水线系统 | |
CN107678781A (zh) | 处理器以及用于在处理器上执行指令的方法 | |
Lin et al. | An energy-efficient task scheduler for multi-core platforms with per-core dvfs based on task characteristics | |
CN115408061B (zh) | 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 | |
CN102231624B (zh) | 面向向量处理器的浮点复数块fir的向量化实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210428 Address after: Unit 3401, unit a, building 6, Shenye Zhongcheng, No. 8089, Hongli West Road, Donghai community, Xiangmihu street, Futian District, Shenzhen, Guangdong 518040 Patentee after: Honor Device Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |