INTERACTIVE LAB · COMPUTER SYSTEMS

CPUと記憶装置

RAMを書き換える。実行する。キャッシュの働きを比べる。

プログラムと保存 基本の加算

実行前

16・17番地の数値を変えて、計算を試してみよう。

01

CPU

命令を実行
計算中の値0
次に実行する番地
0
現在の命令 (—番地)
—
CPUが受け取った値
—
完了した命令数
0
仮想アクセス時間
02

キャッシュ

全相連LRUライトスルー
要求(青い破線) 命令・データ(緑の実線)

CPUからの要求待ち

実行するとブロックが入ります。

この命令のアクセス

押すと理由を表示

「次へ」を押して、
最初の命令を取得しよう。

03

主記憶装置 RAM

32番地 · 行を押して編集
対象 / 次の命令実行した命令読出元書込先
番地 現在の内容

行を押して初期内容を編集。反映すると初期RAMからやり直します。2番地で1ブロック。

実行状況

仮想時間 / ns
合計時間0ns
CPU処理0
メモリ待ち0
ヒット率—
アクセス回数0
  • CPU処理0 ns
  • キャッシュ参照0 ns
  • RAM転送0 ns

命令取得 0 · 読出 0 · 書込 0  / RAM転送 0

記録と比較 0件

EXPERIMENT RECORDS

条件を変えて、比べよう。

終了命令まで実行すると、結果と初期条件を自動保存します。途中の結果はボタンで保存できます。記録は最新12件をこのブラウザに保存。各記録の「条件を復元」で初期RAMと設定を読み戻せます。同じ初期RAM・開始番地の記録には同じ条件番号が付きます。

記録 / 初期条件 キャッシュ 結果 / 命令数 合計時間 CPU / キャッシュ / RAM(ns) ヒット率 アクセス / RAM転送 操作

まず1回実行して、結果を残そう。次はキャッシュをOFFにしてみよう。

この実験のしくみ・時間の数え方

RAMの行を押すと、現在の内容を確認しながら初期内容を編集できます。「次へ」で1動作ずつ進み、「前へ」でCPU・RAM・キャッシュ・計測値を直前の段階へ戻します。青い破線は番地の要求、緑の実線は命令やデータの転送です。命令取得・読み出し・書き込みで色の意味は変わりません。キャッシュのヒット/ミスは要求欄で太字と色を使って表示します。開始番地は常に0です。対象のRAM行は自動で表示し、背景色で強調します。キャッシュヒット時のRAM行の表示は参照先の確認用で、RAMへの転送は発生しません。ミスの場合も、まずCPUからキャッシュへ要求し、ミス判定後にRAMへブロックを要求します。キャッシュの枠には要求を処理する制御を含めて表しています。

命令と数値は同じRAM(0〜31番地)に置きます。命令取得とデータ読み書きは1つのキャッシュを共有し、2番地単位のブロックをどの枠にも保持できます。最近使われていないブロックから置き換えます(LRU)。書込ミスでもブロックを取得し(ライトアロケート)、RAMにもその都度書き込みます(ライトスルー)。書き込みによって命令が数値に変わる場合もあります。

仮想時間の計算方法

合計時間=命令数 × CPU処理時間 + 全メモリアクセスの待ち時間として計算します。 CPU処理時間は命令が完了するたびに1回だけ加算し、命令の種類にかかわらず一定です(初期設定は1ns)。加算・分岐・書き込みなどでCPU処理時間は変えません。 一方、メモリ待ち時間は命令に必要なアクセス回数と、各アクセスのヒット/ミスによって変わります。

命令ごとのメモリアクセス

どの命令も、最初に命令をRAM上の番地から取得します(読出1回)。その後にデータの読出や書込が必要な命令は、もう1回アクセスします。

命令アクセスの内訳
値の設定・分岐・終了命令取得のみ(計1回)
読出・加算・減算命令取得+データ読出(計2回)
書込命令取得+データ書込(計2回)

アクセス1回あたりの仮想待ち時間

同じ状況なら、どの命令でアクセスしたかによらず同じ時間を加算します。命令取得は「読出」に含みます。

状況仮想待ち時間
読出ヒットキャッシュ参照時間
読出ミスキャッシュ参照時間 + RAM転送時間
書込ヒットキャッシュ参照時間 + RAM転送時間
書込ミスキャッシュ参照時間 + RAM転送時間 × 2
キャッシュOFF(読出・書込)RAM転送時間

書込ヒットでもRAMに書き込むため、RAM転送時間を1回加えます(ライトスルー)。書込ミスではブロック取得と書き込みでRAM転送を2回数えます(ライトアロケート+ライトスルー)。2番地分のブロック取得は1転送として扱います。

例えば初期設定(CPU処理1ns、キャッシュ参照2ns、RAM転送40ns)で、すべてキャッシュヒットした場合、値の設定は3ns、加算は5ns、書込は45nsです。 つまり、CPU処理時間が一律でも、命令全体の時間は同じとは限りません。

読出ヒット時はキャッシュ → CPU、ミス時はRAM → キャッシュ → CPUの順でデータを渡し、RAMからの取得を二重には数えません。実機では必要な値をブロック取得中に先に返す場合もあります。実機の書込バッファや並行処理は省略し、この教材では順番に仮想時間を加算します。CPU処理時間は画面上の命令完了時に計上し、表示・自動実行の速度は仮想時間に影響しません。

実行状況のメーターは、CPU処理・キャッシュ参照・RAM転送にかかった時間の割合です。凡例の数値はそれぞれの仮想時間を表します。キャッシュ参照にはミスを調べた時間も含みます。RAM転送にはミス時のブロック取得、ライトスルーの書き込み、キャッシュOFF時の直接アクセスを含みます。青の無地・オレンジの斜線・紫の点模様を使い、色だけでなく模様と文字でも区別できます。

値は安全な整数の範囲で扱います。自動実行は10,000命令ごとに一時停止。RAM・設定の変更後はキャッシュを空にし、計算中の値を0に戻します。保存済みの比較記録は保持します。

← Interactive Lab の一覧へ