インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ベクトル関数の作成および呼び出し時に、コンパイラーが使用するアプリケーション・バイナリー・インターフェイス (ABI) を指定します。
Linux* および macOS*: | -vecabi=keyword |
Windows*: | /Qvecabi:keyword |
keyword |
使用するベクトル関数のアプリケーション・バイナリー・インターフェイス (ABI) を指定します。設定可能な値は以下のとおりです。
|
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 つのベクトルバージョンが作成されます。
|
インテル互換のベクトル関数 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 ドキュメント (英語) を参照してください。
なし
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |