代码之家  ›  专栏  ›  技术社区  ›  arsenm

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

  •  4
  • arsenm  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  4
  •   MSN    15 年前

    使用 sqrtss 内在的 __builtin_ia32_sqrtss ?

        2
  •  0
  •   Jens Gustedt    15 年前

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

    甚至在英特尔的SSE手册中也提到了一个技巧(我希望我记得正确)。结果 sqrtss 只有一个 苍鹭 迭代远离目标。也许海湾合作委员会有时能够 inline 在某些点(版本)围绕着简短的迭代,而对于其他点(版本)则不是。

    你可以像msn所说的那样使用builtin,但是你必须在intel的网站上明确地查找规格以了解你在做什么。