インテル® SSE およびインテル® AVX 世代 (SSE2、SSE3、SSSE3、ATOM_SSSE3、SSE4.1、SSE4.2、ATOM_SSE4.2、AVX、AVX2、AVX-512) 向けのインテル® コンパイラー・オプションとプロセッサー固有の最適化

同カテゴリーの次の記事

インテル® C++ コンパイラーでサポートされる C++11 の機能

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® Compiler Options for Intel® SSE and Intel® AVX generation (SSE2, SSE3, SSSE3, ATOM_SSSE3, SSE4.1, SSE4.2, ATOM_SSE4.2, AVX, AVX2, AVX-512) and processor-specific optimizations」の日本語参考訳です。


インテル® コンパイラーの IA-32 およびインテル® 64 プロセッサー向けオプションは?

3 種類のプロセッサー固有の最適化オプションがあります。

  1. /arch:<code> (Windows*) または -m<code> (Linux* および OS X*) プロセッサー固有オプションは、<code> で指定されたプロセッサー向けのコードを生成します。これらのプロセッサー固有のオプションにより生成された実行ファイルは、その命令セットをサポートしているインテル® プロセッサー、または互換プロセッサーで実行できます。プロセッサー固有の最適化が行われ、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) やインテル® アドバンスト・ベクトル・エクステンション (インテル® AVX) 命令セットを使用するため、対応する命令セットをサポートしていない古いプロセッサーでは、不正な命令などの例外が発生します。

    <code> には次の値を指定できます。

    CORE-AVX2 インテル® アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2)、インテル® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2、SSE 命令を生成します。/arch:core-avx2 は、Windows* ではサポートされますが、-mcore-avx2 は、Linux* と OS X* ではサポートされません (-march=core-avx2 を使用してください)。
    AVX インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。
    SSE4.2 インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。
    SSE4.1 インテル® SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。
    SSSE3 SSSE3、インテル® SSE3、SSE2 および SSE 命令を生成します。
    SSE3 インテル® SSE3、SSE2 および SSE 命令を生成します。
    SSE2 インテル® SSE2 および SSE 命令を生成します。/arch:SSE2 は Windows* のデフォルトで、-msse2 は Linux* のデフォルトです。
    IA32 汎用 IA-32 互換コードを生成します。/arch: または -m オプションとともに使用できます。(IA-32 コンパイラーのみ)。
  2. /Qx<code> (Windows*) または -x<code> (Linux* および OS X*) プロセッサー固有オプションは、<code> で指定されたプロセッサー向けのコードを生成します。これらのプロセッサー固有のオプションにより生成された実行ファイルは、プロセッサー固有の最適化が行われ、特定バージョンのインテル® ストリーミング SIMD 拡張命令 (インテル® SSE) やインテル® アドバンスト・ベクトル・エクステンション (インテル® AVX) 命令セットを使用するため、その命令セットをサポートしているインテル® プロセッサーでのみ実行できます。このオプションは、/arch:x<code> または -m<code> オプションで有効にならない一部の最適化を有効にします。互換性のないプロセッサーで実行した場合にアプリケーションを停止するランタイムチェックが実行ファイルに挿入されます。このチェックにより、対象外のプロセッサーを迅速に検出し、潜在的な不正命令エラーを回避します。このチェックが有効になるように、メインプログラムまたはダイナミック・ライブラリーのメイン関数を含むソースファイルは、このオプションを指定してコンパイルしてください。

    <code> には次の値を指定できます。

    COMMON-AVX512 インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、および CORE-AVX2 で有効になる命令を生成します。インテル® AVX-512 命令対応のインテル® プロセッサー向けに最適化します。コンパイラー 15 Update 2 以降のバージョンで利用できます。
    MIC-AVX512 インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、指数および逆数命令、プリフェッチ命令、および CORE-AVX2 で有効になる命令を生成します。インテル® AVX-512 命令対応のインテル® プロセッサー向けに最適化します。コンパイラー 14 Update 1 以降のバージョンで利用できます。
    CORE-AVX512 インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、クワッドワード命令、ダブルワード命令、ワード命令、バイト命令、ベクトル長拡張命令、および CORE-AVX2 で有効になる命令を生成します。インテル® AVX-512 命令対応のインテル® プロセッサー向けに最適化します。コンパイラー 15 Update 1 以降のバージョンで利用できます。
    CORE-AVX2 インテル® プロセッサー向けに、インテル® AVX2、インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。第 4 世代インテル® Core™ プロセッサーとインテル® Xeon® プロセッサー E3 v3 ファミリー向けに最適化します。コンパイラー 13 以降のバージョンで利用可能です。
    CORE-AVX-I インテル® プロセッサー向けに、第 3 世代インテル® Core™ プロセッサー向けの命令を含む、インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。第 3 世代インテル® Core™ プロセッサーとインテル® Xeon® プロセッサー E3 v3/E5 v2/E7 v2 ファミリー向けに最適化します。コンパイラー 12.1 以降のバージョンで利用可能です。
    AVX インテル® プロセッサー向けに、インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。第 2 世代インテル® Core™ i7/i5/i3 プロセッサー・ファミリーおよびインテル® Xeon® プロセッサー E5/E3 ファミリー向けに最適化します。
    SSE4.2 インテル® プロセッサー向けに、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。旧世代インテル® Core™ i7/i5/i3 プロセッサー・ファミリー、インテル® Xeon® プロセッサー 55XX/56XX/75XX シリーズおよびインテル® Xeon® プロセッサー E7 ファミリー向けに最適化します。
    ATOM_SSE4.2 インテル® プロセッサー向けに、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。/Qinstruction:movbe (-minstruction=movbe) オプションが設定されている場合は MOVBE 命令も生成します。インテル® SSE4.2 および MOVBE 命令をサポートしているインテル® Atom™ プロセッサー向けに最適化します。
    SSE4.1 インテル® プロセッサー向けに、インテル® SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。45nm Hi-k 世代インテル® Core™ プロセッサー向けに最適化します。
    SSSE3 インテル® プロセッサー向けに、SSSE3、インテル® SSE3、SSE2 および SSE 命令を生成します。インテル® Core™ マイクロアーキテクチャー向けに最適化します。-xssse3 は、OS X* のインテル® 64 コンパイラーのデフォルトです。
    ATOM_SSSE3 インテル® プロセッサー向けに、SSSE3、インテル® SSE3、SSE2 および SSE 命令を生成します。/Qinstruction:movbe (-minstruction=movbe) オプションが設定されている場合は MOVBE 命令も生成します。SSSE3 および MOVBE 命令をサポートしているインテル® Atom™ プロセッサー向けに最適化します。
    SSE3 インテル® SSE3、SSE2 および SSE 命令を生成します。拡張インテル® Pentium® M マイクロアーキテクチャーおよび Intel Netburst® マイクロアーキテクチャー向けに最適化します。-xsse3 は、OS X* の IA-32 コンパイラーのデフォルトです。
    SSE2 インテル® SSE2 および SSE 命令を生成します。Intel Netburst® マイクロアーキテクチャー向けに最適化します。
  3. /Qax<code> (Windows*) または -ax<code> (Linux* および OS X*) プロセッサー・ディスパッチ・オプションは、インテル® プロセッサー向けに複数のコードを生成します。プロセッサー・ディスパッチ・テクノロジーは、実行時にチェックを行ってアプリケーションを実行しているプロセッサーを検出し、そのプロセッサーに最適なコードを使用します。互換性のあるインテル以外のプロセッサーでは、デフォルトの最適化コードが使用されます。上記の 1 と 2 で説明したオプションを使用してデフォルトの最適化コードを変更できます。

    <code> には次の値を指定できます。

    COMMON-AVX512 インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、および CORE-AVX2 で有効になる命令を生成します。インテル® AVX-512 命令対応のインテル® プロセッサー向けに最適化します。コンパイラー 15 Update 2 以降のバージョンで利用できます。
    MIC-AVX512 インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、指数および逆数命令、プリフェッチ命令、および CORE-AVX2 で有効になる命令を生成します。インテル® AVX-512 命令対応のインテル® プロセッサー向けに最適化します。コンパイラー 14 Update 1 以降のバージョンで利用できます。
    CORE-AVX512 インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、クワッドワード命令、ダブルワード命令、ワード命令、バイト命令、ベクトル長拡張命令、および CORE-AVX2 で有効になる命令を生成します。インテル® AVX-512 命令対応のインテル® プロセッサー向けに最適化します。コンパイラー 15 Update 1 以降のバージョンで利用できます。
    CORE-AVX2 インテル® プロセッサー向けに、インテル® AVX2、インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。コンパイラー 13 以降のバージョンで利用可能です。
    CORE-AVX-I インテル® プロセッサー向けに、第 3 世代インテル® Core™ プロセッサー向けの命令を含む、インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。コンパイラー 12.1 以降のバージョンで利用可能です。
    AVX インテル® プロセッサー向けに、インテル® AVX、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。
    SSE4.2 インテル® プロセッサー向けに、インテル® SSE4.2、SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。
    SSE4.1 インテル® プロセッサー向けに、インテル® SSE4.1、SSSE3、SSE3、SSE2 および SSE 命令を生成します。
    SSSE3 インテル® プロセッサー向けに、SSSE3、インテル® SSE3、SSE2 および SSE 命令を生成します。
    SSE3 インテル® プロセッサー向けに、インテル® SSE3、SSE2 および SSE 命令を生成します。
    SSE2 インテル® プロセッサー向けに、インテル® SSE2 および SSE 命令を生成します。

プロセッサー固有のオプションは?

COMMON-AVX512 将来のインテル® プロセッサー
MIC-AVX512 将来のインテル® プロセッサー
CORE-AVX512 将来のインテル® プロセッサー
CORE-AVX2 第 4 世代インテル® Core™ プロセッサー
第 5 世代インテル® Core™ プロセッサー
第 6 世代インテル® Core™ プロセッサー
インテル® Xeon® プロセッサー E7 v3 ファミリー
インテル® Xeon® プロセッサー E5 v3 ファミリー
インテル® Xeon® プロセッサー E3 v3 ファミリー
インテル® Xeon® プロセッサー E3 v4 ファミリー
CORE-AVX-I 第 3 世代インテル® Core™ i7 プロセッサー
第 3 世代インテル® Core™ i5 プロセッサー
第 3 世代インテル® Core™ i3 プロセッサー
インテル® Xeon® プロセッサー E7 v2 ファミリー
インテル® Xeon® プロセッサー E5 v2 ファミリー
インテル® Xeon® プロセッサー E3 v2 ファミリー
AVX 第 2 世代インテル® Core™ i7 プロセッサー
第 2 世代インテル® Core™ i5 プロセッサー
第 2 世代インテル® Core™ i3 プロセッサー
インテル® Xeon® プロセッサー E5 ファミリー
インテル® Xeon® プロセッサー E3 ファミリー
SSE4.2 旧世代インテル® Core™ i7 プロセッサー
旧世代インテル® Core™ i5 プロセッサー
旧世代インテル® Core™ i3 プロセッサー
インテル® Xeon® プロセッサー 55XX シリーズ
インテル® Xeon® プロセッサー 56XX シリーズ
インテル® Xeon® プロセッサー 75XX シリーズ
インテル® Xeon® プロセッサー E7 ファミリー
ATOM_SSE4.2 インテル® Atom™ プロセッサー (インテル® SSE4.2 命令対応)
SSE4.1 インテル® Xeon® プロセッサー 74XX シリーズ
クアッドコア インテル® Xeon® プロセッサー 54XX/33XX シリーズ
デュアルコア インテル® Xeon® プロセッサー 52XX/31XX シリーズ
インテル® Core™2 Extreme プロセッサー 9XXX シリーズ
インテル® Core™2 Quad プロセッサー 9XXX シリーズ
インテル® Core™2 Duo プロセッサー 8XXX シリーズ
インテル® Core™ 2 Duo プロセッサー E7200
SSSE3 クアッドコア インテル® Xeon® プロセッサー 73XX/53XX/32XX シリーズ
デュアルコア インテル® Xeon® プロセッサー 72XX/53XX/51XX/30XX シリーズ
インテル® Core™2 Extreme プロセッサー 7XXX/6XXX シリーズ
インテル® Core™2 Quad プロセッサー 6XXX シリーズ
インテル® Core™2 Duo プロセッサー 7XXX (E7200 を除く)/6XXX/5XXX/4XXX シリーズ
インテル® Core™2 Solo プロセッサー 2XXX シリーズ
インテル® Pentium® デュアルコア・プロセッサー E2XXX/T23XX シリーズ
ATOM_SSSE3 インテル® Atom™ プロセッサー
SSE3 デュアルコア インテル® Xeon® プロセッサー 70XX/71XX/50XX シリーズ
デュアルコア インテル® Xeon® プロセッサー (超低電圧版および低電圧版) 1.66/2.0/2.16GHz
デュアルコア インテル® Xeon® プロセッサー 2.8GHz
インテル® Xeon® プロセッサー (SSE3 命令セット対応)
インテル® Core™ Duo プロセッサー
インテル® Core™ Solo プロセッサー
インテル® Pentium® デュアルコア・プロセッサー T21XX/T20XX シリーズ
インテル® Pentium® プロセッサー エクストリーム・エディション
インテル® Pentium® D プロセッサー
インテル® Pentium® 4 プロセッサー (SSE3 命令セット対応)
SSE2 インテル® Xeon® プロセッサー
インテル® Pentium® 4 プロセッサー
インテル® Pentium® M プロセッサー
IA32 インテル® Pentium® III プロセッサー
インテル® Pentium® II プロセッサー
インテル® Pentium® プロセッサー

デフォルトのプロセッサーは?

  • Windows* または Linux* の IA32 アーキテクチャーおよびインテル® 64 アーキテクチャー向けにコンパイルする場合は、/arch:SSE2 (Windows*) または -msse2 (Linux*) がデフォルトです。生成されるコードは、SSE2 をサポートしているインテル® Pentium 4 プロセッサーおよびインテル® Xeon® プロセッサー、あるいは SSE2 をサポートしている互換性のあるインテル以外のプロセッサーで実行できます。
  • OS X* の IA-32 アーキテクチャー向けにコンパイルする場合は、-xSSE3 がデフォルトです。コンパイラーは、インテル® SSE3、SSE2 および SSE 命令を生成し、コードは拡張インテル® Pentium® M マイクロアーキテクチャー向けに最適化されます。
  • OS X* のインテル® 64 アーキテクチャー向けにコンパイルする場合は、-xSSSE3 がデフォルトです。コンパイラーは、インテル® SSSE3、SSE3、SSE2 および SSE 命令を生成し、コードはインテル® Core™ マイクロアーキテクチャー向けに最適化されます。

インテル® Pentium® III プロセッサー・ベースのシステムのように、SSE2 命令をサポートしていない古い IA-32 システム向けには、/arch:ia32 (Windows*) または -mia32 (Linux*) オプションを使用します。

その他の古いプロセッサー向けオプションおよび上記の推奨オプションとの関連については、http://software.intel.com/en-us/articles/ia-32-and-intel-64-processor-targeting-overview (英語) を参照してください。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事