在有些软件中需要大量的浮点运算,举个例子; 音频处理。

如果所用的CPU不带FPU,这些运算就要用软件实现,举个例子:

其中乘法操作,可能会用 __aeabi_dmul 来代替,

The ARM floating-point environment is an implementation of the IEEE 754-1985 standard for

binary floating-point arithmetic.

An ARM system might have:

? a VFP coprocessor

? no floating-point hardware.

If you compile for a system with a hardware VFP coprocessor, the ARM compiler makes use of

it. If you compile for a system without a coprocessor, the compiler implements the computations

in software. For example, the compiler option --fpu=vfp selects a hardware VFP coprocessor

and the option --fpu=softvfp specifies that arithmetic operations are to be performed in

software, without the use of any coprocessor instructions.

具体请参考:

__aeabi_dmul 2 double double Return x times y

这样会很慢。

如果硬件支持FPU,可以直接使用FPU来运算。

例如: 上面的double 乘法操作,会直接使用 :

vmul.f64 来完成,这样会很快。

我谢了一段code做了一个测试;

volatile double para_1 = 10.10;

volatile double para_2 = 10.10;

volatile double result;

int index;

for(index=0;index<0x1000000;index++)

{

result = para_1 * para_2;

}

同样的10M 次乘法操作,如果不使用FPU,消耗大约 1700ms 如果利用FPU,只需要350ms左右。

除法运算差异更大;   如果不适用FPU,需要6,700 ms ,使用FPU 只需要515ms

如果CPU有FPU,则尽可能把他们利用起来,可以大幅度提升performance。

另外ARM根据不同CPU给出了另外的优化建议;

例如,Cortex A9 可以参考:

Cortex?-A9 Floating-Point Unit

Revision: r4p1

Technical Reference Manual

==> 1.3 Writing optimal FP code

另外,如果用的是Cortex-A 的ARM,同时可以考虑利用NEON来优化。具体请参考:  Introducing NEON Development Article

It extends the SIMD concept by defining groups of instructions operating on vectors stored in 64-bit D, doubleword, registers and 128-bit Q, quadword, vector registers.

NEON这个feature已经集成到了gcc,可以直接使用。

NEON intrinsics with GCC

To use NEON intrinsics in GCC, you must specify -mfpu=neon on the compiler

command line:

arm-none-linux-gnueabi-gcc -mfpu=neon intrinsic.c

Depending on your toolchain, you might also have to add -mfloat-abi=softfp to indicate

to the compiler that NEON variables must be passed in general purpose registers.

A complete list of supported intrinsics can be found at

===>另外注意NEON跟VFP不是绝对存在的,但是ARM建议是有VFP就有NEON (Cortex-A系列都实现了NEON,)

arm linux fpu,多媒体处理,利用ARM NEON/FPU提升performance相关推荐

  1. arm linux免驱usb声卡,arm linux利用alsa驱动并使用usb音频设备

    一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: 接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa- ...

  2. arm linux设置ip地址命令,ARM Linux系统修改动态IP为静态IP地址

    # Wired or wireless interfaces auto eth0 #iface eth0 inet dhcp #        pre-up /bin/grep -v -e " ...

  3. arm linux下看门狗应用,arm linux watchdog 看门狗

    目前手上有个项目需要设计看门狗,是arm+CPLD 方式.由于对看门狗要求很高,打算做一个双看门狗,arm CPLD互相为 对方的看门狗.理论上CPLD是不需要看门狗的,还是这么去设计了.接下来对看门 ...

  4. arm linux嵌入式网络控制系统,基于ARM uCLinux的网络控制系统设计与实现

    引言    随着网络和通信技术的发展,嵌入式系统现已进入高速发展阶段.并在社会各个领域得到了广泛的应用.本文介绍了一种采用ARM+uCLinux作为开发平台.实现基于TCP/IP的远程系统监控.从而取 ...

  5. arm linux移植jvm,JVM的ARM移植.PDF

    JVM的ARM移植 JVM 的 ARM 移植 当今JVM 种类很多,如IBM JVM .MS JVM 等等.但要把它用到 ARM 上,并非易事. 经过测试和对比,最终还是选择了 SUN 的JVM,其中 ...

  6. arm linux内核调试,kgdb在ARM开发板上调试kernel成功

    大概几个注意点: 1.公版的Linux需要打kgdb补丁的,kgdb官方那边可能不支持新版本的内核(我的是2.6.18),可以在下面的网址找到,但是ARM上调试需要打哪些补丁,不是很清楚,网上的几篇中 ...

  7. arm linux读cpu id,基于ARM架构的芯片获取CPU信息(cpuID)的多种方法

    由于工作的原因,要获取到ARM芯片的cpuid. 了解下存储cpu信息的寄存器内容: CPUID寄存器内容: 字段名:Implementer(venter 销售ID)|Variant(大版本号) | ...

  8. arm linux qt5中文字库,Qt5 Font arm linux

    1. ubuntu 下查看当前字体库命令: fc-list /usr/share/fonts/chinese/msyhbd.ttf: Microsoft YaHei UI:style=Bold,Neg ...

  9. arm linux ip配置文件,手动修改ARM Linux的静态IP和用QT获取和修改IP

    http://blog.csdn.net/a15868717540/article/details/7165287 这是第一种方式 //读取部分 QSettings *ConfigIni = new ...

  10. arm linux 时间获取,菜鸟自学ARM:linux下编程获取系统时间和设置时间

    获取时间有几种编程方法: 1 #include #include main(){ time_t t; struct tm *p; time(&t); p=gmtime(&t); pri ...

最新文章

  1. Android开发教程 - 使用Data Binding(二)集成与配置
  2. linux配置静态IP后ping外网不通的解决方案
  3. Java单向链表操作详解
  4. 推荐小课1:推荐、推荐系统是什么?有什么价值?
  5. 干货:TensorFlow1.2~2.1各个GPU版本CUDA和cuDNN对应版本整理
  6. 4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)
  7. linux下用户切换
  8. git管理复杂项目代码
  9. 华为服务器上传文件后怎么通过链接查看,远程服务器文件上传后的操作
  10. myeclipse-common 找不到
  11. 递归怎么理解 php,求php一段递归代码的理解
  12. java jslider 自定义_Java自定义JSlider UI
  13. gimp中文版教程_GIMP中文详细教程.pdf
  14. SQL Server触发器简单例子
  15. 6轴并联机器人示教器
  16. Origin画并列柱状图
  17. Jlink V8 在 Keil MDK5.25 中无法正常烧写、调试程序的故障处理
  18. 红黑树与平衡二叉树_百图详解红黑树
  19. 有几种检测方法可以检测沼气成分?
  20. 爬取简单静态网站——汽车之家二手车

热门文章

  1. python实战: 短链接生成器
  2. MySQL基础教程---创建、查询、备份数据库
  3. 我的航拍直升机 控制基站软件的编写历程(3.5)—分析界面
  4. 域名系统中的本地域名服务器、根域名服务器、顶级域名服务器以及权限域名服务器。
  5. JavaScript的原型和继承
  6. vad算法 c语言,腾讯视频cKey算法
  7. [算法学习no7]图的遍历
  8. 计算给定字符串中最长回文子串的长度(或查找最长回文子串)
  9. MQTT - 消息队列遥测传输协议
  10. 【Unity】在Unity中实现扫描二维码 生成二维码功能