我正在尝试让GCC(或clang)在计算密集型的科学应用程序中始终使用SSE指令来进行sqrt运算,而不是使用math库函数。我已经尝试了各种32位和64位OS X和Linux系统上的GCCs。我确保使用-mfpmath = sse(和-march = core2,以满足GCC在32位上使用-mfpmath = sse的要求)。我还使用了-O3。根据GCC或clang版本的不同,生成的汇编代码并不总是一致地使用SSE的sqrtss。在某些版本的GCC中,所有的sqrtss都使用该指令。在其他情况下,则混合使用sqrtss和调用math库函数。有没有方法可以提示或强制编译器只使用SSE指令呢?
sqrtss
是符合IEEE-754标准的单精度平方根。也许你想说的是rsqrtss
,它是一种快速的近似倒数平方根。 - Stephen Canonsqrtss
是来自原始的SSE扩展。 - Stephen Canonsqrtss
也是用于32位浮点数的。因此,应该将其与sqrtf
进行比较。这仅在C99中包含,而不是在c89中似乎没有。 - Jens Gustedt