一种用于执行向量合并运算的装置和方法与流程

文档序号:12863488阅读:179来源:国知局
一种用于执行向量合并运算的装置和方法与流程

本发明涉及计算机处理技术领域,尤其涉及一种用于执行向量合并运算的装置和方法,该装置根据指令把两条向量按照指定的方式合并成一个新的向量,可以灵活支持各种长度的指令。



背景技术:

向量合并,一般是指将两个同样长度的向量合成一条全新的向量,对于新向量中的每一位,根据指示向量中的信息,从两个输入向量相应位置的两个元素中选择一个。

在现有技术中,一种最常用的实现向量合并操作的方法是在通用cpu上逐个选择,该方法执行效率低。

另一种现有技术是在图形处理器(gpu)上进行向量的选择合并,其中,通过使用通用寄存器堆和通用流处理单元执行通用simd指令来进行运算。但在上述方案中,同样需要多步再能完成整个过程。同时,gpu片上缓存太小,在进行大规模向量合并运算时需要不断进行片外数据搬运,片外带宽成为了主要性能瓶颈。

综上所述,现有的不管是通用处理器还是图形处理器,均不能高效处理大规模的向量合并操作。



技术实现要素:

有鉴于此,本发明提供了一种用于执行向量合并运算的装置和方法,根据指令可以支持任意长度的向量合并操作,同时还具有优异的执行性能。

根据本发明一方面,提供了一种用于执行向量合并运算的装置,其包括:

存储单元,用于存储向量合并运算指令相关的向量数据;

寄存器单元,用于存储向量合并运算指令相关的标量数据;

控制单元,用于对向量合并运算指令进行译码,并控制向量合并运算指令的运算过程;

向量合并单元,用于根据译码后的向量合并运算指令,对两待合并输入向量进行向量合并操作;

其中,所述向量合并单元为定制的硬件电路。

优选地,所述寄存器单元所存储的标量数据包括向量合并运算指令相关的待合并输入向量地址、合并结果输出向量地址、待合并输入向量长度和标示向量;其中,所述待合并输入向量地址、合并结果输出向量地址以及标示向量地址为所述存储单元中的地址。

优选地,所述控制单元包括:

指令队列模块,用于对译码后的向量合并运算指令进行顺序存储,并获取向量合并运算指令相关的标量数据。

优选地,所述控制单元包括:

依赖关系处理单元,用于在向量合并单元获取当前向量合并运算指令前,判断当前向量合并运算指令与之前未执行完的运算指令是否存在依赖关系。

优选地,所述控制单元包括:

存储队列模块,用于在当前向量合并运算指令与之前未执行完的运算指令存在依赖关系时,暂时存储当前向量合并运算指令,并且在该依赖关系消除时,将暂存的向量合并运算指令送往向量合并单元。

优选地,所述装置还包括:

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

输入输出单元,用于将向量合并运算指令相关的向量数据存储于存储单元,或者,从存储单元中获取向量合并运算指令的合并结果输出向量。

优选地,所述向量合并运算指令包括操作码和操作域;

所述操作码用于指示执行向量合并操作;

所述操作域包括用于指示向量合并运算相关的标量数据的立即数和/或寄存器号,其中寄存器号指向所述寄存器单元地址。

优选地,所述存储单元为高速暂存存储器。

根据本发明第二方面,提供了一种用于执行向量合并运算的装置,其包括:

取指模块,用于从指令序列中取出下一条要执行的向量合并运算指令,并将该向量合并运算指令传给译码模块;

译码模块,用于对该向量合并运算指令进行译码,并将译码后的向量合并运算指令传送给指令队列模块;

指令队列模块,用于暂存译码后的向量合并运算指令,并从向量合并运算指令或标量寄存器获得向量合并运算指令相关的标量数据;获得所述标量数据后,将所述向量合并运算指令送至依赖关系处理单元;

标量寄存器堆,包括多个标量寄存器,用于存储向量合并运算指令相关的标量数据;

依赖关系处理单元,用于判断所述向量合并运算指令与之前未执行完的运算指令之间是否存在依赖关系;如果存在依赖关系,则将所述向量合并运算指令送至存储队列模块,如果不存在依赖关系,则将所述向量合并运算指令送至向量合并单元;

存储队列模块,用于存储与之前运算指令存在依赖关系的向量合并运算指令,并且在所述依赖关系解除后,将所述向量合并运算指令送至向量合并单元;

向量合并单元,用于根据接收到向量合并运算指令、参照标示向量对待合并输入向量进行向量合并操作;

高速暂存存储器,用于存储标示向量、待合并输入向量和合并结果输出向量;

输入输出存取模块,用于直接访问所述高速暂存存储器,负责从所述高速暂存存储器中读取标示向量、待合并输入向量和写入合并结果输出向量。

优选地,所述向量合并单元为定制的硬件电路。

根据本发明第三方面,提供了一种用于执行向量合并运算方法,该方法包括:

取值模块从指令序列中取出下一条要执行的向量合并运算指令,并将该向量合并运算指令传给译码模块;

译码模块对该向量合并运算指令进行译码,并将译码后的向量合并运算指令传送给指令队列模块;

指令队列模块暂存译码后的向量合并运算指令,并从向量合并运算指令或标量寄存器获得向量合并指令运算相关的标量数据;获得所述标量数据后,将所述向量合并运算指令送至依赖关系处理单元;

依赖关系处理单元判断所述向量合并运算指令与之前未执行完的运算指令之间是否存在依赖关系;如果存在依赖关系,则将所述向量合并运算指令送至存储队列模块,如果不存在依赖关系,则将所述向量合并运算指令送至向量合并单元;

存储队列模块存储与之前运算指令存在依赖关系的向量合并运算指令,并且在所述依赖关系解除后,将所述向量合并运算指令送至向量合并单元;

向量合并单元根据接收到的向量合并运算指令,通过输入输出存取模块从高速暂存存储器取出标示向量和待合并输入向量,然后根据标示向量每一位置处的值对待合并输入向量进行向量合并得到合并结果输出向量,并通过输入输出存取模块将合并结果输出向量写入高速暂存存储器。

本发明提供的用于执行向量合并运算的装置和方法,通过定制的硬件电路实现了精简向量合并指令的完整过程,即通过一条精简的向量合并指令即可实现向量合并运算。本发明通过将参与计算的向量数据暂存在高速暂存存储器上(scratchpadmemory),使得运算过程中可以更加灵活有效地支持不同宽度的向量数据,同时定制的向量合并单元能够更加高效地实现合并操作,本发明采用的指令具有精简的格式,使得指令使用方便。

本发明可以应用于以下场景中(包括但不限于):数据处理、机器人、电脑、打印机、扫描仪、电话、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备等各类电子产品;飞机、轮船、车辆等各类交通工具;电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机等各类家用电器;以及包括核磁共振仪、b超、心电图仪等各类医疗设备。

附图说明

图1是本发明提供的用于执行向量合并运算的装置的结构示意图。

图2是本发明提供的向量合并运算指令的格式示意图。

图3是本发明实施例提供的用于执行向量合并运算装置的结构示意图。

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

具体实施方式

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

本发明提供一种向量合并运算装置,包括存储单元、寄存器单元、控制单元和向量合并单元,存储单元中存储有向量,寄存器单元中存储有向量存储的地址和其他参数,控制单元执行译码操作,根据读取指令控制各个模块,向量合并单元根据运算指令在指令中或寄存器单元中获取向向量地址和其他参数,然后,根据该地址在存储单元中获取相应的向量,包括合并标示向量和两待合并向量,接着,根据合并标示向量进行向量合并运算,得到合并结果。本发明将参与计算的向量数据暂存在高速暂存存储器上,使得向量运算过程中可以更加灵活有效地支持不同宽度的数据。

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

存储单元,用于存储向量合并运算指令相关的向量数据,在一种实施方式中,该存储单元可以是高速暂存存储器(scratchpadmemory),能够支持不同大小的向量数据;本发明将必要的计算数据暂存在高速暂存存储器上,使得本装置在进行合并运算的过程中可以更加灵活有效地支持不同宽度的数据。所述与向量合并运算指令相关的向量数据包括待合并输入向量和合并结果输出向量。所述高速暂存存储器可以通过各种不同存储器件如sram、dram、edram、忆阻器、3d-dram和非易失存储等实现。

寄存器单元,用于存储向量合并运算指令相关的标量数据,包括标示向量地址、待合并输入向量地址、向量长度、合并结果输出向量存储地址等,其中,所述标示向量地址、待合并输入向量地址和合并结果输出向量 存储地址为向量数据在存储单元中存储的地址;在一种实施方式中,寄存器单元可以是标量寄存器堆,提供运算过程中所需的标量寄存器,标量寄存器不只存放向量地址,还存放有其他的标量数据。

控制单元,用于对向量合并指令进行译码,并控制向量合并指令的执行过程;其主要通过控制装置中各个模块的行为实现向量合并指令的执行过程的控制;在一种实施方式中,控制单元读取准备好的指令,进行译码生成控制信号,发送给装置中的其他模块,其他模块根据得到的控制信号执行相应的操作。

向量合并单元,该单元根据指令实现对待合并输入向量的合并操作。该单元是向量运算单元,根据标示向量同时对所有待合并输入向量进行二选一的合并操作。所述向量合并单元根据标示向量对两个待合并输入向量进行合并,其中当某一位为0时,合并结果中的该位置取第一条待合并向量在该位置上的值,当为1时,取第二条待合并向量在该位置上的值,得到合并结果。所述向量合并单元为定制的硬件电路,包括但不限于fpga、cgra、专用集成电路asic、模拟电路和忆阻器等;所述向量合并单元通过与该装置中的其它模块相互协作,能够将任意长度的待合并向量进行合并。

根据本发明的一种实施方式,该装置还包括:指令缓存单元,用于存储待执行的向量合并运算指令。指令在执行过程中,同时也被缓存在指令缓存单元中,当一条指令执行完之后,该指令将被提交。

根据本发明的一种实施方式,该装置的控制单元还包括:指令队列模块,用于对译码后的向量合并运算指令进行顺序存储,其通过向量合并运算指令中的操作域获取随机向量生成指令相关的标量数据,如待合并输入向量起始地址及长度、合并结果输出向量存储地址、合并参数等,将其填充至向量合并运算指令后将其送往依赖关系处理单元。

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

根据本发明的一种实施方式,该装置的控制单元还包括:存储队列模块,该模块包括一个有序队列,与之前指令在数据上有依赖关系的指令被存储在该有序队列内直至依赖关系被消除,在依赖关系消除后,其将运算指令提供给随机向量生成单元。

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

根据本发明的一种实施方式,本装置的指令设计采用精简化的方式,一条指令可以完成一次完整的向量合并操作。

在本装置执行向量合并运算的过程中,装置取出指令进行译码,然后送至指令队列存储,根据译码结果,获取指令中的各个参数,这些参数可以是直接写在指令的操作域中,也可以是根据指令操作域中的寄存器号从指定的寄存器中读取。这种使用寄存器存储参数的好处是无需改变指令本身,只要用指令改变寄存器中的值,就可以实现大部分的循环,因此大大节省了在解决某些实际问题时所需要的指令条数。在全部操作数之后,依赖关系处理单元会判断指令实际需要使用的数据与之前指令中是否存在依赖关系,这决定了这条指令是否可以被立即发送至向量合并单元中执行。一旦发现与之前的数据之间存在依赖关系,则该条指令必须等到它依赖的指令执行完毕之后才可以送至向量合并单元执行。在定制的向量合并单元中,该条指令将快速执行完毕,并将结果,即生成的随机向量写回至指令提供的地址,该条指令执行完毕。

如图2所示,本装置执行的合并指令,包括操作码和五个操作域,所述操作码用于指示进行合并操作,所述操作域分别用于指示标示向量地址、待合并输入向量的起始地址以及长度、合并结果输出向量的地址。该装置 根据这些参数获取标示向量和两个待合并输入向量,然后根据标示向量在输出向量的每个位置上的值对两待合并向量做二选一的操作,从而得到一个新的合并后的输出向量。

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

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

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

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

指令队列模块,该模块用于暂存从译码模块获得的指令,并从指令或标量寄存器获得指令运算相应的标量数据,包括标示向量地址、待合并输入向量地址、向量长度和合并结果输出向量地址。获得标量数据后,指令被送至依赖关系处理单元;

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

依赖关系处理单元,该单元用于处理向量合并运算指令与之前未执行完的指令可能存在的存储依赖关系。向量合并运算指令访问高速暂存存储器获取标示向量、待合并输入向量等,前后指令可能会访问同一块存储空间。为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令被送至存储队列模块内等待至依赖关系被消除。即检测本条指令的输入数据的存储区间与之前没有执行完毕的指令的输出数据的存储区间是否有重叠,存储区间是由起始地址和数据长度决定的。如果有重叠,则说明本条指令实际上是需要之前指令的执行结果作为输入的,因此必须等到那条指令执行完毕后,这条指令才能开始执行。在这个过程中,指令实际被暂存在存储队列模块中。

存储队列模块,该模块是一个有序队列,与之前指令在数据上有依赖关系的指令被存储在该队列内直至存储关系被消除;依赖关系被消除后的向量合并运算指令被送往随机向量生成单元;

向量合并单元,该模块根据指令负责执行两向量的合并操作;该向量合并单元根据向量合并运算指令中标示向量地址、待合并向量地址和向量长度,从高速暂存存储器获取标示向量、待合并向量,并根据标示向量每一位置上的值从两个待合并向量选择其中一个座位合并结果输出向量相应位置上的值,最终得到合并结果输出向量,将其存储至高速暂存存储器上;

高速暂存存储器,该模块是向量数据专用的暂存存储装置,能够支持不同大小的矩阵数据;所述高速暂存器可用于存储生成的随机向量;所述高速暂存存储器可以通过各种不同存储器件如sram、dram、忆阻器、3d-dram和非易失存储等实现;

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

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

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

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

s3,在指令队列模块中,从指令本身或从标量寄存器堆中获取指令中五个操作域所对应的数据,包括两输入待合并向量地址、标示向量地址、向量长度和输出向量地址。

s4,在取得需要的标量数据后,该指令被送往依赖关系处理单元。

s5,依赖关系处理单元分析该指令与前面的尚未执行结束的指令在数据上是否存在依赖关系。若存在依赖关系,则该条指令被送往存储队列模块中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止。若不存在依赖关系,则该条指令被送往向量合并单元。

s6,向量合并单元根据向量地址和长度从高速暂存器中取出需要的两待合并向量数据的一部分以及相应的标示向量。

s7,向量合并单元同时对所述待合并向量数据的一部分上所有位置进行合并操作,根据标示向量该位置上的值,从两待选择向量的元素中二选一。

s8,合并单元继续取出两向量数据的下一部分进行合并,直至完成全部向量的合并运算。

s9,运算完成后,将结果向量写回至高速暂存存储器的指定地址。

综上所述,本发明提供向量合并装置,配合相应的指令,能够很好地解决当前计算机领域越来越多的针对向量的合并操作。相比于已有的传统解决方案,本发明可以具有指令精简、使用方便、支持的向量长度灵活、片上缓存充足等优点。

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

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