インテル® VTune™ プロファイラー・ユーザーガイド

投機の問題 (バックエンド依存のパイプライン・スロット)

メトリックの説明

スーパースカラー・プロセッサーは、概念的に命令をフェッチしてそれらを構成する操作にデコードする「フロントエンド」と、要求される計算を実行する「バックエンド」に分かれています。フロントエンドは、各サイクルでバックエンドを通過するパイプライン・スロットに配置される最大 4 つの操作を生成します。そのため、クロックサイクルの一定の実行期間において、その期間でリタイアすることができる有用なワークを含むパイプライン・スロットの最大数を知ることは容易です。しかし、有用なワークを含むリタイアしたパイプライン・スロットの実際の数が、この最大数になることはほとんどありません。これにはいくつかの要因が関連します: フロントエンドが時間内に命令をフェッチもしくはデコードできなかったり (フロントエンド依存の実行)、バックエンドが特定の種類の操作を受け入れる準備ができていない (バックエンド依存の実行) ことにより、パイプライン・スロットを有用なワークで埋めることができないなどが考えられます。さらに、パイプライン・スロットが有用なワークを含んでいても、投機の問題によりリタイアしない可能性があります。フロントエンド依存の実行は、大きなコードのワーキングセット、不適切なコード配置、またはマイクロコード・アシストが原因であると考えられます。バックエンド依存の実行は、長いレイテンシーの操作や実行リソースのその他の競合が原因です。投機の問題のほとんどは分岐予測ミスに由来します。

考えられる問題

パイプライン・スロットの大部分は空のままです。バックエンドで操作に長い時間を要すると、パイプラインにバブルが生じて、マシンがサポートするよりも、サイクルごとにリタイアされる有用なワークを含むスロットが少なくなります。その結果実行が遅くなります。除算やメモリー操作など長いレイテンシーの操作は、単一の実行ポートに多くの操作が送られると (例えば、実行ユニットがサイクルあたりにサポートできるよりも、多くの乗算操作がバックエンドに割り当てられる場合)、この原因となります。

関連情報