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

  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博客

6 配置和设置指令(vsetvli/vsetivli/vsetvl)

处理大量元素的一种常见方法是“stripmining”,在这种方法中,每次循环迭代都会处理一定数量的元素,迭代会一直持续到所有元素都被处理完毕。RISC-V向量规范为这种方法提供了直接、可移植的支持。应用程序将待处理的元素总数(应用程序向量长度或AVL)指定为vl的候选值,硬件则通过一个通用寄存器响应,根据微架构实现和vtype设置,提供每次迭代中硬件将处理的(通常更小的)元素数量(存储在vl中)。一个简单的循环结构,如stripmining示例和SEW的更改所示,描绘了代码如何轻松地跟踪剩余的元素数量和硬件每次迭代处理的数量。

提供了一组指令,以便根据应用程序需要快速配置vl和vtype中的值。vset{i}vl{i}指令根据其参数设置vtype和vl CSR,并将vl的新值写入rd。

vsetvli rd, rs1, vtypei	#	rd	=	new	vl,	rs1 = AVL, vtypei = new vtype setting
vsetivli rd, uimm, vtypei	#	rd	=	new	vl,	uimm = AVL,	vtypei =	new vtype setting
vsetvl  rd, rs1, rs2	#	rd	=	new	vl,	rs1 = AVL,	rs2 = new	vtype value

Formats for Vector Coniguration Instructions under OP-V major opcode

6.1 vtype 编码

Table 7. vtype register layout

Bits

Name

Description

XLEN-1

vill

Illegal value if set

XLEN-2:8

0

Reserved if non-zero

7

vma

Vector mask agnostic

6

vta

Vector tail agnostic

5:3

vsew[2:0]

Selected element width (SEW) setting

2:0

vlmul[2:0]

Vector register group multiplier (LMUL) setting

新的vtype设置被编码在vsetvli和vsetivli的立即字段中,以及vsetvl的rs2寄存器中。

Suggested assembler names used for vset{i}vli vtypei immediate
e8    # SEW=8b
e16   # SEW=16b
e32   # SEW=32b
e64   # SEW=64b
mf8  # LMUL=1/8
mf4  # LMUL=1/4
mf2  # LMUL=1/2
m1   # LMUL=1, assumed if m setting absent
m2   # LMUL=2
m4   # LMUL=4
m8   # LMUL=8
Examples:
vsetvli t0, a0, e8          # SEW= 8, LMUL=1
vsetvli t0, a0, e8, m2      # SEW= 8, LMUL=2
vsetvli t0, a0, e32, mf2    # SEW=32, LMUL=1/2

vsetvl变体的工作方式与vsetvli类似,只不过它从rs2中获取vtype值,并可用于上下文恢复。

如果实现不支持vtype设置,则在vtype中设置vill位,vtype中的其余位设置为零,vl寄存器也设置为零。

早期的草案要求在设置vtype为非法值时产生陷阱。但是,这会在ISA的CSR写入上增加第一个数据相关的陷阱。实现可以选择在将非法值写入vtype时设置陷阱,而不是设置vill,以允许仿真支持新的配置以实现向前兼容性。当前方案支持通过检查给定设置是否清除了vill,对支持的向量单元配置进行轻量级运行时查询。

6.2 AVL 编码

新的向量长度设置基于AVL,对于vsetvli和vsetvl,AVL在rs1和rd字段中的编码如下:

Table 8. AVL used in vsetvli and vsetvl instructions

rd

rs1

AVL value

Effect on vl

-

!x0

Value in x[rs1]

Normal stripmining

!x0

x0

~0

Set vl to VLMAX

x0

x0

Value in vl register

Keep existing vl (of course, vtype may change)

当rs1不是x0时,AVL是存储在由rs1指定的x寄存器中的无符号整数,新的vl值也将写入由rd指定的x寄存器。

当rs1=x0但rd!=x0时,使用最大的无符号整数值(~0)作为AVL,并将结果VLMAX写入vl以及由rd指定的x寄存器。

当rs1=x0且rd=x0时,指令的操作就像是将vl中的当前向量长度用作AVL,并将结果值写入vl,但不写入目标寄存器。这种形式只能在VLMAX(因此vl)实际上没有因新的SEW/LMUL比率而改变时使用。如果使用新的SEW/LMUL比率会导致VLMAX发生变化,则保留该指令的使用。在这种情况下,实现可能会设置vill。

这种指令的最后一种形式允许在保持当前vl的同时更改vtype寄存器,前提是VLMAX没有减少。这种设计是为了确保vl始终为当前的vtype设置持有合法值。当前的vl值可以从vl CSR中读取。如果新的SEW/LMUL比率导致VLMAX缩小,则此指令可能会减少vl值,因此这种情况已被保留,因为这并不清楚这是一个普遍有用的操作,而且实现可以假设此指令不会更改vl以优化其微架构。

对于vsetiv li指令,AVL在rs1字段中编码为5位零扩展立即数(0-31)。

请注意,vsetiv li的AVL编码与常规CSR立即数值的编码相同。

当向量寄存器内部向量的维度较小且已知时,vsetiv li指令可以提供更紧凑的代码,在这种情况下,没有stripmining开销。

6.3 设置vl的约束

The vset{i}vl{i} instructions irst set VLMAX according to their vtype argument, then set vl obeying the following constraints:

1. vl = AVL if AVL ≤  VLMAX
2. ceil(AVL / 2) ≤  vl ≤  VLMAX if AVL < (2 * VLMAX)
3. vl = VLMAX if AVL ≥   (2 * VLMAX)
4. Deterministic on any given implementation for same input AVL and VLMAX values
5. These speciic properties follow from the prior rules:
a. vl = 0 if AVL = 0
b. vl > 0 if AVL > 0
c. vl ≤  VLMAX
d. vl ≤  AVL
e. a value read from vl when used as the AVL argument to vset{i}vl{i} results in the same value in vl, provided the resultant VLMAX equals the value of VLMAX at the time that vl was read

vl的设置规则被设计为足够严格,以保持vl在寄存器溢出和上下文交换时的行为(当AVL = VLMAX时),同时又足够灵活,使实现能够提高向量通道利用率(当AVL > VLMAX时)。

例如,这允许实现在VLMAX < AVL < 2 * VLMAX时设置vl = ceil(AVL / 2),以便在stripmine循环的最后两次迭代中均匀分配工作。要求2确保即使在AVL < 2 * VLMAX的情况下,归约循环的第一次stripmine迭代也使用所有迭代中的最大向量长度。这使得软件无需显式计算在stripmined循环期间观察到的向量长度的运行最大值。要求2还允许实现在VLMAX < AVL < 2 * VLMAX时将vl设置为VLMAX。

6.4 举例

SEW和LMUL设置可以动态更改,以在单个循环中的混合宽度操作上提供高吞吐量。

# Example: Load 16-bit values, widen multiply to 32b,shift 32b result
# right by 3, store 32b values.
# On entry:
#  a0 holds the total number of elements to process
#  a1 holds the address of the source array
#  a2 holds the address of the destination array
loop:
vsetvli a3, a0, e16, m4, ta, ma  # vtype = 16-bit integer vectors;# also update a3 with vl (# of elements this iteration)vle16.v v4, (a1)        # Get 16b vector
slli t1, a3, 1          # Multiply # elements this iteration by 2 bytes/source element
add a1, a1, t1          # Bump pointer
vwmul.vx v8, v4, x10    # Widening multiply into 32b in <v8--v15>
vsetvli x0, x0, e32, m8, ta, ma  # Operate on 32b values
vs rl.vi v8, v8, 3
vse32.v v8, (a2)	# Store vector of 32b elements
slli t1, a3, 2	# Multiply # elements this iteration by 4 bytes/destination element
add a2, a2, t1	# Bump pointer
sub a0, a0, a3	# Dec rement count by vl
bnez a0, loop	# Any more?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/801936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯模拟赛练习题—— 燃烧你的卡路里

目标 请在 js/index.js 和 index.html 文件中补全代码&#xff0c;完成以下目标&#xff1a; 点击“定制方案”按钮后&#xff0c;弹出侧滑页面&#xff0c;所使用的组件为 el-drawer&#xff0c;相关属性如下&#xff1a; 参数说明类型默认值v-model是否显示 Drawerboolean…

短视频技术课程在哪学?来这几个资源网站看看,是你需要的

做短视频&#xff0c;有时候就像是做饭&#xff0c;素材好比是食材&#xff0c;没了好食材&#xff0c;怎么做都是不是味儿。今天&#xff0c;我得跟大家好好聊聊&#xff0c;作为一个剪辑界的“老油条”&#xff0c;我是怎样在这个素材的海洋里捞到宝贝的。九才素材网&#xf…

新手养猫必备!福派斯三文鱼益生菌猫粮,让猫咪更健康

亲爱的朋友们&#xff0c;我知道你们中的许多人可能正在考虑养猫&#xff0c;或者刚刚成为了一位猫奴。对于新手来说&#xff0c;选择合适的猫粮可能是一个令人困惑的问题。今天&#xff0c;我想向大家推荐一款非常适合新人的猫粮——福派斯三文鱼益生菌猫粮。 &#x1f43e; 首…

船气废弃锅炉三维仿真vr交互展示降低培训门槛

火化炉是殡葬行业的核心设备&#xff0c;其操作技艺对于专业人才的培养至关重要。然而&#xff0c;传统实践教学受限于时间、场地、设备损耗等多重因素&#xff0c;难以给予学生充分的实操机会。面对这一挑战&#xff0c;我们创新推出了火化炉vr三维仿真培训软件&#xff0c;以…

中颖51芯片学习3. 定时器

中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明&#xff08;1&#xff09;时钟&#xff08;2&#xff09;工作模式 2. 寄存器&#xff08;1&#xff09;控制寄存器 T2CON&#xff08;2&#xff09;定时器2模式控制寄存器 T2MOD …

[大模型]Baichuan2-7B-chat FastApi 部署调用

Baichuan2 介绍 Baichuan 2 是百川智能推出的新一代开源大语言模型&#xff0c;采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。 环境准备 在autodl平台中租一个3090等24G显存的显卡机器&#xff0c;…

并行超算云计算使用步骤完整流程详情

本文目录 一、将项目传入并运云。二、创建项目的虚拟环境三、编辑run.sh脚本四、提交作业五、查看作业输出六、查看提交的作业号七、结束作业 一、将项目传入并运云。 二、创建项目的虚拟环境 打开终端 使用conda创建&#xff1a;conda create -n 环境名 python3.8查看conda下…

Java面试必问题29:MySQL篇(重点必问)

数据库的ACID特性 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务中的操作要么全部成功&#xff0c;要么全部失败。事务是一个不可分割的单元&#xff0c;要么全部执行&#xff0c;要么全部回滚。如果事务中的任何操作失败&#xff0c;所有操作都将被回滚到事务开始…

计算机网络:数据链路层 - CSMA/CD协议

计算机网络&#xff1a;数据链路层 - CSMA/CD协议 媒体接入控制CSMA/CD协议截断二进制指数退避算法帧长与帧间间隔信道利用率 媒体接入控制 如图所示&#xff0c;这是一根同轴电缆&#xff0c;有多台主机连接到这根同轴电缆上&#xff0c;他们共享这根传输媒体&#xff0c;形成…

【随笔】Git 高级篇 -- 整理提交记录(下)rebase(十六)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

蓝桥杯刷题-15-异或和之和-拆位+贡献法⭐⭐(⊙o⊙)

蓝桥杯2023年第十四届省赛真题-异或和之和 题目描述 给定一个数组 Ai&#xff0c;分别求其每个子段的异或和&#xff0c;并求出它们的和。或者说&#xff0c;对于每组满足 1 ≤ L ≤ R ≤ n 的 L, R &#xff0c;求出数组中第 L 至第 R 个元素的异或和。然后输出每组 L, R 得到…

MySQL5.7导入MySQL8.0以上版本的几种错误

【错误原因1】/!40000 DROP DATABASE IF EXISTS springbootra863/; 【解决办法】给这一行删了

阿里通义千问开源 320 亿参数模型;文字和音频自动翻译成手语Hand Talk拉近人与人的距离

✨ 1: Qwen1.5-32B Qwen1.5-32B是Qwen1.5系列中性能与效率兼顾的最新语言模型&#xff0c;内存占用低&#xff0c;运行速度快。 Qwen1.5-32B是Qwen1.5语言模型系列的最新成员&#xff0c;这个模型是基于先进的技术研发的&#xff0c;旨在提供一种既高效又经济的AI语言理解和生…

CAXA实体设计教程 网盘下载

CAXA实体设计教程 网盘下载 https://pan.baidu.com/s/1tOIoWmAwl8Wepu7iFsKB_A?pwd2024 章节&#xff1a; 第一章 CAXA3D实体设计入门基础概述 &#xff08;150分钟&#xff09; 第二章 CAXA3D实体设计二维草图 &#xff08;230分钟&#xff09; 第三章 CAXA实体设计 特征生成…

OpenHarmony实战:瑞芯微RK3568移植案例

本文章是基于瑞芯微RK3568芯片的DAYU200开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c;WIFI&#xff0c;BT&#xff0c;vibrato…

基于springboot实现在线教育平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线教育平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务在线教育系统的开发全过程。通过分析微服务在线教育系统管理的不足&#xff0c;创建了一个计算机管理微服务在线…

CASA模型教程

原文链接&#xff1a;CASA&#xff08;Carnegie-Ames-Stanford Approach&#xff09;模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247600635&idx6&sna655a8de570edcaa435d6e917b66d9b3&chksmfa82081ccdf5810a33a778e8771bb116bde9e5a1f795da…

IRIS / Chronicles 数据结构备忘录

数据结构的内容主要涉及到索引和全局变量。 这部分的内容的问题在于概念多&#xff0c;和普通的数据库对应的内容也不太一样&#xff0c;需要花点时间了解。 networked items 有关英文的解释是&#xff1a; Networked items that point to databases that use padded-string…

Map接口及其实现类及常用方法

1.Map接口及其实现类 java.util.Map : 存储一对一对的数据(key-value键值对)|----->HashMap : 主要实现类,线程不安全,效率高,可以添加null的键值对;底层使用数组单向链表红黑树。|------->LinkedHashMap : 是HashMap的子类,在HashMap的数据结构的基础上,添加了一对双向…

读博做FPGA上的AI加速能不能搞啊?

从企业的角度来看&#xff0c;选择在FPGA上进行AI加速仍然有其一定的优势和适用场景&#xff0c;但也有一些挑战需要考虑。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给…