CN115248701B - 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 - Google Patents
一种处理器寄存器堆之间的零拷贝数据传输装置及方法 Download PDFInfo
- Publication number
- CN115248701B CN115248701B CN202211151556.1A CN202211151556A CN115248701B CN 115248701 B CN115248701 B CN 115248701B CN 202211151556 A CN202211151556 A CN 202211151556A CN 115248701 B CN115248701 B CN 115248701B
- Authority
- CN
- China
- Prior art keywords
- register file
- vector
- register
- tile
- instruction
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/543—User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
Abstract
本发明公开了一种处理器寄存器堆之间的零拷贝数据传输装置及方法,传输装置包括1)向量执行单元;2)自定义扩展指令集执行单元;3)向量寄存器堆地址译码及选择器;4)瓦片寄存器堆地址译码及选择器;5)寄存器堆分块;6)向量寄存器堆私有分块;7)交叉开关单元;8)瓦片寄存器块选择器;传输方法包括步骤1:处理器将整个算法拆分成由向量指令和自定义扩展指令集指令构成的程序序列;步骤2:执行单元交叉访问寄存器堆获取操作数。本发明实现寄存器数据在两个功能模块间的零拷贝数据传输,特别在深度学习领域计算密度低但数据量大场景下的算子时,显著提高算法执行的整体性能和降低算法执行的整体功耗。
Description
技术领域
本发明涉及处理器(CPU),具体涉及RISC-V处理器中不同寄存器堆之间的数据交换技术。
背景技术
RISC-V指令集架构是开源的精简指令集架构,符合该架构的处理器在实现上的特征、趋势和理念是按照RISC-V指令集架构的要求(ratified)实现基础通用功能,并在此基础上增加和实现自定义扩展指令集以提高专用领域能力(计算性能和计算效率)。就具体的专用领域而言,RISC-V指令集架构在深度学习领域被学术界和商业届广泛的应用,又由于不同的深度学习算法普遍依赖和使用相同或类似的算子,例如矩阵乘累加算子(GEMM)、池化算子(Pooling)等,为此以RISC-V指令集架构提供的自定义扩展指令集能力为基础构建的,用于计算深度神经网络(Deep Neural Network,DNN)算子执行的指令集(以下简称自定义扩展指令集)已经被广泛的探索、实现与应用。
精简指令集处理器的指令特征在于单条指令的功能简单明了,执行单元执行算术和逻辑指令的操作数从一个或多个寄存器获得,并将指令的执行结果写入一个或多个寄存器。寄存器通常的硬件实现方式是寄存器阵列,称为寄存器堆。高性能的精简指令处理器中存在多个功能独立、完备且各异的执行单元,不同的执行单元根据其操作数的种类或数据结构访问特定的寄存器和寄存器堆获取操作数。根据RISC-V指令集架构的设计理念,深度学习领域算法的计算任务在符合RISC-V指令集架构的处理器(以下简称RISC-V处理器)上的主要执行单元是:
1)向量执行单元:执行RISC-V指令集架构中向量扩展指令集部分的指令执行单元;
2)自定义扩展指令集执行单元:执行以RISC-V指令集架构为基础用于计算深度神经网络算子执行的指令集的执行单元;
处理器在执行深度学习领域算法前,会将整个复杂的算法拆分成大量简单算子的顺序执行过程,即由大量1.来自向量指令集的向量指令;2.来自自定义扩展指令集的自定义扩展指令,构成的程序序列。在执行程序序列时,向量指令由向量执行单元完成执行,自定义扩展指令集指令由自定义扩展指令集执行单元完成执行。
执行向量指令集指令时,向量执行单元读写操作数和执行结果的主要寄存器堆是向量寄存器堆(少量指令需要访问通用寄存器堆),RISC-V指令集架构规定了向量寄存器堆的容量、结构和访问方式。执行自定义扩展指令集指令时,自定义扩展指令集执行单元读写操作数和执行结果的寄存器堆,通常都需要访问能更好满足深度学习领域算法的特征额外增加的瓦片(Tile)寄存器堆。深度学习领域算法的特征包括大模型尺寸、大数据量和大计算量。为此,在指令集设计和硬件实现过程中,主流指令集都选择增加专用寄存器堆以满足深度学习领域算法的计算任务特征。前述新增专用寄存器堆中的寄存器,通常容量较大且呈2维形状,因此新增的专用寄存器通常称为瓦片寄存器,新增的专用寄存器堆通常称为瓦片寄存器堆。举例来说,为了提高处理器在深度学习领域的适用性,Intel公司在其AMX指令集中新增了瓦片寄存器和瓦片寄存器堆,ARM公司在其SME指令集中也增加了瓦片寄存器和瓦片寄存器堆。
由大量向量指令集和自定义扩展指令集的指令构成的程序序列的指令顺序并不固定,通常来说来自向量指令集的指令和来自自定义扩展指令集的指令之间存在大量的交叉,为此执行单元需要交叉访问寄存器堆来获取操作数:
1)当自定义扩展指令集执行单元完成计算并将执行结果存入瓦片寄存器堆之后,如果下一条指令调用向量执行单元,向量执行单元就需要从瓦片寄存器堆获取操作数;
2)当向量执行单元完成计算并将执行结果存入向量寄存器堆之后,如果下一条指令调用自定义扩展指令集执行单元,自定义扩展指令集执行单元就需要从向量寄存器堆获取操作数。
在现有的技术方案中,执行单元交叉访问寄存器堆的技术方案通常有以下两种。
第一种:如果逻辑上不同的寄存器堆在物理实现时是独立的,会执行寄存器堆之间的数据拷贝指令,先将数据从其他寄存器堆拷贝到与当前执行单元关联的寄存器堆后,再让执行单元获取操作数。
为了提高处理器的性能,高性能处理器会使用各种技术手段让多个执行单元能够以时间并行的方式并行工作,其中之一就是保证多个执行单元能够并行的访问寄存器堆读取操作数和写回执行结果。为了让多个执行单元以时间并行的方式访问寄存器堆,并且在空间上缓解处理器的寄存器压力问题,通常逻辑上不同的寄存器堆在物理实现时是独立。以通用寄存器堆和向量寄存器堆举例而言,向量寄存器堆在实现上独立于通用寄存器堆,即通用寄存器堆在物理上是独立、完整且专属的寄存器阵列,向量寄存器堆在物理上也是独立、完整且专属的寄存器阵列。如图1所示,当逻辑上不同的寄存器堆的物理实现是独立的,且发生执行单元与寄存器堆之间的交叉访问时,在RISC-V处理器的现有的技术方案中,会执行寄存器堆之间的数据拷贝指令,先将数据从其他寄存器堆拷贝到与当前执行单元关联的寄存器堆后,再让执行单元获取操作数。仍以通用寄存器堆和向量寄存器堆举例而言,在RISC-V处理器的现有的技术方案中,当与通用寄存器关联的执行单元需要访问向量寄存器堆中的数据时,要先执行一条“vmv.x.s”指令将数据从向量寄存器堆拷贝到通用寄存器堆,执行单元才能进一步获取操作数。当与向量寄存器堆相关联的执行单元需要访问通用寄存器堆中的数据时,要先执行一条“vmv.s.x”指令将数据从通用寄存器堆拷贝到向量寄存器堆,执行单元才能进一步获取操作数。而由于1.深度学习领域算法的特征包括大模型尺寸、大数据量和大计算量;2.来自向量指令集的指令和来自自定义扩展指令集的指令在程序序列中存在大量的交叉;3.每执行一条数据拷贝指令都需要付出额外的性能代价和功耗代价,所以将该技术方案应用在向量执行单元和自定义扩展指令集执行单元对向量寄存器堆和瓦片寄存器堆的交叉访问上,RISC-V处理器会付出极大且非必要的性能代价和功耗代价。
第二种:如果逻辑上不同的寄存器堆在物理实现时是共享的,当一个执行单元在访问寄存器堆时,为避免可能的数据冲突和有限数量寄存器堆读写端口的访问冲突,另一个执行单元必须等到寄存器堆的当前访问结束后才能开始自己的访问。
在主流处理器的技术方案中,也有逻辑上不同的寄存器堆的物理实现是共享的寄存器阵列,多个关联到逻辑上不同寄存器堆的执行单元共享同一个寄存器阵列的设计方案。举例来说,如图2所示,Armv8架构中与Neon指令相关联的寄存器堆和与浮点指令相关联的寄存器堆在逻辑上是不同的,而在物理实现上是同一个寄存器阵列,这会导致1.寄存器压力问题加剧;2.可能的数据冲突和有限数量寄存器堆读写端口的访问冲突;3.执行单元无法充分利用时间并行性进而非必要空闲和非流水线执行,所以将该技术方案应用在向量执行单元和自定义扩展指令集执行单元对向量寄存器堆和瓦片寄存器堆的交叉访问上,RISC-V处理器同样也会付出极大且非必要的性能代价。
综上,现有的RISC-V处理器技术方案在向量执行单元和自定义扩展指令集执行单元对向量寄存器堆和瓦片寄存器堆交叉访问时性能和功耗代价太大,RISC-V处理器需要一种性能更高、功耗更低的方法实现向量执行单元和自定义扩展指令集执行单元对向量寄存器堆和瓦片寄存器堆交叉访问。
相关现有技术可以参见专利文献:CN1378148A、CN1666480A、CN100481085C、CN101163129A、CN101763244A、CN102385504A、CN104216842A、CN111061729A、CN101847093A、CN114579188A、WO2019148781A1。
发明内容
为了解决上述技术问题,本发明提供一种处理器寄存器堆之间的零拷贝数据传输装置及方法,其采用如下技术方案:
一种处理器寄存器堆之间的零拷贝数据传输装置,包括:
1)向量执行单元:执行RISC-V指令集架构中向量扩展指令集部分的指令执行单元;
2)自定义扩展指令集执行单元:执行以RISC-V指令集架构为基础用于计算深度神经网络算子执行的指令集的执行单元;
3)向量寄存器堆地址译码及选择器:根据指令要求选通32个向量寄存器中的至少一个向量寄存器,供向量执行单元读取操作数或写回执行结果;
4)瓦片寄存器堆地址译码及选择器:根据指令要求选通N个瓦片寄存器中的至少一个瓦片寄存器,供自定义扩展指令集执行单元读取操作数或写回执行结果;
5)寄存器堆分块:在物理上独立实现的寄存器阵列,数量总共是M+1个,根据处理器运行时状态选出总共M+1个中的M个寄存器堆分块构成逻辑上的瓦片寄存器堆,每个瓦片寄存器由VLEN/128个寄存器堆分块构成;
6)向量寄存器堆私有分块:向量寄存器堆中的向量寄存器数量是32个,将32个向量寄存器中的前16个向量寄存器V0~V15作为一个向量寄存器堆私有分块,向量寄存器堆私有分块的大小和寄存器堆分块的大小相同,且只能通过向量寄存器堆地址译码及选择器访问,物理上的向量寄存器堆私有分块和根据处理器运行时状态选出的1个寄存器堆分块构成逻辑上的向量寄存器堆;
7)交叉开关单元:根据处理器运行时状态选出的1个寄存器堆分块构成逻辑上的向量寄存器堆的后16个向量寄存器V16~V31;
8)瓦片寄存器块选择器:根据处理器运行时状态选择寄存器堆分块构成逻辑上的瓦片寄存器。
本发明一种处理器寄存器堆之间的零拷贝数据传输方法,包括步骤1:处理器将整个算法拆分成由向量指令和自定义扩展指令集指令构成的程序序列;步骤2:执行单元交叉访问寄存器堆获取操作数。
本发明具有以下有益技术效果:
本发明提供了一种新的向量寄存器堆与其他包括瓦片寄存器堆在内的寄存器堆之间传输数据的颗粒度,能够兼容VLEN的不同取值情况和不同的瓦片寄存器尺寸。
在保证执行单元拥有物理上独立的寄存器堆资源和保证原有的数据传输方案能正常工作的基础上,提供了一种新的零拷贝数据传输方式,无需进行数据的传输与拷贝,能够加快大块数据传输速度,降低大块数据的传输功耗,从而解决现有技术执行单元交叉访问寄存器堆来获取操作数时,需要通过向量执行单元和自定义扩展指令集执行单元之间的寄存器堆间数据拷贝通路拷贝每一个向量寄存器的数据而造成的性能和功耗代价。
本发明避免了数据在两个寄存器堆中逐一单向拷贝的过程,实现寄存器数据在两个功能模块间的零拷贝数据传输,降低了整体功耗,提高了整体性能。特别适用于像向量寄存器堆和瓦片寄存器堆这样数据量较大的寄存器堆的之间的数据传输;特别适用于深度学习领域算法的大数据量特征,进而在RISC-V处理器上由不同执行单元串行执行时的大数据量传输特征;特别是在配合执行深度学习领域计算密度较低但数据量较大场景下的算子时,能显著的提高算法执行的整体性能和降低算法执行的整体功耗。
在零拷贝的前提下,实现了寄存器堆之间的双向数据传输,在优化向量指令和自定义扩展指令集指令的顺序以及平衡向量计算工作量和自定义扩展指令集指令计算工作量后,可以进一步提高硬件执行单元的利用率。
附图说明
以下结合附图对本发明作进一步说明:
图1为现有技术独立寄存器堆之间数据传输方案示意图;
图2为现有技术Armv8浮点指令集寄存器堆和Neon指令集寄存器堆示意图;
图3为RISC-V指令集架构规定的向量寄存器堆示意图;
图4为本发明自定义扩展指令集规定的瓦片寄存器示意图;
图5为本发明自定义扩展指令集规定的瓦片寄存器堆示意图;
图6为本发明实施例VLEN=128bit时寄存器堆之间的零拷贝数据传输装置示意图;
图7为本发明实施例VLEN=256bit时寄存器堆之间的零拷贝数据传输装置示意图;
图8为本发明由物理上的向量寄存器堆私有分块和1个寄存器堆分块构成的逻辑上的向量寄存器堆示意图;
图9为本发明由寄存器堆分块构成的逻辑上的瓦片寄存器示意图;
图10为本发明实施例VLEN=128bit时传输编号3的瓦片寄存器数据示意图;
图11为本发明实施例VLEN=256bit时传输编号3的瓦片寄存器数据示意图。
具体实施方式
本发明具体实施方式有以下参数设定和条件设定:
如图3所示,RISC-V指令集架构规定了向量寄存器堆的容量、结构和访问方式,规定向量寄存器堆中的向量寄存器数量是32个,每个向量寄存器的宽度是VLEN-bit,VLEN的取值必须是2的幂次且小于2的16次方,常用的VLEN取值为128、256和512等。
瓦片寄存器堆在不同的自定义扩展设计方案中的设计选择有所不同,一般而言瓦片寄存器堆中的寄存器都是能更好满足深度学习领域算法的特征额外增加的2维形状、大容量寄存器。如图4所示,本发明优先考虑深度学习领域常用的矩阵乘累加(扩位)的计算密度指标后,提供的适宜保存外积方式计算的矩阵乘累加结果的瓦片寄存器呈2维方形,即瓦片寄存器的宽度方向和高度方向包含相同数量的32-bit元素,元素数量为VLEN/16个。如图5所示,瓦片寄存器堆中瓦片寄存器的数量为N,具体数值可根据处理器带宽、面积和寄存器压力问题等因素在实现时综合确定。
本发明处理器寄存器堆之间的零拷贝数据传输装置,包括:
1)向量执行单元:执行RISC-V指令集架构中向量扩展指令集部分的指令执行单元;向量执行单元执行算术和逻辑指令的操作数大多来自于向量寄存器堆,少量来自于通用寄存器堆,向量执行单元执行算术和逻辑指令的执行结果大多写入向量寄存器堆,少量写入通用寄存器堆;
2)自定义扩展指令集执行单元:执行以RISC-V指令集架构为基础用于计算深度神经网络算子执行的指令集的执行单元;自定义扩展指令集包括执行卷积、矩阵乘累加、池化、激活计算的自定义扩展指令,自定义扩展指令集执行单元执行算术和逻辑指令的操作数大多来自瓦片寄存器堆,少量来自于其他寄存器堆,如通用寄存器堆;自定义扩展指令集执行单元执行算术和逻辑指令的执行结果全都写入瓦片寄存器堆;
3)向量寄存器堆地址译码及选择器:根据指令要求选通32个向量寄存器中的一个或多个向量寄存器,供向量执行单元读取操作数或写回执行结果;
4)瓦片寄存器堆地址译码及选择器:根据指令要求选通N个瓦片寄存器中的一个或多个瓦片寄存器,供自定义扩展指令集执行单元读取操作数或写回执行结果;
5)寄存器堆分块:寄存器堆分块是包含一定数量寄存器,在物理上独立实现的寄存器阵列;寄存器堆中除了包含寄存器阵列,还包含该寄存器阵列的地址译码及选择器,索引并选通当前寄存器堆中需要访问的寄存器的数字逻辑;还包含被瓦片寄存器堆地址译码及选择器和向量寄存器堆地址译码及选择器共享的寄存器读写端口,即包含仲裁逻辑供多个来源的读写请求时分复用的寄存器读写端口;寄存器堆分块的数量总共是M+1个,每个寄存器堆分块的容量是VLEN*16bit,可以映射为向量寄存器堆中一半数量的向量寄存器;根据处理器运行时状态选出总共M+1个中的M个寄存器堆分块构成逻辑上的瓦片寄存器堆,每个的瓦片寄存器由VLEN/128个寄存器堆分块构成;所有的寄存器堆分块统称可交换寄存器堆分块群;
6)向量寄存器堆私有分块:RISC-V指令集架构规定向量寄存器堆中的向量寄存器数量是32个,32个向量寄存器的编号依次为V0,V1,V2,…V31;本发明将32个向量寄存器中的前16个,编号依次为V0,V1,V2,…V15的向量寄存器作为一个向量寄存器堆私有分块;该向量寄存器堆私有分块的大小和寄存器堆分块的大小相同,但只能通过向量寄存器堆地址译码及选择器访问;如图8所示,物理上的向量寄存器堆私有分块和根据处理器运行时状态选出的1个寄存器堆分块组成了逻辑上的向量寄存器堆;
7)交叉开关单元:根据处理器运行时状态选出的1个寄存器堆分块构成逻辑上的向量寄存器堆的后16个向量寄存器,编号依次为V16,V17,V18,…V31;
8)瓦片寄存器块选择器:根据处理器运行时状态选择寄存器堆分块构成逻辑上的瓦片寄存器。
不同VLEN情况下,1个瓦片寄存器由VLEN/128个寄存器堆分块构成,所以瓦片寄存器总数量N和寄存器堆分块总数量M+1之间的对应关系是M=(VLEN/128)×N。本发明实现过程中,先确定向量寄存器宽度VLEN,再确定瓦片寄存器数量N,最后由M和N之间的对应关系确定寄存器堆分块数量M。
为优化上述向量寄存器堆与瓦片寄存器堆之间的数据传输,其中图6为本发明实施例VLEN=128bit时寄存器堆之间的零拷贝数据传输装置示意图,其中向量执行单元读写操作数和执行结果的逻辑上的向量寄存器堆,由1个向量寄存器堆私有分块和编号为0~M的M+1个寄存器堆分块中的任意1个寄存器堆分块构成,向量寄存器堆私有分块和寄存器堆分块的容量都是2048-bit。
当向量执行单元访问编号为V0~V15的向量寄存器(容量为128-bit)时,直接通过向量寄存器堆地址译码及选择器访问向量寄存器堆私有分块;当向量执行单元访问编号为V16~V31的向量寄存器时,需要通过向量寄存器堆地址译码及选择器访问交叉开关单元根据处理器运行时状态选出的1个寄存器堆分块。
编号为0~M的M+1个寄存器堆分块中剩余的M个寄存器堆分块构成自定义扩展指令集执行单元读写操作数和执行结果的逻辑上的瓦片寄存器堆,逻辑上的瓦片寄存器堆中的1个瓦片寄存器由1个寄存器堆分块构成,即编号N的数值与编号M的数值相等。
当自定义扩展指令集执行单元访问编号为1~N的瓦片寄存器(容量为2048-bit)时,需要通过瓦片寄存器堆地址译码及选择器访问瓦片寄存器块选择器1~N,每个瓦片寄存器块选择器根据处理器运行时状态选出的1个寄存器堆分块。
其中图7为本发明实施例VLEN=256bit时寄存器堆之间的零拷贝数据传输装置示意图, 其中向量执行单元读写操作数和执行结果的逻辑上的向量寄存器堆,由1个向量寄存器堆私有分块和编号为0~M的M+1个寄存器堆分块中的任意1个寄存器堆分块构成,向量寄存器堆私有分块和寄存器堆分块的容量都是4096-bit。
当向量执行单元访问编号为V0~V15的向量寄存器(容量为256-bit)时,直接通过向量寄存器堆地址译码及选择器访问向量寄存器堆私有分块;当向量执行单元访问编号为V16~V31的向量寄存器时,需要通过向量寄存器堆地址译码及选择器访问交叉开关单元根据处理器运行时状态选出的1个寄存器堆分块。
编号为0~M的M+1个寄存器堆分块中剩余的M个寄存器堆分块构成自定义扩展指令集执行单元读写操作数和执行结果的逻辑上的瓦片寄存器堆,逻辑上的瓦片寄存器堆中的1个瓦片寄存器由2个寄存器堆分块构成,即编号N的数值与编号M的数值除以2相等。
当自定义扩展指令集执行单元访问编号为1~N的瓦片寄存器时,需要通过瓦片寄存器堆地址译码及选择器访问瓦片寄存器块选择器1~N,每个瓦片寄存器块选择器根据处理器运行时状态选出的1个寄存器堆分块。
本发明处理器寄存器堆之间的零拷贝数据传输方法,包括:
处理器在执行深度学习领域算法前,会将整个复杂的算法拆分成大量简单算子的顺序执行过程,即由向量指令和自定义扩展指令集指令构成的程序序列。向量指令和自定义扩展指令集指令在程序序列中的指令顺序并不固定,向量指令和自定义扩展指令集指令之间存在大量的交叉,为此执行单元需要交叉访问寄存器堆来获取操作数。如图8所示,为被(交叉)访问的逻辑上的向量寄存器堆和物理上的向量寄存器堆私有分块以及寄存器堆分块之间的映射关系。默认情况下,即处理器上电后且没有发生寄存器堆分块调换时,逻辑上的向量寄存器堆由向量寄存器堆私有分块和编号0的寄存器堆分块构成;如图9所示,为被(交叉)访问的逻辑上的瓦片寄存器和物理上的寄存器堆分块之间的映射关系,当VLEN取值为128时,一个逻辑上的瓦片寄存器由1个寄存器堆分块构成;当VLEN取值为256时,一个逻辑上的瓦片寄存器由2个寄存器堆分块构成;当VLEN取值不固定(大于128)时,一个逻辑上的瓦片寄存器由VLEN/128个寄存器堆分块构成。默认情况下,即处理器上电后且没有发生寄存器堆分块调换时,逻辑上的瓦片寄存器堆由编号1到编号M的寄存器堆分块构成。
当自定义扩展指令集执行单元完成计算并将执行结果存入瓦片寄存器堆之后,如果下一条指令调用向量执行单元对前述执行结果做进一步计算,传输方法包括以下步骤:
1.处理器执行数据加载指令,将数据从存储器传输至瓦片寄存器堆。
2.处理器执行自定义扩展指令集指令,驱动自定义扩展指令集执行单元执行算术和逻辑指令,操作数从一个或多个瓦片寄存器堆中的寄存器获得,并将指令的执行结果写入瓦片寄存器堆。
3.处理器执行寄存器堆分块调换指令,配置交叉开关单元和瓦片寄存器块选择器,将保存上述执行结果的寄存器堆分块从瓦片寄存器堆调出,并调入向量寄存器堆。
根据本发明的一个实施方式,寄存器堆分块调换指令具有如下格式:
SWITCH imm12
其中,其中imm12为第一操作数,指定了可交换寄存器堆分块群中需要调入向量寄存器堆的寄存器堆分块的编号。执行该指令的直接作用是改变了交叉开关单元和瓦片寄存器块选择器的选通方式,从而改变了向量寄存器堆和瓦片寄存器堆的构成方式。交换过程不能打断,否则回到前述默认构成方式。
由于瓦片寄存器尺寸较大,需要VLEN/128次调换才能覆盖整个瓦片寄存器从瓦片寄存器堆到向量寄存器堆的调用。如果需要调用的瓦块寄存器编号是在1到N范围内的y,那么遍历整个瓦片寄存器需要依次交换的寄存器堆分块的编号是(y–1)*(VLEN/128)+1到y*(VLEN/128)。
举例而言,若VLEN=128bit时,且瓦片寄存器的数量N取值为4,且需要传输的是编号3的瓦片寄存器内的数据,那么在这个步骤需要执行的SWITCH指令有:
SWITCH3;imm12=3
执行前,向量寄存器堆的构成方式如图10所示,由向量寄存器堆私有分块和编号为0的寄存器堆分块构成;瓦片寄存器堆的构成方式如图10所示,由编号为1、2、3和4的寄存器堆分块构成。
执行指令“SWITCH3;imm12=3”后,向量寄存器堆的构成方式如图10所示,由向量寄存器堆私有分块和编号为3的寄存器堆分块构成;瓦片寄存器堆的构成方式如图10所示,由编号为1、2、0和4的寄存器堆分块构成。
举例而言,若VLEN=256bit时,且瓦片寄存器的数量N取值为4,且需要传输的是编号3的瓦片寄存器内的数据,那么在这个步骤需要执行的SWITCH指令有:
SWITCH5;imm12=5
SWITCH6;imm12=6
执行前,向量寄存器堆的构成方式如图11所示,由向量寄存器堆私有分块和编号为0的寄存器堆分块构成;瓦片寄存器堆的构成方式如图11所示,由编号为1、2、3、4、5、6、7和8的寄存器堆分块构成。
执行指令“SWITCH5;imm12=5”后,向量寄存器堆的构成方式如图11所示,由向量寄存器堆私有分块和编号为5的寄存器堆分块构成;瓦片寄存器堆的构成方式如图11所示,由编号为1、2、3、4、0、6、7和8的寄存器堆分块构成。
执行指令“SWITCH5;imm12=6”后,向量寄存器堆的构成方式如图11所示,由向量寄存器堆私有分块和编号为6的寄存器堆分块构成;瓦片寄存器堆的构成方式如图11所示,由编号为1、2、3、4、5、0、7和8的寄存器堆分块构成。
4.处理器执行向量指令,驱动向量执行单元执行算术和逻辑指令,操作数从前述瓦片寄存器堆中的寄存器获得,并将指令的执行结果写入向量寄存器堆私有分块。若VLEN=128,那么当向量执行单元处理完一个寄存器堆分块的数据后,即结束了对一个瓦片寄存器内全部数据的计算;若VLEN>128,那么向量执行单元处理需要处理VLEN/128份寄存器堆分块的数据后,才能完成一个瓦片寄存器内全部数据的计算;为此,若VLEN>128,寄存器堆分块调换指令和数据处理需要交替进行VLEN/128次,完成一个瓦片寄存器内全部数据的计算,且每次的执行结果保存在向量寄存器堆私有分块内。
5.完成一个瓦片寄存器内全部数据从瓦片寄存器堆到向量寄存器堆的传输,且向量执行单元以前述数据作为操作数完成计算后,处理器再次执行寄存器堆分块调换指令,还原寄存器堆分块在寄存器堆之间的分配关系。
举例而言,若VLEN=128bit时,且瓦片寄存器的数量N取值为4,且已经传输的是编号3的瓦片寄存器内的数据,那么在这个步骤需要执行的SWITCH指令有:
SWITCH0;imm12=0
执行前,向量寄存器堆的构成方式如图10所示,由向量寄存器堆私有分块和编号为3的寄存器堆分块构成;瓦片寄存器堆的构成方式如图10所示,由编号为1、2、0和4的寄存器堆分块构成。
执行指令“SWITCH3;imm12=0”后,向量寄存器堆的构成方式如图10所示,,由向量寄存器堆私有分块和编号为0的寄存器堆分块构成;瓦片寄存器堆的构成方式如图10所示,由编号为1、2、3和4的寄存器堆分块构成。
举例而言,若VLEN=256bit时,且瓦片寄存器的数量N取值为4,且需要传输的是编号3的瓦片寄存器内的数据,那么在这个步骤需要执行的SWITCH指令有:
SWITCH0;imm12=0
执行前,向量寄存器堆的构成方式如图11所示,由向量寄存器堆私有分块和编号为6的寄存器堆分块构成;瓦片寄存器堆的构成方式如图11所示,由编号为1、2、3、4、5、0、7和8的寄存器堆分块构成。
执行指令“SWITCH5;imm12=0”后,向量寄存器堆的构成方式如图11所示,由向量寄存器堆私有分块和编号为0的寄存器堆分块构成;瓦片寄存器堆的构成方式如图11所示,由编号为1、2、3、4、5、6、7和8的寄存器堆分块构成。
当向量执行单元完成计算并将执行结果存入向量寄存器堆之后,如果下一条指令调用自定义扩展指令集执行单元,传输方法包括以下步骤:
1.处理器执行数据加载指令,将数据从存储器传输至向量寄存器堆。
2.处理器执行向量指令,驱动向量执行单元执行算术和逻辑指令,操作数从一个或多个向量寄存器堆中的寄存器获得,并将指令的执行结果写入向量寄存器堆。
3.处理器执行寄存器堆分块调换指令,配置交叉开关单元和瓦片寄存器块选择器,将保存上述执行结果的寄存器堆分块从向量寄存器堆调出,并调入瓦片寄存器堆。由于瓦片寄存器尺寸较大,只需要进行一次寄存器堆分块的调换。
4.处理器执行自定义扩展指令集指令,驱动自定义扩展指令集执行单元执行算术和逻辑指令,操作数从前述调入的寄存器堆分块中的寄存器获得,并将指令的执行结果写入其他瓦片寄存器。
5.完成一个寄存器堆分块内全部数据从向量寄存器堆到瓦片寄存器堆的传输,且自定义扩展指令集执行单元以前述数据作为操作数完成计算后,处理器再次执行寄存器堆分块调换指令,还原寄存器堆分块在寄存器堆之间的分配关系。
以上仅为本发明较佳实施例,但本发明的保护范围并不局限于此。任何以本发明为基础,对本发明相应技术特征以基本相同的手段,实现基本相同的功能,达到基本相同的效果,并且本领域普通技术人员在被诉侵权行为发生时无需经过创造性劳动就能联想到的特征进行替换,皆涵盖于本发明的保护范围之中。
Claims (5)
1.一种处理器寄存器堆之间的零拷贝数据传输装置,包括:
1)向量执行单元:执行RISC-V指令集架构中向量扩展指令集部分的指令执行单元;
2)自定义扩展指令集执行单元:执行以RISC-V指令集架构为基础用于计算深度神经网络算子执行的指令集的执行单元;
3)向量寄存器堆地址译码及选择器:根据指令要求选通32个向量寄存器中的至少一个向量寄存器,供所述向量执行单元读取操作数或写回执行结果;
4)瓦片寄存器堆地址译码及选择器:根据指令要求选通N个瓦片寄存器中的至少一个瓦片寄存器,供所述自定义扩展指令集执行单元读取操作数或写回执行结果;
5)寄存器堆分块:在物理上独立实现的寄存器阵列,数量总共是M+1个,根据处理器运行时状态选出总共M+1个中的M个所述寄存器堆分块构成逻辑上的瓦片寄存器堆,每个瓦片寄存器由VLEN/128个所述寄存器堆分块构成;
6)向量寄存器堆私有分块:向量寄存器堆中的向量寄存器数量是32个,将32个向量寄存器中的前16个向量寄存器V0~V15作为一个向量寄存器堆私有分块,所述向量寄存器堆私有分块的大小和所述寄存器堆分块的大小相同,且只能通过所述向量寄存器堆地址译码及选择器访问,物理上的所述向量寄存器堆私有分块和根据处理器运行时状态选出的1个所述寄存器堆分块构成逻辑上的向量寄存器堆;
7)交叉开关单元:根据处理器运行时状态选出的1个所述寄存器堆分块构成逻辑上的向量寄存器堆的后16个向量寄存器V16~V31;
8)瓦片寄存器块选择器:根据处理器运行时状态选择所述寄存器堆分块构成逻辑上的所述瓦片寄存器。
2.根据权利要求1所述处理器寄存器堆之间的零拷贝数据传输装置,其中,所述寄存器堆分块还包含寄存器阵列的地址译码及选择器,索引并选通当前寄存器堆中需要访问的寄存器的数字逻辑。
3.根据权利要求1所述处理器寄存器堆之间的零拷贝数据传输装置,其中,所述寄存器堆分块还包含被所述瓦片寄存器堆地址译码及选择器和向量寄存器堆地址译码及选择器共享的寄存器读写端口,即包含仲裁逻辑供读写请求时分复用的寄存器读写端口。
4.根据权利要求1所述处理器寄存器堆之间的零拷贝数据传输装置,其中,所述自定义扩展指令集包括执行卷积、矩阵乘累加、池化、激活计算的自定义扩展指令。
5.一种处理器寄存器堆之间的零拷贝数据传输方法,包括以下步骤:
步骤1:处理器将整个算法拆分成由向量指令和自定义扩展指令集指令构成的程序序列;
步骤2:执行单元交叉访问寄存器堆获取操作数;
其中,当所述步骤2为自定义扩展指令集执行单元完成计算并将执行结果存入瓦片寄存器堆之后,如果下一条指令调用向量执行单元,则包括以下步骤:
步骤2A:处理器执行数据加载指令,将数据从存储器传输至瓦片寄存器堆;
步骤2B:处理器执行自定义扩展指令集指令,驱动自定义扩展指令集执行单元执行算术和逻辑指令,操作数从至少一个瓦片寄存器堆中的寄存器获得,并将指令的执行结果写入瓦片寄存器堆;
步骤2C:处理器执行寄存器堆分块调换指令,配置交叉开关单元和瓦片寄存器块选择器,将保存上述执行结果的寄存器堆分块从瓦片寄存器堆调出,并调入向量寄存器堆;
步骤2D:处理器执行向量指令,驱动向量执行单元执行算术和逻辑指令,操作数从前述调入向量寄存器堆中的寄存器获得,并将指令的执行结果写入向量寄存器堆私有分块;
步骤2E:完成一个瓦片寄存器内全部数据从瓦片寄存器堆到向量寄存器堆的传输,且向量执行单元以前述数据作为操作数完成计算后,处理器再次执行寄存器堆分块调换指令,还原寄存器堆分块在寄存器堆之间的分配关系;
其中,所述步骤2当为向量执行单元完成计算并将执行结果存入向量寄存器堆之后,如果下一条指令调用自定义扩展指令集执行单元,则包括以下步骤:
步骤2a:处理器执行数据加载指令,将数据从存储器传输至向量寄存器堆;
步骤2b:处理器执行向量指令,驱动向量执行单元执行算术和逻辑指令,操作数从至少一个向量寄存器堆中的寄存器获得,并将指令的执行结果写入向量寄存器堆;
步骤2c:处理器执行寄存器堆分块调换指令,配置交叉开关单元和瓦片寄存器块选择器,将保存上述执行结果的寄存器堆分块从向量寄存器堆调出,并调入瓦片寄存器堆;
步骤2d:处理器执行自定义扩展指令集指令,驱动自定义扩展指令集执行单元执行算术和逻辑指令,操作数从前述调入的寄存器堆分块中的寄存器获得,并将指令的执行结果写入其他瓦片寄存器;
步骤2e:完成一个寄存器堆分块内全部数据从向量寄存器堆到瓦片寄存器堆的传输,且自定义扩展指令集执行单元以前述数据作为操作数完成计算后,处理器再次执行寄存器堆分块调换指令,还原寄存器堆分块在寄存器堆之间的分配关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211151556.1A CN115248701B (zh) | 2022-09-21 | 2022-09-21 | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211151556.1A CN115248701B (zh) | 2022-09-21 | 2022-09-21 | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115248701A CN115248701A (zh) | 2022-10-28 |
CN115248701B true CN115248701B (zh) | 2022-12-20 |
Family
ID=83700457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211151556.1A Active CN115248701B (zh) | 2022-09-21 | 2022-09-21 | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115248701B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115437691B (zh) * | 2022-11-09 | 2023-01-31 | 进迭时空(杭州)科技有限公司 | 一种针对risc-v矢量与浮点寄存器的物理寄存器堆分配装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2602240B2 (ja) * | 1987-08-28 | 1997-04-23 | 株式会社日立製作所 | マルチプロセツサシステム |
JP2000039906A (ja) * | 1998-07-22 | 2000-02-08 | Meidensha Corp | プログラマブルコントローラ |
US8145882B1 (en) * | 2006-05-25 | 2012-03-27 | Mips Technologies, Inc. | Apparatus and method for processing template based user defined instructions |
CN101221496B (zh) * | 2008-01-23 | 2011-10-26 | 中国科学院计算技术研究所 | 精简指令集计算机处理器装置及其数据处理方法 |
CN102571925B (zh) * | 2011-12-19 | 2014-08-27 | 华中科技大学 | 一种在光纤通道环境中利用rdma存取数据的方法 |
KR102520017B1 (ko) * | 2016-12-31 | 2023-04-11 | 인텔 코포레이션 | 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들 |
CN109522254B (zh) * | 2017-10-30 | 2022-04-12 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN108388446A (zh) * | 2018-02-05 | 2018-08-10 | 上海寒武纪信息科技有限公司 | 运算模块以及方法 |
CN112667289B (zh) * | 2020-12-21 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种cnn推理加速系统、加速方法及介质 |
CN112860320A (zh) * | 2021-02-09 | 2021-05-28 | 山东英信计算机技术有限公司 | 基于risc-v指令集进行数据处理的方法、系统、设备及介质 |
-
2022
- 2022-09-21 CN CN202211151556.1A patent/CN115248701B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115248701A (zh) | 2022-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10204055B2 (en) | System and methods for expandably wide processor instructions | |
US7340562B2 (en) | Cache for instruction set architecture | |
US5784636A (en) | Reconfigurable computer architecture for use in signal processing applications | |
US11436143B2 (en) | Unified memory organization for neural network processors | |
CN109997115B (zh) | 用于持久计算的低功率和低延迟gpu协处理器 | |
US7577799B1 (en) | Asynchronous, independent and multiple process shared memory system in an adaptive computing architecture | |
JP7465887B2 (ja) | データ構造処理 | |
KR20060056855A (ko) | 프로세서 | |
CN115248701B (zh) | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 | |
WO2000076119A1 (en) | Cryptographic processing system | |
CN111615685B (zh) | 可编程乘加阵列硬件 | |
CN111459543B (zh) | 一种管理寄存器文件单元的方法 | |
WO2016024508A1 (ja) | マルチプロセッサ装置 | |
Chen et al. | The parallel algorithm implementation of matrix multiplication based on ESCA | |
KR20210084220A (ko) | 부분 판독/기입을 갖는 재구성 가능한 시스톨릭 어레이를 위한 시스템 및 방법 | |
CN114945984A (zh) | 扩展存储器通信 | |
CN111522776B (zh) | 一种计算架构 | |
CN112486904A (zh) | 可重构处理单元阵列的寄存器堆设计方法及装置 | |
WO2014169477A1 (zh) | 具有多态指令集体系结构的处理器 | |
Faber et al. | Efficient parallel execution of genetic algorithms on Epiphany manycore processor | |
CN112860619A (zh) | 可重构智能控制器 | |
WO2017080021A1 (en) | System and method for hardware multithreading to improve vliw dsp performance and efficiency | |
US20210141644A1 (en) | Asynchronous processor architecture | |
RU2179333C1 (ru) | Синергическая вычислительная система | |
JPS63229566A (ja) | 疎行列用計算機 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |