浮点优化选项 -ffast-math:极大地提高浮点运算速度【转】

转自:http://blog.csdn.net/zjujoe/article/details/2604157

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[-]

  1. 关于浮点优化选项摘自C in a nutshell
  2. 测试
    1. 测试方法
    2. marvell 编译器 -ffast-math
    3. 测试结果
    4. Meamo 编译器 -ffast-math
    5. 测试结果

关于浮点优化选项:(摘自C in a nutshell)

C99 浮点环境支持科学和数学级别的应用,这些应用必须有相当高的精度,但是某些应用却不是如此,注重速度高于精度。对于这些以速度为重的应用, -ffast-math 选项定义了预处理器宏 __FAST_MATH__, 指示编译不必遵循 IEEE 和 ISO 的浮点运算标准。-ffast-math标记是一个群组选项,可以分别启用下面六个优化选项:

-fno-math-errno

Disables the use of the global variable errno for math functions that represent a single floating-point instruction.

-funsafe-math-optimizations

The "unsafe math optimizations" are those that might violate floating-point math standards, or that do away with verification of arguments and results. Using such optimizations may involve linking code that modifies the floating-point processor's control flags.

-fno-trapping-math

Generates "nonstop" code, on the assumption that no math exceptions will be raised that can be handled by the user program.

-ffinite-math-only

Generates executable code that disregards infinities and NaN ("not a number") values in arguments and results.

-fno-rounding-math

This option indicates that your program does not depend on a certain rounding behavior, and does not attempt to change the floating-point environment's default rounding mode. This setting is currently the default, and its opposite, -frounding-math, is still experimental.

-fno-signaling-nans

This option permits optimizations that limit the number of floating-point exceptions that may be raised by signaling NaNs. This setting is currently the default, and its opposite, -fsignaling-nans, is still experimental.

测试

测试方法

 

分别使用marvell(gcc4.1.1) 以及 maemo 编译器(codesourcery 2005q3-2,gcc3.4.4)并使用不同的编译选项进行测试对比。 程序运行在 PXA310 624M CPU 下。

 

marvell 编译器 + -ffast-math

arm-iwmmxt-Linux-gnueabi-gcc float.c -o float1

arm-iwmmxt-linux-gnueabi-strip float1

arm-iwmmxt-linux-gnueabi-gcc -ffast-math float.c -o float2

arm-iwmmxt-linux-gnueabi-strip float2

测试结果

/mnt/share # ./float1

Start time is: 0.0

DIV End time is: 4.4294564932

MUL End time is: 5.4294622841

ADD End time is: 6.4294699686

SUB End time is: 7.4294810851

/mnt/share # ./float2

Start time is: 0.0

DIV End time is: 1.66616

MUL End time is: 2.122699

ADD End time is: 3.253242

SUB End time is: 4.363897

Meamo 编译器 + -ffast-math

gcc -mfloat-abi=soft -march=iwmmxt float.c -o cs_float1

strip cs_float1

gcc -mfloat-abi=soft -march=iwmmxt -ffast-math float.c -o cs_float2

strip cs_float2

测试结果

/mnt/share # ./cs_float1

Start time is: 0.0

DIV End time is: 4.4294865258

MUL End time is: 5.258137

ADD End time is: 7.4294683333

SUB End time is: 8.169521

/mnt/share # ./cs_float2

Start time is: 0.0

DIV End time is: 1.330878

MUL End time is: 3.4294658034

ADD End time is: 4.110022

SUB End time is: 6.4294530884

 

以下运行在 meamo文件系统下:

Nokia-N810-42-19:/mnt/share# ./cs_float1

Start time is: 0.0

DIV End time is: 4.4294844089

MUL End time is: 5.229302

ADD End time is: 7.4294646888

SUB End time is: 8.127102

Nokia-N810-42-19:/mnt/share# ./cs_float2

Start time is: 0.0

DIV End time is: 1.320814

MUL End time is: 2.673556

ADD End time is: 4.84794

SUB End time is: 5.530572

时间: 2024-10-08 22:08:22

浮点优化选项 -ffast-math:极大地提高浮点运算速度【转】的相关文章

GCC编译器优化选项分析及具体优化了什么

问题 在使用gcc作为编译器.在设定编译条件时,在debug模式下生成的程序正常,但是在release模式下往往会出现很多种预料之外的结果,尤其在嵌入式环境中,程序在板子上运行的时候,问题就愈发明显. 为了了解具体为什么造成该问题,对两种模式下的配置做了对比 debug模式编译器参数为-O0 -g –Wall release模式编译器参数为-O2 -g –Wall 通过对比可以发现两种模式主要的不同在于编译器优化程度不同,那么编译器在两种优化下究竟做了什么优化那?现在我们来看看gcc编译器的优化

Microsoft Visual C++浮点优化

摘要:了解如何使用 Microsoft Visual C++ 2005(以前称为 Visual C++"Whidbey")的浮点语义管理方法来优化浮点代码.创建快速程序,同时确保仅对浮点代码执行安全优化. C++ 中的浮点代码优化 C++ 优化编译器不仅能够将源代码转换为机器码,而且能够对机器指令进行适当的排列以便改善性 能和/或减小大小.遗憾的是,许多常用的优化在应用于浮点计算时未必安全.在下面的求和算法 [1] 中,可以看到这方面的一个恰当的示例: float KahanSum(

前端优化:9 个技巧,提高 Web 性能

当今数字世界,存在着无数的网站,每天都需要处理各种不同的原因的访问.然而,这些网站中有很大一部分显得笨重,使用起来也很麻烦.没怎么优化的网站会被各种各样的问题困扰,包括加载时间.不支持移动设备.浏览器兼容性问题,等等. 这篇文章讲述可以帮助改善优化前端的技术,非常有用.主要内容有清理代码.压缩图片.压缩外部资源.使用 CDN,以及一些其它方法.这些方法会为你的网站带显著的速度提升和整体性能提升. 1. 清理 HTML 文档 HTML,即超文本标记语言,几乎是所有网站的支柱.HTML 为网页带来标

速卖通(aliexpress)活动页面优化第二轮,qps大幅提高

该文章选自阿里巴巴技术协会(ATA)精选文章集 回顾   话说在以前文章中,我小小的吹了一个牛,要让qps飞起来,但是在第一次的优化中,我们也只是让qps从170左右上升到了500左右,但是这并没有让qps并没有"飞"起来.   而且我发现在我们的场景下gzip,已经成为势要解决的最大问题,于是我花了一段时间,对我们活动页面的场景做了一系列降低压缩级别的测试测试,测试结果如下:   通过一系列的计算,最终发现压缩级别降低带来的机器成本的下降,和带宽带来的提升带来的成本上升相互抵消了.

SEO优化者如何养成良好习惯提高网站排名

国内的SEO优化者目前的状况就是:为了眼前利益放弃长远利益.我们可以发现现在很多网站的优化现象都只能够满足当前的发展,而对于几个月后甚至几周之后的发展却没有多少优化者会在意,这说明80%的网站优化者还需要养成良好的习惯去帮助网站提升排名,而不是靠不作为与乱作为手段去提升网站的排名. 网站的排名提升并不是三天两天的事情,如果不能够持之以很.循序渐进那么你的网站优化就有问题,作为一名SEO优化者应当养成良好的习惯提高网站排名,而不是靠一些不正规的手段去谋取排名,那么作为一名SEO优化者应该养成哪些良

SEO优化10大技巧及权重提高方法

亲们.你们好 我是阿四.今天给大家带来点优化的技巧. 由站长之邀给大家讲这堂课.. 至于上次的忘记带草稿了 口述 都忘记了 像大家道一句最真诚的歉意. 好了 我就不废话了.直接入题把. 先给大家讲讲两大搜索引擎的习惯.百度,她比较喜欢新鲜的事物,最喜欢的是收录新站,只要是新的网页都收录,之后在慢慢整理,不合要求都被K掉. google虽然收录准则限制宽松,但是是比较稳定的,对被收录的网页有一定的要求,更新内容也是逐步增加的. 因此啊我们网站在谷歌的收录很好 .原因就这样子喽. 现在我开始讲讲比较

如何优化JAVA程序设计和编码,提高JAVA性能

通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化.一般有两种方案:即优化代码或更改设计方法.我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能.而一个设计良好的程序能够精简代码,从而提高性能. 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧. 1.对象的生成和大小的调整. JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数,从而常常会生成大量的对象(或实例)

网站性能优化之CSS无图片技术 提高价值速度

一.无图片技术定义 在不使用CSS Image(通过CSS的引入的背景图片,不包括img标签内的图片)情况下生成类似图片效果的技术;换句话的意思就是在使用纯CSS生成类似图片效果的技术. 二.为什么要"无图片"? 首先我们通过yslow的statistics查看新浪微博最新版首页的文件,得到Stylesheet File(CSS文件)大小为206.8K, CSS Image大小为623.8K.明显发现CSS文件比CSS Image小很多. 当然单纯拿这两个来比,还不能说明什么. 下面我

SQL Server优化篇:过滤条件设定提高索引效率

设定过滤条件提高索引效率 优秀的索引是SQL Server数据库性能的关键,然而高效的索引都是经过精心设计而成的.众所周知,主键是储存数据对象的唯一标识,如果数据表中没有聚簇索引,为了维护主键的唯一性,SQL Server数据库在默认情况下将为主键创建聚簇索引(Clustered index),除非用户特别指定将索引创建为非聚簇索引(Non-clustered index). 毫无疑问,我们应当为频繁访问的数据创建聚簇索引,当然频繁访问的字段应当经过详细的分析和慎重选择,并且索引值应当尽可能短.