小编Al *_*och的帖子

如何确保在gcc中内联lrint?

在阅读了主题之后,来自众多来源的绝大多数证据表明,在英特尔上使用标准C或C++转换从浮点转换为整数是非常缓慢的.为了满足ANSI/ISO规范,Intel CPU需要执行大量指令,包括切换FPU硬件的舍入模式所需的指令.

各种文档中描述了许多变通方法,但最干净,最便携的似乎是添加到C99和C++ 0x标准的lrint()调用.许多文档都说编译器应该在启用优化时内联扩展这些函数,从而导致代码比传统的强制转换或函数调用更快.

我甚至发现了对gcc特征跟踪包的引用,将这个内联扩展添加到gcc优化器中,但在我自己的性能测试中,我无法让它工作.我所有的尝试都表明lrint性能要比简单的C或C++样式转换慢得多.检查编译器的程序集输出,并反汇编编译对象始终显示对外部lrint()或lrintf()函数的显式调用.

我一直在使用的gcc版本是4.4.3和4.6.1,我在32位和64位x86目标上尝试了许多标志组合,包括明确启用SSE的选项.

如何让gcc内联扩展lrint,并给我快速转换?

c c++ gcc c99

12
推荐指数
1
解决办法
876
查看次数

标签 统计

c ×1

c++ ×1

c99 ×1

gcc ×1