2012-07-19 119 views
2

我有一個關於在GCC上編譯x264版本的問題。在ASM SSSE3代碼的存在下,我應該使用-mssse3進行編譯嗎?

x264具有處理指令集(如SSE3和SSSE3)的彙編代碼,默認情況下在makefile中禁用自動矢量化。

無論如何我應該用-mssse3標誌編譯它還是可能實際上導致性能損失?

而且-mssse3暗示-msse3或SSE3是否與SSSE3分開?

+0

對最後一部分的回答是肯定的,'-mssse3'意味着'-msse3'。通常對於所有不同級別的SSE都是如此,即級別N意味着直到N的所有級別。 – 2012-07-19 11:22:50

回答

1

標誌告訴編譯器在它生成的代碼中使用什麼指令。它不會影響內聯彙編,而彙編程序會直接進一步傳遞給彙編程序,而不會影響彙編(.s)文件單獨編譯。使用SSSE3進行編譯並且不使用自動矢量化是沒有意義的,因爲SSE全是關於向量化的,儘管它也可以用來執行標量浮點運算。

+0

不一定 - 編譯器標誌還設置預定義的宏,例如, '-msse3'通常會導致'__SSE__','__SSE2__'和'__SSE3__'被定義,所以如果在項目中有適當的'#ifdef''d代碼,那麼這將被編譯或不被編譯器開關。 – 2012-07-19 13:18:26

+0

我的觀點是,使用SSSE3指令而不指定'-mssse3'的內聯彙編編譯代碼並不是錯誤。當然,ISA標誌可能會影響條件編譯,但不會在運行時檢測到CPU時(如大多數編解碼器的情況)。 – 2012-07-19 13:28:09

相關問題