3074 words
15 minutes
コンピュアーキまとめ

ここで、教科書に暗記必要である知識をまとめて書きました。


2. データの流れと制御の流れ#

第2章まとめ#

  1. 主記憶装置: アドレスによって命令の読書きを行う大容量のメモリである。

  2. ROM: 読み出し専用メモリで、マスクROM、ヒューズROMとEPROMに分類される。 フラッシュメモリはEPROMの一種である。

  3. RAM: 読み書きのできるメモリである。低速大容量のDRAMと高速小容量のSRAMがある。

  4. 命令: コンピュータを制御する源となるもので、2進数のデータとして表現され、命令メモリに格納されている。

  5. 命令の種類: 算術論理演算命令、メモリ操作命令、分岐命令に分類される。

  6. 命令実行サイクル: フェッチ、デコード、実行、結果の格納の四つの動作から成る。

  7. シーケンサ: シーケンサは、命令アドレスの生成回路である。 次の命令アドレスを決める機構で、プログラムカウンタと付加回路から成る。

命令実行サイクルのサンプル#

以下は算術論理演算命令の実行サイクルである。

  1. 命令フェッチ: 命令メモリから図2.7 (a) の形式の命令を読み込む。

  2. 命令デコード: 命令デコードでALUの制御信号を生成する。同時に、レジスタファイルからALUへの入力となる二つのレジスタの値を読み出す。 レジスタアドレスは、命令の2番目と3番目のフィールドに格納されている。

  3. 演算実行: ALUがデコーダで指定された演算 (++) を実行する。結果の選択信号をALUからの出力を選択するようにセットする。

  4. 結果の格納: レジスタファイルに実行結果が格納される。結果が入るレジスタアドレスは、命令の4番目のフィールドに格納されている。


3. 命令セットアーキテクチャ#

第3章まとめ#

  1. 命令セット: コンピュータのすべての命令の集まりである。

  2. 命令の表現形式: 命令の2進数表現の形式、フィールドで区切られる。 R形、I形、A形に分類される。

  3. アセンブリ言語: 機械語を記号で置き換える言語である。

  4. 算術論理演算命令: 四則演算やシフトなど。レジスタとレジスタまたはレジスタと即値の間で演算がなされ、結果はレジスタに格納される。

  5. データ移動命令: レジスタとメモリの間のデータのコピーを行う。 レジスタ間のデータ移動、メモリとレジスタの間のデータ移動、メモリと入出力機器の間のデータ移動の3種類に大別される。

  6. 分岐命令: 制御の流れを変更する命令。無条件分岐命令と条件分岐命令に分類される。

  7. アドレッシング: アドレッシング (addressing) とは、データや命令の居場所を特定することである。 メモリアドレスの生成方式。即値アドレッシング、ベース相対アドレッシング、レジスタアドレッシング、PC相対アドレッシングなどがある。

  8. サブルーチン: 部分プログラムを再利用可能な形にしたもので、PCを含むレジスタの待避が必要である。スタックを用いる。

無条件分岐命令違いのまとめ#

命令形式ターゲット指定方法特徴主な用途
jA直接指定 (絶対アドレス)単純な無条件分岐。サブルーチン呼び出しなし。任意のアドレスへのジャンプ
jrRレジスタに格納されたアドレスレジスタに保存されたアドレスへのジャンプ。サブルーチンからの復帰
jalA直接指定 (絶対アドレス)サブルーチン呼び出し。戻りアドレスをr31に保存。サブルーチンの呼び出し

4. パイプライン処理#

第4章まとめ#

  1. パイプライン: 流れ作業によって処理効率を飛躍的に向上させる技術

  2. 処理時間: 一つの (命令の) 処理がはじまってから完了するまでの時間。 N×T\mathit{N}\times\mathit{T} (N\mathit{N}はパイプラインのステージ数、T\mathit{T}は1ステージの処理時間)

  3. スループット: 単位時間に終了する処理量 (命令数) 。通常は1T\frac{1}{T}である。

  4. 基本命令パイプライン: 命令フェッチ(F\mathrm{F})、命令デコード(D\mathrm{D})、演算実行(E\mathrm{E})、結果の格納(W\mathrm{W})からなるコンピュータのパイプライン

  5. パイプライン阻害要因: 最も時間のかかるステージ、パイプラインレジスタなどによる遅延、ハザード

  6. ハザード: パイプライン動作ができなくなる状態。構造ハザード、データハザード、制御ハザードに分類される。

  7. 構造ハザード: コンピュータの内部構成に原因をもつハザード

  8. データハザード: 命令間のデータ依存関係に基づくハザード

  9. 制御ハザード: 分岐命令によるハザード

  10. フォワーディング: 前の命令の実行結果を直接Eステージに送ることでデータハザードを解消する手法

  11. 制御ハザードの緩和法: 命令アドレスの早期生成、遅延分岐、分岐予測、命令スケジューリング

  12. 分岐予測: 分岐の有無を予測し、成功すれば続行、失敗すればパイプラインをフラッシュする。 2ビット予測器、2レベル適応形予測器など


5. キャッシュと仮想記憶#

第5章まとめ#

  1. 記憶階層: 高速小容量のメモリと低速大容量のメモリを組み合わせて、見かけ上高速大容量のメモリを実現する技術

  2. 記憶階層の根拠: メモリ参照の傾向は、時間的局所性空間的局所性がある。 これを利用して、よく使うデータを上位階層のメモリに入れることで、効率的なメモリシステムが作られる。

  3. 透明性: 機械語プログラムの変更なく効率や安全性を高めるという性質。キャッシュや仮想記憶は透明性を持つ。

  4. キャッシュ: 主記憶とCPUの間にある高速小容量一時メモリ。キャッシュラインと呼ばれる単位で、主記憶との間でデータが交換される。

  5. ライトスルーとライトバック: ライトスルー方式では、ストアのたびに主記憶の書込みが行われる。 ライトバック方式では、キャッシュラインの追出しが起こるときに主記憶の書込みが行われる。

  6. キャッシュの三の形: ダイレクトマップ形、セットアソシアティブ形、フルアソシアティブ形。後にいくほど連想度が高く、ハードウェアが複雑になる。

  7. キャッシュミス: 初期参照ミス競合性ミス容量性ミスの3種類 (三のC) がある。

  8. 仮想記憶: 主記憶よりも大きなメモリ空間を実現し、複数のプログラムが一つの物理記憶を安全に分かちあって使うための技術

  9. ページ: 仮想記憶で、主記憶と二次記憶の間でデータをやりとりする単位。ふつう数キロバイト

  10. ページテーブル: 仮想アドレスから物理アドレスを導くためのテーブル。 主記憶に置かれる。ユーザプログラムが更新することはできない。

  11. ページフォールト: ページが主記憶に入っていないときに起こる例外。主記憶の領域を確保し、二次記憶からページを読み込むための対処が必要となる。

  12. TLB: ページテーブルのキャッシュ。メモリアクセスの高速化のために用いられる。

  13. 仮想記憶とキャッシュ: 直列形物理アドレスキャッシュ、並列形物理アドレスキャッシュ、仮想アドレスキャッシュなどの実現方式がある。

局所性#

名前性質
空間的局所性あるメモリ語が参照されたときに、その語の近くの語が引き続き参照される性質
時間的局所性あるメモリ語が参照されたとき、その語が時間をおかずに再び参照される性質

キャッシュミス#

名前英語定義
初期参照ミスcompulsory miss, cold start missキャッシュラインを最初にアクセスすることで起こるミス
競合性ミスconflict miss, collision miss同じインデックスをもつ異なるキャッシュラインにアクセスすることで起こるミス
容量性ミスcapacity missキャッシュしたいライン数がキャッシュ容量を上回ることで起こるミス

ちなみに、競合性ミスはフルアソシアティブ型キャッシュではおこらない。

ページフォールトによる中断#

  1. CPUの処理を一時中断する
  2. テーブルのエントリに入っている二次記憶上のアドレスから主記憶の空いている場所にページをコピーし、ページテーブルのエントリに物理ページアドレスを書き込み、有効ビットを1にする
  3. もし主記憶に空いた場所がなければ、どれか一つのページを二次記憶上に追い出し、空いた場所に必要とされるページを読み込むことになる

TLBの動作#

  1. メモリアクセスが起こると、仮想ページアドレスをタグとして、TLBが参照される。
  2. TLBがヒットすると、該当する物理ページアドレスが取り出され、ページ内オフセットと合わせて物理アドレスが作られる。
  3. TLBがミスすると、5.3.2項で述べたやり方で、ページテーブルが参照され、TLBが空いているエントリに、現在参照している仮想ページアドレスに対応する物理ページアドレスが入れられる。 TLBが空いていない場合は、LRUなどのやりかたでエントリが一つ空けられる。

6. 命令レベル並列処理とアウトオブオーダ処理#

第6章まとめ#

  1. 並列処理: 性能向上の手段。さまざまなレベルがある。

  2. 命令レベル並列処理: プロセッサの演算器を複数設けて命令を同時実行させる並列処理方式。

  3. VLIW: 1命令の中に複数の演算を入れたアーキテクチャ。コンパイラが並列実行できる命令を決める。

  4. スーパスカラ: 逐次実行の機械語プログラムから並列性を動的に抽出し、並列実行するアーキテクチャ。

  5. 静的最適化: 機械語プログラムが効率よく実行できるように、コンパイラなどが事前にあらかじめコードを調整しておく。

  6. ループアンローリング: 小さなループを何個かまとめて一つのループとすることで、分岐命令によるハザードをなくす手法。

  7. ソフトウェアパイプライニング: ループ間にまたがる命令を移動し、依存関係のある命令どうしの距離を離すことで、ハザードを起こりにくくし、並列度をあげる手法。

  8. アウトオブオーダ処理: 命令を動的に入れ替えて実行効率をあげる動的方式。 ユーザに命令実行の順番を入れ替えるアウトオブオーダ実行と、実行結果をメモリに格納する順番を変えるアウトオブオーダ完了がある。

  9. データ依存: フロー依存、逆依存、出力依存の3種類がある。

  10. フロー依存: 命令Aで書き込んだ値を後続の命令Bで読み出すことで起こる依存関係。RAWハザードの原因となる。

  11. 逆依存: 命令Aで読み出したレジスタ (メモリ語) に後続の命令Bが書き込みを行うことで起こる依存関係。WARハザードの原因となる。

  12. 出力依存: 命令Aで書き込んだレジスタ (メモリ語) に後続の命令Bが再度書き込みを行うことで起こる依存関係。WAWハザードの原因となる。

  13. 命令キュー: アウトオブオーダ処理のための機構。 デコード後の複数の命令を格納し、実行可能な命令を取り出す機構が入っている。

  14. リザベーションステーション: 機能ユニットごとに分散配置された命令キュー。

  15. レジスタリネーミング: レジスタ番号の置き換えによって、逆依存、出力依存をなくし、並列性を向上させる手法。

  16. マッピングテーブル: レジスタリネーミングを実現する機構の一つ。命令における論理レジスタアドレスを物理レジスタアドレスに変換する。

  17. リオーダバッファ: 連想機構をもつメモリによってレジスタリネーミングを実現する機構。

  18. プロセッサの性能指標(例): クロック当りの平均実行命令数 ×\times クロック周波数。

データ依存の分類#

名前定義
フロー依存命令Aで書き込んだ値を後続の命令Bで読み出すことで起こる AB\mathrm{A}\Rightarrow\mathrm{B} の依存関係。真の依存関係 (true dependence) ともいう。
逆依存命令Aで読み出したレジスタ (メモリ語) に後続の命令Bが書き込みを行うことで起こる AB\mathrm{A}\Rightarrow\mathrm{B} の依存関係。
出力依存命令Aで書き込んだレジスタ (メモリ語) に後続の命令Bが再度書き込みを行うことで起こる AB\mathrm{A}\Rightarrow\mathrm{B} の依存関係。

逆依存と出力依存は、主にレジスタ数の不足からくる依存である。

3種類の依存(例)#

mul r1, r2, r3
add r4, r1, r5
add r5, r6, r7
add r4, r8, r9
add r10, r4, r11
add r12, r10, r13

フロー依存: [1][2][1]\Rightarrow[2] (r1) 、[2][5][2]\Rightarrow[5] (r4) 、[4][5][4]\Rightarrow[5] (r4) 、[5][6][5]\Rightarrow[6] (r10)

逆依存: [2][3][2]\Rightarrow[3] (r5)

出力依存: [2][4][2]\Rightarrow[4] (r4)

データ依存とデータハザード#

データ依存データハザード
フロー依存RAW (read after write) ハザード
逆依存WAR (write after read) ハザード
出力依存WAW (write after write) ハザード
コンピュアーキまとめ
https://www.shiinayane.com/posts/computer-architecture/
Author
YANKAI WANG
Published at
2025-01-26
License
CC BY-NC-SA 4.0