この記事は、インテル® デベロッパー・ゾーンに掲載されている「Overview of Vectorization Reports and new vec-report6」(http://software.intel.com/en-us/articles/overview-of-vectorization-reports-and-new-vec-report6) の日本語参考訳です。
既存の –vec-report コンパイラー・オプション (レベル 0 から 5) は、以下のベクトル化レポートメッセージの出力を制御します。
- 成功: 「ループがベクトル化されました。」
- 失敗: 「ループはベクトル化されませんでした: << 失敗した理由 >>」
- 理由、依存関係情報: 「xx と yy 間の依存関係」
最も情報が少ないのは –vec-report0 (デフォルト) で、詳しいメッセージは出力されません。最も情報が多いのは –vec-report3 で、3 種類すべてのメッセージを出力します。
コンパイラー 13.0 では、レポート/カテゴリーの新しいレベルが追加されました。新しく追加されたレベル –vec-report6 は、-vec-report3 と同様の 3 種類すべてのメッセージに加えて、ベクトライザーからより詳細なメッセージを出力します。
-vec-report コンパイラー・オプションのヘルプ (http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-mac/GUID-3D61D83A-857D-49C3-A6C9-A1037BFA63CD.htm) を参照
例えば、–vec-report3 の出力メッセージは、「ループはベクトル化されませんでした: サポートされていないデータ型です。」 のようになります。–vec-report6 では、このメッセージに加えて、「ベクトル化のサポート: 型 TTT は演算 OOO ではサポートされていません。」と、より詳細なメッセージが出力されます。ユーザーは、出力されたメッセージに基づいて、データ型や演算子の変更を検討できます。
いくつかのサンプルメッセージを以下に示します。これらのメッセージは、プログラマーがベクトルコードの動作や失敗したベクトル化を理解するのに役立ちます。
foo0.c(8): (col. 12) リマーク: ループはベクトル化されませんでした: 文はベクトル化できません。
foo0.c(8): (col. 12) リマーク: ベクトル化のサポート: 関数 bar の呼び出しはベクトル化できません。
foo1.c(8): (col. 3) リマーク: ループがベクトル化されました。
foo1.c(8): (col. 3) リマーク: ベクトル化のサポート: アンロールファクターが 4 に設定されます。ベクトル化のサポート: ループ本体内でアラインされていないアクセスが使用されました。
ベクトル化のサポート: 関数 %s の呼び出しはベクトル化できません。
ベクトル化のサポート: 指定された fp モデルでは関数 %s の呼び出しはベクトル化できません。
ベクトル化のサポート: 変数 <<変数名>> の割り当てはベクトル化できません。
ベクトル化のサポート: サポートされていないリダクション <<演算>> です。
ベクトル化のサポート: 積の単精度の商と変換後の倍精度のベクトル化は安全ではありません。
ベクトル化のサポート: ベクトル全体がスカラー型です。
ベクトル化のサポート: 参照 %s にアラインされたアクセスが含まれています。
ベクトル化のサポート: 参照 %s にアラインされていないアクセスが含まれています。
ベクトル化のサポート: このループを -Os でベクトル化するとコードサイズに影響があります。
ベクトル化のサポート: %s
ベクトル化のサポート: アンロールファクターが %s に設定されます。
ベクトル化のサポート: 型 long long は指定されたターゲット・アーキテクチャーのインデックスとしてサポートされていません。
ベクトル化のサポート: 型 char は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 short は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 int は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 long long は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 float は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 double は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 complex float は演算 %s ではサポートされていません。
ベクトル化のサポート: 型 complex double は演算 %s ではサポートされていません。
ベクトル化のサポート: アラインされていない %s はスカラー化されます。
ベクトル化のサポート: int から float への変換はエミュレートされます。
ベクトル化のサポート: float から int への変換はエミュレートされます。
ベクトル化のサポート: %s のストリーミング・ストアが生成されました。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。