相关疑难解决方法(0)

gcc的ffast-math实际上做了什么?

我理解gcc的--ffast-math标志可以大大提高浮动操作的速度,并超出IEEE标准,但我似乎无法找到有关它正在发生的事情的信息.任何人都可以解释一些细节,并可能给出一个明确的例子,说明如果标志开启或关闭会有什么变化?

我确实尝试过挖掘SO以寻找类似的问题,但却找不到任何解释ffast-math工作原理的东西.

math floating-point performance gcc fast-math

138
推荐指数
2
解决办法
5万
查看次数

双倍乘以加速度

背景

我是航空航天工程和EECS学生.我正处于大量数学和物理学的工作,但尚未进入算法或汇编语言.

我设计和编写了各种各样的程序,从商业建议软件到卫星硬件控制器.

这项工作大部分涉及在其他媒介中进行数学运算,然后编写代码来实现它.

在将它们放入代码之前,我代数地简化了这些方程式.但是在我花时间这么做之前,我想知道我是否应该支持更多的加法运算,或者更多的乘法运算.(我已经知道分工的成本要高得多.)


B sub-x prime

这是我从其他一些工作中得出的等式,这是我所看到的非常典型的.

我们可以清楚地看到,至少有一些方法可以简化这个等式.由于简化是我的决定,我想挑选尽可能多的有利于性能的选项实用.我不打算以算法设计时为代价获得前沿性能.


问题

一般来说,哪种双重操作更快:加法或乘法?

我知道知道哪个更快的唯一明确方法是编写和运行基准测试,但这不是重点.对于每次我需要简化方程式时编写测试代码的合理性,这不是一个足够高的优先级.我需要的是一个适用于我的代数的经验法则.

如果差异是如此微小,以至于边界可忽略不计或不确定,这是一个可以接受的答案,只要我知道它几乎没有区别.


支持研究

我知道,在C和C++中,优化器会处理代数,因此它是一个空问题.但是,据我所知,Java编译器不进行代数简化/优化.具体来说,这个答案表明情况就是这样,程序员应该进行这种优化.

互联网上存在分散的答案,但我无法得出确凿的答案.一位前马里兰大学物理系的学生在Java上运行这些测试,但表中没有双重性能数据,图表比例使结果难以辨认.这个魁北克大学CS教授的测试只揭示了整数运算的结果.这个SO答案解释说,在硬件层面上,乘法是一个更复杂的操作,但我也意识到工程师在设计处理器时要记住这些事情.

其他有用的链接:

java algorithm double optimization performance

5
推荐指数
1
解决办法
954
查看次数