GCC CFLAGS
オプションの場合:-msse
、-msse2
、-mssse3
、-msse4
、-msse4.1
、-msse4.2
。それらは排他的に使用できますか、それとも一緒に使用できますか?
私の理解では、どちらを設定するかは、プログラムが実行されるターゲットArchがそれをサポートしているかどうかによって異なりますが、これは正しいですか?
もしそうなら、どうすれば私のターゲットArchがサポートするsseを知ることができますか? Linuxでは/ proc/cpuinfoをcatしますが、MacまたはWindowsの場合はどうなりますか?
ありがとう!
-m
スイッチは並行して使用でき、さらにそれらのいくつかはアーキテクチャまたは他のスイッチによって暗示されます。たとえば、x86_64のコードをビルドする場合、-msse -msse2
は常に有効になっています。
システムで実行することを目的としたコードの場合は、-march=native
を選択する必要があります。これにより、プロセッサで使用可能なものが選択されます。たとえば、Sandy Bridgeがある場合、これにより-msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx
が有効になります。
使用する命令セットを詳細に指定する場合は、常に「最新」であるとは限らず、使用可能なもののみを使用する必要があります。 「最新の」プロセッサは現在-mavx2
ですが、これはお勧めしません。これをサポートする最初のプロセッサは2013年に利用可能になります。