簡體   English   中英

確保編譯器始終使用SSE sqrt指令

[英]Ensure compiler always use SSE sqrt instruction

我正在嘗試讓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指令?

使用sqrtss內在__builtin_ia32_sqrtss

你應該小心使用它,你可能知道它的精確度較低。 這就是gcc沒有系統地使用它的原因。

在英特爾的SSE手冊中甚至提到了一個技巧(我希望我沒記錯)。 sqrtss的結果只是遠離目標的一次Heron迭代。 也許gcc有時能夠在某些時候(版本) inline周圍的簡短迭代,而對於其他人則不能。

您可以使用內置的MSN說,但您應該明確查看INTEL網站上的規格,以了解您的交易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM