一种向量计算装置的制作方法

文档序号:11653945阅读:163来源:国知局
一种向量计算装置的制造方法

本发明涉及一种向量运算装置,用于根据向量运算指令执行向量运算,能够很好地解决当前计算机领域越来越多的算法包含大量向量运算的问题。



背景技术:

当前计算机领域有越来越多的算法涉及到向量运算,以人工神经网络算法为例,多种神经网络算法中都含有大量的向量运算。在神经网络中,输出神经元的运算表达式为y=f(wx+b),其中w是矩阵,x、b是向量,计算输出向量y的过程为矩阵w与向量x相乘,加上向量b,然后对得到的向量进行激活函数运算(即对向量中的每个元素进行激活函数运算)。因此,向量运算成为目前各种计算装置在设计之初都需要考虑的一个重要问题。

在现有技术中,一种进行向量运算的已知方案是使用通用处理器,该方法通过通用寄存器堆和通用功能部件来执行通用指令,从而执行向量运算。然而,该方法的缺点之一是单个通用处理器多用于标量计算,在进行向量运算时运算性能较低。而使用多个通用处理器并行执行时,通用处理器之间的相互通讯又有可能成为性能瓶颈。

在另一种现有技术中,使用图形处理器(gpu)来进行向量计算,其中,通过使用通用寄存器堆和通用流处理单元执行通用simd指令来进行向量运算。然而,上述方案中,gpu片上缓存太小,在进行大规模向量运算时需要不断进行片外数据搬运,片外带宽成为了主要性能瓶颈。

在另一种现有技术中,使用专门定制的向量运算装置来进行向量计算,其中,使用定制的寄存器堆和定制的处理单元进行向量运算。然而,目前已有的专用向量运算装置受限于寄存器堆,不能够灵活地支持不同长度的向量运算。



技术实现要素:

(一)要解决的技术问题

本发明的目的在于,提供一种向量运算装置,解决现有技术中存在的受限于片间通讯、片上缓存不够、支持的向量长度不够灵活等问题。

(二)技术方案

本发明提供一种向量运算装置,用于根据向量运算指令执行向量运算,包括:

存储单元,用于存储向量;

寄存器单元,用于存储向量地址,其中,向量地址为向量在存储单元中存储的地址;

向量运算单元,用于获取向量运算指令,根据向量运算指令在寄存器单元中获取向量地址,然后,根据该向量地址在存储单元中获取相应的向量,接着,根据获取的向量进行向量运算,得到向量运算结果。

(三)有益效果

本发明提供的向量运算装置,将参与计算的向量数据暂存在高速暂存存储器上(scratchpadmemory),使得向量运算过程中可以更加灵活有效地支持不同宽度的数据,提升包含大量向量计算任务的执行性能,本发明采用的指令具有精简的格式,使得指令集使用方便、支持的向量长度灵活。

附图说明

图1是本发明提供的向量运算装置的结构示意图。

图2是本发明提供的指令集的格式示意图。

图3是本发明实施例提供的向量运算装置的结构示意图。

图4是本发明实施例提供的向量运算装置执行向量点积指令的流程图。

图5为本发明实施例提供的向量运算单元的结构示意图。

具体实施方式

本发明提供一种向量计算装置,包括存储单元、寄存器单元和向量运算单元,存储单元中存储有向量,寄存器单元中存储有向量存储的地址向 量运算单元根据向量运算指令在寄存器单元中获取向量地址,然后,根据该向量地址在存储单元中获取相应的向量,接着,根据获取的向量进行向量运算,得到向量运算结果。本发明将参与计算的向量数据暂存在高速暂存存储器上,使得向量运算过程中可以更加灵活有效地支持不同宽度的数据,提升包含大量向量计算任务的执行性能。

图1是本发明提供的向量运算装置的结构示意图,如图1所示,向量运算装置包括:

存储单元,用于存储向量,在一种实施方式中,该存储单元可以是高速暂存存储器,能够支持不同大小的向量数据;本发明将必要的计算数据暂存在高速暂存存储器上(scratchpadmemory),使本运算装置在进行向量运算过程中可以更加灵活有效地支持不同宽度的数据。

寄存器单元,用于存储向量地址,其中,向量地址为向量在存储单元中存储的地址;在一种实施方式中,寄存器单元可以是标量寄存器堆,提供运算过程中所需的标量寄存器,标量寄存器不只存放向量地址,还存放有标量数据。当涉及到向量与标量的运算时,向量运算单元不仅要从寄存器单元中获取向量地址,还要从寄存器单元中获取相应的标量。

向量运算单元,用于获取向量运算指令,根据向量运算指令在所述寄存器单元中获取向量地址,然后,根据该向量地址在存储单元中获取相应的向量,接着,根据获取的向量进行向量运算,得到向量运算结果,并将向量运算结果存储于存储单元中。向量运算单元包含包括向量加法部件、向量乘法部件、大小比较部件、非线性运算部件和向量标量乘法部件,并且,向量运算单元为多流水级结构,其中,向量加法部件和向量乘法部件处于第一流水级,大小比较部件处于第二流水级,非线性运算部件和向量标量乘法部件处于第三流水级。这些单元处于不同的流水级,当连续串行的多条向量运算指令的先后次序与相应单元所在流水级顺序一致时,可以更加高效地实现这一连串向量运算指令所要求的操作。向量运算单元负责装置的所有向量运算,包括但不限于向量加法操作、向量加标量操作、向量减法操作、向量减标量操作、向量乘法操作、向量乘标量操作、向量除法(对位相除)操作、向量与操作和向量或操作,向量运算指令被送往该运算单元执行。

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

根据本发明的一种实施方式,向量运算装置还包括:指令处理单元,用于从指令缓存单元获取向量运算指令,并对该向量运算指令进行处理后,提供给所述向量运算单元。其中,指令处理单元包括:

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

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

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

根据本发明的一种实施方式,向量运算装置还包括:依赖关系处理单元,用于在向量运算单元获取向量运算指令前,判断该向量运算指令与前一向量运算指令是否访问相同的向量,若是,将该向量运算指令存储在一存储队列中,待前一向量运算指令执行完毕后,将存储队列中的该向量运算指令提供给所述向量运算单元;否则,直接将该向量运算指令提供给所述向量运算单元。具体地,向量运算指令访问高速暂存存储器时,前后指令可能会访问同一块存储空间,为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在存储队列内等待至依赖关系被消除。

根据本发明的一种实施方式,向量运算装置还包括:输入输出单元,用于将向量存储于存储单元,或者,从存储单元中获取向量运算结果。其中,输入输出单元可直接存储单元,负责从内存中读取向量数据或写入向量数据。

根据本发明的一种实施方式,用于本发明装置的指令集采用load/store结构,向量运算单元不会对内存中的数据进行操作。本指令集采用精简指令集架构,指令集只提供最基本的向量运算操作,复杂的向量 运算都由这些简单指令通过组合进行模拟,使得可以在高时钟频率下单周期执行指令。另外,本指令集同时采用定长指令,使得本发明提出的向量运算装置在上一条指令的译码阶段对下一条指令进行取指。

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

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

向量加法指令(va)。根据该指令,装置从高速暂存存储器的指定地址处分别取出两块指定大小的向量数据,在向量运算单元中进行加法运算,并将结果写回至高速暂存存储器的指定地址;

向量加标量指令(vas)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,从标量寄存器堆的指定地址取出标量数据,在标量运算单元中将向量的每一个元素加上该标量值,并将结果写回至高速暂存存储器的指定地址;

向量减法指令(vs)。根据该指令,装置从高速暂存存储器的指定地址处分别取出两块指定大小的向量数据,在向量运算单元中进行减法运算,并将结果写回至高速暂存存储器的指定地址;

标量减向量指令(ssv)。根据该指令,装置从标量寄存器堆的指定地址取出标量数据,从高速暂存存储器的指定地址取出向量数据,在向量计算单元中用该标量减去向量中的相应元素,并将结果写回高速暂存存储器的指定地址;

向量乘法指令(vmv)。根据该指令,装置从高速暂存存储器的指定地址分别取出指定大小的向量数据,在向量计算单元中将两向量数据对位相乘,并将结果写回高速暂存存储器的指定地址;

向量乘标量指令(vms)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,从标量寄存器堆的指定地址取出指定大 小的标量数据,在向量寄存单元中进行向量乘标量运算,并将结果写回高速暂存存储器的指定地址;

向量除法指令(vd)。根据该指令,装置从高速暂存存储器的指定地址取出分别取出指定大小的向量数据,在向量运算单元中将两向量对位相除,并将结果写回至高速暂存存储器的指定地址;

标量除向量指令(sdv)。根据该指令,装置从标量寄存器堆的指定位置取出标量数据,从高速暂存存储器的指定位置取出指定大小的向量数据,在向量计算单元中用标量分别除以向量中的相应元素,并将结果写回至高速暂存存储器的指定位置;

向量间与指令(vav)。根据该指令,装置从高速暂存存储器的指定地址取出分别取出指定大小的向量数据,在向量运算单元中将两向量对位相与,并将结果写回至高速暂存存储器的指定地址;

向量内与指令(vand)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,在向量运算单元中向量中每一位相与,并将结果写回至标量寄存器堆的指定地址;

向量间或指令(vov)。根据该指令,装置从高速暂存存储器的指定地址取出分别取出指定大小的向量数据,在向量运算单元中将两向量对位相或,并将结果写回至高速暂存存储器的指定地址;

向量内或指令(vor)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,在向量运算单元中向量中每一位相或,并将结果写回至标量寄存器堆的指定地址;

向量指数指令(ve)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,在向量运算单元中向量中对每一元素进行指数运算,并将结果写回至标量寄存器堆的指定地址;

向量对数指令(vl)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,在向量运算单元中向量中对每一元素进行对数运算,并将结果写回至标量寄存器堆的指定地址;

向量大于判定指令(vgt)。根据该指令,装置从高速暂存存储器中的指定地址分别取出指定大小的向量数据,在向量运算单元中将两向量数据对位比较,前者大于后者在输出向量相应位中置1,否则置0,并将结 果写回至高速暂存存储器的指定地址;

向量等于判定指令(veq)。根据该指令,装置从高速暂存存储器中的指定地址分别取出指定大小的向量数据,在向量运算单元中将两向量数据对位比较,前者等于后者在输出向量相应位中置1,否则置0,并将结果写回至高速暂存存储器的指定地址;

向量非指令(vinv)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,将该向量按位取非,并将结果存回至高速暂存存储器的指定地址;

向量选择合并指令(vmer)。根据该指令,装置从高速暂存存储器的指定地址分别取出指定大小的向量数据,包括选择向量和被选择向量一以及被选择向量二。向量计算单元根据选择向量的元素为1或0从被选择向量一或被选择向量二中选取相应元素作为输出向量里该位置的元素,并将结果写回至高速暂存存储器的指定位置;

向量最大值指令(vmax)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,从中选出最大的元素作为结果,并将结果写回至标量寄存器堆的指定地址;

标量扩展指令(stv)。根据该指令,装置从标量寄存器堆的指定地址取出标量数据,在向量运算单元中,将标量扩展成指定长度的向量,并将结果写回至标量寄存器堆;

标量替换向量指令(stvpn)。根据该指令,装置从标量寄存器堆的指定地址取出标量,从高速暂存存储器的指定地址取出指定大小的向量数据,在向量计算单元中将向量中的指定位置的元素替换成该标量值,并将结果写回至高速暂存存储器的指定地址;

向量替换标量指令(vpnts)。根据该指令,装置从标量寄存器堆的指定地址取出标量,从高速暂存存储器的指定地址取出指定大小的向量数据,在向量计算单元中用向量中的指定位置的元素替换该标量值,并将结果写回至标量寄存器堆的指定地址;

向量检索指令(vr)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,在向量计算单元中根据指定位置取出向量中的相应元素作为输出,并将结果写回至标量寄存器堆的指定地址;

向量点积指令(vp)。根据该指令,装置分别从高速暂存存储器的指定地址取出指定大小的向量数据,在向量计算单元中将两向量进行点积运算,并将结果写回至标量寄存堆得指定地址;

随机向量指令(rv)。根据该指令,装置在向量计算单元中生成范围从0到1的服从均匀分布的随机向量,并将结果写回至高速暂存存储器的指定地址;

循环移位指令(vcs)。根据该指令,装置从高速暂存存储器的指定地址取出指定大小的向量数据,在向量计算单元中将该向量按照指定步长进行循环移位,并将结果写回至高速暂存存储器的指定地址;

向量加载指令(vload)。根据该指令,装置从指定外部源地址载入指定大小的向量数据至高速暂存存储器的指定地址;

向量存储指令(vs)。根据该指令,装置将高速暂存存储器的指定地址的指定大小的向量数据存至外部目的地址处;

向量搬运指令(vmove)。根据该指令,装置将高速暂存存储器的指定地址的指定大小的向量数据存至高速暂存存储器的另一指定地址处。

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

图3是本发明实施例提供的向量运算装置的结构示意图,如图3所示,装置包括取指模块、译码模块、指令队列、标量寄存器堆、依赖关系处理单元、存储队列、重排序缓存、向量运算单元、高速暂存器、io内存存取模块;

取指模块,该模块负责从指令序列中取出下一条将要执行的指令,并将该指令传给译码模块;

译码模块,该模块负责对指令进行译码,并将译码后指令传给指令队列;

指令队列,考虑到不同指令在包含的标量寄存器上有可能存在依赖关系,用于缓存译码后的指令,当依赖关系被满足之后发射指令;

标量寄存器堆,提供装置在运算过程中所需的标量寄存器;

依赖关系处理单元,该模块处理处理指令与前一条指令可能存在的存储依赖关系。向量运算指令会访问高速暂存存储器,前后指令可能会访问 同一块存储空间。为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在存储队列内等待至依赖关系被消除。

存储队列,该模块是一个有序队列,与之前指令在数据上有依赖关系的指令被存储在该队列内直至存储关系被消除;

重排序缓存,指令在执行过程中,同时也被缓存在给模块中,当一条指令执行完之后,如果该指令同时也是重排序缓存中未被提交指令中最早的一条指令,该指令将背提交。一旦提交,该条指令进行的操作对装置状态的改变将无法撤销;

向量运算单元,该模块负责装置的所有向量运算,包括但不限于向量加法操作、向量加标量操作、向量减法操作、向量减标量操作、向量乘法操作、向量乘标量操作、向量除法(对位相除)操作、向量与操作和向量或操作,向量运算指令被送往该运算单元执行;

高速暂存器,该模块是向量数据专用的暂存存储装置,能够支持不同大小的向量数据;

io内存存取模块,该模块用于直接访问高速暂存存储器,负责从高速暂存存储器中读取数据或写入数据。

图4是本发明实施例提供的向量运算装置执行向量点积指令的流程图,如图4所示,执行向量点积指令(vp)的过程包括:

s1,取指模块取出该条向量点积指令,并将该指令送往译码模块。

s2,译码模块对指令译码,并将指令送往指令队列。

s3,在指令队列中,该向量点积指令需要从标量寄存器堆中获取指令中四个操作域所对应的标量寄存器里的数据,包括向量vin0的起始地址、向量vin0的长度、向量vin1的起始地址、向量vin1的长度。

s4,在取得需要的标量数据后,该指令被送往依赖关系处理单元。依赖关系处理单元分析该指令与前面的尚未执行结束的指令在数据上是否存在依赖关系。该条指令需要在存储队列中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止。

s5:依赖关系不存在后,该条向量点积指令被送往向量运算单元。向量运算单元根据所需数据的地址和长度从数据暂存器中取出需要的向量, 然后在向量运算单元中完成点积运算。

s6,运算完成后,将结果写回至高速暂存存储器的指定地址,同时提交重排序缓存中的该向量点积指令。

图5为本发明实施例提供的向量运算单元的结构示意图,如图5所示,向量运算单元内包含向量加法运算单元、大小比较单元、非线性运算单元、向量标量乘法单元等。并且,向量运算单元为多流水级结构,其中,向量加法部件和向量乘法部件处于流水级1,大小比较部件处于流水级2,非线性运算部件和向量标量乘法部件处于流水级3。这些单元处于不同的流水级,当连续串行的多条向量运算指令的先后次序与相应单元所在流水级顺序一致时,可以更加高效地实现这一连串向量运算指令所要求的操作。

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

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