NEON intrinsic 简易入门指南
简介
Neon是ARM平台的向量化计算指令集,通过一条指令完成多个数据的运算达到加速的目的。新的Armv8a架构有32个128bit的向量寄存器,因此每次运算可以同时处理最多128bit的数据。
数据格式
<type><size>x<number_of_lanes>[x<length_of_array>]_t
解释一下,
type 数据类型
size 元素大小
number_of_lanes 通道数量
length_of_array 数组中的元素个数
数据示例
- int8x8_t 1个64bit的数据,包含8个int8类型的数据
- uint8x16x3_t 3个128bit的数据,每个数据包含16个uint8类型的数据
指令格式
ret v[mod]opname[shape][flags]_type(args)
解释一下,
ret 返回数据类型
v vector的简写,是neon intrinsic指令的一个统一前缀
mod 模式主要有以下几种:
- p pairwise操作,对操作数据两两计操作
- q 饱和操作,如果结果超过上限,则截断
- r 四舍五入操作
- h 折半操作,即右移一位
- d 翻倍操作,即左移一位,一般会和长指令一起使用
opname 操作名称,如add, sub等
shape 类型主要有以下几种:
- u 表示输入位有符号型,输出位无符号型
- n 窄指令,输出是输入的一半
- l 长指令,输出是输入的2倍
- w 表示wide,第一个输入向量和输出类型一致,第二个输入向量是第一个输入向量长度的一半
- _high AArch64下,配合l/n使用,使用l时,表示输入向量只有高64位有效;使用n时,表示输出向量只有高64位有效
- _lane 指定向量中的某个通道参与计算
flags 标志位
- 如果没有,则表示64位并行
- q 表示128位并行,还可以用b, h, s, d(分别代表8,16,32,64位)
_type 输入数据类型
- s8,s16,s32,s64,u8,u16,u32,u64,f16,f32,f64 s表示有符号整数,u表示无符号整数,f表示浮点数
args 参数
指令示例
int16x4_t vadd_s16(int16x4_t a, int16x4_t b)
add表示加法,s16表示输入16位有符号整数。整个操作就是a+buint8x8 vqshlun_n_s16(int16x8_t a, int b)
q表示饱和操作,shl左移,u表示输出转为无符号数,n表示窄指令,即输出为输入的一半,s16表示输入数据为int16。整个操作的意思就是将a左移b位,然后转成无符号型,再转成uint8,如果超过上限,就设为255int16x8_t vreinterpretq_s16_u16(uint16x8_t a)
uint16转int16int32x4_t vmovl_s16(int16x8_t a);
mov表示移动,这个函数就是把int16类型的数据提升到int32int16x4_t vget_high_s16(int16x8_t a);
寄存器a有128位,输出是64位。这个操作的意思就是获取a中的高64位并放到输出向量中int16x8_t vcombine_s16(int16x4_t a, int16x4_t b);
把两个16x8寄存器向量连接成一个128位的寄存器向量,注意ab类型必须相同int16x4_t vpmax_s8(int16x4_t a, int16x4_t b);
一一对比a, b的4个元素,输出较大的
参考:
https://zhuanlan.zhihu.com/p/358603760
https://zhuanlan.zhihu.com/p/441686632
https://developer.arm.com/documentation/102467/0100/
https://www.cnblogs.com/fengliu-/p/16140993.html
NEON intrinsic 简易入门指南相关推荐
- 《60题PyTorch简易入门指南,做技术的弄潮儿!》
转载来源:<60题PyTorch简易入门指南,做技术的弄潮儿! > 发布于和鲸社区 原文地址:https://www.kesci.com/mw/project/5e0038642823a1 ...
- 【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿
1 初识PyTorch 1.1 张量 1.导入pytorch包 import torch 2.创建一个空的5x3张量 x = torch.empty(5, 3) print(x) 3.创建一个随机初始 ...
- Mybatis简易入门指南
Mybatis 1.Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结 ...
- PyQt5简易入门指南03,使用资源文件和设计师
几个小小的修改 在上一章中,我通过一个简单的图片loader给同学们简单地讲解了pyqt5的信号与槽机制.在这一章中,我将对这个小程序进行一些简单的升级,通过这些修改,将告诉同学们如何在pyqt5中使 ...
- d3.js 入门指南 - 仪表盘
D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js. ...
- visio studio json工具_《产品经理入门指南》彩蛋2:别技淫原型图!你的Visio和Balsamiq Mockup入门了吗?...
温馨提示: 如果你有关于产品经理方面的任何问题,欢迎关注我的微信公众号与我互动.最新的免费系统的产品经理课程<老司机带你做产品>已经推出,请关注微信公众号:iamliuwenzhi 很多产 ...
- 【51单片机快速入门指南】6.4:DHT11、DHT22单总线温湿度传感器
目录 硬知识 DHT11 DHT22 通信协议 读取步骤 数据解读 DHT11 DHT22 示例程序 DHT11_22.c DHT11_22.h 测试程序 main.c 实验现象 DHT11 DHT2 ...
- 【51单片机快速入门指南】2:GPIO LED与按键
目录 硬知识 概念 I/O口配置 准双向口/弱上拉输出配置 开漏输出配置 实战 延时函数的生成 闪烁一个LED灯 源码 实验现象 流水灯 源码 实验现象 按键控制LED灯 按键介绍 源码 实验现象 普 ...
- html怎样使用ui套件,weui框架组件小白入门指南:如何安装使用weui.js?
本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 苏南大叔在本文中说说腾讯的weui这个前端框架的基本使用方法.这款框架已经问世有几年的时间了,因为其可以把微信 ...
最新文章
- 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化
- Python加密—AES加密(2)
- 51CTO平台老男孩教育精品视频全场5-6折,错过了,再等一年!
- Question for the 3D printing lattice?
- 10个精选的颜色选择器Javascript脚本及其jQuery插件
- string的各种函数(系统学习)
- 很多人花一大笔钱做APP、小程序
- linux sd启动盘制作工具,制作Mini Linux U盘启动盘
- 结合源码探讨Android距离传感器亮灭屏机制
- select框多级联动
- 基于CentOS构建高功能的LAMP平台
- C#弹出窗体、C#导出Excel、C#数据展示框、C#弹出框
- 手机python3.0编程软件-QPython3手机版下载
- NAND FLASH加载ramdisk文件系统
- Pacemaker部署
- Linux下的mysql ,1142 问题总结
- 高速电路设计基本概念之——period jitter,cycle-cycle jitter,N-cycle jitter,long-term jitter, TIE等
- 哪吒汽车发布技术品牌浩智,引领智能电动汽车发展“下半场”
- (Visual Basic)在VB2010中输出有某种规律的An矩阵
- 打开pin在任务栏上的软件的快捷键
热门文章
- SuperMarketSys_SSM超市管理系统(Spring+SpringMVC+Mybatis)
- 新买的电脑如何用U盘装系统
- python3-编程题之商品价格计算器
- 快速读懂Depth-wise Convolution
- 教你用UltraISO制作启动光盘
- 手机只是前菜,YunOS为何还要瞄准“家里、车里、路上和娱乐”?
- B+tree演示地址
- STM32F404的ADC之DMA的单通道
- “请保持清醒:开源是和世界同步的绝佳机会!”
- 一天一点raknet_一日一点RakNet(8)--第三方支持