-x (Linux* および Mac OS* X) オプションまたは /Qx (Windows*) オプションでは、IA-32 アーキテクチャーおよびインテル(R) 64 アーキテクチャーをベースにした特定のインテル(R) プロセッサー向けのアプリケーションの最適化 を自動で行うことができます。
自動で行う最適化では、それぞれのアーキテクチャーの特長、新しい命令セットやプロセッサー・デザインの新機能を活かすことができます。ただし、作成された最適化コードには、ほかのプロセッサーや以前のプロセッサーではサポートされていない機能が含まれていることがあります。そのため、これらのオプションを使用することで、アプリケーションの最小ハードウェア要件を効率良く設定することができます。
最適化では、インテル(R) ストリーミング SIMD 拡張命令 4 (SSE4)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3)、ストリーミング SIMD 拡張命令 3 (SSE3)、ストリーミング SIMD 拡張命令 2 (SSE2)、またはストリーミング SIMD 拡張命令 (SSE) の各命令セットが生成されます。
IA-32 アーキテクチャーまたはインテル(R) 64 アーキテクチャーをベースとした複数のプロセッサーでプログラムを実行する場合は、このオプションは使用しないでください。代わりに -ax (Linux および Mac OS X) オプションまたは /Qax (Windows) オプションを使用すると、プロセッサー固有のパフォーマンス・ゲインと、異なるプロセッサー間の移植性の両方を確保することができます。
Linux OS および Mac OS X |
Windows OS |
説明 |
---|---|---|
-xHost |
/QxHost |
コンパイルを行うホスト・プロセッサーで利用可能な最上位の命令セット向けのコードを生成します。 |
-xAVX |
/QxAVX |
インテル(R) Advanced Vector Extensions (インテル(R) AVX) をサポートするインテル(R) プロセッサー向けに最適化します。(11.0 では未サポート) |
-xSSE4.1 |
/QxSSE4.1 |
インテル(R) SSE4 ベクトル化コンパイラーとメディア・アクセラレーター命令をインテル(R) プロセッサー向けに生成します。インテル(R) SSSE3、SSE3、SSE2、SSE 命令を生成します。また、インテル(R) 45nm Hi-k 次世代 インテル(R) Core(TM) マイクロアーキテクチャー・プロセッサー向けに最適化します。このオプションは、推奨されていない値 S の代わりに使用します。 |
-xSSE4.2 |
/QxSSE4.2 |
インテル(R) Core(TM) i7 プロセッサーでサポートされているインテル(R) SSE4 高効率および高速な文字列処理命令を生成します。インテル(R) SSE4 ベクトル化コンパイラー命令およびメディア・アクセラレーター命令、インテル(R) SSSE3、SSE3、SSE2、SSE 命令を生成します。また、インテル(R) Core(TM) プロセッサー・ファミリー向けに最適化します。 |
-xSSE3_ATOM |
/QxSSE3_ATOM |
インテル(R) プロセッサー向けに MOVBE 命令を生成します。また、インテル(R) Atom(TM) プロセッサーとインテル(R) Centrino(R) Atom(TM) プロセッサー・テクノロジー向けに最適化します。 |
-xSSSE3 |
/QxSSSE3 |
インテル(R) プロセッサー向けにインテル(R) SSSE3、SSE3、SSE2、および SSE 命令を生成します。また、インテル(R) Core(TM)2 Duo プロセッサー・ファミリー向けに最適化します。このオプションは、推奨されていない値 T の代わりに使用します。 |
-xSSE3 |
/QxSSE3 |
インテル(R) SSE3、SSE2、および SSE 命令を生成します。また、インテル(R) Core(TM) マイクロアーキテクチャーおよび Intel NetBurst(R) マイクロアーキテクチャーをベースとするインテル(R) プロセッサー向けに最適化します。このオプションは、推奨されていない値 P の代わりに使用します。 Mac OS X: IA-32 アーキテクチャーでサポートされています。 |
-xSSE2 |
/QxSSE2 |
インテル(R) プロセッサー向けにインテル(R) SSE2 および SSE 命令を生成します。また、インテル(R) Pentium(R) 4 プロセッサー、インテル(R) Pentium(R) M プロセッサー、およびインテル(R) SSE2 対応インテル(R) Xeon(R) プロセッサー向けに最適化します。 Mac OS X: サポートされていません。 |
コンパイラー・オプション -m と /arch の特定のキーワードを使用して生成されるバイナリーは、対象となるインテル(R) プロセッサーと同じ機能を実装したインテル以外のプロセッサーでも動作します。詳細は、「コンパイラー・オプション」を参照してください。
プログラム実行中の不正な命令や、同様の予期しない実行エラーを防ぐために、コンパイラーは正しいプロセッサーが使用されていることをチェックするコードをメインルーチンに挿入します。このオプションを指定すると、最小プロセッサー・レベルに制限します。例えば、インテル(R) Core(TM) マイクロアーキテクチャー・ベースのインテル(R) Xeon(R) プロセッサーで実行されるアプリケーションを対象にすると、それ以前のインテル(R) プロセッサーでは正常に動作しないでしょう。
複数の processor 値をターゲットにすると、コンパイラーにより利点があると判断された場合に最も性能の高いプロセッサー向けにコードが生成されます。性能の高い processor 値から順に以下に示します。
SSE4.1
SSSE3
SSE3
SSE2
サポートされていないプロセッサーで、processor 値 SSE4.1、SSSE3、SSE3、または SSE2 でコンパイルされたプログラムを実行すると、ランタイムエラーが表示されます。例えば、processor 値に SSSE3 を指定してアプリケーションをコンパイルし、インテル(R) Pentium(R) 4 プロセッサーでアプリケーションを実行すると、次のようなエラーメッセージが表示されます。
ランタイムエラー |
---|
致命的なエラー: このプログラムは現在のシステムのプロセッサーで実行するようにビルドされていません。 許可されているプロセッサーはインテル(R) Core(TM) Duo プロセッサーおよび SSE3 補足命令 (Supplemental Streaming SIMD Extensions 3) に対応した互換性のあるインテル(R) プロセッサーです。 |
次の例は、インテル(R) Core(TM)2 Duo プロセッサーと互換性のあるプロセッサー向けにアプリケーションをコンパイルする方法を示します。生成されるバイナリーは以前のプロセッサーまたはインテル製以外の IA-32 プロセッサーでは正しく実行されないことがあります。
オペレーティング・システム |
例 |
---|---|
Linux および Mac OS X |
ifort -xSSSE3 sample.f90 |
Windows |
ifort /QxSSSE3 sample.f90 |