【技术实现步骤摘要】
本专利技术涉及计算机
,尤其涉及一种针对成累加运算的处理方法及装置。
技术介绍
在计算机现代图像处理、科学计算、云计算等领域的数据处理过程中,通常存在大量的乘累加运算,如矩阵乘法运算,其基本操作即为乘累加运算。乘累加运算的公式为C+=A*B,表示首先计算A*B,然后将计算结果和累加寄存器C相加,并将相加后的结果写回到累加寄存器中,每个矩阵乘法运算,需要多个乘累加运算单元,其中,每个乘累加运算单元中还包括乘法器和加法器。由于矩阵乘法运算是一种计算密集型的运算,因此,对乘累加运算单元的处理能力的运算效率要求较高,如提高工作主频以及每个时钟周期内处理能力。显然,高速运算,并且能在每个时钟周期内处理多个数据成为乘累加运算单元的发展趋势。然而现有的乘累加运算单元面临以下问题:1、乘累加运算单元可能处理多个乘累加指令,由于乘累加指令之间存在数据相关,因此产生流水线停顿。在连续多条乘累加指令中,若第i个乘累加指令中的加法运算需要多个时钟周期完成,后续的第i+1个乘累加指令在需要读第i个乘累加指令的累加寄存器中的操作数时,第i个乘累加指令中加法运算还没有计算完成,存在数据相关,需要流水线停顿,直至第i个乘累加指令中所有计算完成。2、乘累加运算单元的计算并行度低,数据吞吐量低。由于每个乘累加运算单元在一个时钟周期最内最多只能处理一条乘累加指令,在乘累加指令之间由于数据相关引起的流水线停顿,某些时钟周期可能没有处理乘累加指令而是在流水线停顿状态,因此,实际情况下每一时钟周期内执行的指令数(InstructionPerClock,IPC)小于或等于1。总 ...
【技术保护点】
一种针对乘累加运算的处理装置,其特征在于,包括:乘调度单元,用于依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元;乘运算单元,用于依次对所述乘调度单元发送的每个乘累加指令分别执行:对该该乘累加指令进行处理得到加操作数,并将得到的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;加缓冲单元,用于缓存所述乘运算单元针对每个乘累加指令发送的二元组,并在加调度单元读取缓存的一个二元组后,删除被读取的二元组;加调度单元,用于读取所述加缓冲单元中缓存的一个二元组作为基准二元组,若在加缓冲单元缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,所述关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;加运算单元,用于对所述加调度单元确定的第一加操作数、第二加操作数进行加法计算,生成加计 ...
【技术特征摘要】
1.一种针对乘累加运算的处理装置,其特征在于,包括:乘调度单元,用于依次读取每个乘累加指令,并对读取的每个乘累加指令分配寄存器标识,并将分配寄存器标识后的乘累加指令发送到乘运算单元;乘运算单元,用于依次对所述乘调度单元发送的每个乘累加指令分别执行:对该该乘累加指令进行处理得到加操作数,并将得到的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;加缓冲单元,用于缓存所述乘运算单元针对每个乘累加指令发送的二元组,并在加调度单元读取缓存的一个二元组后,删除被读取的二元组;加调度单元,用于读取所述加缓冲单元中缓存的一个二元组作为基准二元组,若在加缓冲单元缓存的未被读取的二元组中存在一个与基准二元组相关联的关联二元组,则读取确定的关联二元组,所述关联二元组与基准二元组包含的寄存器标识相同;否则读取基准二元组包含的寄存器标识对应的寄存器中存储的数据;以及将基准二元组中包括的加操作数作为第一加操作数,并将关联二元组中包括的加操作数或将寄存器中存储的数据作为第二加操作数;加运算单元,用于对所述加调度单元确定的第一加操作数、第二加操作数进行加法计算,生成加计算结果,并将加计算结果返回所述加调度单元;所述加调度单元,还用于在第二加操作数为关联二元组中包括的加操作数时,在所述加缓冲单元中缓存一个新的二元组,所述新的二元组中的加操作数为所述加计算结果,所述新的二元组中的寄存器标识为基准二元组中的寄存器标识;并在第二加操作数为寄存器中存储的数据时,将所述加计算结果存储到所述寄存器中。2.如权利要求1所述的装置,其特征在于,还包括:乘缓冲单元,用于依次接收并缓存每个乘累加指令;所述乘调度单元,用于依次从所述乘缓冲单元中读取缓存的每个乘累加指
\t令;所述乘缓冲单元,还用于在所述乘调度单元读取缓存的一个乘累加指令后,删除被读取的乘累加指令。3.如权利要求2所述的装置,其特征在于,乘缓冲单元,具体用于:依次接收乘累加指令组中的每个乘累加指令,所述乘累加指令组为对编译生成的各个乘累加指令进行分组得到的;所述乘累加指令中还包含指令类型,所述指令类型用于指示所述乘累加指令是否为该乘累加指令所在的乘累加指令组中的首个乘累加指令;所述乘调度单元,具体用于:针对读取的每个乘累加指令,确定该乘累加指令包含的指令类型;当所述指令类型指示该乘累加指令为该乘累加指令所属的乘累加指令组中的首个乘累加指令时,为该乘累加指令分配新的寄存器标识,并保存该寄存器标识;当所述指令类型指示该乘累加指令不是该乘累加指令所属的乘累加指令组中的首个乘累加指令时,将保存的为该乘累加指令所属的乘累加指令组中首个乘累加指令分配的寄存器标识分配给该乘累加指令。4.如权利要求3所述的装置,其特征在于,所述乘调度单元,还用于:为该乘累加指令分配新的寄存器标识后,将所述新的寄存器标识对应的寄存器中存储的数据进行清零。5.如权利要求2-4任一项所述的装置,其特征在于,所述乘调度单元,用于:依次读取每个乘累加指令,并针对读取的每个乘累加指令执行:确定该乘累加指令中包括的第一源操作数和第二源操作数中任一项的数值是否为0;若是,将该乘累加指令舍弃;否则,对该乘累加指令分配寄存器标识。6.如权利要求2-4任一项所述的装置,其特征在于,所述乘调度单元,
\t还用于:针对读取的每个乘累加指令执行:在为该乘累加指令分配寄存器标识后,在确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值为1或-1时,根据另一项的数值生成加操作数,并将生成的加操作数和所述乘调度单元为该乘累加指令分配的寄存器标识作为该乘累加指令对应的二元组发送到加缓冲单元;以及在将分配寄存器标识后的该乘累加指令发送到乘运算单元之前,确定该乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1;所述加缓冲单元,还用于缓存所述乘调度单元发送的该乘累加指令对应的二元组。7.如权利要求5或6所述的装置,其特征在于,所述乘调度单元,具体用于:按照先进先出的原则,读取所述乘缓冲单元中当前最先缓存的乘累加指令。8.如权利要求7所述的装置,其特征在于,所述乘调度单元,用于:在一个时钟周期内,将分配寄存器标识后的一个乘累加指令发送到乘运算单元后,确定所述乘缓冲单元中当前最先缓存的乘累加指令中包括的第一源操作数和第二源操作数中每一项的数值均不为0、且其中任一项的数值均不为1或-1,暂停读取所述乘缓冲单元中当前最先缓存的乘累加指令,直至所述时钟周期结束,在下一个时钟周期,继续读取所述乘缓冲单元中当前最先缓存的乘累加指令。9.如权利...
【专利技术属性】
技术研发人员:汪涛,张广飞,蔡卫光,
申请(专利权)人:华为技术有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。