2012-05-21 99 views
16

對於GCC CFLAGS選項:-msse-msse2,-mssse3,-msse4,-msse4.1,-msse4.2。它們是獨家使用還是可以一起使用?-msse,-msse2,-mssse3,-msse4 rtc的cflgs sse選項有什麼不同?以及如何確定?

我的理解是,它設置選擇取決於是否達到了目標拱,該程序將運行,支持與否,這是正確的?

如果是這樣,我怎麼會知道我的SSE目標拱支持?在Linux中,我使用cat/proc/cpuinfo,但是如果使用mac或Windows?

謝謝!

+0

SSE指令已得到增強/修改了CPU的各代的第一個處理器。編譯一個4.2目標將排除使用舊代生成的代碼。 –

+0

謝謝你的第一個回覆。所以我應該選擇什麼?只是最新的一個(是--msse4.2)? – yaya

+0

除非您有特定的SIMD要求,否則只需編譯最低公分母即可省略-msse開關。 –

回答

27

-m切換可以並行地使用,此外它們中的一些由所述體系結構或其它開關暗示。例如,如果您爲x86_64構建代碼,則始終啓用-msse -msse2

對於代碼意在你的系統上運行,你應該選擇-march=native,這將選擇什麼是可用的處理器上。例如,如果你有一個Sandy Bridge,這將啓用-msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx

如果你想在指令集使用詳細地指出,你應該只使用什麼是可用的,並不總是「最新」。 「最新」,一個是目前-mavx2,我不建議:將支持它將於2013年

+0

'msse4'有什麼意義?據我所知它和'msse4.2'是一樣的。也許它會創建一個宏__SSE4__?這似乎只是造成混亂。 –

+0

@Zboson我不知道重點是什麼。你應該問在gcc郵件列表上,確實沒有任何區別(但?)。你可以用'gcc -dM -E -msse4.2 - 1; gcc -dM -E -msse4 - 2; diff 1 2' – hirschhornsalz

相關問題