VLSE8.V 的 stride 单位是什么?
stride 是 x[rs2] 中的字节数。它不是元素个数,也不会按 EEW 再隐式乘一次;若编码为 rs2=x0,则 x0 恒为 0。
按 x[rs2] 字节跨步从 x[rs1] 装入 8 位向量元素到 vd。
VLSE8.V 是 RISC-V V 扩展的 8 位跨步向量装载指令。活动 body 元素使用地址 x[rs1] 加 lane index 乘以 x[rs2];x[rs2] 是字节数 stride,可表示正、负或零跨步。vm=0 时由 v0.t 选择元素,被掩码关闭的元素不访问内存。
从编码字段解析 8 位跨步装载,再逐元素计算 x[rs1] + i * x[rs2] (16 bytes)。
教学环境:XLEN=64,VLEN=4096,SEW=8,LMUL=m1,VLMAX=512,数据 EMUL=m1,合法 vtype,VS 已启用,vstart=0,ta/ma。假定所选访问均成功,未建模陷入;未对齐访问仅在环境支持时适用。rs1=x0 的基址固定为 0。memory elements 输入表示每次活动读取观察到的值,允许内存随访问变化,并非静态字节内存映像。rs2=x0 示例选择每个活动元素各读取一次的许可执行。逐元素步骤不表示处理器周期或实际访问顺序,跨步访问无序。inactive/tail 的“-”表示结果未显示,可保留旧值或写全 1;VL=0 不更新目标,正常完成后 vstart=0。
动画从 32 位向量内存指令编码开始,按官方位段显示 nf、mew、mop、vm、rs2/vs2 或 lumop/sumop、width、寄存器字段和 opcode。
VLSE8.V 是 RVV 8 位跨步向量装载:每个活动元素的内存地址是 x[rs1] 加 lane index 乘以 x[rs2],其中 x[rs2] 是字节 stride。vl 和 v0.t 掩码决定哪些 body 元素参与内存访问。
语法 vlse8.v vd, (rs1), rs2[, v0.t];省略 v0.t 为 vm=1,给出为 vm=0。vd 为向量组,rs1 为整数基址寄存器,x0 基址为 0。32 位 LOAD-FP:opcode=0000111、nf=000、mew=0、mop=10、width=000。
数据 EEW=8,EMUL=(8/SEW)×LMUL;rs2 选择整数寄存器,地址为 x[rs1]+i×x[rs2],stride 单位是字节,可为正、负或零,不按 1 缩放。
数据宽度须受支持,EMUL 在 1/8..8 内且组起点合法。rs2=x0 可少于每个活动元素一次访问;rs2≠x0 但值为 0 时须每个活动元素各访问一次。
V 1.0 支持 RV32/RV64;要求合法 vtype、VS 已启用。仅 vstart≤i<vl 且掩码开启的元素访问内存;masked vd 不能与 v0 重叠。prestart 保持不变,inactive/tail 按 vma/vta;agnostic 可保留旧值或写全 1。
本页跨步和无序索引形式均不保证元素访问顺序。非自然对齐可成功或触发未对齐异常,实际地址还须满足访问权限。VL=0 或 vstart≥vl 不更新目标;正常完成后 vstart=0、vl 不变。
假定 V/VS 已启用、所需宽度受支持、VLEN≥128、x10=0x8000、x11=4,内存访问均成功;vsetvli 后 vl=4、vstart=0、ta/ma。e8,m1; x5=4; v0.mask=[1,0,1,1]; addresses=[0x8000,0x8004,0x8008,0x800c]; active reads (i=0,2,3)=[10,30,40] → v8=[10,agnostic,30,40]。关闭元素不访问内存;agnostic 可保留旧值或写全 1,tail 不保证清零;地址列表不是实际访问顺序。
假定 V/VS 已启用、所需宽度受支持、VLEN≥128、x10=0x8000、x11=4,内存访问均成功;vsetvli 后 vl=4、vstart=0、ta/ma。e8,m1; x5=4; v0.mask=[1,0,1,1]; addresses=[0x8000,0x8004,0x8008,0x800c]; active reads (i=0,2,3)=[10,30,40] → v8=[10,agnostic,30,40]。关闭元素不访问内存;agnostic 可保留旧值或写全 1,tail 不保证清零;地址列表不是实际访问顺序。
假定 V/VS 已启用、所需宽度受支持、VLEN≥128、x10=0x8000、x11=4,内存访问均成功;vsetvli 后 vl=4、vstart=0、ta/ma。e8,m1; x5=4; v0.mask=[1,0,1,1]; addresses=[0x8000,0x8004,0x8008,0x800c]; active reads (i=0,2,3)=[10,30,40] → v8=[10,agnostic,30,40]。关闭元素不访问内存;agnostic 可保留旧值或写全 1,tail 不保证清零;地址列表不是实际访问顺序。
stride 是 x[rs2] 中的字节数。它不是元素个数,也不会按 EEW 再隐式乘一次;若编码为 rs2=x0,则 x0 恒为 0。
单位步长按连续 1 字节访问;VLSE8.V 使用 x[rs2] 给出的字节 stride,因此可以访问结构体字段、矩阵列或反向序列。
有。rs2=x0 是编码字段直接选择 x0 的 zero-stride 形式;官方允许实现对该形式执行少于每个 active 元素一次的内存操作。rs2 不是 x0 但寄存器值为 0 时,仍按普通跨步访问语义处理。
不会。vm=0 且对应 v0.t 位为 0 的 body 元素不会执行该元素的装载读取内存访问。