当前位置: 首页 > news >正文

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(七)- 向量算术指令格式

  1. 引言

以下是《riscv-v-spec-1.0.pdf》文档的关键内容:
这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量算术指令格式、向量整数和浮点算术指令、向量归约操作、向量掩码指令、向量置换指令、异常处理以及标准向量扩展等。
首先,文档定义了向量元素和向量寄存器状态之间的映射关系,并阐述了向量指令的格式。在此基础上,提出了配置设置指令,如vsetvl、ivsetiv和vlsetvl,用于设定向量长度(VL)和向量对齐长度(AVL)。
接着,文档详细说明了向量加载和存储操作,以及向量内存对齐和一致性模型。这些模型确保了向量操作的高效性和准确性。
然后,文档介绍了向量算术指令格式,包括向量整数、固定点和浮点算术指令。这些指令支持广泛的数学运算,为高性能计算提供了强大的支持。
此外,文档还涉及向量归约操作、掩码指令和置换指令,这些指令增强了向量操作的灵活性和功能性。
最后,文档讨论了异常处理机制,并列举了标准向量扩展指令列表。这些扩展指令为向量处理器提供了丰富的功能集,使其能够适应不同的应用场景和性能需求。
综上所述,这份文档为向量指令集的设计和实现提供了全面的指导和参考,有助于开发者更好地理解和利用向量处理器的能力。

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型-CSDN博客

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(二)-向量元素到向量寄存器状态的映射-CSDN博客【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(三)-向量指令格式-CSDN博客

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(四)- 配置和设置指令(vsetvli/vsetivli/vsetvl)-CSDN博客

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(五)- 向量加载和存储-CSDN博客

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(六)- 向量内存一致性模型-CSDN博客

10. 向量算术指令格式

向量算术指令使用了一个新的主要操作码(OP-V = 10101112),它与OP-FP相邻。三位的funct3字段用于定义向量指令的子类别。
OP-V主要操作码下的向量算术指令格式:

10.1. 向量算术指令编码

The funct3 field encodes the operand type and source locations.

Table 15. funct3

funct3[2:0]CategoryOperandType of Scale Operand

0

0

0

OPIVV

vector-vector

N/A

0

0

1

OPFVV

vector-vector

N/A

0

1

0

OPMVV

vector-vector

N/A

0

1

1

OPIVI

vector-immediate

imm[4:0]

1

0

0

OPIVX

vector-scalar

GPR x register rs1

1

0

1

OPFVF

vector-scalar

FP f register rs1

1

1

0

OPMVX

vector-scalar

GPR x register rs1

1

1

1

OPCFG

scalars-imms

GPR x register rs1 & rs2/imm

整数操作根据操作码使用无符号或二进制补码有符号整数算术执行。

注意:在此讨论中,Fixed-point(固定点)操作被视为整数操作。

所有标准的向量浮点算术操作都遵循IEEE-754/2008标准。所有向量浮点操作都使用frm寄存器中的动态舍入模式。当任何向量浮点指令(即使是不依赖于舍入模式的指令)在frm字段包含无效的舍入模式时,或者当vl=0,或者当vstart=vl时,使用frm字段是保留的。

注意:所有向量浮点代码都将依赖于frm中的有效值。当舍入模式无效时,为简化控制逻辑,实现可以使所有向量浮点指令报告异常。

向量-向量操作分别从vs2和vs1指定的向量寄存器组中获取两个操作数向量。

向量-标量操作有三种可能的形式。在这三种形式中,向量寄存器组操作数由vs2指定。第二个标量源操作数来自三个替代来源之一:

  1. 对于整数操作,标量可以是一个5位立即数,即imm[4:0],编码在rs1字段中。除非另有规定,否则该值将符号扩展到SEW位。

  2. 对于整数操作,标量可以从rs1指定的标量x寄存器中获取。如果XLEN>SEW,则使用x寄存器的最低有效SEW位,除非另有规定。如果XLEN<SEW,则从x寄存器中的值将符号扩展到SEW位。

  3. 对于浮点操作,标量可以从标量f寄存器中获取。如果FLEN>SEW,将检查f寄存器中的值是否为有效的NaN装箱值,在这种情况下,将使用f寄存器的最低有效SEW位,否则将使用规范的NaN值。任何浮点向量操作数的EEW不是受支持的浮点类型宽度(包括FLEN<SEW的情况)的向量指令都是保留的。

注意:

有些指令将5位立即数零扩展,并在汇编语法中通过命名立即数uimm来表示这一点。

在向拟议的Zinx/Zdinx/Zhinx扩展添加向量扩展时,浮点标量参数从x寄存器中获取。这些扩展不支持NaN装箱,因此向量浮点标量值的产生遵循与整数标量操作数相同的规则(即,当XLEN>SEW时,使用最低的SEW位;当XLEN<SEW时,使用符号扩展的值)。

向量算术指令在vm字段的控制下被屏蔽。

# Assembly syntax pattern for vector binary arithmetic instructions
# Operations returning vector results, masked by vm (v0.t, <nothing>)
vop.vv  vd, vs2, vs1, vm  # integer vector-vector      vd[i] = vs2[i] op vs1[i]
vop.vx  vd, vs2, rs1, vm  # integer vector-scala r      vd[i] = vs2[i] op x[rs1]
vop.vi  vd, vs2, imm, vm  # integer vector-immediate   vd[i] = vs2[i] op imm
vfop.vv  vd, vs2, vs1, vm # FP vector-vector operation vd[i] = vs2[i] fop vs1[i]
vfop.vf  vd, vs2, rs1, vm # FP vector-scalar operation vd[i] = vs2[i] fop f[rs1]

在编码中,vs2 是第一个操作数,而 rs1/imm 是第二个操作数。这与标准的标量排序相反。这样的安排保留了现有的编码约定,即只读取一个标量寄存器的指令会从 rs1 读取,而 5 位立即数则来源于 rs1 字段。

# Assembly syntax pattern for vector ternary arithmetic instructions (multiply-add)
# Integer operations overwriting sum input
vop.vv vd, vs1, vs2, vm  # vd[i] = vs1[i] * vs2[i] + vd[i]
vop.vx vd, rs1, vs2, vm  # vd[i] = x[rs1] * vs2[i] + vd[i]
# Integer operations overwriting product input
vop.vv vd, vs1, vs2, vm  # vd[i] = vs1[i] * vd[i] + vs2[i]
vop.vx vd, rs1, vs2, vm  # vd[i] = x[rs1] * vd[i] + vs2[i]
# Floating-point operations overwriting sum input
vfop.vv vd, vs1, vs2, vm  # vd[i] = vs1[i] * vs2[i] + vd[i]
vfop.vf vd, rs1, vs2, vm  # vd[i] = f[rs1] * vs2[i] + vd[i]
# Floating-point operations overwriting product input
vfop.vv vd, vs1, vs2, vm  # vd[i] = vs1[i] * vd[i] + vs2[i]
vfop.vf vd, rs1, vs2, vm  # vd[i] = f[rs1] * vd[i] + vs2[i]

对于三元乘法-加法操作,汇编器语法总是首先放置目标向量寄存器,然后放置 rs1 或 vs1,接着是 vs2。这种排序为这些三元操作提供了更自然的汇编器读取方式,因为乘法操作数总是相邻的。

10.2 扩展算术指令

定义了一些向量算术指令为扩展操作,其中目标向量寄存器组的EEW=2SEW且EMUL=2LMUL。这些指令的操作码前一般会加上vw前缀,对于向量浮点指令,则加上vfw前缀。

Assembly syntax pattern for vector widening arithmetic instructions
# Double-width result, two single-width sources: 2*SEW = SEW op SEW
vwop.vv  vd, vs2, vs1, vm  # integer vector-vector      vd[i] = vs2[i] op vs1[i]
vwop.vx  vd, vs2, rs1, vm  # integer vector-scala r      vd[i] = vs2[i] op x[rs1]
# Double-width result, first source double-width, second source single-width: 2*SEW = 2*SEW op SEW
vwop.wv  vd, vs2, vs1, vm  # integer vector-vector      vd[i] = vs2[i] op vs1[i]
vwop.wx  vd, vs2, rs1, vm  # integer vector-scala r      vd[i] = vs2[i] op x[rs1]

注意:

原本,我们在操作码上使用了w后缀,但这可能与w后缀表示双字整数中的字大小操作混淆,因此将w移动到前缀位置。

为了使浮点扩展操作与任何将写为fw的标量扩展浮点操作更加一致,已将浮点扩展操作从vwf更改为vfw*。

扩展指令编码必须遵循“向量操作数”部分中的约束。

10.3 缩小指令编码

提供了一些指令,用于将双宽度的源向量转换为单宽度的目标向量。这些指令将vs2指定的向量寄存器组(其中EEW/EMUL=2SEW/2LMUL)转换为具有当前SEW/LMUL设置的向量寄存器组。如果存在第二个源向量寄存器组(由vs1指定),则其宽度与结果(即EEW=SEW)相同(更窄)。

注意:另一种设计决策是将SEW/LMUL视为定义源向量寄存器组的大小。这里的选择是基于这样一种信念,即所选的方法将需要更少的vtype更改。

设置掩码寄存器的比较操作也隐含着一个缩小操作。在汇编器中,操作码上的vn前缀用于区分这些指令,对于缩小浮点操作码,则使用vfn前缀。双宽度源向量寄存器组由源操作数后缀中的w表示(例如,vnsra .wv)。

Assembly syntax pattern for vector narrowing arithmetic instructions
# Single-width result vd, double-width source vs2, single-width source vs1/rs1
# SEW = 2*SEW op SEW
vnop.wv  vd, vs2, vs1, vm  # integer vector-vector      vd[i] = vs2[i] op vs1[i]
vnop.wx  vd, vs2, rs1, vm  # integer vector-scala r      vd[i] = vs2[i] op x[rs1]

缩小指令编码必须遵循“向量操作数”部分中的约束。

相关文章:

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(七)- 向量算术指令格式

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...

顺序表的应用

文章目录 目录1. 基于动态顺序表实现通讯录项目2.顺序表经典算法2.1 [移除元素](https://leetcode.cn/problems/remove-element/description/)2.2 [合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/description/) 3. 顺序表的问题及思考 目录 基于动态顺序…...

2024-04-03-代码随想录算法训练营第一天[LeetCode704二分查找、LeetCode27移除元素]

文章目录 第一题解法一[左闭右开]解法二[左闭右闭]总结 第二题解法一[暴力解法]解法二[双指针法]总结 第一题 LeetCode704二分查找 解法一[左闭右开] class Solution { public:int search(vector<int>& nums, int target) {int size nums.size();int right size…...

[Go运行问题]/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_xx‘ not found

问题描述 在一台ubuntu 20的机器上通过go 编译生成的可执行程序(使用了cgo)&#xff0c;在其他ubuntu机器上运行时出现如下问题 /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found 问题分析 因为go代码里的依赖库使用到了sndfile&#xff0c;它必须使用cgo了…...

matrix-breakout-2-morpheus 靶机渗透

信息收集&#xff1a; 1.nmap存活探测&#xff1a; nmap -sn -r 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 12:13 CST Nmap scan report for 192.168.10.1 Host is up (0.00056s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…...

爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff…...

物联网实战--入门篇之(十)安卓QT--后端开发

目录 一、项目配置 二、MQTT连接 三、数据解析 四、数据更新 五、数据发送 六、指令下发 一、项目配置 按常规新建一个Quick空项目后&#xff0c;我们需要对项目内容稍微改造、规划下。 首先根据我们的需要在.pro文件内添加必要的模块&#xff0c;其中quick就是qml了&…...

[Java]网络编程

网络编程概述 计算机网络&#xff1a; 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序…...

重读Java设计模式: 适配器模式解析

引言 在软件开发中&#xff0c;经常会遇到不同接口之间的兼容性问题。当需要使用一个已有的类&#xff0c;但其接口与我们所需的不兼容时&#xff0c;我们可以通过适配器模式来解决这一问题。适配器模式是一种结构型设计模式&#xff0c;它允许接口不兼容的类之间进行合作。本…...

MySQL面试题系列-9

MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#xff0c;关系数据…...

书生·浦语训练营二期第二次笔记

文章目录 1. 部署 InternLM2-Chat-1.8B 模型进行智能对话1.1 配置环境1.2 下载 InternLM2-Chat-1.8B 模型 2. 实战&#xff1a;部署实战营优秀作品 八戒-Chat-1.8B 模型2.1 配置基础环境2.2 使用 git 命令来获得仓库内的 Demo 文件&#xff1a;2.3 下载运行 Chat-八戒 Demo 3. …...

python_3

文章目录 题目运行结果模式A模式B模式C模式D 题目 mode input("请选择模式:") n int(input("请输入数字:"))if mode "A" or mode "a":# 模式A n:输入的层数 i:当前的层数# 每行数字循环次数 ifor i in range(1, n 1):for j in r…...

【Python】 使用Apache Tika和Python实现zip、csv、xls等多格式文件文本内容提取

时间的电影 结局才知道 原来大人已没有童谣 最后的叮咛 最后的拥抱 我们红着眼笑 我们都要把自己照顾好 好到遗憾无法打扰 好好的生活 好好的变老 好好假装我 已经把你忘掉 &#x1f3b5; 五月天《好好》 在进行数据分析、搜索引擎优化或任何需要处理大量…...

C语言如何将多维数组名作为函数参数?

一、问题 ⼦函数执⾏时&#xff0c;整个多维数组是由主函数决定的&#xff0c;这时就要把多维数组的数组名作为函数参数传递给⼦函数。那么在C程序中&#xff0c;怎样将多维数组名作函数参数进⾏传递&#xff1f; 二、解答 以⼆维数组为例&#xff0c;其格式如下。 形参定义&…...

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…...

《LeetCode力扣练习》代码随想录——二叉树(合并二叉树---Java)

《LeetCode力扣练习》代码随想录——二叉树&#xff08;合并二叉树—Java&#xff09; 刷题思路来源于 代码随想录 617. 合并二叉树 二叉树-前序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode…...

openstack云计算(二)——使用Packstack安装器安装一体化OpenStack云平台

初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 一【准备阶段】 &#xff08;1&#xff09;准备一台能够安装OpenStack的实验用计算机&#xff0c;建议使用VMware虚拟机。 &#xff08;2&#xff09;该计算机应安装CentOS 7&#xff0c;建议采用CentO…...

Flutter Don‘t use ‘BuildContext‘s across async gaps.

Flutter提示Don‘t use ‘BuildContext‘s across async gaps.的解决办法—flutter里state的mounted属性...

基于SSM+Jsp+Mysql的个性化影片推荐系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…...

循环队列的实现及应用——桶排序bucket_sort、基数排序radix_sort

一、循环队列的实现 代码解释 1、完成初始化 2、定义方法 3、测试实例 4、完整代码 class AQueue:def __init__(self, size=10):self.__mSize = sizeself.__front=0self.__rear = 0self.__listArray = [None] * size#清空元素def clear(self):self.__front = 0self.__rear =…...

ubuntu16如何使用高版本cmake

1.引言 最近在尝试ubuntu16.04下编译开源项目vsome&#xff0c;发现使用apt命令默认安装cmake的的版本太低。如下 最终得知&#xff0c;ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…...

电商-广告投放效果分析(KMeans聚类、数据分析-pyhton数据分析

电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09; 文章目录 电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09;项目介绍数据数据维度概况数据13个维度介绍 导入库&#xff0c;加载数据数据审查相关性分析数据处理建立模型聚类结果特征分析…...

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入&#xff0c;注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码&#xff0c;返回了一个“admin的密码”&#xff1a; Hello admin&#xff01; Your password is…...

C++——栈和队列容器

前言&#xff1a;这篇文章我们将栈和队列两个容器放在一起进行分享&#xff0c;因为这两个要分享的知识较少&#xff0c;而且两者在结构上有很多相似之处&#xff0c;比如栈只能在栈顶操作&#xff0c;队列只能在队头和队尾操作。 不同于前边所分享的三种容器&#xff0c;这篇…...

Java集合(个人整理笔记)

目录 1. 常见的集合有哪些&#xff1f; 2. 线程安全的集合有哪些&#xff1f;线程不安全的呢&#xff1f; 3. Arraylist与 LinkedList 异同点&#xff1f; 4. ArrayList 与 Vector 区别&#xff1f; 5. Array 和 ArrayList 有什么区别&#xff1f;什么时候该应 Array而不是…...

Redis -- 缓存穿透问题解决思路

缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&#xff1a; 额外…...

数据挖掘中的PCA和KMeans:Airbnb房源案例研究

目录 一、PCA简介 二、数据集概览 三、数据预处理步骤 四、PCA申请 五、KMeans 聚类 六、PCA成分分析 七、逆变换 八、质心分析 九、结论 十、深入探究 10.1 第 1 步&#xff1a;确定 PCA 组件的最佳数量 10.2 第 2 步&#xff1a;使用 9 个组件重做 PCA 10.3 解释 PCA 加载和特…...

【ArcGIS微课1000例】0107:ArcGIS加载在线历史影像服务WMTS

文章目录 一、WMTS历史影像介绍二、ArcGIS加载WMTS服务三、Globalmapper加载WMTS服务一、WMTS历史影像介绍 通过访问历史影响WMTS服务,可以将全球范围内历史影像加载进来,如下所示: WMTS服务: https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WM…...

IP归属地在互联网行业中的应用

摘要&#xff1a;IP&#xff08;Internet Protocol&#xff09;地址归属地是指互联网上某个IP地址所对应的地理位置信息。在互联网行业中&#xff0c;IP归属地具有重要的应用价值&#xff0c;包括网络安全、广告定向、用户定位等方面。IP数据云将探讨IP归属地在互联网行业中的应…...

非关系型数据库-----------探索 Redis高可用 、持久化、性能管理

目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…...

苏州建设局统计网站/seo求职

前言 该文章脱胎于&#xff1a; 一起开发一个文件服务器–3、配置中心和redis(3)spring与redis的集成【草稿】 这篇文章主要是优化spring和redis的集成过程。考虑到每一个项目都应该会有自己的redis&#xff0c;postgresql等配置&#xff0c;可能是单机&#xff0c;也可能是集…...

在线购物商城系统/搜索引擎优化的含义

题目 给定一个单链表&#xff0c;其中的元素按升序排序&#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例 给定的有序链表&#xff1a; [-10, -3, 0, 5, 9], 一个…...

台州哪家做企业网站比较好/惠东seo公司

文章目录Echarts仪表盘的常见效果仪表盘的特点Echarts 每个图表均配有对应的源代码以及知识点~~~~ 详情可点开对应的图表学习&#xff01; 各类常用图表总结在此&#xff01;配合使用更方便~ https://blog.csdn.net/diviner_s/article/details/116072584 官方对应文件工具&…...

哪个网站可以做思维导图/怎么推广一个网站

原因&#xff1a;CROS 复杂请求时会首先发送一个 OPTIONS 请求做嗅探&#xff0c;来测试服务器是否支持本次请求&#xff0c;请求成功后才会发送真实的请求&#xff1b;而 OPTIONS 请求不会携带数据&#xff0c;导致这个请求被拦截了&#xff0c;直接返回了状态码&#xff0c;响…...

营销型网站建设公司哪家好/《新闻联播》 今天

译文出自&#xff1a;外刊IT评论...

北京电商网站排行/长春做网站推荐选吉网传媒好

函数在前面章节中&#xff0c;介绍了一些input(),print(),len()等内建函数&#xff0c;还有random,math等标准库相关函数&#xff0c;这些都是可以直接使用的&#xff0c;但是很多时候&#xff0c;我们也是可以编写自己的函数。看个例子&#xff1a;解析&#xff1a;def是函数关…...