NEON_2_SSE.h 是个好东西

简要介绍

NEON_2_SSE.h 是 Intel 官方在 Github 开源的一份代码,其基于 Intel 自身的 SSE 指令,对 Cortex-A 系列平台上的 NEON 浮点加速指令进行了模拟实现,非常有价值,具体有两点如下:

  1. 此前基于 Cortex-A 系列用 NEON 指令开发的代码,可以直接无缝切换,在 Windows&Intel 平台运行;
  2. 利用 ARM CMSIS DSP 开源代码,可以对普通的浮点代码进行一定程度加速,本文档便针对此进行些许讨论。做几组时延对比,实测性能表现;

其中,CMSIS(Common Microcontroller Software Interface Standard)是ARM公司与多家不同的芯片和软件供应商一起紧密合作定义的,提供了内核与外设、实时操作系统和中间设备之间的通用接口。其中,CMSIS-DSP 为数字信号处理库函数。

而子模块 DSP ,它的统一接口函数支持主流的 ARM 指令,如:循环展开、DSP 指令、NEON 指令与 Helium加速指令,只要打开对应的宏便可,非常方便开发者使用。


源码地址

1、Intel 官方 Github 开源代码地址,除了本文介绍的 NEON_2_SSE.h ,还有很多优秀的代码实现:

Intel Corporation​github.com/intel正在上传…重新上传取消​icon-default.png?t=LA92https://link.zhihu.com/?target=https%3A//github.com/intel

2、ARM CMSIS-DSP 的官方链接地址:

CMSIS DSP Software Library​arm-software.github.io/CMSIS_5/DSP/html/index.htmlicon-default.png?t=LA92https://link.zhihu.com/?target=https%3A//arm-software.github.io/CMSIS_5/DSP/html/index.html

3、ARM CMSIS-DSP的 Github 源码地址:

github.com​github.com/ARM-software/CMSIS_5/tree/master


运行环境

项目
编译器MSVC
系统Windows 10
芯片Intel
支持指令CPUZ 实测支持 SSE、SSE2等
线程单线程

测量方法

1、以微妙级别统计时间函数 QueryPerformanceCounter 进行测量,官方介绍如下:

QueryPerformanceCounter function - Win32 apps​docs.microsoft.com/zh-cn/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter?redirectedfrom=MSDN正在上传…重新上传取消​

2、每次循环 1000000 次,取均值进行对比;


测量结果

注意:

  1. 每个人的测试环境一定不一样,这里给出的结果,大家可以看其相对值,有个大体概念;
  2. 精力有限,只测试常用的乘法与加法,其它如乘累加、偏移、标量乘等未测;
  3. 取四组长度,均为以2底的指数,因为信号处理领域FFT的缘故,经常出现此类长度;

乘法速度测试结果,单位微妙:

MulNEON2SSEfloatInt32
5121.31.41.3
20481.82.62.5
81923.96.87.3
3276811.921.623.4

加法速度测试结果,单位微妙:

AddNEON2SSEfloatInt32
5121.21.41.3
20481.42.52.4
81923.96.96.4
3276811.921.722.2

测量结论

1、NEON_2_SSE.h 确实可以加速普通的浮点运算,建议使用;

2、多数场景下,定点32位与单精度浮点速度拉不开差距,应该还是因为 Intel 有很卓越的 FPU 协处理器的缘故;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌云之程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值