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, 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
// 拼接两个寄存器并返回从第 n 位开始的大小为4的寄存器 0<=n<=3
res = vextq_f32(q0, q1, 2); //取 q1 低2位,拼接到 q0 的高位,保留 q0 的高2位(移到低位)
// 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
int8_t d0[8] = {0, 1, 2, 3, 4, 5, 6, 7};
int8x8_t q = vld1_s8(d0);
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
int8_t d0[8] = {0, 1, 2, 3, 4, 5, 6, 7};
int8_t d1[8] = {1, 1, 2, 2, 3, 3, 4, 4};int8x8_t p = vld1_s8(d0);
int8x8_t q = vld1_s8(d1);int8x8_t pq = vqshl_s8 (p, q); // 左移对应的位数
如果移位是负数 ,则变成截断的右移
int8_t d0[8] = {0, 1, 2, 3, 4, 5, 6, 7};
int8_t d1[8] = {-1, -1, -2, -2, -3, -3, -4, -4};int8x8_t p = vld1_s8(d0);
int8x8_t q = vld1_s8(d1);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
// ri = ai + bi * c[d];
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 常用函数及其执行结果相关推荐
- NEON 常用函数讲解
目录 一.基本的加载存储操作 1. vld1q_f32 2.vst1q_f32 3.vld2q_f32 4.vst2q_f32 5.vld3q_f32 6.vst3q_f32 7.vld4q_f32, ...
- js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法
本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...
- 【SQL开发实战技巧】系列(十三):讨论一下常用聚集函数通过执行计划看sum()over()对员工工资进行累加
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- html网页自动运行函数,在网页中JS函数自动执行常用三种方法
在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: functionn MyAutoRun() { //以下是您的函数的代码,请自行修改先! alert("函数 ...
- 在网页中JS函数自动执行常用三种方法
<SCRIPT LANGUAGE="JavaScript"> functionn MyAutoRun() { //以下是您的函数的代码,请自行修改先! al ...
- SQLserver 常用函数适用方法(转载)
SQL Server 常用函数使用方法(持续更新) 之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行...嘿嘿... 直到今天用到substring()这个函数,C# 里面这个方法起始值 ...
- python Pool常用函数用法总结
在本篇内容里小编给大家整理的是一篇关于python Pool常用函数用法总结内容,有需要的朋友们可以学习下. 1.说明 apply_async(func[,args[,kwds]):使用非堵塞调用fu ...
- e class connect.php,剖析帝国CMS核心文件e/class/connect.php中的常用函数
帝国CMS下的e/class/connect.php文件中包含了帝国CMS常用的一些核心功能函数,加深对connect.php文件中常用函数的了解对于帝国CMS的二次开发来说非常重要. 现将帝国CMS ...
- PHP访问mysql的常用函数,PHP操作MySQL数据库常用函数
PHP操作MySQL数据库常用函数 php操作mysql数据库,俗称天龙八步: 第一步:连接数据库 第二步:判断连接错误 第三步:选择数据库 第四步:设置字符集 第五步:准备SQL语句 第六步:执行并 ...
最新文章
- 程序员3月刊,一篇文章的思考
- golang中的strings.ContainsRune
- ASP.NET中级学习2
- QT Media Error: DirectShowPlayerService::doRender: Unresolved error code 0x80040266
- 利用套接字实现 CS 模型
- python将列表中反序输出_python中sorted怎么反序排列
- 西交利物浦大学企业协同平台案例分享
- jvm调优工具_JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用
- SQL各个关键字的顺序
- Win10下 QT的安装配置 (亲测可用)
- 基于AChartEngine绘制股票走势图----分时图二(五日,涨跌涨跌幅)
- Linux下显示IP地理位置信息的工具-nali
- 计算机接口图形,图形设备接口
- 验收测试:α测试、β测试
- 三极管流水灯电路设计
- 关于半岛体试验的一些知识汇总
- 微信小程序支付签名生成(客户端)
- 5.Flink对接Kafka入门
- 新巴巴运动网 项目第三天
- 项目启动找不到资源文件可能的解决办法
热门文章
- Apache Hadoop
- Proteus仿真最小系统板的绘制及流水灯
- matlab:plot线型和颜色
- NEXTCHIP 内容介绍+应用场景+代理商信息
- iOS即时通讯进阶 - CoacoaAsyncSocket源码解析(Connect篇)
- 本质安全设备标准(IEC60079-11)的理解(一)
- 谷歌账号注册时中国大陆手机号无法验证,“此电话号码无法用于进行验证”快速解决。2023年新方法
- ibatis中配置parameterClass=java.util.HashMap的用法
- Mybatis错误 Result Maps collection already contains value for xxx
- html5中,contextmenu 和 spellcheck