简介

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+b
  • uint8x8 vqshlun_n_s16(int16x8_t a, int b)
    q表示饱和操作,shl左移,u表示输出转为无符号数,n表示窄指令,即输出为输入的一半,s16表示输入数据为int16。整个操作的意思就是将a左移b位,然后转成无符号型,再转成uint8,如果超过上限,就设为255
  • int16x8_t vreinterpretq_s16_u16(uint16x8_t a)
    uint16转int16
  • int32x4_t vmovl_s16(int16x8_t a);
    mov表示移动,这个函数就是把int16类型的数据提升到int32
  • int16x4_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 简易入门指南相关推荐

  1. 《60题PyTorch简易入门指南,做技术的弄潮儿!》

    转载来源:<60题PyTorch简易入门指南,做技术的弄潮儿! > 发布于和鲸社区 原文地址:https://www.kesci.com/mw/project/5e0038642823a1 ...

  2. 【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿

    1 初识PyTorch 1.1 张量 1.导入pytorch包 import torch 2.创建一个空的5x3张量 x = torch.empty(5, 3) print(x) 3.创建一个随机初始 ...

  3. Mybatis简易入门指南

    Mybatis 1.Mybatis简介 ​ MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结 ...

  4. PyQt5简易入门指南03,使用资源文件和设计师

    几个小小的修改 在上一章中,我通过一个简单的图片loader给同学们简单地讲解了pyqt5的信号与槽机制.在这一章中,我将对这个小程序进行一些简单的升级,通过这些修改,将告诉同学们如何在pyqt5中使 ...

  5. d3.js 入门指南 - 仪表盘

    D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js. ...

  6. visio studio json工具_《产品经理入门指南》彩蛋2:别技淫原型图!你的Visio和Balsamiq Mockup入门了吗?...

    温馨提示: 如果你有关于产品经理方面的任何问题,欢迎关注我的微信公众号与我互动.最新的免费系统的产品经理课程<老司机带你做产品>已经推出,请关注微信公众号:iamliuwenzhi 很多产 ...

  7. 【51单片机快速入门指南】6.4:DHT11、DHT22单总线温湿度传感器

    目录 硬知识 DHT11 DHT22 通信协议 读取步骤 数据解读 DHT11 DHT22 示例程序 DHT11_22.c DHT11_22.h 测试程序 main.c 实验现象 DHT11 DHT2 ...

  8. 【51单片机快速入门指南】2:GPIO LED与按键

    目录 硬知识 概念 I/O口配置 准双向口/弱上拉输出配置 开漏输出配置 实战 延时函数的生成 闪烁一个LED灯 源码 实验现象 流水灯 源码 实验现象 按键控制LED灯 按键介绍 源码 实验现象 普 ...

  9. html怎样使用ui套件,weui框架组件小白入门指南:如何安装使用weui.js?

    本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 苏南大叔在本文中说说腾讯的weui这个前端框架的基本使用方法.这款框架已经问世有几年的时间了,因为其可以把微信 ...

最新文章

  1. 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化
  2. Python加密—AES加密(2)
  3. 51CTO平台老男孩教育精品视频全场5-6折,错过了,再等一年!
  4. Question for the 3D printing lattice?
  5. 10个精选的颜色选择器Javascript脚本及其jQuery插件
  6. string的各种函数(系统学习)
  7. 很多人花一大笔钱做APP、小程序
  8. linux sd启动盘制作工具,制作Mini Linux U盘启动盘
  9. 结合源码探讨Android距离传感器亮灭屏机制
  10. select框多级联动
  11. 基于CentOS构建高功能的LAMP平台
  12. C#弹出窗体、C#导出Excel、C#数据展示框、C#弹出框
  13. 手机python3.0编程软件-QPython3手机版下载
  14. NAND FLASH加载ramdisk文件系统
  15. Pacemaker部署
  16. Linux下的mysql ,1142 问题总结
  17. 高速电路设计基本概念之——period jitter,cycle-cycle jitter,N-cycle jitter,long-term jitter, TIE等
  18. 哪吒汽车发布技术品牌浩智,引领智能电动汽车发展“下半场”
  19. (Visual Basic)在VB2010中输出有某种规律的An矩阵
  20. 打开pin在任务栏上的软件的快捷键

热门文章

  1. SuperMarketSys_SSM超市管理系统(Spring+SpringMVC+Mybatis)
  2. 新买的电脑如何用U盘装系统
  3. python3-编程题之商品价格计算器
  4. 快速读懂Depth-wise Convolution
  5. 教你用UltraISO制作启动光盘
  6. 手机只是前菜,YunOS为何还要瞄准“家里、车里、路上和娱乐”?
  7. B+tree演示地址
  8. STM32F404的ADC之DMA的单通道
  9. “请保持清醒:开源是和世界同步的绝佳机会!”
  10. 一天一点raknet_一日一点RakNet(8)--第三方支持