由一个简单例子上手neon

这篇博客主要针对新手,通过一个简单的例子介绍如何上手使用Neon。文章分为编译、代码实现和结构化输入三个部分,详细阐述了每个步骤,并引用了相关资源作为学习参考。
摘要由CSDN通过智能技术生成

    我也是纯新手,看了这篇博客http://blog.csdn.net/may0324/article/details/72847800,感觉对上手很有帮助。本文也是由这篇博客给的例子出发,探讨一些问题。

    1、编译

    要让我们的代码在板子上跑,必然是要用交叉工具链来编译,我自己用的是arm-linux-g++。在编译neon优化的代码时,要加入 -mfloat-abi=softfp -mfpu=neon -ffast-math。-mfloat-abi有三个可选项:可选soft/softfp/hardfp: soft和后两者的区别是编译器不会生成浮点指令,浮点操作完全由软件实现;相比之下,hardfp走了另一个极端,浮点操作完全由硬件实现,效率最高;softfp则是走中间路线,它有着和hardfp完全不一样的calling convention——hardfp通过VFP来传浮点参数,而softfp还是通过整型寄存器来传参,和soft是一致的。如果选择soft,那么就不支持neon了。需要-mfpu=neon来指定FPU(Floating-Point Unit)是NEON Unit;-ffast-math是浮点优化选项,可以极大提高浮点运算速度。
   此外,使用neon指令需要<arm-neon.h>头文件。

2、代码部分

还是先贴一下上述博客中的代码(稍作修改)。代码中使用的各函数作用可参见上述博客。
#include<iostream>
#include<time.h>
using namespace std;
float sum_array(float* arr,int len);

int main()
{ 
  long l=100000;
  float array[l];
  for(long i=0;i<l;i++)
    {
      array[i]=i/1000;
    } 
  clock_t starttime=clock();
 for(int round=1;round<=1000;round++)
 { 
  float Sum=sum_array(array,l);
  //cout<<Sum<<endl;
 }
 clock_t endtime=clock(); 
  cout<<(double)(endtime-starttime)/CLOCKS_PER_SEC<<"ms"<<endl; 
  return 0;
}

float sum_array(float* arr,int len)
{ 
  if(NULL== arr||len<1)
  {
    cout<<"input error\n";
      return 0;
  }
  float sum(0.0);
  for(long i=0;i<len;++i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值