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

vecabi、Qvecabi

ベクトル関数の作成および呼び出し時に、コンパイラーが使用するアプリケーション・バイナリー・インターフェイス (ABI) を指定します。

構文

Linux* および macOS*:

-vecabi=keyword

Windows*:

/Qvecabi:keyword

引数

keyword

使用するベクトル関数のアプリケーション・バイナリー・インターフェイス (ABI) を指定します。設定可能な値は以下のとおりです。

compat

互換性のあるベクトル関数の ABI を使用します。この ABI には、インテル固有の機能が含まれます。

cmdtarget

ベクトル関数の拡張セットを生成します。compat を設定するのと似ています。ただし、compat では 1 つのベクトル関数のみ作成されますが、cmdtarget では vector 属性ごとに複数のベクトル関数が作成されます。[Q]x[Q]ax コンパイラー・オプションで指定したターゲット向けにベクトルバージョンが作成されます。ソースコードは変更されません。

gcc

gcc ベクトル関数の ABI を使用します。gcc でコンパイルしたモジュールをリンクする場合のみこの設定を使用します。この設定は、Windows* システムでは利用できません。

legacy

レガシーベクトル関数の ABI を使用します。この設定は、生成されたベクトル関数のバイナリーが、インテル® コンパイラーの古いバージョン (13.1 以前) で生成されたベクトル化されたバイナリーと下位互換性を保持する必要がある場合に使用します。

デフォルト

compat

互換性のあるベクトル関数の ABI を使用します。

説明

このオプションは、ベクトル関数の作成および呼び出し時に、コンパイラーが使用するアプリケーション・バイナリー・インターフェイス (ABI) を指定します。

リンク時または実行時の問題を回避するには、ライブラリーを含むベクトル関数を定義または使用するアプリケーションのすべてのファイルをコンパイルするときに [Q]vecabi 設定を使用します。cmdtarget を指定する場合、[Q]x オプションと [Q]ax オプションの値が同じでなければなりません。

再コンパイルできないベクトル関数定義を含むライブラリーまたはプログラムモジュール/ルーチンで cmdtarget 設定を使用する場合は注意が必要です。cmdtarget を指定することで、リンクエラーが発生することがあります。

Linux* では、デフォルトが compat のため、生成されるベクトル関数のバイナリーが以前のバージョンのインテル® コンパイラーによってベクトル化されたバイナリーと下位互換性を保持しなければならない場合、legacy を指定する必要があります。

cmdtarget を指定すると、各 vector 属性 をコピーし、ターゲット・プロセッサーを変更して、追加のベクトル関数バージョンが作成されます。ベクトル関数の数は、[Q]x[Q]ax オプションの設定によって決定されます。

例えば、次の関数宣言について考えてみます。

__declspec (vector(processor(core_2_duo_sse4_1))) int foo(int a);

次のオプションを指定します: -axAVX,CORE-AVX2

以下に、compat または cmdtarget 設定を使用した場合の結果を示します。

compat

cmdtarget

(vector 属性 によって) インテル® SSE4.1 向けのベクトルバージョンが 1 つ作成されます。

次のターゲット向けの 4 つのベクトルバージョンが作成されます。

  • インテル® SSE2 (-x オプションが指定されていないため、デフォルト)

  • インテル® SSE4.1 (vector 属性によって作成される)

  • インテル® AVX (1 つ目の -ax オプションの値によって作成される)

  • インテル® AVX2 (2 つ目の -ax オプションの値によって作成される)

インテル互換のベクトル関数 ABI の詳細については、「Vector (SIMD) Function ABI」(https://software.intel.com/en-us/articles/vector-simd-function-abi/ (英語)) を参照してください。

GCC ベクトル関数 ABI の詳細については、sourceware.org の GLIBC wiki にある Libmvec - vector math library ドキュメント (英語) を参照してください。

IDE オプション

なし

代替オプション

なし

最適化に関する注意事項

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

注意事項の改訂 #20110804