🧩 一、RV32V 是什么?

名称 含义
RV32V RISC-V 32 位向量指令集扩展
全称 RISC-V Vector Extension v1.0 (RVV)
核心思想 一条指令可并行处理多个数据(SIMD / 数据并行)
目标场景 AI 推理、DSP、图像处理、矩阵乘法、科学计算、视频编解码

⚙️ 二、RVV 的关键理念:可变长度向量(VLA — Vector Length Agnostic)

传统 SIMD(如 ARM NEON、AVX)固定向量长度(128 位、256 位…)。 而 RISC-V 采用 可变长度向量架构,用参数 VLEN 来定义实际硬件宽度。

概念 含义
VLEN 实际硬件向量寄存器宽度(如 128、256、512 位)
SEW 元素宽度(Standard Element Width,8/16/32/64 bit)
VL 当前向量长度(Vector Length,运行时可变)
LMUL 向量寄存器倍宽系数(可合并多个寄存器)

💡 举例: 如果 VLEN = 128bit,而 SEW = 32bit, 则一个向量寄存器可同时存放 4 个元素。 而在另一段代码中,SEW 可以变成 8bit,从而存放 16 个元素。 这让 RVV 程序可 自适应硬件,跨平台兼容。


🧮 三、向量寄存器结构

寄存器 数量 宽度 功能
v0–v31 32 个 VLEN 位 向量通用寄存器
vtype 1 个 32 位 控制 SEW、LMUL、符号类型
vl 1 个 32 位 当前向量长度
vstart 1 个 32 位 指令起始索引(用于异常恢复)

⚡ 四、向量指令结构

所有 RVV 指令都以 v 开头,例如:

指令类别 示例 功能
向量算术 vadd.vv v1, v2, v3 向量加法:v1[i] = v2[i] + v3[i]
向量立即数 vadd.vi v1, v2, 5 向量 + 立即数
向量减法 vsub.vv v1, v2, v3 向量减法
向量乘法 vmul.vv v1, v2, v3 向量乘法
向量比较 vmax.vv, vmin.vv, vmseq.vv 比较结果写布尔掩码
向量逻辑 vand.vv, vor.vv, vxor.vv 位运算
向量装载 vle32.v v1, (a0) 从内存加载 32 位元素到向量
向量存储 vse32.v v1, (a1) 向量写回内存
向量缩放 vdiv.vv, vrem.vv 除法、取余
向量归约 vredsum.vs, vredmax.vs 所有元素求和/最大值
向量掩码 vmand.mm, vmxor.mm 布尔掩码逻辑
向量设置 vsetvli a0, a1, e32, m1 设置当前向量配置(SEW/LMUL/VL)

🧱 五、关键控制指令:vsetvli

asm
vsetvli t0, a0, e32, m1
参数 含义
t0 设置后的实际 VL
a0 想要处理的元素数量
e32 元素宽度(SEW=32bit)
m1 LMUL 倍宽系数(1 倍)

👉 执行后,CPU 根据硬件 VLEN 自动确定每次能并行多少个元素, VL 寄存器会记录本次循环实际可处理数量。 程序员不用关心具体寄存器宽度,代码可跨不同实现运行。


💡 六、向量加法示例

C 代码:

c
for (int i = 0; i < n; i++)
  c[i] = a[i] + b[i];

对应 RISC-V 向量汇编:

asm
loop:
    vsetvli t0, a0, e32, m1    # 设置SEW=32位
    vle32.v v1, (a1)           # 加载 a[]
    vle32.v v2, (a2)           # 加载 b[]
    vadd.vv v3, v1, v2         # 向量加法
    vse32.v v3, (a3)           # 存回 c[]
    addi a1, a1, t0*4          # 移动指针
    addi a2, a2, t0*4
    addi a3, a3, t0*4
    sub  a0, a0, t0
    bnez a0, loop

✅ 自动适配硬件: 如果是 128bit VLEN → 一次算 4 个; 如果是 512bit → 一次算 16 个; 同一段代码无需修改!


📊 七、RVV 性能特点

特性 RVV 设计
向量长度 可变(VLEN 自适应)
可移植性 强(同一代码可在不同实现上运行)
计算能力 一条指令可操作 2–64 个元素
典型用途 AI、信号处理、矩阵运算、图像滤波
常见组合 RV32IMFV(含整数 + 浮点 + 向量)

🔍 八、RVV 的版本与支持

版本 状态 特点
0.7.1 实验阶段 早期版本
1.0(2021 年发布) ✅ 正式标准 当前主流版本
实现芯片 阿里平头哥 C910、C908、SiFive V-series、StarFive JH7110、Andes AX45MP V 等

🧠 九、RVV + AI 实战应用


🧩 十、小结

项目 RV32V 特性
名称 向量扩展(Vector Extension)
寄存器 v0–v31,每个宽 VLEN 位
指令风格 vxxx.vv / vxxx.vi / vxxx.vx
向量控制 vsetvli 指令设置 SEW/LMUL/VL
可移植性 运行时自适应 VLEN
优势 高性能、可移植、通用 SIMD
典型组合 RV32IMFV / RV64GCV