情報工学実験 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
© Copyright 2024 ExpyDoc