ARM架构NEON intrinsic函数学习笔记(一)

本文探讨了intrinsic函数在SIMD技术中的应用,对比了其与手写汇编代码的性能,介绍了NEON指令的寄存器操作,以及向量、通道和元素的概念。特别关注了ARMV7架构中NEON与VFP的区别,强调了数据并行能力和浮点计算能力的不同。
摘要由CSDN通过智能技术生成

 一、intrinsic函数优缺点

        使用SIMD(单指令多数据)技术处理数据的方法主要是:

  1. neon指令
  2. intrinsic函数
  3. 手写汇编代码

        其中intrinsic函数是对neon指令的封装,方便使用,连着使用的性能相差不大,但都比手写neon汇编代码带来的性能要差一些。

二、intrinsic函数执行过程

        汇编代码其实就是对寄存器进行操作和运算,而neon指令也是一样的。Neon指令操作的寄存器有两种,一种是128位的寄存器,一种是64位的寄存器(其中64位的寄存器其实就是128位的寄存器没有使用高位的64位而已,其实都是128位的寄存器)。所以以128位寄存器举例的话,一个neon指令,可以simd同时处理16个8bit数据、4个32bit数据、2个64bit数据。

三、相关概念

rigister:寄存器。从硬件角度来看。 

vector:向量。从数据角度来看。

lane:通道。连接输入操作数和输出操作数来运行的就是通道。

Element:元素。运算操作的最小数据,有8位、16位、32位等。

数据类型:

<type><size>x<len_of_lanes>_t  

比如:int16x4_t  int16x8_t

int16x4x4_t 表示存储四个int16x4_t数据的结构体

注意:ARMV7架构内有多重寄存器。

        16个通用寄存器(32bit);

        16个NEON寄存器(128bit),或者可以看成32个寄存器(64bit);

        16个VFP寄存器(32bit)。

        NEON和VFP的区别在于VFP是加速浮点计算的硬件不具备数据并行能力,同时VFP进行双精度浮点数(double)的计算,NEON只有单精度浮点计算能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值