この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® Advisor: Vectorization Advisor Glossary」(https://software.intel.com/en-us/articles/advisor-vectorization-advisor-glossary) の日本語参考訳です。
インテル® Advisor は、Fortran、C および C++ ネイティブ/マネージド・アプリケーションがインテル® Xeon Phi™ プロセッサーなど現代のプロセッサーの潜在的なパフォーマンスをフルに引き出すことを支援する 2 つの設計ツールを提供します。
- スレッド化アドバイザーは、通常の開発作業を中断することなくスレッドの解析、チューニング、設計のチェックを可能にするスレッドの設計とプロトタイプ化ツールです。
- ベクトル化アドバイザーは、ベクトル化により恩恵を得られるループを特定し、効率よいベクトル化を妨げる原因を特定して、代替えのデータ再構成を探し出し、そしてベクトル化の安全性を高めるツールです。
以下にベクトル化アドバイザーの用語集を示します。この用語集は継続して更新されます。
FMA: 乗算と加算の融合命令。パフォーマンスを向上させ、浮動小数点計算の精度を高めます。簡単な構文:A = +A * B + C。これらの命令はステップ実行されないため高速であり、さらに計算の中間結果が無限精度として扱われ、丸めはストア時に一度だけ行われるため高い精度を持ちます。
ICC: Linux* プラットフォーム上でインテル® C コンパイラーを起動するコマンド。しばしばコンパイラーを示す略語として使用されます。
ICL: Microsoft* Windows* プラットフォーム上でインテル® C/C++ コンパイラーを起動するコマンド。しばしばコンパイラーを示す略語として使用されます。
ICPC: Linux* プラットフォーム上でインテル® C++ コンパイラーを起動するコマンド。しばしばコンパイラーを示す略語として使用されます。
IFORT: Linux* と Windows* プラットフォーム上でインテル® Fortran コンパイラーを起動するコマンド。しばしばコンパイラーを示す略語として使用されます。
SIMD: 単一命令複数データ (Single-instruction-multiple-data) の略。(配列要素など) 複数のデータ要素に対し同じ操作を実行するプロセッサー命令。
アンロール: ループの本体を複製することで、分岐のオーバーヘッドと実行すべきループの反復回数を減らす最適化です。完全なアンロールでは、反復しないようにループ本体が完全に複製されます。サイズ n の部分的なアンロールは、ループの本体を n 回複製して、ループ反復回数を元のループの 1/n にします。
スピル (退避): 変数をレジスターからメインメモリーへ移動 (退避) すること。スピル (退避) された変数は、リード/ライト操作のたびにメインメモリーからロード (復帰) する必要があるため、パフォーマンスが低下します。
ディレクティブ: コンパイラーが入力をどのように処理すべきかを指示するプログラミング言語構造。C/C++ プラグマと同様。
トリップカウント (反復数): ループの本体が実行された回数 (反復数)。反復カウントと同義 (インテル® コンパイラーのドキュメントではループカウントと呼ばれることもあります)。
ピールループ: ループ本体のメモリーアクセスをアライメントし効率を最大化するため、コンパイラーによって生成される小さなループ。コンパイラーは、最初の反復のアライメントされていないアクセスをピールオフ (皮むき) して、残りの反復で適切にアライメントされたメモリーアクセスができるようにします。ピールループのトリップカウントはベクトル長より小さくなります。
フィル (復帰): 変数の内容をメインメモリーからレジスターへ移動すること。より高いパフォーマンスを求めるには、変数をメインメモリーではなくレジスターに保持して使用します。
ベクトル化: SIMD 命令を実行することで、プロセッサーのベクトル・ハードウェアの利点を活用するコードを生成すること。
ベクトル長: 同じ操作で処理できる要素数。理想的なベクトル長 = ベクトルレジスター幅 (ビット) ÷ データ型サイズ (ビット)。
ベクトルレジスター幅: ベクトルレジスターで処理されるビット数。インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) 命令は 128 ビット・レジスターを操作します。インテル® アドバンスト・ベクトル・エクステンション (インテル® AVX) 命令は 256 ビット・レジスターを操作します。インテル® メニー・インテグレーテッド・コア (インテル® MIC) 命令とインテル® AVX-512 命令は 512 ビット・レジスターを操作します。
リマインダー・ループ: ループ本体のスコープに収まらない残りのループ反復を処理するため、コンパイラーによって生成されるループ。コンパイラーは、一般にソースループのトリップカウントがベクトル長の倍数でない場合にリマインダー・ループを生成します。
ループ本体: (通常) ソースコードのループからコンパイラーが生成したベクトル化されたループ。カーネルループと同義。
レジスターへの圧力: 変数を割り当てる適切な数のレジスターが不足する状態。高いレジスターへの圧力はレジスターのスピル (退避) につながります。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。