インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

ax、Qax

パフォーマンス上の利点がある場合、複数の機能固有の自動ディスパッチ・コードを生成するようにコンパイラーに指示します。

アーキテクチャーの制限

インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャー、インテル® グラフィックス・テクノロジーをターゲットとする IA-32 アーキテクチャー、またはインテル® グラフィックス・テクノロジーをターゲットとするインテル® 64 アーキテクチャーでは利用できません。

構文

Linux* および OS X*:

-axcode

Windows®:

/Qaxcode

引数

code

生成する命令セットを含む、ターゲット機能セットをコンパイラーに指示します。 次の説明は、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) および SSE 補足命令 (SSSE) についてです。 設定可能な値は以下のとおりです。

COMMON-AVX512

インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、および CORE-AVX2 で有効になる命令を生成します。

MIC-AVX512

インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、指数および逆数命令、プリフェッチ命令、および CORE-AVX2 で有効になる命令を生成します。

このキーワードは、Linux* および Windows® でのみ利用できます。

CORE-AVX512

インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の基本命令、競合検出命令、ダブルワードおよびクワッドワード命令、バイトおよびワード命令、ベクトル長の拡張、および CORE-AVX2 で有効になる命令を生成します。

CORE-AVX2

インテル® プロセッサー向けのインテル® アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2)、インテル® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2、SSE 命令を生成します。

CORE-AVX-I

インテル® プロセッサー向けの Float-16 変換命令および RDRND 命令、インテル® AVX、SSE4.2、SSE4.1、SSSE3、SSE3、SSE2、SSE 命令を生成します。

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 命令を生成します。 OS X* システムでは、このオプションはインテル® 64 アーキテクチャーでのみ利用できます。 これは、古いオプション T の後継オプションです。

SSE3

インテル® プロセッサー向けのインテル® SSE3、SSE2、SSE 命令を生成します。 OS X* システムでは、このオプションは IA-32 アーキテクチャーでのみ利用できます。

SSE2

インテル® プロセッサー向けのインテル® SSE2 および SSE 命令を生成します。 この値は、OS X* システムでは利用できません。

デフォルト

オフ

ディスパッチ・コードは生成されません。機能固有のコードが生成され、次のコンパイラー・オプションの設定で制御されます。

  • Linux*: -m および -x

  • Windows®: /arch および /Qx

  • OS X*: -x

説明

このオプションは、パフォーマンス上の利点がある場合、複数の機能固有の自動ディスパッチ・コードを生成するようにコンパイラーに指示します。 また、汎用コードも生成します。通常、インテルの機能固有の自動ディスパッチ・コードは汎用コードよりも最適化されます。 O3 などのその他のオプションは、汎用コードでどの程度の最適化を行うかを制御します。

汎用コードは、-m または -x (Linux* および OS X*) や /arch または /Qx (Windows®) で指定されたアーキテクチャーにより決まります。 [Q]x オプションのデフォルトは使用しているオペレーティング・システムに依存しますが、デフォルトよりも上位または下位のアーキテクチャーと最適化レベルを指定することもできます。 指定されるアーキテクチャーは、汎用コード向けの最小アーキテクチャーとなります。

[Q]ax オプションと [Q]x オプションの両方を指定すると、[Q]x オプションで指定された設定と互換性のあるインテル® プロセッサーでのみ実行できる汎用コードが生成されます。

-ax-m オプション (Linux* および OS X*) または /Qax/arch オプション (Windows®) の両方を指定すると、-m または /arch オプションで指定された設定と互換性のあるインテル以外のプロセッサーで実行できる汎用コードが生成されます。

-ax-march オプション (Linux* OS X*) または /Qax/arch オプション (Windows®) をの両方を指定すると、コンパイラーはインテル固有の命令を生成しません。

[Q]ax オプションは、指定した命令セットの機能を活用できる別の関数バージョンを生成できるかどうか検出するように、コンパイラーに指示します。

機能固有の関数バージョンを生成できることが判明した場合、コンパイラーはそれがパフォーマンスの向上につながるかどうかをチェックします。 パフォーマンスが向上すると判明した場合、コンパイラーは機能固有バージョンと汎用バージョンの関数を生成します。 プログラムの実行時に、使用されているインテル® プロセッサーに応じて、この 2 つのバージョンのどちらを実行するかが選択されます。 この方法により、プログラムは従来のプロセッサーやインテル以外のプロセッサーとの互換性を保ちながら、最新のインテル® プロセッサー上でパフォーマンスを大幅に向上できます。 インテル以外のプロセッサーは、常に汎用コードを実行します。

2 つ以上の機能の値を組み合わせて使用できます。 例えば、-axSSE4.1,SSSE3 (Linux* および OS X*) または /QaxSSE4.1,SSSE3 (Windows®) のように指定することができます。 ただし、以前のスタイル、古いオプション、および新しいオプションを組み合わせることはできません。 例えば、-axSSE4.1,T (Linux* および OS X*) または /QaxSSE4.1,T (Windows®) のように指定することはできません。

IDE オプション

Visual Studio®: [Optimization (最適化)] > [Generate Alternate Code Paths (指定された命令セットの専用及び汎用コード生成)]

Eclipse*: [Optimization (最適化)] > [Generate Alternate Code Paths (指定された命令セットの専用及び汎用コード生成)]

Xcode*: [Optimization (最適化)] > [Generate Alternate Code Paths (指定された命令セットの専用及び汎用コード生成)]

代替オプション

なし

最適化に関する注意事項

インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。

注意事項の改訂 #20110804

関連情報