目录

一、基本的加载存储操作

1. vld1q_f32

2.vst1q_f32

3.vld2q_f32

4.vst2q_f32

5.vld3q_f32

6.vst3q_f32

7.vld4q_f32, vst4q_f32

二、特殊操作

1.vdupq_n_f32

2.vzipq_f32

3.vuzpq_f32

4.vcombine_f32

5. vget_low_f32

6. vget_high_f32

7. vtrnq_f32

8. vextq_f32

9.vget_lane_f32

10. vsetq_lane_f32

11.vtbl1_s8

12.vrev16_s8

三、基本数据类型的转换

1.vcvtq_u32_f32

2.vcvtq_s32_f32

3. vcvtq_f32_s32

4.vcvtq_f32_u32

四、基本比较运算

1.vceq_f32

2.vceqq_f32

3. vmaxq_f32

4. vminq_f32

5.vpmax_s8

6.vpmin_s8

五、基本的位运算

1.vclsq_s32

2.vclzq_s32

3.vcnt_s8

4.vmvn_s8

5.vqneg_s8

6. vqshl_s8

六、基本的逻辑运算

七、基本的算术运算

1.vadd_f32

2.vaddq_f32

3.vpadd_f32

3.vmulq_f32

4. vmlaq_f32

5.vmlaq_lane_f32

6.vmaxq_f3

7.vrecpeq_f32

8.vrsqrteq_f32


令初始数据为:
float d0[4] = {0.f, 1.f, 2.f, 3.f};
float d1[4] = {4.f, 5.f, 6.f, 7.f};
float d2[4] = {8.f, 9.f, 10.f, 11.f};
float d3[4] = {12.f, 13.f, 14.f, 15.f};

一、基本的加载存储操作

1. vld1q_f32

float32x4_t q0 = vld1q_f32(d0); // 加载 d0 地址起始的 4 个 float 数据到 q0

2.vst1q_f32

vst1q_f32(d1, q0);// 将 q0 中 4 个 float32,赋值给以 d1 为起始地址的 4 个 float32

3.vld2q_f32

float d4[8]= {1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f};
float32x4x2_t ret = vld2q_f32 (d4);

注意,此时在寄存器是交错读取的!

4.vst2q_f32

vst2q_f32 (d4, ret);

注意,由于寄存器是交错存储的,所以内存保持不变!

5.vld3q_f32

float d5[12] = {1.f, 2.f, 3.f, 4.f,
5.f, 6.f, 7.f, 8.f,
9.f, 10.f, 11.f, 12.f};
float32x4x3_t f = vld3q_f32 (d5);

6.vst3q_f32

vst3q_f32 (d5, f);

7.vld4q_f32, vst4q_f32

二、特殊操作

1.vdupq_n_f32

float32x4_t res = vdupq_n_f32(0.f); // 存储的四个 float32 都初始化为 0

2.vzipq_f32

float32x4x2_t q4 = vzipq_f32 (q0, q1);

3.vuzpq_f32

float32x4x2_t ret = vuzpq_f32 (q0, q1);

可见,打包 (zip)、拆包(unzip)并不是想当然的可逆的运算

4.vcombine_f32

float32x2_t a = vget_low_f32(q0);
float32x2_t b = vget_high_f32(q0);float32x4_t ret = vcombine_f32 (a, b);

5. vget_low_f32

float32x2_t low = vget_low_f32(q0); // 取低2位

6. vget_high_f32

float32x2_t high = vget_high_f32(q0); // 取高2位

7. vtrnq_f32

float32x4x2_t ret = vtrnq_f32 (q0, q1)

 

8. vextq_f32

  1. // 拼接两个寄存器并返回从第 n 位开始的大小为4的寄存器 0<=n<=3

  2. res = vextq_f32(q0, q1, 2); //取 q1 低2位,拼接到 q0 的高位,保留 q0 的高2位(移到低位)

  3. // q0, q1 实际数据没有变化

  • vext_u8 的例子:
uint8x8_t ret = vext_u8 (p, q, 2); // 取 q 的低两位作为 p 的高位,p 向左移动两位腾出空间

9.vget_lane_f32

float lane0 = vget_lane_f32(ss0, 0);// get 0th parameter in vector

10. vsetq_lane_f32

float32x4_t res = vsetq_lane_f32(d1[0], q1, 1);//用 d1[0] 的数据替换掉 q1[1](q1 实际数据没有变化)

11.vtbl1_s8

int8x8_t r = vtbl1_s8 (p, q);

12.vrev16_s8

int8x8_t s = vrev16_s8 (q);

三、基本数据类型的转换

1.vcvtq_u32_f32

uint32x4_t ui0 = vcvtq_u32_f32 (q0);

2.vcvtq_s32_f32

int32x4_t i0 = vcvtq_s32_f32 (q1);

3. vcvtq_f32_s32

float32x4_t f0 = vcvtq_f32_s32 (i0);

4.vcvtq_f32_u32

float32x4_t uf0 = vcvtq_f32_u32 (ui0)

四、基本比较运算

1.vceq_f32

uint32x2_t c = vceq_f32 (a, b); // 等于

2.vceqq_f32

uint32x4_t q = vceqq_f32 (q1, q2); // 等于

3. vmaxq_f32

float32x4_t ret = vmaxq_f32 (q2, q1);

4. vminq_f32

float32x4_t ret0 = vminq_f32 (q2, q1);

 

5.vpmax_s8

int8x8_t r = vpmax_s8 (p, q);

 

6.vpmin_s8

int8x8_t s = vpmin_s8 (p, q);

五、基本的位运算

1.vclsq_s32

int32x4_t q1 = vclsq_s32 (q0); // 统计和符号位相同的 bit 数(不包括符号位)

2.vclzq_s32

int32x4_t q2 = vclzq_s32 (q0); // 统计前缀 0 的个数

 

3.vcnt_s8

  1. int8_t d0[8] = {0, 1, 2, 3, 4, 5, 6, 7};

  2. int8x8_t q = vld1_s8(d0);

  3. int8x8_t p = vcnt_s8 (q); // 二进制形式的 1 的个数

4.vmvn_s8

int8x8_t q = vmvn_s8 (p); // 按位取反

5.vqneg_s8

int8x8_t r = vqneg_s8 (p);

 

6. vqshl_s8

  1. int8_t d0[8] = {0, 1, 2, 3, 4, 5, 6, 7};

  2. int8_t d1[8] = {1, 1, 2, 2, 3, 3, 4, 4};

  3. int8x8_t p = vld1_s8(d0);

  4. int8x8_t q = vld1_s8(d1);

  5. int8x8_t pq = vqshl_s8 (p, q); // 左移对应的位数

如果移位是负数 ,则变成截断的右移

  1. int8_t d0[8] = {0, 1, 2, 3, 4, 5, 6, 7};

  2. int8_t d1[8] = {-1, -1, -2, -2, -3, -3, -4, -4};

  3. int8x8_t p = vld1_s8(d0);

  4. int8x8_t q = vld1_s8(d1);

  5. int8x8_t pq = vqshl_s8 (p, q);

六、基本的逻辑运算

七、基本的算术运算

1.vadd_f32

float32x2_t ss0 = vadd_f32(vget_low_f32(q2), vget_high_f32(q2));//对应元素相加

2.vaddq_f32

float32x4_t q4 = vaddq_f32 (q1, q2);

3.vpadd_f32

float32x2_t ss1 = vpadd_f32(vget_low_f32(q2), vget_high_f32(q2));//相邻元素相加

3.vmulq_f32

float32x4_t res0 = vmulq_f32(q0, q1); //点乘

4. vmlaq_f32

float32x4_t res1 = vmlaq_f32(q0, q1, q2);// q0 + q1*q2

 

5.vmlaq_lane_f32

  1. //  ri = ai + bi * c[d];

  2. float32x4_t res = vmlaq_lane_f32(q0, q1, vget_low_f32(q2), 0);//取 q2 的第0个数,分别与 q1 中的 4 个数相乘,得到 4 个结果与 q0 累加

6.vmaxq_f3

float32x4_t max = vmaxq_f32(q1, q2);//对应元素比较,取最大

7.vrecpeq_f32

float32x4_t q5 = vrecpeq_f32 (q1); // 倒数

8.vrsqrteq_f32

float32x4_t q6 = vrsqrteq_f32 (q1); // 倒数平方根

待续

NEON 常用函数讲解相关推荐

  1. Requests库部署与常用函数讲解

    目录 1.Requests常用函数讲解 2.JsonPath讲解 3.接口关联 实现登录 下单流程 1.Requests常用函数讲解 import jsonimport jsonpath import ...

  2. php常用函数讲解,php常用函数处理的函数解析

    本篇将讲解php常用函数处理的函数解析. func_get_arg - 返回参数列表的某一项 func_get_args - 返回一个包含函数参数列表的数组 func_num_args - 返回传递给 ...

  3. Spark常用函数讲解之键值RDD转换

    摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行操作,一个RDD代表一个分区里的数据集 RDD有两种操作算子:         Tran ...

  4. NEON 常用函数及其执行结果

    令初始数据为: float d0[4] = {0.f, 1.f, 2.f, 3.f}; float d1[4] = {4.f, 5.f, 6.f, 7.f}; float d2[4] = {8.f, ...

  5. python的应用领域和常用函数模块有哪些_Python模块导入区别与常用函数案例

    作者:Nature 出品:AI机器思维 Python中包含很多模块,每个领域的应用有关专家开发了相应的模块,必须将其导入到python中,然后才能使用.每个模块安装导入后才能引用,下面通过math模块 ...

  6. java trunc函数_Oracle常用函数Trunc及Trunc函数用法讲解

    1. Trunc( date) trunc 以指定的元素截取日期类型的数据 语法:trunc(date,[ format]) date– 日期格式的值 format–日期格式 如'mm','yyyy' ...

  7. 跟燕十八学习PHP-第十三天-常用数组函数讲解

    /**  燕十八 公益PHP培训  课堂地址:YY频道88354001  学习社区:www.zixue.it  **/ <?php // 数组函数讲解 /* count 函数 作用:计算数组的单 ...

  8. avascript中的this与函数讲解

    徐某某 一个半路出家的野生程序员 javascript中的this与函数讲解 前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大 ...

  9. concat函数_三、P57-61 MySQL中常用函数

    本部分主要讲解MySQL数据库中常用函数的使用. P57 SQL中的函数类型:字符串函数.数值函数.日期和时间函数.流程函数.其他常用函数: P58 第1部分:字符串函数 1.concat函数 con ...

最新文章

  1. php linux 常用命令,Linux常用命令整理
  2. 6G 研发启动,普通人如何借势加薪?
  3. 武器系统仿真技术(二):末端制导系统蒙特卡洛仿真法
  4. 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway
  5. mysql半同步模式_MySQL 半同步复制模式的实现
  6. 同一进程不同线程之间的资源共享与独享
  7. python提供了什么函数进行格式化输出_python print函数格式化输出
  8. java 进程通信代码
  9. 当你不能够再拥有,你唯一可以做的,就是令自己不要忘记
  10. [转]Cookie详解
  11. 幼儿园c ch语言教育,幼儿园语言教育内容之三——听说游戏
  12. Vue 组件化通信 provide inject ,dispatch ,boardcast
  13. 中小园区网配置案例 超详细
  14. 《MySQL性能优化和高可用架构实践》阅读总结
  15. vue3 源码分析-运行流程分析
  16. `CSS filter` 有哪些神奇用途
  17. 夏普/sharp willcom d4 刷linux,IT豆
  18. 程序员的数学【多元函数微分学】
  19. Azure Kinect(K4A)人体识别跟踪进阶
  20. 推荐10本EEG领域值得阅读的书籍

热门文章

  1. 2-SII--应用本包下文件写入和读取
  2. java 图形界面
  3. 【学习笔记】【算法】【智能优化】粒子群优化(PSO)
  4. 英语写作——必备的200条句子【写作必备!!!】
  5. 为什么大家都不喜欢用国产科研仪器?
  6. 8.中学班级管理与教师心理
  7. Msc.Marc安装和使用过程中遇到证书错误——处理办法
  8. 流星雨html5,HTML5-流星雨
  9. 一文彻底搞懂MySQL基础:B树和B+树的区别
  10. 【LeetCode】括号(有效括号、括号生成、最长有效括号)