問題タブ [likwid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - リタイアした誤予測ブランチと実行された誤予測ブランチの差
分岐動作を適切に予測する必要がある比較的単純な Java を調べているという珍しいケースがありますが、likwid-perfctr は非常に大きな (50%) 分岐予測ミス率を報告しています。ただし、ランタイムはその予測ミス率と一致していません (CPI は非常に低く、~0.3 であり、フロントエンドとバックエンドのストールは低いです)。同様の C++ プログラムでは、予測ミスはありませんが、実際には実行時間がわずかに長くなります。
不一致は、BR_MISP_RETIRED_ALL_BRANCHES と BR_MISP_EXEC_ANY イベントにあるようです。誤予測率の計算に使用される前者は大きく、ループごとに 1 つのイベントです。後者は非常に小さく、予想される誤予測率および実行時間と一致しています。
私が試した他のサンプル プログラムでは、重大な予測ミス (たとえば、配列内のランダムな値での分岐) が見られましたが、値は非常に似ていました。
これら2つのカウンターの正確な意味を知っている人はいますか? ブランチをリタイアする前に実行する必要がある場合、「リタイア」カウンターを「exec」カウンターよりも 25 倍大きくするにはどうすればよいですか?
linux - プログラムの一部のパフォーマンス統計
perf を使用して、プログラムの実行の一部のみのハードウェア カウンター統計を収集することはできますか? もしそうなら、どのように?
likwid は名前付き領域を定義できる機能を提供しますが、これが perf だけがインストールされたシステムで可能であれば素晴らしいことです。
以前のいくつかの質問は関連する回答を返しましたが、まだいくつかの欠点があります:
- プローブを使用しても同じエラーが発生し、少し新しいカーネル (3.13) を使用しています。これらの修正は新しいバージョンで利用できますか?
- perf_event_openを使用して、コマンド ラインでイベントを定義する柔軟性を維持したいと考えています。perf stat自体のコードも覗いてみましたが、perf_event_open を呼び出しても設定されていないようです。