大前端CPU优化技术--NEON intrinsics进阶

前言

今天我们继续介绍NEON intrinsics的指令知识,上篇大前端CPU优化技术--NEON intrinsics开篇中已经介绍了部分指令的作用。本篇文章除了介绍指令还会附上场景示例,方便大家更深刻的理解,废话不多说我们继续前面的指令讲解。

intrinsics 指令介绍

初始化

//将一个64bit的数据装入vector中,并返回元素类型为type的vector。
Result_t vcreate_type(Scalar_t N);
//用类型为type的数值,初始化一个元素类型为type的新vector的所有元素。
Resutl_t vdup_type(Scalar_t N);
Result_t vmov_n_type(Scalar_t N);
Result_t vdup_n_type(Scalar_t N);

Result_t vdupq_n_type(Scalar_t N);
Result_t vmovq_n_type(Scalar_t N);

//用元素类型为type的vector的某个元素,初始化一个元素类型为type的新vector的所有元素
Result_t vdup<q>_lane_type(Vector_t N, int n);
vdupq_lane_type

Data processing 

max\min操作

// 基本的 max, min
Result_t vmax<q>_type(Vector1_t N, Vector2_t M);
Result_t vmin<q>_type(Vector1_t N, Vector2_t M);

// pairwise 类型的 max, min
Result_t vpmax_type(Vector1_t N, Vector2_t M);
Result_t vpmin_type(Vector1_t N, Vector2_t M);

绝对值

// 基本的绝对值计算
Result_t vabs<q>_type(Vector_t N);

// 差的绝对值操作
Result_t vabd<q>_type(Vector1_t N, Vector2_t M);

// L(Long)类型, 差的绝对值
Result_t vabdl_type(Vector1_t N, Vector2_t M);

// 差的绝对值,并和另一个向量相加
Result_t vaba<q>_type(Vector1_t N, Vector2_t M, Vector3_t P);

// L(Long)类型, 差的绝对值,并和另一个向量相加, 输出是输入长度的两倍
Result_t vabal_type(Vector1_t N, Vector2_t M, Vector3_t P);

取反

// 基本的取反操作
Result_t vneg<q>_type(Vector_t N);

// Q(Saturated)类型,带饱和的取反操作
Result_t vqneg<q>_type(Vector_t N);

按位统计 0 或 1 的个数

// 统计每个通道 1 的个数
Result_t vcnt<q>_type(Vector_t N);

// 从符号位开始,统计每个通道中与符号位相同的位的个数,且这些位必须是连续的
Result_t vcls<q>_type(Vector_t N);

// 从符号位开始,统计每个通道连续0的个数
Result_t vclz<q>_type(Vector_t N);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值