ベクトル化のサンプル

サンプルでは、ベクトル化が可能またはベクトル化ができないループを示し、ベクトル化診断レポートの使用法について説明します。

サンプルは、IA-32 アーキテクチャーおよびインテル (R) 64 アーキテクチャーのみを対象としています。IA-64 アーキテクチャーではサンプルコードをコンパイルしないでください。

コンパイラーに付属しているその他のサンプルについては、「サンプル」を参照してください。

サンプルファイルと保存場所

ソース

場所

vec_sample.c

novec_sample.c

Linux* および Mac OS*

<install-dir>/samples/vec_samples/

Windows*

<install-dir>\samples\vec_samples\

説明

サンプルは実行バイナリーの生成を目的としていません。サンプルはコンパイラーがベクトル化を行う、または行わないループを示すために用意されています。

ベクトル化サンプルのコンパイル

サンプルのコンパイル時に -c (Linux および Mac OS) オプションまたは /c (Windows) オプションを含める必要があります。このサンプルでは、有効な実行ファイルは生成されません。

サンプルには、restrict キーワードが使用されているため、-restrict (Linux および Mac OS) または /restrict (Windows) オプションが必要です。

プラットフォーム

コマンド

Linux および Mac OS

icc -c -xPT -restrict -vec-report3 vec_sample.c

Windows

icl /Qstd=c99 /c /QxPT /Qrestrict /Qvec-report:3 vec_sample.c

上記のコンパイルコマンドには、-vec-report (Linux および Mac OS) オプションまたは /Qvec-report (Windows) オプションが含まれており、コンパイラーはベクトル化処理についてのステータスメッセージを生成します。次のサンプルの出力は、典型的なベクトル化診断メッセージです。

ベクトル化メッセージの例

vec_sample.c(72): (col. 3) remark: ループがベクトル化されました。

vec_sample.c(72): (col. 3) remark: ループはスキップされました。: 複数のバージョンがあります。

vec_sample.c(62): (col. 3) remark: ループがベクトル化されました。

vec_sample.c(62): (col. 3) remark: ループはスキップされました。: 複数のバージョンがあります。

vec_sample.c(54): (col. 3) remark: ループがベクトル化されました。

vec_sample.c(54): (col. 3) remark: ループはスキップされました。: 複数のバージョンがあります。

vec_sample.c(48): (col. 3) remark: ループがベクトル化されました。

vec_sample.c(41): (col. 3) remark: ループがベクトル化されました。

vec_sample.c(41): (col. 3) remark: ループはスキップされました。: 複数のバージョンがあります。

vec_sample.c(34): (col. 3) remark: ループがベクトル化されました。

vec_sample.c(34): (col. 3) remark: ループはスキップされました。: 複数のバージョンがあります。

非ベクトル化サンプルのコンパイル

サンプルのコンパイル時に -c (Linux および Mac OS) オプションまたは /c (Windows) オプションを含める必要があります。このサンプルでは、有効な実行ファイルは生成されません。

プラットフォーム

コマンド

Linux および Mac OS

icc -c -xPT  -vec-report3 novec_sample.c

Windows

icl /Qstd=c99 /c /QxPT /Qvec-report:3 novec_sample.c

次のサンプルの出力は、典型的なベクトル化診断メッセージです。

ベクトル化メッセージの例

novec_sample.c(67): (col. 19) remark: ループはベクトル化されませんでした。: トップテストが見つかりませんでした。

novec_sample.c(45): (col. 3) remark: ループはベクトル化されませんでした。: ベクトル依存関係が存在しています。

novec_sample.c(46): (col. 5) remark: ベクトル依存関係: FLOW の依存関係が y 行 46 と y 行 46 の間に証明されました。

novec_sample.c(35): (col. 3) remark: ループはベクトル化されませんでした。: 内部ループではありません。

novec_sample.c(36): (col. 5) remark: ループはベクトル化されませんでした。: 内部ループではありません。

novec_sample.c(38): (col. 7) remark: ループはベクトル化されませんでした。: ベクトル依存関係が存在しています。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: ANTI の依存関係が b 行 39 と c 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: FLOW の依存関係が c 行 39 と b 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: FLOW の依存関係が c 行 39 と b 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: ANTI の依存関係が b 行 39 と c 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: ANTI の依存関係が b 行 39 と c 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: FLOW の依存関係が c 行 39 と b 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: FLOW の依存関係が c 行 39 と b 行 39 の間に証明されました。

novec_sample.c(39): (col. 9) remark: ベクトル依存関係: ANTI の依存関係が a 行 39 と c 行 39 の間に証明されました。