cle*_*ong 5 c compiler-optimization
我的代码主要用于单精度浮点数.对超越函数的调用经常发生.现在,我正在使用sin(),cos(),sqrt()等 - 接受并返回的函数double.当它仅为x87编译时,我知道单精度和双精度之间没有区别.我在Agner Fog的优化指南中读到了这些使用SSE指令的函数的软件版本对于单精度浮点数更快.
我的问题是编译器在遇到类似的东西时是否会自动使用更快的函数:
float x = 1.23;
float y = sin(x);
Run Code Online (Sandbox Code Playgroud)
或者舍入规则是否排除了这样的优化?
只需进行搜索和替换就可以轻松查看是否有任何性能提升.麻烦的是我还需要指向这些功能的指针.在MSVC中,sinf(),cosf()和朋友是内联函数.因此,使用它们需要一些体操.在努力之前,我想知道它是否值得.
除了MSVC,我也瞄准了gcc.
调用时确实不需要强制转换sin。<tgmath.h>事实上,如果您使用C99 附带的标头,将会适得其反。这为您提供了类型通用宏,该宏将根据您的参数选择正确的函数,而不是不幸的是针对目标类型。因此,如果您使用该标头(不确定这是否适用于 MS)
float x = 1.23;
float y = sin(x);
Run Code Online (Sandbox Code Playgroud)
sinf会自动在引擎盖下使用。
| 归档时间: |
|
| 查看次数: |
2887 次 |
| 最近记录: |