2016-08-18 5 views
0

は、私は以下を参照してください。解釈インテル®VTune™出力

Memory Bound     50.8%    

私は(Intel doc)を言うインテルドキュメント、読み:

メモリーバウンド対策スロットの割合をデマンドロード命令またはストア命令のためにパイプラインがストールする可能性があります。これは、店舗がパイプラインに背圧をかける可能性がある一般的でないケースに加えて、実行不足と同時に生じる不完全な機内メモリ要求負荷を主に説明します。

これは、アプリの命令の約半分がメモリを待っていることを意味しているのですか、それともそれよりも微妙ですか?

+0

「スロット」の意味を理解できるように文書をリンクできますか?パイプライン化されたアウト・オブ・オーダーのCPUは、一度に1つの命令を実行するだけではないので、あなたの解釈は意味をなさない。 1つの命令を待たなければならないが、CPUをビジーに保つための独立した作業があれば、スループットの問題ではありません。これは、uopsが実行されなかったサイクル、またはuopsがリタイアされなかったサイクルの尺度である可能性が高くなります。 (これは、ROBがいっぱいになった理由、または何か他の理由でuopsの発行を妨げることがない限り、フロントエンドの測定ではありません。) –

+0

最初の投稿で今すぐそうなります。ありがとう。 – Frank

+0

要するに、どの命令が遅いものの影響を受けるかという点では考えないでください。どのような順序で行っても、あなたのコードでCPUが空いている実行単位を処理できるかどうかを考えてください。 –

答えて

1

VTuneで使用されるパイプラインスロットの概念は、たとえば次のとおりです。ここに:https://software.intel.com/en-us/top-down-microarchitecture-analysis-method-win。 短いパイプラインスロットでは、1つのuOpを処理するために必要なハードウェアリソースを表します。したがって、4ワイドCPU(ほとんどのインテル・プロセッサー)では、各サイクルで4つの動作を実行することができ、スロットの総数はVTuneによって4 * CPU_CLK_UNHALTED.THREADとして測定されます。 Memory Boundメトリックは、メモリのために直接停止するCYCLE_ACTIVITY.STALLS_MEM_ANYイベントで構築されます。不注意を考慮に入れて。基本的には、CPUがストールしていると同時に、飛行中の負荷がある場合にのみ、カウンタがインクリメントされます。機内に負荷があるがCPUがビジー状態の場合、メモリストールとみなされません。 メモリ・バウンド・メトリックは、メモリー・パフォーマンスの問題によってワークロードがどの程度拘束されているかを正確に推定します。 50%という値は、メモリからデータを待っている時間の半分が無駄になったことを意味します。

+0

私はその記事を詳細に読んでいません。しかし、メモリだけでなく、CPUはストールすることができます。したがって、CPUが搭載されている間にCPUがストールしているだけであっても、必ずしもメモリがストールしているわけではありません。 VTuneがこのメトリックを計算する際にこれを考慮に入れるかどうかはわかりません。しかし、そうでなければ、「半分の時間がメモリからデータを待って無駄になった」とは言い難いです。 – Mysticial

+0

また、4つの発行スロットのうちの* *が空であると定義される「ストール」もありますか?または、すべての* 4つのスロットが空の場合です。例えば、浮動小数点コードは、FP命令のレイテンシが高く、実行可能なポートが2つしかないため、4つの発行スロットを飽和させることはめったにありません。したがって、FP命令のチェーンの途中でノンブロッキングのキャッシュミスが2命令/サイクルを確実に得ているということは、メモリを待って時間が無駄になっていることを意味するものではありません。 – Mysticial

+0

VTuneはそれよりも賢明だと確信していますが、「50%の時間が無駄になる」というような絶対的な数字は、額面の解釈が難しいことを考えると非常に多くのコーナーケースがあると言います。 – Mysticial

関連する問題