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

news2024/11/18 8:23:59

1. 引言

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

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

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

4 向量元素到向量寄存器状态的映射

以下图表说明了根据当前的SEW和LMUL设置以及实现的VLEN,如何将不同宽度的元素打包到向量寄存器的字节中。元素被打包到每个向量寄存器中,其中最低有效字节位于最低编号的位中。选择这种映射是为了为软件提供最简单和最可移植的模型,但在某些操作上,对于更宽的向量数据路径,可能会产生较大的布线成本。向量指令集是专门设计的,以支持内部重新排列不同SEW的向量数据以减少数据路径布线成本的实现,同时在外部保留简单的软件模型。例如,微架构可以跟踪写入向量寄存器的EEW,然后如果以不同的EEW访问寄存器,则插入额外的加扰操作以重新排列数据。

4.1. LMUL = 1时的映射

当LMUL=1时,元素简单地按照从向量寄存器的最低有效位到最高有效位的顺序进行打包。为了提高可读性,向量寄存器布局从右到左绘制,字节地址递增。元素内的位以小端格式编号,位索引从右到左递增,对应于幅度的增加。

LMUL=1 的示例。

元素索引以十六进制给出,并显示在存储元素的最低有效字节处。

 VLEN=32b
 Byte 3 2 1 0
 SEW=8b 3 2 1 0
 SEW=16b 1 0
 SEW=32b 0
 VLEN=64b
 Byte 7 6 5 4 3 2 1 0
 SEW=8b 7 6 5 4 3 2 1 0
 SEW=16b 3 2 1 0
 SEW=32b 1 0
 SEW=64b 0
 VLEN=128b
 Byte F E D C B A 9 8 7 6 5 4 3 2 1 0
 SEW=8b F E D C B A 9 8 7 6 5 4 3 2 1 0
 SEW=16b 7 6 5 4 3 2 1 0
 SEW=32b 3 2 1 0
 SEW=64b 1 0
 VLEN=256b
 Byte 1F1E1D1C1B1A19181716151413121110 F E D C B A 9 8 7 6 5 4 3 2 1 0
 SEW=8b 1F1E1D1C1B1A19181716151413121110 F E D C B A 9 8 7 6 5 4 3 2 1 0
 SEW=16b F E D C B A 9 8 7 6 5 4 3 2 1 0
 SEW=32b 7 6 5 4 3 2 1 0
 SEW=64b 3 2 1 0

4.2. LMUL < 1时的映射

当LMUL < 1时,仅使用向量寄存器中的前LMUL*VLEN/SEW个元素。向量寄存器中的剩余空间被视为尾部的一部分,因此必须遵守vta设置。

Example, VLEN=128b, LMUL=1/4
 Byte F E D C B A 9 8 7 6 5 4 3 2 1 0
 SEW=8b - - - - - - - - - - - - 3 2 1 0
 SEW=16b - - - - - - 1 0
 SEW=32b - - - 0

4.3. LMUL > 1时的映射

当向量寄存器分组时,向量寄存器组的元素将按照元素顺序连续打包,从编号最低的向量寄存器开始,并在每个向量寄存器填满后移动到组中编号次高的向量寄存器。

 LMUL > 1 examples
 VLEN=32b, SEW=8b, LMUL=2
 Byte 3 2 1 0
 v2*n 3 2 1 0
 v2*n+1 7 6 5 4
 VLEN=32b, SEW=16b, LMUL=2
 Byte 3 2 1 0
 v2*n 1 0
 v2*n+1 3 2
 VLEN=32b, SEW=16b, LMUL=4
 Byte 3 2 1 0
 v4*n 1 0
 v4*n+1 3 2
 v4*n+2 5 4
 v4*n+3 7 6
 VLEN=32b, SEW=32b, LMUL=4
 Byte 3 2 1 0
 v4*n 0
 v4*n+1 1
 v4*n+2 2
 v4*n+3 3
 VLEN=64b, SEW=32b, LMUL=2
 Byte 7 6 5 4 3 2 1 0
 v2*n 1 0
 v2*n+1 3 2
 VLEN=64b, SEW=32b, LMUL=4
 Byte 7 6 5 4 3 2 1 0
 v4*n 1 0
 v4*n+1 3 2
 v4*n+2 5 4
 v4*n+3 7 6
 VLEN=128b, SEW=32b, LMUL=2
 Byte F E D C B A 9 8 7 6 5 4 3 2 1 0
 v2*n 3 2 1 0
 v2*n+1 7 6 5 4
 VLEN=128b, SEW=32b, LMUL=4
 Byte F E D C B A 9 8 7 6 5 4 3 2 1 0
 v4*n 3 2 1 0
 v4*n+1 7 6 5 4
 v4*n+2 B A 9 8
 v4*n+3 F E D C

4.4. 混合宽度操作中的映射

向量ISA被设计为支持混合宽度操作,而无需额外的显式重排指令。当对不同精度值的多个向量进行操作时,推荐的软件策略是动态修改vtype以保持SEW/LMUL恒定(因此VLMAX也恒定)。以下示例显示了在VLEN=128b实现中的四种不同的打包元素宽度(8b、16b、32b、64b)。向量寄存器分组因子(LMUL)根据相对元素大小而增加,以便每个组可以容纳相同数量的向量元素(在此示例中VLMAX=8),从而简化stripmining代码。

Example VLEN=128b, with SEW/LMUL=16
Byte F E D C B A 9 8 7 6 5 4 3 2 1 0
vn - - - - - - - - 7 6 5 4 3 2 1 0 SEW=8b, LMUL=1/2
vn 7 6 5 4 3 2 1 0 SEW=16b, LMUL=1
v2*n 3 2 1 0 SEW=32b, LMUL=2
v2*n+1 7 6 5 4
v4*n 1 0 SEW=64b, LMUL=4
v4*n+1 3 2
v4*n+2 5 4
v4*n+3 7 6

下表显示了具有混合宽度操作的循环中每个可能的恒定SEW/LMUL操作点。每列代表一个恒定的SEW/LMUL操作点。表中的条目是产生该列SEW/LMUL值的LMUL值,对应于该行的数据宽度。在每列中,一个数据宽度的LMUL设置表示它可以与同一列中也具有LMUL设置的其他数据宽度对齐,以便它们都具有相同的VLMAX。

更大的LMUL设置也可以用来简单地增加向量长度,以减少在需要较少向量寄存器组的情况下的指令获取和分发开销。

4.5. 掩码寄存器布局

无论SEW和LMUL如何,向量掩码仅占用一个向量寄存器。在掩码向量寄存器中,每个元素都分配有一个掩码位。元素i的掩码位位于掩码寄存器的第i位,与SEW或LMUL无关。

【免费】RISC-V向量扩展指令集 VectorExtension资源-CSDN文库

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

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

相关文章

测试人员需要掌握的 k8s 知识

前言 kubernetes 在容器编排领域已经形成统治地位&#xff0c;不管是开发、运维还是测试&#xff0c;掌握 kubernetes 都变得非常有必要。这篇文章通过 minikube 搭建一个简单的 kubernetes 运行环境。 安装虚拟机 主流的操作系统都支持 kubernetes&#xff0c;但是 windows…

禁止使用搜索引擎,你了解吗?

员工A&#xff1a;“我今天想搜索的时候&#xff0c;用不了浏览器了&#xff0c;你能用么&#xff1f;” 员工B&#xff1a;“不知道啊我试一下啊” “也不行” 员工C&#xff1a;“为什么啊&#xff1f;” 针对上述对话&#xff0c;我们不禁思考&#xff1a; 公司为什么禁…

一代影后阮玲玉:国际妇女节这天自杀,让很多人都感到震惊和惋惜!

一代影后阮玲玉:国际妇女节这天自杀&#xff0c;让很多人都感到震惊和惋惜&#xff01; 说起阮玲玉&#xff0c;那可真是咱们中国电影史上的一位大明星啊。#李秘书讲写作# 今日说起她演过的电影和成就&#xff0c;嘿&#xff0c;说出来可都是响当当的。 阮玲玉&#xff0c;原名…

算法刷题day25:多路归并

目录 引言概念一、鱼塘钓鱼二、技能升级三、序列 引言 关于这个多路并归蓝桥杯考的不是很多&#xff0c;如果要出的话&#xff0c;可能模型都会差不多&#xff0c;因为不会出太难的题&#xff0c;难题基本上都是贪心、DP之类的&#xff0c;所以好好刷题刷熟练就行了&#xff0…

探讨2024年AI辅助研发的趋势

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今时代最具变革性的技术之一。AI的广泛应用正在重塑各行各业&#xff0c;其中&#xff0c;AI辅助研发作为科技和工业领域的一大创新热点&#xff0c;正引领着研发模式的深刻变革。从医药…

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…

帮管客 CRM jiliyu SQL注入漏洞复现

0x01 产品简介 帮管客CRM是一款集客户档案、销售记录、业务往来等功能于一体的客户管理系统。帮管客CRM客户管理系统,客户管理,从未如此简单,一个平台满足企业全方位的销售跟进、智能化服务管理、高效的沟通协同、图表化数据分析帮管客颠覆传统,重新定义企业管理系统。 …

Redis核心数据结构之字典(二)

字典 解决键冲突 当有两个或以上数量的键被分配到了一个哈希表数组的同一个索引上面&#xff0c;我们称这些键发生了冲突(collision)。 Redis的哈希表使用链地址法(separate chaining)来解决键冲突&#xff0c;每个哈希表节点都有一个next指针&#xff0c;多个哈希表节点可以…

python三剑客之一——Numpy

温故而知新&#xff0c;借着工作需要用到Numpy的机会重新学习一遍Numpy。 Numpy是一个运行速度非常快的数学库&#xff0c;主要用于数组计算&#xff0c;包含如下&#xff1a; 一个强大的N维数组对象ndarray【Nd&#xff08;Dimension维度&#xff09;array】 广播功能函数 整…

九型人格测试,9号和平型人格的职业分析业?

九型人格测试&#xff0c;人格分为9个类型&#xff0c;而和平型人格&#xff0c;也就是我们所说的和平使者&#xff0c;为人非常善良&#xff0c;十分地体贴&#xff0c;能够体谅到对方的难处&#xff0c;并且会大度地原谅对方的错误。愿意去了解对方&#xff0c;但却没有时间在…

支小蜜校园防欺凌系统听到声音之后会自动识别吗

在校园安全领域&#xff0c;特别是在预防和应对欺凌问题上&#xff0c;校园防欺凌系统作为新兴的技术应用&#xff0c;正在受到越来越多的关注和探索。那么当这样的系统听到声音之后&#xff0c;它是否能够自动识别并作出相应反应呢&#xff1f;本文将围绕这一问题展开探讨。 …

JAVA虚拟机实战篇之内存调优[4](内存溢出问题案例)

文章目录 版权声明修复问题内存溢出问题分类 分页查询文章接口的内存溢出问题背景解决思路问题根源解决思路 Mybatis导致的内存溢出问题背景问题根源解决思路 导出大文件内存溢出问题背景问题根源解决思路 ThreadLocal占用大量内存问题背景问题根源解决思路 文章内容审核接口的…

编译内核错误 multiple definition of `yylloc‘

编译内核错误 # make ARCHarm CROSS_COMPILEarm-mix410-linux- uImageHOSTLD scripts/dtc/dtc /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss0x10): multiple definition of yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss0x0): first defined here collect2: error: ld ret…

c++提高部分

c++提高部分 这部分主要涉及泛型编程和STL技术 1. 模版 1.1 模版的概念 模版就是通用的模具,大大提高复用性,但需要根据需求改动一些东西 1.2 函数模版 c++另一种编程思想为泛型编程,主要利用的技术就是模版c++提供两种模版机制:函数模板和类模板1.2.1 函数模板语法 …

C++ 篇 数组

数组是含有多个数据项的数据结构&#xff0c;并且这些数据项都具有相同的数据类型。这些数据项称为数组的元素&#xff0c;我们可以根据元素在数组中的位置来选取元素。 最简单的数组就是一维数组。数组元素在内存中是依次排列的&#xff0c;如下图所示&#xff1a; 声明一个…

js【详解】原型 vs 原型链

原型 每个 class 都有显示原型 prototype每个实例都有隐式原型_proto_实例的_proto_指向对应 class 的 prototype 如下范例&#xff1a; class Student 创建了 实例 xialuo 获取属性 xialuo.name 或执行方法 xialuo.sayhi()时&#xff0c;先在自身属性和方法寻找&#xff0…

1.5如何缓解图像分类任务中训练数据不足带来的问题?

1.5 图像数据不足时的处理方法 场景描述 在机器学习中&#xff0c;绝大部分模型都需要大量的数据进行训练和学习(包括有监督学习和无监督学习)&#xff0c;然而在实际应用中经常会遇到训练数据不足的问题。 比如图像分类&#xff0c;作为计算机视觉最基本的任务之一&#xff0…

C++进阶之路---继承(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承与友元 友元关系不能继承&#xff0c;也就是说基类友元不能访问子类私有和保护成员。 class Student; class Per…

机器学习——神经网络压缩

神经网络压缩 需要部署&#xff0c;设备内存和计算能力有限&#xff0c;需要进行模型压缩&#xff0c;在设备上运行的好处是低延迟&#xff0c;隐私性。 目录 不考虑硬件问题&#xff0c;只考虑通过软件算法优化。 修剪网络 参数过多或者没有用的参数&#xff0c;可以将其剪…

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies&#xff1a;依赖 依赖范围