サンプルでは、ベクトル化が可能またはベクトル化ができないループを示し、ベクトル化診断レポートの使用法について説明します。
サンプルは、IA-32 アーキテクチャーおよびインテル (R) 64 アーキテクチャーのみを対象としています。IA-64 アーキテクチャーではサンプルコードをコンパイルしないでください。
コンパイラーに付属しているその他のサンプルについては、「サンプル」を参照してください。
ソース |
場所 | ||||
---|---|---|---|---|---|
vec_sample.c novec_sample.c |
|
サンプルは実行バイナリーの生成を目的としていません。サンプルはコンパイラーがベクトル化を行う、または行わないループを示すために用意されています。
サンプルのコンパイル時に -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 の間に証明されました。 |