命令実行フェーズ(pdf)

情報工学実験 II
実験テーマ : 命令実行フェーズ
035740F : 根保光秀
グループ名
実験日
提出日
共同実験者
035743A
:
:
:
:
:
なし
2004/11/15
2004/11/22
比嘉雅樹
1
実験の目的
各フェーズでどのような処理が行われているかを調査し、機械ご命令の実行の仕組みを理解する。
2
実験方法
1 フェーズずつ実行させフェーズの動きを観察し各レジスタの値を記録する。m÷n を求めるア
センブラプログラムを作成し動作を確認する。また C 言語に直す。
3
実験環境
• CHU-CHIP2 : pwB9503-050
4
報告事項
(1) 各実験についての報告
(1) 以下に示すプログラムを用いて、減算命令 (SUB) の実行フェーズを観測せよ。ただし、ACC
には、予め 07H を格納しておき,(7-5) の計算過程を観測するものとする。
表 1: SUB 命令
番地
機械語
アセンブラ言語
フェーズ数
00
01
02
03
00
A2
05
0F
NOP
SUB ACC ,d
05
HLT
3 フェーズ
4 フェーズ
3 フェーズ
表 2: SUB 命令の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
01
00
07
00
00
00
00
00
P0 実行後
P1 点灯
02
00
07
00
A2
A2
01
00
P1 実行後
P2 点灯
02
00
07
00
A2
A2
01
A2
P2 実行後
P3 点灯
03
00
07
00
05
05
02
A2
P3 実行後
P4 点灯
P4 実行後
P0 点灯
03
00
02
00
05
05
02
A2
(2) 下記の 4 つのプログラムについてそれぞれ 2 番目の命令の実行フェーズを観測し、実行フェー
ズ表を完成させよ、またそれおぞれのアセンブラプログラムに対応する機械語プログラムを
を示せ。
表 3: LD 命令 (即値アドレスモード)
番地 機械語 アセンブラ言語
00
01
02
03
00
62
05
0F
表 4: LD 命令 (絶対アドレスモード)
番地 機械語 アセンブラ言語
NOP
LD ACC,d
05H
HLT
00
01
02
03
1
00
64
07
0F
NOP
LD ACC,[d]
07H
HLT
番地
表 5: SCF 命令
機械語 アセンブラ言語
00
01
02
00
2F
0F
NOP
SCF
HLT
番地
表 6: AND 命令
機械語 アセンブラ言語
00
01
02
03
00
E2
05
0F
NOP
AND ACC,d
05H
HLT
表 7: LD 命令 (即値アドレスモード) の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
01
00
00
00
00
00
00
00
P0 実行後
P1 点灯
02
00
00
00
62
62
01
00
P1 実行後
P2 点灯
02
00
00
00
62
62
01
62
P2 実行後
P3 点灯
03
00
00
00
05
05
02
62
P3 実行後
P4 点灯
P4 実行後
P0 点灯
03
00
05
00
05
05
02
62
表 8: LD 命令 (絶対アドレスモード) の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
01
00
00
00
00
00
00
00
P0 実行後
P1 点灯
02
00
00
00
64
64
01
64
P1 実行後
P2 点灯
02
00
00
00
64
64
01
64
P2 実行後
P3 点灯
03
00
00
00
07
07
02
64
P3 実行後
P4 点灯
03
00
00
00
FF
FF
07
64
P4 実行後
P0 点灯
03
00
FF
00
FF
FF
07
64
表 9: SCF 命令の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
01
00
00
00
00
00
00
00
P0 実行後
P1 点灯
02
00
00
00
2F
2F
01
00
P1 実行後
P2 点灯
02
00
00
00
2F
2F
01
2F
P2 実行後
P3 点灯
P3 実行後
P4 点灯
P4 実行後
P0 点灯
02
08
00
00
2F
2F
01
2F
表 10: AND 命令の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
01
00
00
00
00
00
00
00
P0 実行後
P1 点灯
02
00
00
00
E2
E2
01
00
P1 実行後
P2 点灯
02
00
00
00
E2
E2
01
E2
P2 実行後
P3 点灯
03
00
00
00
05
00
02
E2
P3 実行後
P4 点灯
P4 実行後
P0 点灯
03
01
00
00
05
05
02
E2
2
(3) 下記のプログラムに置いて、IX=2 とした場合および IX=1 とした場合のそれぞれについて、
BZ 命令の実行フェーズを観測し、実行フェーズ表を完成させよ。
表 11: BZ 命令
番地
機械語
アセンブラ言語
00
01
02
03
04
05
AA
01
39
05
0F
0F
SUB IX,d
01H
BZ
05H
HLT
HLT
表 12: BZ 命令 (分岐条件不成立時 IX=2) の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
02
00
00
01
01
01
01
AA
P0 実行後
P1 点灯
03
00
00
01
39
39
02
AA
P1 実行後
P2 点灯
03
00
00
01
39
39
02
39
P2 実行後
P3 点灯
04
00
00
01
05
05
03
39
P3 実行後
P4 点灯
P4 実行後
P0 点灯
04
00
00
01
05
05
03
39
表 13: BZ 命令 (分岐条件成立時 IX=1) の実行フェーズ表
フェーズ
LED
PC
FLAG
ACC
IX
DBi
DBo
MAR
IR
実行直前
P0 点灯
02
01
00
00
01
01
01
AA
P0 実行後
P1 点灯
03
01
00
00
39
39
02
AA
P1 実行後
P2 点灯
03
01
00
00
39
39
02
39
P2 実行後
P3 点灯
04
01
00
00
05
05
03
39
P3 実行後
P4 点灯
P4 実行後
P0 点灯
05
01
00
00
05
05
03
39
(4) 8 ビットの 2 進数 m(データ領域の 0x00 番地に格納),n(データ領域の 0x01 番地に格納) に対
し、商 m÷n(小数点以下は不要) を求めるアセンブラプログラムを作成ししなさい。また、こ
のプログラムを解析し、C 言語によるプログラムに書き換えなさい。下記の場合の動作を確
認しなさい、n=0 のときの商を 0xFF にすること
• m>n で、n が m を割り切れる場合の動作
• m>n で、n が m を割り切れない場合の動作
• m<n の場合の動作
• m=n の場合の動作
• n=0 の場合の動作
○ プログラムの説明
3:4:int 型で変数を宣言、この変数はレジスタを表す。5:6:で ACC,IX をそれぞれ初期化 7:∼10:
で M と N の値をデータ領域に格納している処理を表す。11:IX+N をする事で IX に N を代
入 (フラグを立てるため)。12:IX(N) が 0 だったら goto で 26:までジャンプ。15:IX に M を
格納、17:∼21:IX-N を M¡0 になるまで繰り返す。減算した回数を ACC(商) に格納。22:goto
でループ。24:ACC の値を表示して終了 27:ACC=FF を表示して終了。
3
表 14: m÷n を求めるアセンブラプログラム
ADRS
00 :
01 :
02 :
03 :
04 :
05 :
06 :
07 :
08 :
09 :
0A :
0B :
0C :
0D :
0E :
0F :
10 :
11 :
12 :
13 :
DATA
C0
C9
BD
01
39
11
6D
00
AD
01
3A
10
B2
01
30
08
0F
62
FF
0F
OPECODE
EOR ACC ACC
EOR IX IX
ADD IX (d)
01H
BZ
11H
LD IX (d)
00H
SUB IX (d)
01H
BN
10 (d)
ADD ACC + 1
01H
BA
(08H)
HLT
LD ACC d
FFH
HLT
COMENT
ACC を初期化
IX を初期化
n を IX に格納
(01H) には n が格納されている。
n=0 だったら 11 番地にジャンプ
m を IX に格納
(00H) には m が格納されている。
m<0 になるまで m-n を行い、減算を行った回数
=商を ACC に格納する。
n>m だったらループを抜ける
10 番地にジャンプ
ACC をインクリメント
ACC=商
n>m になるまでループ
終了 (n<0 なら ACC=0)
n=0 の時の処理
ACC を FF にする
終了 (m>n なら ACC=FF)
表 15: m÷n C 言語
1 #include <stdio.h>
2 int main(){
3 int acc,ix;
4 int adr[256];
5 acc=acc∧acc;
6 ix=ix∧x;
7 printf(”m=”);
8 scanf(”%d”,&adr[0]);
9 printf(”n=”);
10 scanf(”%d”,&adr[1]);
11 ix=ix+adr[1];
12 if(ix==0){
13 goto hlt2;
14 }
15 ix=adr[0];
16 roop:
17 ix=ix-adr[1];
18 if(ix<0){
19 goto hlt1;
20 }
21 acc++;
22 goto roop;
23 hlt1:
24 printf(”ACC=%d n”,acc);
25 exit(1);
26 hlt2:
27 printf(”acc=ff n”);
START
ACC = ACC
ACC
IX = IX
IX
IX = IX + N
N=0
ACC = FF
IX = M
IX = IX - N
M<0
ACC ++
END
図 1: フローチャート
4
END
(2) KUE-CHIP2 の P0∼P4 までの各命令実行フェーズについて、それぞれの
フェーズにおいてどのような処理が行われているかを。実験結果から検討し、説
明せよ
P0 実行後の各レジスタの内容を観察すると PC の値が一つ増えていて MAR に前回の PC の値
が格納されている。この事から P0 では MAR に PC の値を格納し PC をインクリメントしている
事が分かった。さらに P0 では DBi と DBo に PC の指すレジスタの内容が格納されている。
P1 実行後には IR に MAR の指すレジスタの内容が格納されている。この事から P1 フェーズは
命令を読み出している事がわかる。
P2 実行後には PC の値を MAR に格納し PC をインクリメントしている。また、DBi には処理に
使う値が格納されていて、DBo には処理の結果が格納されている事から、P2 で実際に処理を行っ
ている。
今回の実験で確認したプログラムで P 3を行ったのは LD 命令 (絶対アドレスモード) のみなの
でそれについて観察する。P3 実行後変化したレジスタは DBi と DBo と MAR である。この事か
ら MAR には LD で指定された絶対アドレスが格納されていて、DBi DBo にはそのアドレスの内
容が格納されている。
P4 実行後では処理の結果を指定したレジスタに格納されている。例えば SUB ACC,05H だと
ACC-5 の結果が ACC に格納されている。この事から P4 で結果をレジスタに格納して命令を終了
している事が分かる。
(3) パイプライン処理に置ける処理の乱れの事をパイプライン・ハザードという。
ハザードの種類およびそれらの回避方法について調査し図表などを用いて分かり
やすく説明せよ。
パイプライン・ハザードの種類をまとめた表を以下に示す。これらのハザードが発生した場合は
パイプラインは処理を数クロック停止させた後、処理を始める。ハザードが多く起こると処理時間
が遅くなるのでこれらのハザードに対する解決策が必要である。
表 16: パイプラインハザードの種類
名前
データハザード
制御ハザード
構造ハザード
説明
解決策
演算命令が連続している場合に起こりやすい、 命令の実行順序を入れ替える、演算結果を先
適切な値を利用する事ができない。
回りさせる回路を使用する
分岐命令などにより制御の流れが変わるとき
分岐命令を判断する ID フェーズを用いる、ま
に発生する。
たは遅延分岐を用いる。
同時に同じメモリ (データ) を参照しようとし
遅延ロードまたは、スコアボーディングを用
た時に発生する。
いる。
• データハザード
連続する演算命令が右図の用なパイプライン処理
で実行されようとした時最初の命令 (I1) での演算
結果を次の命令 (I2) で読み出して使用したいが I1
の演算結果がレジスタに格納されるのはフェーズ
4 の WB なので I2 がフェーズ 1 の IF で読み込ん
だ値は適切ではない事が分かる。このように適切
なデータを使用できない状態をデータハザードと
いう。
5
I1
I2
IF
MEM WB
ID EX MEM WB
ID EX
IF
図 2: データハザードの例
• データハザードの解決策
データハザードを解決するにはデータの書き込みをフェーズの前半で行い、データの読み出
しをフェーズの後半で行う事でハザードを解決できる、二つのバッファ(CHU-CHIP2 では
DBi と DBo) を組み合わせる事で実現できる。DBi には前の演算結果を DBo には現在の演
算結果を格納する事でデータハザードを防いでいる。
• 制御ハザード
制御ハザードが起こる原因は分岐命令である。これを回避するためには ID フェーズで分岐
命令を予想し EX フェーズで分岐命令を実行できるようにするものである。しかしこれでは
パイプライン処理が難しくなるので分岐命令と次の命令との間に何もしない命令 (NOP) を
はさんでおく。(下図参照) このように NOP 命令を挟む分岐を遅延分岐と呼ぶ。遅延分岐を
使う事で制御ハザードを解決している。
IF
ID
EX
IF
IF
ID
WB
MEM
ID
EX
WB
MEM
WB
WB
MEM
EX
MEM
NOP
IF
ID
EX
図 3: 遅延分岐の例
• 構造ハザード
構造ハザードはコンピュータの構造上 (メインメモリとレジスタとの速度の差) 起こるハザー
ドである。ロード命令はメインメモリからデータを取り出すため、データをレジスタに格納
するまでに時間がかかる。レジスタにデータが格納されるのは、WB フェーズであるため、
分岐命令と同じように遅延ロードスロットを間に入れる必要がある。この方法を遅延ロード
と呼ぶ。(概要図は遅延分岐と同じ)
構造ハザードを解決するもう一つの方法をスコアボーディングという。スコアボーディング
では、LD 命令が実行されると、書き込み先のレジスタに対し、読み出し不可のビットを立
て、データがレジスタに書き込まれたら読み出し可ビットをたてる。次の命令は読み出しフ
ラグが立つまでは待機し続ける事で構造ハザードを回避している。命令の順番を入れ替えな
くても良いという利点があるが、読み出し不可の状態が長く続くとパイプラインが機能しな
くなるので、プロセッサの処理速度が低下する。
IF
ID
IF
EX
MEM WB
ID
EX
IF
ID
MEM WB
EX MEM WB
図 4: スコアボーディング
(4) IPC について以下の設問に答えよ。
(a) IPC が 1 の CPU を載せたコンピュータ A と IPC が 2 の CPU を載せたコンピュータ B があ
り、両方のコンピュータで同じプログラムを同時に実行した。その結果、コンピュータ B の
6
方が IPC が大きいのにも関わらず、コンピュータ A の方が先に処理を終了したこの理由に
ついて考察せよ。
IPC が大きいから B の方が A より性能が高いとは言い切れない。例えば、B が一秒間に 1
クロックで A が 1 秒間に 100 クロックで動作していれば当然 A の方が先に処理を終了する。
IPC とは 1 クロックで実行可能な命令数であるが IPC だけが高くても周波数が低ければパソ
コンの性能は当然落ちる。IPC は CPU の性能を表す値なので、その値が大きければ処理が
早いとは言えない。また、A がスーパーパイプラインアーキテクチャを実装していた場合、
IPC の値は変わらないが処理速度は速くなる。よって IPC の低い A の方が先に処理を終了
しても矛盾はない。
(b) 以下に示す 3 つのアーキテクチャは、いずれも IPC を向上させる事によって、プロセッサの高
速化を実現するアーキテクチャである。各アーキテクチャの特徴や違いを図表などを用いて
分かりやすく説明せよ。また、各アーキテクチャにおいて、IPC が向上する理由を説明せよ。
• スーパースカラ・アーキテクチャ
スーパースカラとはパイプライン処理と命令の並列実行を組み合わせたアーキテクチャ
である。プロセッサを複数用意し、複数のプロセッサを同時に稼働させる事で処理を高
速化する。スーパースカラ・アーキテクチャを実装するにはコンピュータをマルチプロ
セッサシステムにする必要がある。プロセッサの数を 2 つにすると処理速度は倍になる
がコストも倍になる。
• VLIW(Very Long Instruction Word) アーキテクチャ
複数の命令を一つの命令としてまとめて実行するアーキテクチャ。複数の命令をまとめ
るので 1 命令が非常に長くなる事からこの名前で呼ばれている。命令を並列に割り当て
るように命令を最適化しなかければならないので、コンパイラの負担が大きい。命令を
コンパイラがまとめ一つの命令として実行させることで IPC を向上させている。
• SMT(Simultaneous Multi-Threading) アーキテクチャ
一つの CPU で複数のスレッドを同時処理するアーキテクチャ。ここでスレッドとは命
令中の処理の事である演算命令を実行している時、使用していない演算装置を使いス
レッドを並列に行い処理を高速化する手法である。
Processor 1
IF
ID
EX
MEM
Processor 2
IF
ID
EX
MEM
WB
WB
Processor 1
IF
ID
EX
MEM
Processor 2
IF
ID
EX
MEM
WB
WB
図 5: スーパースカラアーキテクチャ概要図
(c) 以下に示すアーキテクチャは、プロセッサの高速化を実現するアーキテクチャであるが、IPC
は向上しない。その理由を図表等を用いて分かりやすく説明せよ。
• スーパーパイプライン・アーキテクチャ
命令のステージ数を細分化したパイプラインアーキテクチャである。そのためステージ
数が多くなってしまう。命令を処理するためのクロック数が増加するため IPC は向上
しないが、各ステージで行う処理が分散されるので、回路が簡単化できるため結果とし
て CPU の動作をあげる事ができる。
7
IF
ID
IF
EX
ID
IF
ID
IF
WB
WB
MEM
EX
ID
IF
IF
MEM
EX
MEM
EX
ID
WB
MEM
EX
WB
MEM
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
WB
図 6: 上:スーパーパイプライン概要図 下:パイプライン概要図
上図をみて分かるように、同じ実行時間でスーパーパイプラインアーキテクチャは 5 命
令処理している。しかし、クロック数に注目してみるとパイプライン処理の倍近くか
かっている。この事から単位時間内で処理できる命令数が倍になっているがクロック数
も 2 倍になっているため、全体としての IPC は変化しないことがわかる。これがスー
パーパイプラインアーキテクチャで IPC が向上しない理由である。
(5) 本実験について考察せよ。
今回の実験では命令の実行フェーズと CPU の高速化の手法について学んだ。CPU の高速化の
手法で挙げたスーパーパイプライン・アーキテクチャ、スーパースカラ・アーキテクチャ、VLIW
方式などは並列処理方式と呼ばれる。ここでは、この並列処理方式について調査し報告する。
並列処理方式は、複数のコンピュータ、あるいはプロセッサを並列に結合して 1 つのシステムと
する事で処理能力を向上させる方式である。特にプロセッサを複数個用意するシステムをマルチプ
ロセッサと呼ぶ。このようにプロセッサのアーキテクチャには多くの種類がある事が分かった。こ
れらのアーキテクチャを下記に示す。
SISD
表 17: アーキテクチャの種類
Single Instruction Single Data Stream。逐次
処理のアーキテクチャ一つの命令で一つのデー
タを処理できる。
SIMD
Single Instruction Multiple Data stream。並
列処理一つの命令で複数のデータを同時に処
理できるアーキテクチャ。アレイ型のプロセッ
サに見られる。
MISD
Multiple Instruction Single Data stream 一つ
のデータを複数の命令で同時に実行するアー
キテクチャ
MIMD
複数個独立した命令が異なるデータを処理。
並列処理とパイプライン処理の両方が可能な
プロセッサ。
マルチプロセッサは、複数の CPU が主記憶や補助記憶を共有し、作業を分担してへ列に処理す
8
るシステム構成である。複数のシステムが別々の OS で制御される疎結合型マルチプロセッサと、
主記憶装置を共有しながら同一の OS で制御される、密結合型マルチプロセッサの 2 種類ある。そ
れぞれの概要図を以下に示す。
CPU
CPU
CPU
BUS
CPU
CPU
Data
Data
Program
Data
Program
BUS
図 8: 疎結合型マルチプロセッサの概要図
Program
図 7: 密結合型マルチプロセッサの概要図
上記の図のように密結合型マルチプロセッサはプロセッサは独立していて、一つの命令やデータ
を共有して実行する事により処理速度を上げている。一方、疎結合型マルチプロセッサは複数のプ
ロセッサが独立した命令を実行して行くことにより処理能力を向上している事がわかる。
マルチプロセッサでは処理を並列に行うので処理速度はとてもはやい、しかし、並列化できない
逐次処理の実行が処理能力を下げてしまう(ボトルネック)。並列化できない処理の例として、複
数のプロセッサからの主記憶装置の使用要求の競合の発生などが挙げられる。これらの事を考慮
し、高速化を図るためには、処理装置の高速化と平行し、メモリアーキテクチャや入出力アーキテ
クチャの高速化が必要である。
参考文献
[1] 現代 計算機アーキテクチャ : 齋藤 忠夫・大森 健児 :オーム社
[2] 情報処理技術者試験 完全教本 : 日高哲郎:日本経済新聞社
[3] ソフトウェア開発技術者 完全攻略 : 岩田 義一・成田 佳應・小菅 貴彦 : 株式会社オーム社
[4] hydrangea 0.09 : http://homepage2.nifty.com/hydrangea/
9