使用されるメモリ (RAM) 帯域幅をどのように計算しますか? どのパフォーマンス カウンターが必要ですか?
それを実行できるツール、「Rightmark マルチスレッド メモリ テスト」に出くわしました。しかし、Rightmark の他のテストとは異なり、ソース コードは見つかりませんでした。バイナリだけです。
使用されるメモリ (RAM) 帯域幅をどのように計算しますか? どのパフォーマンス カウンターが必要ですか?
それを実行できるツール、「Rightmark マルチスレッド メモリ テスト」に出くわしました。しかし、Rightmark の他のテストとは異なり、ソース コードは見つかりませんでした。バイナリだけです。
コードを Linux で実行できる場合は、Cachegrindを使用します。
Cachegrind はキャッシュ プロファイラーです。CPU の I1、D1、L2 キャッシュの詳細なシミュレーションを実行するため、コード内のキャッシュ ミスの原因を正確に特定できます。ソースコードの各行で実行されたキャッシュミス、メモリ参照、および命令の数を、関数ごと、モジュールごと、およびプログラム全体の要約で識別します。これは、任意の言語で作成されたプログラムで役立ちます。Cachegrind は通常より 20 ~ 100 倍遅くプログラムを実行します。
KCacheGrind GUIを使用することもできます。
メモリ帯域幅の使用量を「計算」するのは非常に困難です。取り組むべき重要なキャッシュと MMU の問題がたくさんあります。それを行う唯一の実際の方法は、シミュレーションまたは実世界での測定を使用することです。
コードをデバッグし、実行されたメモリのロードおよびストア操作の数を数えることで、「大まかな」アイデアを得ることができます。ただし、それがキャッシュのヒット/ミスかどうかを知ることは別の問題です。
それはあなたの目的によります。推定値を取得する場合は、汎用コードの約 30% がメモリのロードとストアであるという経験則を使用できます。最悪のケースを想定している場合は、キャッシュが常に失われると想定して解決できます。
あなたができる可能性のあることの 1 つは、仮想化を検討することです。いくつかのオープン ソース オプションがあります (QEMU が思い浮かびます)。それらから特定のハードウェア測定値をエクスポートできる場合があります。