确保编译器始终使用SSE sqrt指令

时间:2010-07-15 19:53:36

标签: c math gcc sse

我正在尝试让GCC(或clang)始终对sqrt使用SSE指令而不是计算密集型科学应用程序的数学库函数。我在各种32位和64位OS X和Linux系统上尝试了各种GCC。我确保使用-mfpmath = sse启用sse(和-march = core2以满足GCC要求在32位上使用-mfpmath = sse)。我也在使用-O3。根据GCC或clang版本,生成的程序集不会始终使用SSE的sqrtss。在某些版本的GCC中,所有sqrts都使用该指令。在其他情况下,sqrtss混合使用并调用数学库函数。有没有办法给出提示或强制编译器只使用SSE指令?

2 个答案:

答案 0 :(得分:4)

使用sqrtss内在__builtin_ia32_sqrtss

答案 1 :(得分:0)

你应该小心使用它,你可能知道它的精确度较低。这就是gcc没有系统地使用它的原因。

在INTEL的SSE手册中甚至提到了一个技巧(我希望我没记错)。 sqrtss的结果只是远离目标的一个 Heron 迭代。也许gcc有时能够inline在某些点(版本)周围进行简短的迭代,而对于其他人则不能。{/ p>

您可以使用内置的MSN说,但您应该明确查看INTEL网站上的规格,以了解您的交易。