Low (低)
サーベイ
ベクトル化とコードの調査パースペクティブを低い精度で実行すると、基本的なベクトル化レポートが表示されます。このレポートには、ベクトル化できないループ、ベクトル化されていないループ、およびその他のパフォーマンスの問題が示されます。
サーベイレポートの場合:
[Self-Time (セルフ時間)] や [Total-Time (合計時間)] カラムをソートして、最も時間を費やしているループを特定します。 
ターゲットのループまたは関数が、ベクトルであるかスカラーであるか確認します。インテル® Advisor は、次のアイコンでベクトルか、スカラーかを区別します。
- ベクトル化された関数
- ベクトル化されたループ
- スカラー関数
- スカラーループ
フィルター機能を使用してここでは注目しないコードを非表示にします:
と 
調査するループまたは関数を決定します。
ループ/関数がスカラーである場合
ループ/関数がベクトル化されている場合
ターゲットのループ/関数がスカラーである場合 (
または
)、コンパイラーがそのループ/関数をベクトル化できなかった原因を調査します。
次のような理由が考えられます。
以下に示すディレクティブの詳細については、インテル® oneAPI DPC++/C++ コンパイラー開発者ガイドおよびリファレンスの OpenMP* プラグマの概要 (英語) をご覧ください。
| 考えられる理由 | 確認すること | 操作 |
|---|---|---|
依存関係が想定される |
[Why No Vectorization? (ベクトル化できない理由)] カラムを参照します。[Vector dependence prevents vectorization (ベクトルの依存関係がベクトル化を妨げています)] を検索します。 |
Dependencies analysis (依存関係解析) を実行します。
|
ループ内の関数呼び出し |
[Why No Vectorization? (ベクトル化できない理由)] カラムを参照します。次の問題を探します。
|
問題がある場合: [Function call present (関数呼び出しがあります)] 問題の場合、次のいずれかを行います。
問題が [Indirect function call present (間接関数呼び出しがあります)] または [Serialized user function call present (シリアル化されたユーザー定義関数があります)] である場合、[Recommendations (推奨事項)] タブのガイドラインを参照します。 |
コンパイラーが非効率なベクトル化を仮定 |
[Why No Vectorization? (ベクトル化できない理由)] カラムを参照します。[Loop vectorization possible but seems inefficient (ループのベクトル化は可能ですが非効率)] を探します。 |
omp simd ディレクティブでベクトル化を強制します。 ベクトル化の強制により効果が得られない場合、その他のディレクティブを試してみてください。 パフォーマンスへの影響とスピードアップの可能性を理解するため、追加の解析を行うことを検討してください。
|
その他 |
次を参照します。
|
問題を解決するため、コンパイラーの診断の詳細とインテル® Advisor の推奨事項を参照します。 |
ターゲットループがベクトル化されている場合 (
や
)、ベクトル化効率が 90% 以上であることを確認します。
効率が 90% 未満であれば次を検討します。
| 考えられる理由 | 確認すること | 操作 |
|---|---|---|
ISA |
[Vectorized Loops/Vector ISA (ベクトル化されたループ/ベクトル ISA)] カラムを参照し、アプリケーションで使用されている ISA を確認します。 |
適切なコンパイラー・オプションを指定してターゲットの ISA を変更します。 |
非効率なピール/リマインダー |
[Vector Issues (ベクトル化の問題)] カラムを参照します。[Inefficient Peel/Reminder (非効率なピール/リマインダー)] の問題を探します。または、極端に時間を費やしているピール/リマインダーをクリックします。 |
問題を解決します。
|
非効率なメモリー・アクセス・パターンの可能性 |
[Vector Issues (ベクトル化の問題)] カラムを参照します。[Possible Inefficient Memory Access (非効率なメモリー・アクセス・パターンが存在する可能性)] を探します。 [Instruction Set Analysis/Traits (命令セット解析/特性)] カラムを参照します。次の特性を検索します。
|
メモリー・アクセス・パターン解析を実行します。 |
データタイプの変換があります |
[Instruction Set Analysis/Traits (命令セット解析/特性)] カラムを参照します。[Type Conversions (データ型の変換があります)] メトリックを検索します。 |
ベクトル長を短くし、ベクトル化の効率を低下させる float から double への冗長な型変換を排除します。 |
ループ内のアライメントされていないベクトルのアクセス |
[Advanced/Vectorization Details (高度/ベクトル化の詳細)] カラムを参照します。[Unaligned access in vector loop (ベクトルループ内のアライメントされないアクセス)] メトリックを探します。 |
データをアライメントします。 |
レジスターへの圧力 |
[Vector Issues (ベクトル化の問題)] カラムを参照します。[Vector register spilling possible (ベクトルレジスターのスピルの可能性)] を探します。 |
次のいずれかの方法で問題を解決します。
|
FMA 命令が効率良く使用されていない可能性 |
[Vector Issues (ベクトル化の問題)] カラムを参照します。[Potential underutilization of FMA instructions (FMA 命令が効率良く使用されていない可能性)] の問題を探します。 |
次のいずれかの方法で問題を解決します。
|
その他 |
[Vector Issues (ベクトル化の問題)] カラムを参照します。 |
問題を解決するにはインテル® Advisor の推奨事項に従います。 |