web-dev-qa-db-ja.com

-msse、-msse2、-mssse3、-msse4rtcのcflgssseオプションの違いは何ですか?とどのように決定するのですか?

GCC CFLAGSオプションの場合:-msse-msse2-mssse3-msse4-msse4.1-msse4.2。それらは排他的に使用できますか、それとも一緒に使用できますか?

私の理解では、どちらを設定するかは、プログラムが実行されるターゲットArchがそれをサポートしているかどうかによって異なりますが、これは正しいですか?

もしそうなら、どうすれば私のターゲットArchがサポートするsseを知ることができますか? Linuxでは/ proc/cpuinfoをcatしますが、MacまたはWindowsの場合はどうなりますか?

ありがとう!

18
yaya

-mスイッチは並行して使用でき、さらにそれらのいくつかはアーキテクチャまたは他のスイッチによって暗示されます。たとえば、x86_64のコードをビルドする場合、-msse -msse2は常に有効になっています。

システムで実行することを目的としたコードの場合は、-march=nativeを選択する必要があります。これにより、プロセッサで使用可能なものが選択されます。たとえば、Sandy Bridgeがある場合、これにより-msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mavxが有効になります。

使用する命令セットを詳細に指定する場合は、常に「最新」であるとは限らず、使用可能なもののみを使用する必要があります。 「最新の」プロセッサは現在-mavx2ですが、これはお勧めしません。これをサポートする最初のプロセッサは2013年に利用可能になります。

31
Gunther Piez