計算機アーキテクチャ前期末
---
#計算機アーキテクチャ
授業で扱ったコンピュータの仕様
MAR:Memory Address Register
MPU 外部にアドレスを出力するレジスタ
大きさ: 12bit(アドレスバスの bit 数)
D:Data Register
データバスからデータを入力するレジスタ
大きさ: 8bit(MPU のワード長)
PC:Program Counter
実行中の命令位置をポイントするカウンタ
大きさ: 12bit(アドレスバスの bit 数)
En = 1のとき、保持しているカウンタの値を
CLOCKの立ち上がりに応じて+1する
IR:Instruction Register
読込んだ命令を保持するレジスタ
大きさ: 8bit(データバスの bit 数)
Y: スイッチング
s = 0のときはポート0から値をとる
s = 1のときはポート1から値をとる
LD: ロード機能
LD = Trueのときポートからデータをロードする
Cフラグ: 演算部の桁あふれが発生したならば、True
Zフラグ: 演算部での演算結果が0ならば、True
---
コンピュータの全体図
https://scrapbox.io/files/688ed3b7d514d4889dcd8533.png
https://scrapbox.io/files/6890697fa6edd5cb8f2a4c35.png
---
メモリ構造
https://scrapbox.io/files/688ed8a95473628e65e8a71f.png
---
---
演算部の内部構造
https://scrapbox.io/files/688ed77203ded97ecf892149.png
ローテート回路
table:rotate
h1 h0 出力(G) Sout(Cフラグの値)
0 0 入力(F) 0
0 1 Fの右巡回 0011 → 1001 F_0 押し出された桁は一周してくる
1 0 Fの左巡回 1011 → 0111 F_7 押し出された桁は一周してくる
1 1 0 0
---
演算部のうち、8bit ALUの内部構造
https://scrapbox.io/files/688edac2f6b19c7ff0a7609c.png
算術演算回路の側
https://scrapbox.io/files/688edbc9d90523a8da9556f8.png
Cout = Cフラグ
論理演算回路の側
s0は共通、s1も共通にして一度に8bitすべての信号を切り替える
https://scrapbox.io/files/688edb4ff65ff80c05d9a069.png
---
---
https://scrapbox.io/files/688f4039e7cb251f8f8c7027.png
A ← M[adrs]の「A」はAレジスタを示す。
Bレジスタ、Cレジスタを指定できるようにすると、命令長が足りないため
---
これ書かされるかもhill_san.icon
計算機モデルとして、ADD命令、LD命令、JZ命令、INC命令、ST命令をもつコンピュータを考える。
命令実行の状態遷移図
https://scrapbox.io/files/688ecfdc29d8883caf9ae38b.png
機械語のオペコード部分を資格で囲め。
IRレジスタの保持値のうち上位4bitで、各種命令を表す
0011→ADD命令
0000→LD命令
IR(L)は、IRレジスタの下位4bitを表す
メモリから命令を読みだしている状態△
1, 12, 17, 21
メモリのデータにアクセスしている状態▽
14, 24
命令によって機械語の命令長が異なる理由
オペランドによっては、メモリにアクセスする際に、1byte命令では12bitあるアドレスを扱うことができないため。
メモリから
読み出した命令を直接 IR レジスタに入れず D,IR レジスタの 2 段構成にしている理由
2バイト長命令の第 2 バイト目を保存する領域を確保するため
このMPUのCLOCK周波数が10 MHzのとき、ADD 命令と LD 命令の実行時間を計算せよ。
上の図の場合、Decode & Jump (状態番号3)を考慮していないため、それぞれ0.1µsだけ短くなる
(計算機アーキテクチャ過去問2022を参照)
上の図で考えた場合
ADD命令: $ \frac{1}{10 \times 10^6} \times 4= 0.4\rm[\mu s]
LD命令: $ \frac{1}{10 \times 10^6} \times 8 = 0.8\rm[\mu s]
CLOCK周波数を速くしたとき、MPUの性能が高くなることを説明せよ。
CLOCK周波数を速くすると、1命令あたりの実行時間が短くなり、プログラムの総処理時間も短くなる。
そのため、MPUの性能が高くなる
メモリアクセス時間を50 ns としたとき、CLOCKの上限周波数を計算せよ。
$ \frac{1}{50 \times 10 ^{-9}} = 20 \rm[MHz]
キャッシュメモリを使用することによりMPUのCLOCK周波数を高速にできる理由を説明せよ。
キャッシュメモリを使用すると、
一度使ったデータが実行している命令に続く命令などを保存することができる。
また、メインメモリからのアクセス時間より、キャッシュメモリからのアクセス時間の方が短い。
そのため、実行時間のかかるメインメモリのアクセスを減らし、キャッシュに保存したデータを読み取ることでCLOCK周波数を高速にできる。
---
cacheメモリについて
(12) メインメモリのアクセス時間が 50ns、キャッシュメモリのアクセス時間が 5ns、キャッシュヒット率が 95% のとき、MPU から見た平均のメモリアクセス時間を求めよ。また、このときの MPU クロック速度の上限値を求めよ。
$ 5n × (0.95) + 50n × (0.05) = 7.25 ns/回
$ \frac{1}{7.25n} = 1.3793 × 10⁸ \approx 1.38 × 10⁸ = 138 MHz
(13) わずか 16K バイトのキャッシュメモリでも、ヒット率 95% が達成できる理由を説明せよ。
時間的局所性、空間的局所性のバランスが取れている
次に実行される可能性のある命令をキャッシュメモリ内部に入れておけるから。
(14) キャッシュのブロックサイズを大きくするに従ってミス率が低下する理由について考察せよ。
キャッシュのブロックサイズを大きくすると、連続した命令を多く保持することができる。
すなわち、空間的局所性の効果が大きくなる
(15) キャッシュ容量が 1K バイトの場合、ブロックサイズを大きくすると途中からミス率が増加している。この理由について考察せよ。
1KB のキャッシュは小さい。ブロックサイズを大きくすると、連続した命令を多く保持できる。
しかし、すでに保存されていた、一度使用された命令を捨て、保存領域を確保する必要がある。
空間的局所性の効果はあるが、時間的局所性の効果を損なった。それにより、ミス率が増加した。
---
CPI値、MIPS値について
あるコンピュータの命令をCPI値で分類した。
コンピュータのクロック周波数を400MHzとする。
table:cpi
コンパイラ CPI = 1 CPI = 2 CPI = 3
コンパイラ1 5 * 10^9 1 * 10^9 2 * 10^9
コンパイラ2 10 * 10^9 1 * 10^9 1 * 10^9
(1) 平均CPI値を求めよ。
コンパイラ1
総命令数 n $ 5 \times 10^9 + 1 \times 10^9 + 2 \times 10^9 = 8 \times 10^9
総クロック数 N $ (5 \times 10^9) \times 1 + (1 \times 10^9) \times 2 + (2 \times 10^9) \times 3 = 13 \times 10^9
平均CPI値
総クロック数N / 総命令数 n = $ \frac{13 \times 10^9}{8 \times 10^9} = 1.63\mathrm{[CPI]}
(2) プログラムの実行時間
コンパイラ1
$ T = \frac{N}{f} = \frac{13 \times 10^9}{400 \times 10 ^6} = 32.5\mathrm{[s]}
(3) MIPS値 MIPSのMはミリオン(10^6)
コンパイラ1
$ \frac{n}{T \times 10^6} = \frac{8 \times 10^9}{32.5 \times 10^6} \approx 246\mathrm{[MIPS]}
(4) これらのコンパイラの性能比較を定量的に行え
実行時間
$ T_1 = 32.5\mathrm{[s]}
$ T_2 = 37.5\mathrm{[s]}
コンパイラ2の計算時間はコンパイラ1の計算時間の1.15倍である
---
状態遷移図よりMARレジスタの更新条件をまとめ、その結果よりMARレジスタの構成を図に示せ。
https://scrapbox.io/files/6890725a3b4a840ef864d773.png
table:state
x0 0,11,16,20 MAR←PC
x1 13,22 MAR←IR(L)+D
「マイクロプログラム制御回路」を参考にして、ST命令のマイクロコードを作成せよ。
表記なし : 0
table:st_inst
state x0 x1 x2 x3 x4 x5 x6 n1 n0
0 1 0 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 0
2 0 0 0 0 0 0 1 0 0
3 0 0 0 0 0 0 0 0 1
20 1 0 0 0 0 0 0 0 0
21 0 0 1 0 1 0 0 0 0
22 0 1 0 0 0 0 0 0 0
23 0 0 0 0 0 1 0 0 0
24 0 0 0 0 0 0 0 0 1
(n1, n0) = (0, 1)のとき、命令の読み出し
命令実行の最後の状態番号のとき
(n1, n0) = (1, 0)のとき、Zフラグの読み出し
制御回路をじっくり考察しましょうhill_san.icon
この MPU のデータバスに SW 入力回路を直接接続してその値を MPU に入力しようとした。このときの動作上の問題点と I/O 部の入力回路が持つべき機能について説明せよ。
データバスを独占するようなデータの流し方をすると、他で使用できない。
データバス上で「バス衝突」を起こし、正しいデータが MPU に入力できない。
SW入力時以外のときは、外部データをデータバスから切り離す。3ステートバッファを導入するべき
この MPU のデータバスに LED 出力回路を直接接続して点滅させるときの問題点と持つべき機能
LEDを光らせる間、独占するためデータバスを使用できない
ほかの処理で意図せずLEDが点灯する
ロード機能付きD-FFなどでデータを保持し、必要な時だけデータバスからデータを受けるようにする
必要な時を知らせるために、出力回路にはアドレスが割り振られている必要がある。
---
このMPUがメモリの0x020番地に格納されているLD(0xF20)命令を実行するときの、タイムチャートを作成せよ。
このときのM [0xF20]の値を0x41とする。
https://scrapbox.io/files/6890c07515668c5b3c6d45a5.png
https://scrapbox.io/files/688ecfdc29d8883caf9ae38b.png
https://scrapbox.io/files/6890bfb9c015d9804be91094.png
---
パイプライン処理について
例えば5段のパイプライン処理では、全ての命令の処理を図に示すように5つのステージに分解する。このとき、各ステージの処理時間は等しくする。
table:pipeline
IF ID regR ALU MEM regW
(1) パイプライン処理を行ったときの命令の処理の流れを図に示せ。非パイプライン処理に比較して、理想的には5倍高速化されることを示せ。
table:pipeline
IF ID regR ALU MEM regW
IF ID regR ALU MEM regW
IF ID regR ALU MEM regW
:
n 個の命令を実行する場合を考える.命令の各ステージの処理時間を T(s) とする。
非パイプライン処理の場合の実行時間:
$ T_{NP} = 5nT
パイプライン処理の場合の実行時間:
$ T_p = (n-1)T + 5T = (n+4)T
$ \frac{T_{NP}}{T_p} = \frac{5nT}{(n+4)T} \to 5(n \to \infty)
コンピュータの命令をパイプライン化したときの問題点について説明せよ。
各命令のステージ数がバラバラの場合、どこでリソースが衝突するのか予測できない。
問題1に示した命令セットでは、パイプライン化が難しいことを説明せよ。
1byte命令と2byte命令が混在しており、パイプライン化したときにメモリアクセスが重なるタイミングを予測しにくくなる。
メモリアクセスが重なった結果、古い値が読みだされる可能性がある。