第4章 プロセッサ - wide...
TRANSCRIPT
第4章 プロセッサ usk
コンピュータの性能を 決定する要因3つ
実行命令数 命令セット・アーキテクチャとコンパイラ クロック・サイクル時間 プロセッサの実装方式 命令当たりのクロック・サイクル数(CPI) プロセッサの実装方式
MIPSの命令セットの主要部分に対応したデータパスと制御ユニットを実装する
1
基本的なMIPSの実装方式
メモリ参照命令のload word (lw)とstore word (sw)
算術論理演算命令のadd, sub, and, or, slt
branch equal (beq)命令及びジャンプ (j)命令
2
実装方式の概要
1. メモリから命令をフェッチするために、PCの値をコードが保持されているメモリに送る
2. 命令のレジスタ・フィールドに指定されている1つまたは2つのレジスタを読みだす
3
実装方式の概要 メモリ参照と算術論理と分岐の3つの命令タイプに関しては、必要な作業は概ね同じ (命令の違いにほとんど左右されない)
ジャンプ以外どの命令でもレジスタを読んだ後でALU (算術論理演算ユニット)が使用される メモリ参照命令では、アドレスを算出するためにALUが使用される
算術論理命令では、命令操作の実行にALUが使用される
分岐命令では、比較のためにALUが使用される 4
実装方式の概要 ALUを使用した後では、命令完了に要する作業は命令の対応によって異なる メモリ参照命令では、メモリにアクセスして、ストアするデータを書き込んだりロードするデータを読み出したりする必要がある
算術論理命令またはロード命令では、ALUまたはメモリからレジスタにデータを書き戻す必要がある
分岐命令では、比較結果に基づいて、次の命令のアドレスを変更する必要がある、変更しない場合は、次の命令アドレスを設定するために、PCを4繰り上げる
5
MIPS命令の実装方式の 概念的な構造図
6
マルチプレクサ
いくつかの箇所で、2つの別のソースからのデータが1つのユニットに入るように描かれている
レジスタ・ファイルに書き込まれる値は、ALUとデータ・メモリのどちらかから送られてくる
ALUへの第2の入力はレジスタまたは命令の測地フィールドのどちらかから送られてくる
7
制御ユニット
機能ユニットの幾つかは、命令タイプに応じて異なる制御を行う必要がある
マルチプレクサと同様に命令の様々なフィールドに基づいて設定される制御線にしたがって、これらの命令操作は遂行される
8
MIPS命令の実装方式の 概念的な構造図 v2
9
マルチプレクサ 左上のマルチプレクサ ALUのゼロ判定出力と命令が分岐であることを示す制御信号の`AND`を取るゲートによって制御される
真ん中のマルチプレクサ ALUの出力(算術論理演算の場合)とデータ・メモリからの出力(ロードの場合)のどちらをレジスタ・ファイルに書き込むかを制御する
一番下のマルチプレクサ ALUへの第2入力をレジスタ (算術論理演算または分岐の場合)と命令のオフセット・フィールド (ロードまたはストアの場合)の、どちらから取るかを制御する
10
論理設計とクロック方式
コンピュータの設計の検討にあたって マシンを実装するハードウェア論理回路の動作方式
マシンのクロックの刻み方
11
データパスユニット
状態組み合わせ論理要素 データの値に何らかの操作を行う ANDゲートやALUのような処理要素 組み合わせ → 出力が現在の入力にのみ基づいて決まる 内部記憶が無い
状態論理要素 状態を記憶する要素 レジスタやメモリのような記憶要素の一種 なんらかの内部記憶を持つ
12
状態論理要素
入力 書き込むべきデータの値 書き込むタイミングを決めるクロック信号 書き込みのタイミングの決定のみに使用される、読み出しはいつでも構わない
出力 前のクロック・サイクルにおいて書き込まれた値
13
クロック方式
クロックとの時間関係でいつデータが有効になり安定するかを定めた方式
読み出しと書き込みのタイミングを区別 読み出しを行なっている時に書き込みが行われると、値が古いものであったり、新しいものであったり、両者が混じったものであったりする可能性が生じるから
14
エッジ・トリガ・クロック方式 (edge-triggered clocking methodology)
クロック信号波形のエッジでのみ逐次論理要素に記憶されている値を更新する方式
15
エッジ・トリガ・クロック方式 データ値を記憶出来るのは、状態論理要素だけであるので、組み合わせ論理回路への入力は状態論理回路から取らなければならないし、組み合わせ論理回路からの出力は状態論理要素に書き込まなければならない
2つの状態論理要素が1つの組み合わせ論理回路を挟んで単一クロック・サイクルで動いている
すべての信号は状態論理要素1から組み合わせ論理回路を通って、状態論理要素2まで1クロック・サイクル以内で伝播しなければならない 信号が状態論理要素2に到達するまでに必要な時間がクロック・サイクルの長さを規定する
16
データパスの構築
17
データパスの構築
メモリ・ユニット プログラムの命令を格納するとともに、指定されたアドレスの命令を提供する
プログラムカウンタ PCを次の命令のアドレスに繰り上げる加算器
18
命令を実行するために
1. メモリ・ユニットから命令を取り出す 2. 次の命令の実行に備えて、プログラムカウンタを4バイト加算する
19
算術論理演算命令 (R形式命令)
レジスタを2つ読み出し ALU演算を実行 結果を書き込む
20
add $t1,$t2,$t3
$t2と$t3を読み込んで、$t1に書き込む レジスタ・ファイル レジスタ・ファイルはすべてのレジスタを束ねたもの
レジスタ番号を指定することで任意のレジスタを読み書きできる
ALU
21
レジスタ・ファイル
22
R形式命令
オペランドにレジスタを3つ使用する 2つのデータを読み出し レジスタ毎に、対象とするレジスタ番号を指定する入力
読み出された値を保持する出力が必要 1つのデータを書き込む 書き込み先のレジスタ番号を指定する入力 レジスタに書き込むデータを送り込む入力
23
レジスタ・ファイル
レジスタ・ファイルからは「読み出しレジスタ」に指定されたレジスタ番号のレジスタの内容が常に出力される
書き込みは、書き込む制御信号により制御される
レジスタ番号を指定する入力の幅は5ビット
データ入力と出力は、32ビット 24
ALU
32ビットの入力を受けて、32ビットの結果と、結果がゼロの場合には1ビットの信号を生成
あと、4ビットの制御信号
25
メモリ参照命令 lw $t1,offset($t2) sw $t1,offset($t2)
レジスタ・ファイルとALU両方が必要 命令中の16ビットのオフセット値を符号拡張して32ビットの符号付きの値にするユニット
読み書きするデータを記憶しておくユニット データ・メモリ ストア命令で書き込めるようにするため、書き込むための入力データに加え、MemRead及びMemWriteという2本の制御信号とアドレス入力が必要
26
メモリ参照命令
27
分岐命令
beq $t1,$t2,offset
オペランドを3つとる 等しいか否かを比較する対象レジスタ2つ 分岐命令のアドレスい相対的な分岐先アドレスを算出するための16ビットオフセット
28
分岐先アドレスを算出 命令のオフセット・フィールドを符号拡張したうえで、PCに加算する
1. 分岐先アドレスを算出するベースとなるのは、分岐の次の命令のアドレス 命令フェッチ・データパスにおいてPC+4を計算しているので、その値を分岐先アドレスのベースとして使用
2. オフセット・フィールドは2ビット左にシフトされて、wordオフセットとされるようになっている オフセット・フィールドを2ビット左にシフトする必要
29
後続命令 or 分岐先アドレス
条件が真 → 分岐の成立 オペランド同士が等しい 分岐先アドレスが新しいPC 条件が偽 → 分岐の不成立 オペランド同士が等しくない 繰り上げたPCで現在のPCを置き換える
30
分岐命令
31
分岐命令
分岐先アドレスの計算のために 符号拡張ユニット 加算器 比較を行うために レジスタ・ファイル ALU オペランドの二つのレジスタの内容を送り、減産するように制御する
ALUの出力のゼロ判定出力が真ならば、2つの値が等しかった
32
遅延分岐
MIPSの命令セットでは分岐は遅延される 分岐命令の直後の命令が必ず実行される
つまり、分岐条件が成立する場合、遅延分岐ではまず分岐命令の次の命令を実行してから、該当の分岐先アドレスにジャンプする
遅延分岐を採用する理由 パイプライン処理で分岐が影響を受けるから
33
単一データパスの作成 最も単純なデータパスではすべての命令を1クロック・サイクルで実行しようとする どのデータパス資源も1命令辺り2回以上の使用はできない
2回以上必要となる要素は、必要個数分だけ別個に設ける必要
データ用メモリとは別に命令用メモリが必要 2つの違った命令タイプ感でデータパスを共有するためには、複数入力を接続して、その中からマルチプレクサと制御信号によって1つの入力を選択できるようにする必要
34
算術論理演算命令と メモリ参照命令のデータパス
算術論理命令ではALUに2つのレジスタからの値を入力として使う。しかし、メモリ参照命令では、第2入力は16ビットのオフセット・フィールドを符号拡張したもの
結果としてレジスタに書き込まれる値は、算術論理命令の場合はALUの出力、メモリ参照命令(ロード)での場合はデータ・メモリから取り出した値
35
算術論理演算命令と メモリ参照命令のデータパス
36
データパス構成要素をすべて接続
命令フェッチ用のデータパス 算術論理演算命令及びメモリ参照命令用のデータパス
分岐命令用のデータパス
37
データパス構成要素をすべて接続
38
制御ユニット
各状態論理要素のWrite信号 各マルチプレクサにおける選択器の制御信号
ALU制御のための信号
これらを入力から生成
39
ALU制御ユニット
ALUの4本ある制御入力のうち下記の組み合わせが定義されている
40
ALU制御ユニット
メモリ参照命令: 加算 分岐命令: 減算 算術論理演算命令: 命令の最下位にある6ビットの機能フィールドの値に応じてどれか一つを実行する
41
ALU制御ユニットへの入力
命令の機能フィールド 2ビットの制御フィールド (ALUOp) どのような演算操作を実施するのか
42
ALUOp
00: メモリ参照命令→加算 01: 分岐命令分岐命令→減算 10: 機能フィールドの値に応じた演算
43
ALU制御ユニット
44
複数レベルにわたるデコード法
主制御ユニットでALUOpビットを生成 それを入力としてALU制御ユニットでALUを制御する信号を生成
主制御ユニットを小さくできる 小さな制御ユニットを複数使用することはことは制御ユニットの速度向上に繋がる
45
ALUOpフィールドと 機能フィールドを対応付ける方法
46
3つの命令タイプの復習
47
注目すべき点
オペコードは常にビット31-26 読みだす2つのレジスタは、算術論理演算命令のときも分岐命令のときもビット25-21,20-16い保持さ
メモリ参照命令のベース・レジスタは常にビット25-21
分岐命令、メモリ参照命令の16ビットのオフセットは常にビット15-0
ディスティネーション。レジスタが指定される部分は2通り
48
主制御ユニットの設計
49
7本の制御線
50
制御ユニットと制御信号を 付加したデータパス
51
各命令操作コードの値と 各制御信号
52
add $t1,$t2,$t3 の場合
1. 命令フェッチ、PC繰り上げ 2. 2つのレジスタの値読み出し、主制御ユニットは制御線の設定
3. 機能コードからALUの機能の決定、演算 4. 結果を書き込み、ディスティネーション・レジスタ選択のために命令のビット15-11を使用
53
add $t1,$t2,$t3 の場合
54
lw $t1,offset($t2) の場合 1. 命令フェッチ、PC繰り上げ 2. レジスタの値読み出し($t2) 3. レジスタから読み出された値と命令の下位16ビットを符号拡張した値の和をALUで計算
4. 結果をデータ・メモリ用のアドレスとして使用
5. メモリ・ユニットからデータが読み出され、レジスタ・ファイルに書き込み、ディスティネーション・レジスタ選択のために命令のビット20-16を使用
55
lw $t1,offset($t2) の場合
56
beq $t1,$t2,offset の場合
1. 命令フェッチ、PC繰り上げ 2. 2つのレジスタの値読み出し 3. レジスタ・ファイルから読み出された値の差をALUで計算、PC+4に命令の下位16ビットを2ビット左にシフトして符号拡張した値に加え、分岐先アドレスの算出
4. ALUのゼロ判定に基いて、どちらのアドレスをPCに格納するか決定
57
beq $t1,$t2,offset の場合
58
制御ユニットの仕上げ
59
ジャンプの実装
分岐先アドレスは 下位2ビットは00 その次の26ビットは命令中の26ビットのフォ口フィールドから
上位4ビットは現在のPC+4の上位4ビット
60
ジャンプの実装
61
単一クロック・サイクルの 制御方式の問題点
現代のコンピュータに採用されることはまずない
各命令のクロック・サイクルが同じでなくてはならない クロック・サイクルはプロセッサ中の最長パスによって決まる
この方式はCPIは1であるが、全体的な性能が低い クロック・サイクルが長すぎるから
62
単一クロック・サイクル 初期のコンピュータではこの実装方式が使用されていた 浮動小数点ユニットやもっと複雑な命令を含む命令セットではうまくいかない
クロック・サイクル時間は最悪の場合に等しくする必要がある 最悪の場合のクロック・サイクル時間の改善には役立たない実装を試みつのは無意味
第1章で学んだ「一般的な場合を高速化せよ」 という腫瘍アイディアに反する
63