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

ARM CPU的 intrinsics指令集 - svand_u8_z

在 ARM SVE(Scalable Vector Extension) intrinsics 指令集中,svand_u8_z 是带掩码的向量按位与(AND)操作指令,用于对两个无符号 8 位整数(uint8_t)向量执行按位与运算,并通过掩码(predicate)控制结果的有效性。其名称中的 “z” 表示 “zeroing”(清零模式),即掩码为0的位置结果会被清零。

基本语法

svuint8_t svand_u8_z(svbool_t pg,               // 掩码:控制哪些元素参与运算并保留结果svuint8_t op1,             // 第一个操作数向量(无符号8位整数)svuint8_t op2              // 第二个操作数向量(无符号8位整数)
);

参数说明

  1. pg(predicate mask)
    类型为 svbool_t 的掩码向量,决定运算的有效范围:
    • 掩码位为1的位置:执行 op1[i] & op2[i](按位与),并保留结果;
    • 掩码位为0的位置:结果直接清零(0),不参与运算。
  2. op1 和 op2
    类型为 svuint8_t 的向量,存储待执行按位与运算的无符号 8 位整数元素。两个向量的长度需与当前硬件的 SVE 向量宽度一致(由硬件决定)。

核心功能

svand_u8_z 的核心是对两个向量的对应元素执行按位与运算,并根据掩码筛选有效结果,掩码无效位置直接输出0。按位与运算的逻辑为:当两个操作数的对应 bit 都为1时,结果 bit 为1,否则为0(例如 0b1010 & 0b1100 = 0b1000)。

 

  • 示例:
    若 op1 = [0x0F, 0xF0, 0xAA, 0x55]op2 = [0xF0, 0x0F, 0x55, 0xAA]
    掩码 pg = [1, 1, 0, 1](仅第 0、1、3 位有效),
    则运算结果为 [0x00, 0x00, 0x00, 0x00](逐元素计算 op1 & op2 后,掩码为0的位置清零)。

使用场景与示例

按位与操作常用于数据掩码提取、位域筛选、清零特定 bit等场景。例如,从字节数据中提取低 4 位(忽略高 4 位):
#include <arm_sve.h>
#include <stdint.h>// 提取字节数组中每个元素的低4位(高4位清零)
void extract_low_nibble(uint8_t* dst, const uint8_t* src, size_t len) {// 掩码值:0x0F(二进制00001111),用于提取低4位svuint8_t mask = svdup_u8(0x0F); // 将0x0F广播到整个向量
    size_t i = 0;svcount_t vl = svcntb(); // 获取8位元素的向量长度(如16)svbool_t pg = svwhilelt_b8(i, len); // 生成初始掩码(标记有效元素)while (svptest_any(svptrue_b8(), pg)) {// 加载源数据向量svuint8_t src_vec = svld1_u8(pg, src + i);// 按位与运算:src_vec & mask,提取低4位,掩码外元素清零svuint8_t dst_vec = svand_u8_z(pg, src_vec, mask);// 存储结果到目标数组svst1_u8(pg, dst + i, dst_vec);// 更新循环变量和掩码i += vl;pg = svwhilelt_b8(i, len);}
}// 调用示例:
// uint8_t src[] = {0xAB, 0xCD, 0xEF, 0x12}; // 二进制:10101011, 11001101, 11101111, 00010010
// uint8_t dst[4];
// extract_low_nibble(dst, src, 4); // 结果:[0x0B, 0x0D, 0x0F, 0x02](低4位保留)

关键注意事项

  1. 清零模式(z的含义)
    指令名称中的 “z” 表示当掩码位为0时,结果会被强制清零(zeroed)。这与不带 “z” 的指令(如svand_u8)不同:后者在掩码为0时会保留第一个操作数(op1)的原始值,而svand_u8_z 会直接输出0
  2. 向量长度适配
    SVE 向量长度由硬件决定(如 128 位、256 位等),svand_u8_z 会自动适配当前长度,对向量中的所有元素并行执行按位与操作,无需手动处理不同硬件的差异。
  3. 性能优势
    相比标量循环逐个执行按位与,svand_u8_z 利用 SIMD 并行性,一次操作处理多个字节(如 16 个字节),大幅提升数据处理效率,尤其适合图像像素处理、数据加密、位运算密集型场景。

总结

svand_u8_z 是 SVE 中用于带掩码的向量按位与运算的指令,核心功能是对两个无符号 8 位向量执行按位与,并通过掩码控制有效结果(无效位置清零)。它在数据位域提取、掩码操作等场景中应用广泛,是利用 SVE 向量并行性提升位运算性能的重要工具。
http://www.sczhlp.com/news/11074/

相关文章:

  • VRRP
  • F12检视一个元素的时候,鼠标一动 这个元素就会消失,那么如何定位到这个元素的html源码位置
  • 未来AI:微算法科技(NASDAQ:MLGO)开发基于忆阻器网络储层计算MemristorPattern虚拟平台
  • 在K8S中,体系结构有哪些不同的组成部分?
  • 2023年下半年网络工程师上午真题及答案解析
  • ARM intrinsics 指令集介绍 - svtbl_u8
  • 在K8S中,如何简化容器化部署?
  • 2025物联网平台选型,看这一篇就够了(产品调研及选型评测)
  • 润乾报表、帆软报表的开源替代品 —JimuReport(积木报表)
  • Kafka2.13-3.3.2 安装部署+最后报错处理全过程(CentOS 7 虚拟机)
  • 25.8.12python模块2
  • 在K8S中,主节点的作用是什么?
  • Virtual Space apk的使用与预防
  • AutoCAD Architecture、Map 3D、MEP、Plant 3D、Civil 3D + 辅助插件整合介绍
  • ARM intrinsics 指令集介绍 - svld1_u8
  • README
  • 题解:AT_arc082_c [ARC082E] ConvexScore
  • 金仓数据库kingbase创建计划任务
  • 无源探头选型指南:从参数解析到场景适配
  • 在K8S中,kube-apiserver和kube-scheduler的作用是什么?
  • Nature Genetics | 单核染色质鉴定抑郁症关键细胞类型与变异位点
  • 2025年打造知识驱动的软件工厂:主流平台评估与工程知识管理演进
  • 永久关闭windows10实时保护
  • PandaWiki 使用心得
  • 重组蛋白表达与纯化|蛋白表达不同标签的优势及用途
  • 基于PyTorch与注意力机制的验证码智能识别方法
  • CF1327F AND Segments
  • [原创]《C#高级GDI+实战:从零开发一个流程图》第09章:增加贝塞尔曲线,上、下、左、右连接点
  • 地球online
  • ICF RFIC25 Wu