ARM intrinsics 指令集介绍 - svwhilelt_b32
在 ARM CPU 的 NEON intrinsics 指令集中,svwhilelt_b32 是SVE(Scalable Vector Extension,可伸缩向量扩展) 指令集中的一个内在函数,用于生成一个条件掩码(predicate mask),通常用于循环控制或向量操作的条件筛选。其核心功能是根据两个 32 位整数向量的比较结果(“小于” 关系),生成一个指示哪些元素需要参与后续操作的掩码。
基本语法
svbool_t svwhilelt_b32(int32_t start, int32_t end);
核心作用
使用场景与示例
int sum = 0; for (int i = 0; i < n; i++) { sum += arr[i]; }
使用 svwhilelt_b32 实现向量化循环(利用 SVE 的自动伸缩特性):
#include <arm_sve.h> int32_t sve_sum(const int32_t* arr, int32_t n) { int32_t sum = 0; int32_t i = 0; // 生成初始掩码:i + 0,1,... < n 时置位 svbool_t pg = svwhilelt_b32(i, n); while (svptest_any(svptrue_b32(), pg)) { // 检查掩码是否有置位元素 // 加载向量(仅加载掩码为1的元素,其余用0填充) svint32_t vec = svld1_s32(pg, arr + i); // 累加向量元素(仅累加掩码为1的元素) sum = svaddv_s32(pg, vec) + sum; // 更新循环变量(i += 向量长度,SVE自动计算) i += svcntw(); // 更新掩码(继续判断 i + 0,1,... < n) pg = svwhilelt_b32(i, n); } return sum; }
浙公网安备 33010602011771号