【发布时间】:2013-04-23 20:51:12
【问题描述】:
我的代码主要处理单精度浮点数。对超越函数的调用经常发生。现在,我正在使用 sin()、cos()、sqrt() 等——接受和返回double 的函数。当它只为 x87 编译时,我知道单精度和双精度之间没有区别。我阅读了 Agner Fog 的优化指南,但是这些函数的软件版本使用 SSE 指令对于单精度浮点数来说更快。
我的问题是编译器在遇到类似以下情况时是否会自动使用更快的函数:
float x = 1.23;
float y = sin(x);
或者舍入规则是否排除了这种优化?
只需进行搜索和替换并查看是否有任何性能提升就很容易了。麻烦的是我还需要指向这些函数的指针。在 MSVC 中,sinf()、cosf() 和友元是内联函数。因此,使用它们需要一些体操。在努力之前,我想知道它是否值得。
除了 MSVC,我还针对 gcc。
【问题讨论】:
-
您确定对这些函数的调用确实会减慢速度并值得浪费时间思考吗?您是否对代码进行了概要分析?