CN115373744A - 基于risc-v的拓展vm指令集编码方法 - Google Patents

基于risc-v的拓展vm指令集编码方法 Download PDF

Info

Publication number
CN115373744A
CN115373744A CN202210924350.1A CN202210924350A CN115373744A CN 115373744 A CN115373744 A CN 115373744A CN 202210924350 A CN202210924350 A CN 202210924350A CN 115373744 A CN115373744 A CN 115373744A
Authority
CN
China
Prior art keywords
bit
operand
machine code
register
source
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.)
Withdrawn
Application number
CN202210924350.1A
Other languages
English (en)
Inventor
赵文哲
杨国茗
夏天
党祺玮
任鹏举
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xian Jiaotong University filed Critical Xian Jiaotong University
Publication of CN115373744A publication Critical patent/CN115373744A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)

Abstract

本公开揭示了一种选用RISC‑V指令集架构作为处理器的基本实现,提出了一种基于RISC‑V的端侧DNN场景下的拓展VM指令集编码方法。本公开针对DNN场景扩展了一套自定义的RISC‑V向量拓展和矩阵拓展指令。并且,本公开给出了向量指令集和矩阵指令集指令的具体编码方式。此外,本公开还提出了相应的处理器。

Description

基于RISC-V的拓展VM指令集编码方法
技术领域
本公开属于处理器和计算技术领域,特别涉及一种基于RISC-V的端侧DNN场景下的拓展VM指令集编码方法。
背景技术
目前,一个通用处理器可以执行任何一个用高级语言编写的程序。在一些***中,通用处理器的应用性能、功耗和生产成本都可以满足应用场景需求。
然而,在许多端侧嵌入式***中,软件开发者不得不发挥创造力以达到高性能***的需求。虽然大部分计算可以使用通用指令集完成,然而使用通用指令集去实现针对场景的特定运算意味着,要使用长指令流来完成任务。这样无疑增加了指令缓存的开销,以及处理器中各级别流水线部件运行的开销。为此,在以处理器为核心的***中,架构设计者通常需要根据应用需求去拓展针对应用场景的特殊指令,以提高单核处理器的计算性能以及处理器运行能效。
为此,在以处理器为核心的***中,架构设计者需要根据应用需求去拓展针对应用场景的特殊指令并实现包括指令集编码方法在内的相关方法,以提高单核处理器的计算性能以及处理器运行能效。
发明内容
RISC-V是一种简单、开放、免费的全新指令集架构,与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片及软件,因此,本公开选用RISC-V指令集架构作为处理器的基本实现,并提出一种基于RISC-V的端侧DNN场景下的拓展VM指令集编码方法。
鉴于此,本公开提供了一种基于RISC-V的端侧DNN场景下的拓展VM指令集编码方法,包括如下步骤:
S1:编程dma加载src操作数,其中,根据src数据大小加载部分或者全部数据;
S2:vload指令加载源操作数到vreg;
S3:执行vector运算指令,结果保存在vreg中;
S4:vstore指令保存结果vreg到MMA的dst区域;
S5:编程dma将MMA中的dst数据写回DDR中的dst缓冲区;
其中,
所述方法包括一次vv指令的计算过程;
所述拓展VM指令集包括向量拓展指令和矩阵拓展指令。
优选的,
向量运算用VectorALU实现,向量寄存器为16组64*32bit的vreg。
优选的,
vload和vstore指令的数据必须来自MMA。
优选的,
Vector指令目的寄存器为vector register,vv指令源寄存器为两个vreg,vs指令的源寄存器为一个vreg和一个sreg。
优选的,
向量指令可以带一个条件控制字vpr,vpr为64bit,正好对应一个vreg的向量长度。
优选的,
所述方法还包括一次矩阵指令的计算过程,其进一步包括如下步骤:
S10:编程dma加载src操作数到MMA和MMB,其中,根据src数据大小加载部分或者全部数据),MMB只能加载const类型的数据;
S20:可选的,利用vload指令加载初始累加值到vreg;
S30:执行matrix运算指令,对MMA、MMB和vreg的三个操作数做矩阵乘累加,结果保存在vreg中;
S40:利用vstore指令把matrix操作的结果写回MMA中的dst区域;
S50:编程dma将MMA中的dst数据写回DDR中的dst缓冲区。
优选的,
矩阵运算用MatrixALU实现,可以实现2个8*8的矩阵做乘法运算,或者也可以实现1个1*64的向量和一个64*64的矩阵做向量矩阵乘法。
优选的,
矩阵乘法指令的两个src操作数矩阵分别来自MMA和MMB,同时可以附带一个来自vreg的第三个操作数实现乘累加操作。
优选的,
矩阵乘法指令的目的操作数必须为vreg,这个矩阵乘法的结果,可以利用向量指令实现矩阵和向量计算的pipeline,或者利用vstore直接写回MMA。
由此,本公开针对DNN场景扩展了一套自定义的RISC-V向量拓展和矩阵拓展指令。并且,本公开给出了向量指令集和矩阵指令集指令的具体编码方式。此外,本公开还提出了相应的处理器。
附图说明
图1是本公开一个实施例中RISC-V架构中Vector Register的示意图;
图2是本公开一个实施例中,从向量缓存的一个地址中向目标向量寄存器加载element的示意图;
图3是本公开一个实施例中,向量与向量操作的示意图;
图4是本公开一个实施例中,Algebra指令的方法示意图;
图5是本公开一个实施例中,特殊指令vector lookup table的方法示意图;
图6是本公开一个实施例中,条件寄存器生成指令的方法示意图;
图7是本公开一个实施例中,得到目的VPR结果的方法示意图;
图8是本公开一个实施例中,聚合指令的方法示意图;
图9是本公开一个实施例中,矩阵乘矩阵指令的方法示意图的示意图的示意图;
图10是本公开一个实施例中,矩阵点乘矩阵指令的方法示意图的示意图;
图11是本公开一个实施例中,向量乘矩阵指令的方法示意图的示意图;
图12是本公开一个实施例中,向量乘矩阵批量指令的方法示意图;
图13是本公开一个实施例中,单计算节点的示意图;
图14是本公开一个实施例中,一次vv指令的计算过程的示意图;
图15是本公开一个实施例中,一次矩阵指令的计算过程的示意图。
具体实施方式
下文将详细描述本公开的各个实施例。
本公开的总构思在于:选用RISC-V指令集架构作为处理器的基本实现,并在此基础上,增加自定义的向量矩阵指令拓展,以实现单核处理器在DNN场景下的高效数据处理。
1拓展指令实现
本节讨论专用指令的定义。专用指令比处理器的基本指令更快、更有效,因为每个新的指令通常把几个基本操作结合在一起,指令集的一组操作可能相互关联或者相互独立,操作的合并遵循以下三种形式:
1.融合操作:把一系列简单而又相互关联的指令合并成一个等价的复杂指令的过程,合并后的指令有和以前一样的总输入输出操作数和功能,这个过程消除了存储、读取中间操作数的需求。
2.复合操作:把两条或者更多的独立操作合并成一条指令,即使当操作数之间不存在相互依赖时,操作合并也是有效的,在一些独立操作共享一个输入操作数时,这个优化方法尤其有效率。这个优化方法主要目标是减少指令的总体数量。
3.SIMD操作:单个指令序列可以并行执行一组密切相关的操作,这类指令使用原子操作,将几个操作数打包为一个宽的向量,对整个向量进行并行计算,在数据密集型应用中提供了很大的性能优势。
针对以上的指令设计思路,设计应用在DNN场景下的RISC-V拓展指令。
1.1向量部分
1.1.1 Load/Store指令
Figure BDA0003778211690000061
Figure BDA0003778211690000062
在通用RISC-V架构中,包含32个通用寄存器xO-x31,与之类似。在面向DNN的处理器架构中,添加16个向量寄存器VRO-VR15。我们将64个操作数打包进一个VR寄存器,或者将其视为尺度为8*8的矩阵,向量中的每个元素位宽为32bits,因此每个元素可以表示为8bits数据,16bits数据或者32bits数据,如图1所示。
其中核内私有的向量缓存由8个SRAM级联实现,每个SRAM配置为深度512,宽度64bits,所以向量缓存的每个地址可以储存64bytes的数据量。
vector load byte从向量缓存的一个地址中向目标向量寄存器加载element为单byte的向量。相应的vector load half word需要两个地址,vector load word需要4个地址。vector load half word和vector load word可以看作vector load byte的复合操作。如图2所示。
1.1.2 Algebra指令
Figure BDA0003778211690000071
Figure BDA0003778211690000072
Figure BDA0003778211690000073
Figure BDA0003778211690000074
Figure BDA0003778211690000075
Figure BDA0003778211690000076
将代数运算归纳为一组
Figure BDA0003778211690000077
类型的操作,其中″operate″的类型是从DNN应用中抽象出来的计算类型,例如add,sub,and,multiply,shift等。源操作数类型包含三种,vv代表向量与向量操作,vs代表向量与标量操作,vi代表向量与立即数操作。向量类型的运算可以视作SIMD操作。如图3所示。
在指令编码中增加VPR位域,VPR寄存器是一组由0或1构成的向量,与VR寄存器具有相同的元素个数,该寄存器旨在过滤向量指令或者矩阵指令的计算结果。先经过向量的代数计算,然后再通过VPR过滤的操作可以视作指令的融合操作。如图4所示。
由于某些函计算关系,没有办法通过基础指令集实现,或者使用基础指令取实现,会耗用太多的指令资源实现,这些都不利于应用端侧的加速,因此增加一类特殊的指令vector lookup table来实现某些从源数据到目标数据的映射,在精度损失可控的情况下,提高计算性能。如图5所示。
1.1.3条件寄存器生成指令
Figure BDA0003778211690000081
Figure BDA0003778211690000082
为了对矩阵计算结果和向量计算结果做到灵活可控,增加该类条件寄存器生成指令,通过
Figure BDA0003778211690000083
指令,生成目的VPR寄存器,其中″opercte″都是比较操作,得到的VPR中每个元素的结果非0即1,如图6所示。
得到目的VPR的计算方式是多样的,还可以通过vector predict″operate″指令,在两个VPR寄存器之间进行逻辑计算,得到目的VPR结果,如图7所示。
1.1.4聚合指令
Figure BDA0003778211690000084
Figure BDA0003778211690000085
聚合操作是指令问的融合优化,
Figure BDA0003778211690000086
是将向量之间的代数运算与移位运算融合,移位值通过自定义的***扩展CSR寄存器给出,同理,
Figure BDA0003778211690000087
将向量之间的乘法操作,累加操作和移位操作融合,如图8所示。
1.2矩阵部分
1.2.1矩阵乘矩阵指令
Figure BDA0003778211690000091
Figure BDA0003778211690000092
矩阵乘加指令matrix multily add取出向量缓存中的两个x64向量作为源操作数,将其视为8x8的矩阵做矩阵乘法运算,其中的align up和aligndown用于源操作数RS1的移位,矩阵乘加指令可以看作矩阵乘法指令和向量加法指令的融合操作。
而矩阵乘累加指令matrix multiply accumulate可以看作矩阵乘加指令的复合操作,通过配置自定义的拓展CSR寄存器,控制矩阵乘累加运算的次数,增大单条指令的计算密度,相当于将一组多层for循环打包进一条指令实现,且该for循环每层的边界灵活可控。如图9所示。
1.2.2矩阵点乘矩阵指令
Figure BDA0003778211690000093
Figure BDA0003778211690000094
矩阵点乘指令与矩阵乘指令区别不大,区别在于计算方式。先前的矩阵乘法计算变为了矩阵对应位置的点乘计算。矩阵乘加计算一般用于DNN层中的卷积,而矩阵点乘计算一般用于DNN层中的深度开分离卷积。如图10所示。
1.2.3向量乘矩阵指令
Figure BDA0003778211690000095
Figure BDA0003778211690000096
向量乘矩阵计算一般用于DNN的全连接层的实现,RS1为64bytes大小的向量,RS2则是从向量缓存的64个地址中取出64x64 bytes大小的数据,视作二维矩阵,计算结果为64words的向量。在DNN的较深层中,特征图的通道数一般较大,可以使用该类指令,单位指令拥有更大的计算密度。如图11所示。
1.2.4向量乘矩阵批量指令
Figure BDA0003778211690000101
Figure BDA0003778211690000102
批量向量乘矩阵操作,RS1从向量缓存中取出64bytes大小的数据,并将其拆分为8个8bytes大小的向量,RS2从向量缓存中取出8个64bytes大小的数据,将其视作8个8x8的二维矩阵。相对应位置的向量乘对应位置的矩阵最终可以得到8个8bytes的结果。该指令较向量乘矩阵,有更小的计算粒度。计算密度是向量乘矩阵的1/8。可以将该指令视为粒度更小的向量乘矩阵的复合操作。如图12所示。
1.3向量指令格式
如下述表1所示:
Figure BDA0003778211690000103
Figure BDA0003778211690000111
Figure BDA0003778211690000121
Figure BDA0003778211690000131
1.4矩阵指令格式
如下表2所示:
[31∶30] [29] [28∶25] [24∶20] [19∶15] [14∶11] [10∶7] [6∶0] INST
VPR 0 VR_s SR_s2 SR_s1 0000 VR_d 0001011 mmad
VPR 0 VR_s SR_s2 SR_s1 1000 VR_d 0001011 mmad.au
VPR 1 VR_s SR_s2 SR_s1 1000 VR_d 0001011 mmad.ad
VPR 0 VR_s SR_s2 SR_s1 0001 VR_d 0001011 mmac
VPR 0 VR_s SR_s2 SR_s1 1001 VR_d 0001011 mmac.au
VPR 1 VR_s SR_s2 SR_s1 1001 VR_d 0001011 mmac.ad
VPR 0 VR_s SR_s2 SR_s1 0010 VR_d 0001011 mdmad
VPR 0 VR_s SR_s2 SR_s1 1010 VR_d 0001011 mdmad.au
VPR 1 VR_s SR_s2 SR_s1 1010 VR_d 0001011 mdmad.ad
VPR 0 VR_s SR_s2 SR_s1 0011 VR_d 0001011 mdmac
VPR 0 VR_s SR_s2 SR_s1 1011 VR_d 0001011 mdmac.au
VPR 1 VR_s SR_s2 SR_s1 1011 VR_d 0001011 mdmac.ad
VPR 0 VR_s SR_s2 SR_s1 0100 VR_d 0001011 mvmad
VPR 0 VR_s SR_s2 SR_s1 1100 VR_d 0001011 mvmad.au
VPR 1 VR_s SR_s2 SR_s1 1100 VR_d 0001011 mvmad.ad
VPR 0 VR_s SR_s2 SR_s1 0101 VR_d 0001011 mvmac
VPR 0 VR_s SR_s2 SR_s1 1101 VR_d 0001011 mvmac.au
VPR 1 VR_s SR_s2 SR_s1 1101 VR_d 0001011 mvmac.ad
VPR 0 VR_s SR_s2 SR_s1 0110 VR_d 0001011 mvbmad
VPR 0 VR_s SR_s2 SR_s1 1110 VR_d 0001011 mvbmad.au
VPR 1 VR_s SR_s2 SR_s1 1110 VR_d 0001011 mvbmad.ad
VPR 0 VR_s SR_s2 SR_s1 0111 VR_d 0001011 mvbmac
VPR 0 VR_s SR_s2 SR_s1 1111 VR_d 0001011 mvbmac.au
VPR 1 VR_s SR_s2 SR_s1 1111 VR_d 0001011 mvbmac.ad
2 VM拓展指令编程模型
向量扩展基于标量RISC-V ISA中增加了16个向量寄存器(VRO-VR15)和8个向量掩码寄存器VPR(VPRO-VPR7)以及若干个无特权的CSRS(控制和状态寄存器),分别是CSR_ROUND_TYPE、CSR_FADD_SHIFT_NUM、CSR_FADD_PROT_HIGH等,CSRS的描述如下。
向量寄存器的位宽为固定的2048宽度。如下表3所示:
Figure BDA0003778211690000151
Figure BDA0003778211690000161
2.1 HPU数据通路与数据流
参见图13、图14、图15,单计算节点可利用资源如下:
1.寄存器(Scalar Register/Vector Register/Vector Predict Register)
2.ALU(scalar calculate标量计算/vector calculate向量计算/matrixcalculate矩阵计算)
3.Cache(L1/L2/MMAP)
·Cache仅作用于CPU的程序和数据区,向量和矩阵运算的数据不经过缓存,需要程序员手工编程DMA进行加载
·MMAP对于cache访问的地址空间进行重映射,共2GB(32*64Byte)
4.Localmem(MMA/MMB/lutb/atom)
·MMA:可读写,主要用于存储卷积特征图feature map
·MMB:只读,主要用于存储卷积weight/bias常数
·Atom用于多核原子操作,lutb用于模拟非线性激活函数
·MMA和MMB都具有8个bank,每个bank具有一个readport和一个writeport
5.DMA
·MMA和MMB对于DDR的访问需要显式编程
·L1/L2 cache对于DDR的访问由cache控制器自动完成
6.NOC:片上互联网络
7.DDR:片外存储,双通道,每通道位宽64B,要求对齐64B且64B整数倍大小访问
如图13所示。
2.1.1向量计算编程模型
1.向量运算用VectorALU实现,向量寄存器为16组64*32bit的vreg
2.vload和vstore指令的数据必须来自MMA
3.Vector指令目的寄存器为vector register,vv指令源寄存器为两个vreg,vs指令的源寄存器为一个vreg和一个sreg
4.向量指令可以带一个条件控制字vpr,vpr为64bit,正好对应一个vreg的向量长度
5.下面是一次vv指令的计算过程
1)编程dma加载src操作数(根据src数据大小加载部分或者全部数据)
2)vload指令加载源操作数到vreg
3)执行vector运算指令,结果保存在vreg中
4)vstore指令保存结果vreg到MMA的dst区域
5)编程dma将MMA中的dst数据写回DDR中的dst缓冲区如图14所示。
2.1.2 Matrix计算编程模型
1.矩阵运算用MatrixALU实现,可以实现2个8*8的矩阵做乘法运算,或者也可以实现1个1*64的向量和一个64*64的矩阵做向量矩阵乘法
2.矩阵乘法指令的两个src操作数矩阵分别来自MMA和MMB,同时可以附带一个来自vreg的第三个操作数实现乘累加操作
3.矩阵乘法指令的目的操作数必须为vreg,这个矩阵乘法的结果,可以利用向量指令实现矩阵和向量计算的pipeline,或者利用vstore直接写回MMA
4.下面是一次矩阵指令的计算过程
1)编程dma加载src操作数到MMA和MMB(根据src数据大小加载部分或者全部数据),注意MMB只能加载const类型的数据
2)可选的,利用vload指令加载初始累加值到vreg
3)执行matrix运算指令,对MMA、MMB和vreg的三个操作数做矩阵乘累加,结果保存在vreg中
4)利用vstore指令把matrix操作的结果写回MMA中的dst区域
5)编程dma将MMA中的dst数据写回DDR中的dst缓冲区如图15所示。
此外,参见图13至图15,本公开还揭示了如图所示的相应的处理器实施例,处理器的架构详见图13至图15。
进一步的,在一个实施例中,本公开揭示了一种基于RISC-V的端侧DNN场景下的拓展VM指令集编码方法,包括如下步骤:
1)定义机器代码位宽:
示例性的,本公开的专用指令集基于RISC-V扩展,相应的专用指令集处理器的数据存储单元和程序存储单元的总线位宽为32-bits,故此时机器代码的位宽为32-bits;
2)定义指令类型:
将该指令集的指令定义为向量相关指令和矩阵相关指令两大类,两大类指令可做进一步细分,包含了相应数据格式的存储输入输出指令,相应数据格式的计算指令,相应数据格式的条件寄存器生成指令;
3)定义指令寻址方式:
对指令集指令中的操作数寻址定义为立即数寻址、寄存器寻址、变址寻址三种寻址方式;立即数寻址用于完成对立即数的寻址,寄存器寻址用于完成对通用寄存器和特殊寄存器的寻址,变址寻址用于完成对存储器的寻址;
4)编码:
第一条指令,vector load byte
指令功能:
将源寄存器SR_s1中的内容和立即数相加,合成向量存储器的地址,从该地址向后依次取出64-bytes的数据作为源操作数。
将VR_d指向的向量寄存器作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字。
将源操作数的每个字节放入目的操作数中对应元素的低8-bits中。
机器码说明:机器码的第20位到第24位,为立即数的第0位到第4位;机器码的第25位到第27位,为立即数的第5位到第7位;机器码的第30位到第31位,为立即数的第8位到第9位;机器码的第15位到第19位,为寄存器SR_s1的编号,机器码的第7位到第10位,为寄存器VR_d的编号。机器码的第28位到第29位,为类型编码,用于区分vector load的不同功能类型。机器码的11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二条指令,vector load half-word
指令功能:
将源寄存器SR_s1中的内容和立即数相加,合成向量存储器的地址,从该地址向后依次取出128-bytes的数据作为源操作数。
将VR_d指向的向量寄存器作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字。
将源操作数的每个半字放入目的操作数中对应元素的低16-bits中。
机器码说明:机器码的第20位到第24位,为立即数的第0位到第4位;机器码的第25位到第27位,为立即数的第5位到第7位;机器码的第30位到第31位,为立即数的第8位到第9位;机器码的第15位到第19位,为寄存器SR_s1的编号,机器码的第7位到第10位,为寄存器VR_d的编号。机器码的第28位到第29位,为类型编码,用于区分vector load的不同功能类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三条指令,vector load word
指令功能:
将源寄存器SR_s1中的内容和立即数相加,合成向量存储器的地址,从该地址向后依次取出256-bytes的数据作为源操作数。
将VR_d指向的向量寄存器作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字。
将源操作数的每个半字放入目的操作数中对应元素的32-bits中。
机器码说明:机器码的第20位到第24位,为立即数的第0位到第4位;机器码的第25位到第27位,为立即数的第5位到第7位;机器码的第30位到第31位,为立即数的第8位到第9位;机器码的第15位到第19位,为寄存器SR_s1的编号,机器码的第7位到第10位,为寄存器VR_d的编号。机器码的第28位到第29位,为类型编码,用于区分vector load的不同功能类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四条指令,vector store byte
指令功能:
将源寄存器SR_s1中的内容和立即数相加,合成向量存储器的地址,作为目的地址;
将源寄存器VR_s2中的内容作为源操作数,源操作数为一组包含64个元素的向量,其中每个元素为一个字;
从每个元素中取出低8-bits合成64-bytes的数据,存入存储器的目的地址中。
机器码说明:机器码的第20位到第24位,为立即数的第0位到第4位;机器码的第25位到第27位,为立即数的第5位到第7位;机器码的第30位到第31位,为立即数的第8位到第9位;机器码的第15位到第19位,为寄存器SR_s1的编号,机器码的第7位到第10位,为寄存器VR_d的编号。机器码的第28位到第29位,为类型编码,用于区分vector store的不同功能类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第五条指令,vector store half-word
指令功能:
将源寄存器SR_s1中的内容和立即数相加,合成向量存储器的地址,作为目的地址;
将源寄存器VR_s2中的内容作为源操作数,源操作数为一组包含64个元素的向量,其中每个元素为一个字;
从每个元素中取出半字合成128-bytes的数据,存入存储器的目的地址中。
机器码说明:机器码的第20位到第24位,为立即数的第0位到第4位;机器码的第25位到第27位,为立即数的第5位到第7位;机器码的第30位到第31位,为立即数的第8位到第9位;机器码的第15位到第19位,为寄存器SR_s1的编号,机器码的第7位到第10位,为寄存器VR_d的编号。机器码的第28位到第29位,为类型编码,用于区分vector store的不同功能类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第六条指令,vector store word
指令功能:
将源寄存器SR_s1中的内容和立即数相加,合成向量存储器的地址,作为目的地址;
将源寄存器VR_s2中的内容作为源操作数,源操作数为一组包含64个元素的向量,其中每个元素为一个字;
从每个元素中取出字合成256-bytes的数据,存入存储器的目的地址中。
机器码说明:机器码的第20位到第24位,为立即数的第0位到第4位;机器码的第25位到第27位,为立即数的第5位到第7位;机器码的第30位到第31位,为立即数的第8位到第9位;机器码的第15位到第19位,为寄存器SR_s1的编号,机器码的第7位到第10位,为寄存器VR_d的编号。机器码的第28位到第29位,为类型编码,用于区分vector store的不同功能类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第七条指令,vector vector add
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素相加,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第八条指令,vector scalar add
指令功能:将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2相加,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第九条指令,vector vector sub
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素相减,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十条指令,vector scalar sub
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2相减,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十一条指令,vector vector max
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做取大值计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十二条指令,vector scalar max
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做取大值计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十三条指令,vector vector min
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做取小值计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十四条指令,vector scalar min
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做取小值计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量代数运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十五条指令,vector vector mul
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做乘法计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量乘除法运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十六条指令,vector scalar mul
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做乘法计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量乘除法运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十七条指令,vector vector and
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做逻辑与计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十八条指令,vector scalar and
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑与计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第十九条指令,vector vector or
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做逻辑或计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十条指令,vector scalar or
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑或计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十一条指令,vector vector xor
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做逻辑异或计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十二条指令,vector scalar xor
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑异或计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十三条指令,vector vector nxor
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做逻辑同或计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十四条指令,vector scalar nxor
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑同或计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s1的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量逻辑运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十五条指令,vector vector sll
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做逻辑左移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十六条指令,vector scalar sll
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑左移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十七条指令,vector vector srl
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做逻辑右移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十八条指令,vector scalar srl
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑右移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第二十九条指令,vector vector sla
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做代数左移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十条指令,vector scalar sla
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做逻辑代数计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十一条指令,vector vector sra
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做代数右移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十二条指令,vector scalar sra
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做代数右移计算,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量移位运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十三条指令,vector look-u p-table
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素的内容作为查找表的入口地址进行查找,并通过操作数3选通,得到目的操作数对应元素的结果。
机器码说明:机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十四条指令,vector vector predict equal
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做比较计算,相等为1,不同为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十五条指令,vector scalar predict equal
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1的每一个元素和源操作数2做比较计算,相等为1,不同为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十六条指令,vector vector predict not equal
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做比较计算,不等为1,相等为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十七条指令,vector scalar predict not equal
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1的每一个元素和源操作数2做比较计算,不等为1,相等为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十八条指令,vector vector predict letter than
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做比较计算,小于为1,大于为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第三十九条指令,vector scalar predict letter than
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1的每一个元素和源操作数2做比较计算,小于为1,大于为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十条指令,vector vector predict greater than
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做比较计算,大于为1,小于为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十一条指令,vector scalar predict greater than
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1的每一个元素和源操作数2做比较计算,大于为1,小于为0,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;
机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十二条指令,vector predict and
指令功能:
将源寄存器VPR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一比特;
将源寄存器VPR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做逻辑与计算,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VPR_s2的编号;机器码的第15位到第19位,为寄存器VPR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十三条指令,vector predict or
指令功能:
将源寄存器VPR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一比特;
将源寄存器VPR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做逻辑或计算,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VPR_s2的编号;机器码的第15位到第19位,为寄存器VPR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十四条指令,vector predict xor
指令功能:
将源寄存器VPR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一比特;
将源寄存器VPR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做逻辑异或计算,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VPR_s2的编号;机器码的第15位到第19位,为寄存器VPR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十五条指令,vector predict nxor
指令功能:
将源寄存器VPR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一比特;
将源寄存器VPR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素做逻辑同或计算,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VPR_s2的编号;机器码的第15位到第19位,为寄存器VPR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十六条指令,vector predict not
指令功能:
将源寄存器VPR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VPR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1的对应元素取反,作为目的操作数对应元素的结果。
机器码说明:机器码的第15位到第19位,为寄存器VPR_s1的编号;机器码的第7位到第10位,为寄存器VPR_d的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十七条指令,vector predict swap
指令功能:
将源寄存器VPR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一比特;
将源寄存器VPR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一比特;
将源操作数1和源操作数2的对应元素互换。
机器码说明:机器码的第20位到第24位,为寄存器VPR_s2的编号;机器码的第15位到第19位,为寄存器VPR_s1的编号;机器码的第28位到第29位,为类型编码,用于区分向量条件码运算的不同功能类型;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十八条指令,vector vector fuse add
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做移位加法计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量浮点运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第四十九条指令,vector scalar fuse add
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做移位加法计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量浮点运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第五十条指令,vector vector fuse sub
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做移位减法计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量浮点运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第五十一条指令,vector scalar fuse sub
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做移位减法法计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量浮点运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第五十二条指令,vector vector fuse mul
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VR_s2中的内容作为源操作数2,源操作数2为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1和源操作数2的对应元素做移位乘法计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器VR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量浮点运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第五十三条指令,vector scalar fuse mul
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2为标量;
将源寄存器VPR中的内容作为源操作数3,源操作数3为一组包含64个元素的向量,其中每个元素为一比特;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素和源操作数2做移位乘法计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;
机器码的第30位到第31位,为寄存器VPR的编号;机器码的第28位到第29位,为类型编码,用于区分向量浮点运算的不同功能类型;机器码的第25位到第27位,为类型编码,用于区分源操作数2的不同类型。机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
第五十四条指令,vector fuse Iook-up-table
指令功能:
将源寄存器VR_s1中的内容作为源操作数1,源操作数1为一组包含64个元素的向量,其中每个元素为一个字;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数为一组包含64个元素的向量,其中每个元素为一个字;
将源操作数1的每一个元素的内容作为浮点数查找表的入口地址进行查找,查找到的结果做移位计算,移位计算的方式由CSR寄存器定义,并通过操作数3选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第15位到第19位,为寄存器VR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第11位到第14位,为类型编码,用于区分vector指令的不同功能类型。
类似的,在另一个实施例中,还可以对如下指令进行编码:
第一条指令,matrix matrix multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将矩阵操作数1和矩阵操作数2从存储器中读出,做矩阵乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第二条指令,matrix matrix align-up multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将矩阵操作数1和矩阵操作数2从存储器中读出,矩阵操作数2左移8个字,低位补0,做矩阵乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第三条指令,matrix matrix align-down multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源操作数1和源操作数2从存储器中读出,源操作数2右移8个字宽,高位补0,做矩阵乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第四条指令,matrix matrix multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
由特殊CSR寄存器控制矩阵乘累加的过程,将矩阵操作数1和矩阵操作数2按照步调依次从存储器中读出,做矩阵乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第五条指令,matrix matrix align-up multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
由特殊CSR寄存器控制矩阵乘累加的过程,将矩阵操作数1和矩阵操作数2按照步调依次从存储器中读出,其中矩阵操作数2左移8个字宽,低位补0,做矩阵乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第六条指令,matrix matrix align-down multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
由特殊CSR寄存器控制矩阵乘累加的过程,将矩阵操作数1和矩阵操作数2按照步调依次从存储器中读出,其中矩阵操作数2右移8个字宽,高位补0,做矩阵乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第七条指令,matrix matrix dot muItiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将矩阵操作数1和矩阵操作数2从存储器中读出,做矩阵之间对应元素的乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第八条指令,matrix matrix align-down dot multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将矩阵操作数1和矩阵操作数2从存储器中读出,矩阵操作数2左移8个字,低位补0,做矩阵之间对应元素的乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第九条指令,matrix matrix align-down dot multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将矩阵操作数1和矩阵操作数2从存储器中读出,矩阵操作数2右移8个字宽,高位补0,做矩阵之间对应元素的乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十条指令,matrix matrix dot muItiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
由特殊CSR寄存器控制矩阵乘累加的过程,将矩阵操作数1和矩阵操作数2按照步调依次从存储器中读出,做矩阵对应元素之间的乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十一条指令,matrix matrix align-up dot multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
由特殊CSR寄存器控制矩阵乘累加的过程,将矩阵操作数1和矩阵操作数2按照步调依次从存储器中读出,其中矩阵操作数2左移8个字宽,低位补0,做矩阵对应元素之间的乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十二条指令,matrix matrix align-down dot multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为矩阵操作数1的存储器入口地址,矩阵操作数1包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含64个元素,其中每个元素为一个字,矩阵的尺寸为8*8;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为8*8的矩阵;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为8*8的矩阵;
由特殊CSR寄存器控制矩阵乘累加的过程,将矩阵操作数1和矩阵操作数2按照步调依次从存储器中读出,其中矩阵操作数2右移8个字宽,高位补0,做矩阵对应元素之间的乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十三条指令,vector matrix multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*64;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为64*64;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*64的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将向量操作数1和矩阵操作数2从存储器中读出,做向量矩阵乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十四条指令,vector matrix align-up multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*64;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为64*64;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*64的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将向量操作数1和矩阵操作数2从存储器中读出,其中矩阵操作数2左移64个字宽,低位补0,做向量矩阵乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十五条指令,vector matrix align-down multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*64;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为64*64;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*64的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将向量操作数1和矩阵操作数2从存储器中读出,其中矩阵操作数2右移64个字宽,高位补0,做向量矩阵乘法计算,计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十六条指令,vector matrix multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*64;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为64*64;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*64的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
由特殊CSR寄存器控制矩阵乘累加的过程,将向量操作数1和矩阵操作数2从存储器中读出,做向量矩阵乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十七条指令,vector matrix align-up multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*64;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为64*64;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*64的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将向量操作数1和矩阵操作数2从存储器中读出,其中矩阵操作数2左移64个字宽,低位补0,做向量矩阵乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十八条指令,vector matrix align-down multiply-accumulate
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*64;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为64*64;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*64的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*64的向量;
将向量操作数1和矩阵操作数2从存储器中读出,其中矩阵操作数2右移64个字宽,高位补0,做向量矩阵乘法计算,计算结果不断累加,最终的计算结果与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SRvs1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第十九条指令,vector matrix bundle muItiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*8,认为具有8个相同尺寸的向量;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为8*8,认为具有8个相同尺寸的矩阵;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将向量操作数1和矩阵操作数2从存储器中读出,对应位置的向量和矩阵做向量矩阵乘法计算,计算结果为8个尺寸为1*8的向量,与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第二十条指令,vector matrix align-up bundle multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*8,认为具有8个相同尺寸的向量;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为8*8,认为具有8个相同尺寸的矩阵;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将向量操作数1和矩阵操作数2从存储器中读出,其中矩阵操作数2左移64个字宽,低位补0,对应位置的向量和矩阵做向量矩阵乘法计算,计算结果为8个尺寸为1*8的向量,与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
第二十一条指令,vector matrix align-down bundle multiply-add
指令功能:
将源寄存器SR_s1中的内容作为源操作数1,源操作数1作为向量操作数1的存储器入口地址,向量操作数1包含64个元素,其中每个元素为一个字,向量的尺寸为1*8,认为具有8个相同尺寸的向量;
将源寄存器SR_s2中的内容作为源操作数2,源操作数2作为矩阵操作数2的存储器入口地址,矩阵操作数2包含4096个元素,其中每个元素为一个字,矩阵的尺寸为8*8,认为具有8个相同尺寸的矩阵;
将源寄存器VR_s中的内容作为源操作数3,源操作数3包含64个元素,其中每个元素为一个字,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将源寄存器VPR中的内容作为源操作数4,源操作数4包含64个元素,其中每个元素为一比特,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将目的寄存器VR_d中的内容作为目的操作数,目的操作数包含64个元素,其中每个元素为一个字,将其视作尺寸为1*8的向量,认为具有8个相同尺寸的向量;
将向量操作数1和矩阵操作数2从存储器中读出,其中矩阵操作数2右移64个字宽,高位补0,对应位置的向量和矩阵做向量矩阵乘法计算,计算结果为8个尺寸为1*8的向量,与操作数3的对应位置的元素相加,并通过操作数4选通,作为目的操作数对应元素的结果。
机器码说明:机器码的第20位到第24位,为寄存器SR_s2的编号;机器码的第15位到第19位,为寄存器SR_s1的编号;机器码的第7位到第10位,为寄存器VR_d的编号;机器码的第30位到第31位,为寄存器VPR的编号;机器码的第25位到第28位,为寄存器VR_s的编号;机器码的第11位到第14位,为类型编码,用于区分matrix指令的不同功能类型。
尽管以上结合附图对本公开的实施方案进行了描述,但本公开并不局限于上述的具体实施方案和应用领域,上述的具体实施方案仅仅是示意性的、指导性的,而不是限制性的。本领域的普通技术人员在本说明书的启示下和在不脱离本公开权利要求所保护的范围的情况下,还可以做出很多种的形式,这些均属于本公开保护之列。

Claims (9)

1.一种基于RISC-V的端侧DNN场景下的拓展VM指令集编码方法,包括如下步骤:
S1:编程dma加载src操作数,其中,根据src数据大小加载部分或者全部数据;
S2:vload指令加载源操作数到vreg;
S3:执行vector运算指令,结果保存在vreg中;
S4:vstore指令保存结果vreg到MMA的dst区域;
S5:编程dma将MMA中的dst数据写回DDR中的dst缓冲区;
其中,
所述方法包括一次vv指令的计算过程;
所述拓展VM指令集包括向量拓展指令和矩阵拓展指令。
2.根据权利要求1所述的方法,其中,优选的,
向量运算用VectorALU实现,向量寄存器为16组64*32bit的vreg。
3.根据权利要求1所述的方法,其中,
vload和vstore指令的数据必须来自MMA。
4.根据权利要求1所述的方法,其中,
Vector指令目的寄存器为vector register,vv指令源寄存器为两个vreg,vs指令的源寄存器为一个vreg和一个sreg。
5.根据权利要求1所述的方法,其中,
向量指令可以带一个条件控制字vpr,vpr为64bit,正好对应一个vreg的向量长度。
6.根据权利要求1所述的方法,其中,
所述方法还包括一次矩阵指令的计算过程,其进一步包括如下步骤:
S10:编程dma加载src操作数到MMA和MMB,其中,根据src数据大小加载部分或者全部数据),MMB只能加载const类型的数据;
S20:可选的,利用vload指令加载初始累加值到vreg;
S30:执行matrix运算指令,对MMA、MMB和vreg的三个操作数做矩阵乘累加,结果保存在vreg中;
S40:利用vstore指令把matrix操作的结果写回MMA中的dst区域;
S50:编程dma将MMA中的dst数据写回DDR中的dst缓冲区。
7.根据权利要求6所述的方法,其中,
矩阵运算用MatrixALU实现,可以实现2个8*8的矩阵做乘法运算,或者也可以实现1个1*64的向量和一个64*64的矩阵做向量矩阵乘法。
8.根据权利要求6所述的方法,其中,
矩阵乘法指令的两个src操作数矩阵分别来自MMA和MMB,同时可以附带一个来自vreg的第三个操作数实现乘累加操作。
9.根据权利要求6所述的方法,其中,
矩阵乘法指令的目的操作数必须为vreg,这个矩阵乘法的结果,可以利用向量指令实现矩阵和向量计算的pipeline,或者利用vstore直接写回MMA。
CN202210924350.1A 2022-01-30 2022-08-02 基于risc-v的拓展vm指令集编码方法 Withdrawn CN115373744A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2022101155818 2022-01-30
CN202210115581 2022-01-30

Publications (1)

Publication Number Publication Date
CN115373744A true CN115373744A (zh) 2022-11-22

Family

ID=84064806

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210924350.1A Withdrawn CN115373744A (zh) 2022-01-30 2022-08-02 基于risc-v的拓展vm指令集编码方法

Country Status (1)

Country Link
CN (1) CN115373744A (zh)

Similar Documents

Publication Publication Date Title
US10984074B2 (en) Accelerator for sparse-dense matrix multiplication
CN109661647B (zh) 数据处理装置和方法
JP7266602B2 (ja) ニューラルネットワークプロセッサに対する統合メモリ構造
JP3573755B2 (ja) 画像処理プロセッサ
EP1570373A1 (en) Cellular engine for a data processing system
CN103221916A (zh) 执行乘乘累加指令
TWI229287B (en) Single instruction multiple data (SIMD) processor capable of designating plural registers
US7013321B2 (en) Methods and apparatus for performing parallel integer multiply accumulate operations
CN107145335B (zh) 用于大整数运算的向量指令的装置和方法
US20210389948A1 (en) Mixed-element-size instruction
US7558816B2 (en) Methods and apparatus for performing pixel average operations
US6915411B2 (en) SIMD processor with concurrent operation of vector pointer datapath and vector computation datapath
CN112051981B (zh) 一种数据流水线计算路径结构及单线程数据流水线***
US11106465B2 (en) Vector add-with-carry instruction
CN115373744A (zh) 基于risc-v的拓展vm指令集编码方法
US8285975B2 (en) Register file with separate registers for compiler code and low level code
Yavits et al. Associative Processor
Islam et al. Resource-efficient RISC-V Vector Extension Architecture for FPGA-based Accelerators
Karthihaa et al. Design and implementation of VLIW DSP processors for high ended embedded based systems
CN112052042B (zh) 一种数据流水线处理器***
Rudd et al. A high performance factoring machine
US20230140257A1 (en) Modular addition instruction
US20030163500A1 (en) 64-bit scaled sum-of-product operations in a 32-bit environment

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
WW01 Invention patent application withdrawn after publication

Application publication date: 20221122

WW01 Invention patent application withdrawn after publication