九州大学 システム情報科学府 情報理工学専攻 2017年8月実施 計算機アーキテクチャ
Author
Zero, 祭音Myyura
Description
【問 1】
以下の真理値表で与えられた論理関数 を図で示されるように つの関数 および AND ゲートと OR ゲートを使って実現することを考える.関数 および の真理値表を示せ.
【問 2】
つのステージからなるパイプライン式データパスを有するマイクロプロセッサについて考える.実装されたパイプラインステージは,IF(命令取得),ID(命令デコード),EX(実行),MEM(メモリアクセス),ならびに,WB(ライトバック)である.加算命令,ロードワード命令,ストアワード命令の実行における各ステージの処理内容は以下の表に従う.ここで,パイプラインストールの発生を除き,各パイプラインステージの実行は常に クロックサイクルで完了できると仮定する.また,WB ステージでレジスタに書き込まれた値は,同一クロックサイクルにて,後続命令の ID ステージで読み出し可能である.以下の各問に答えよ.
(1)
以下に示すプログラムについて考える.各行において ‘#’記号から右はコメントである.プログラム中に存在するフロー依存関係,逆依存関係,出力依存関係について,どの命令が,どの命令のどのレジスタに関して依存しているかをすべて列挙せよ.
lw $3, 10($2) # <1>
lw $4, 18($2) # <2>
add $10, $3, $4 # <3>
sw $10, 40($2) # <4>
add $10, $3, $3 # <5>
add $4, $3, $10 # <6>
(2)
上記 (1) の依存関係のうち,命令パイプライン処理で実行した際にデータハザードを生じさせるものを示せ.
(3)
上記 (2) のデータハザードを以下それぞれの方式によって対処した場合の上記 (1) のプログラムの実行における CPI (Clock cycles Per Instruction) を求めよ.
-
(A) パイプラインストールのみ
-
(B) データフォワーディング+パイプラインストール
(4)
逆依存関係や出力依存関係が生じる理由を説明せよ.
【問 3】
コンピュータのメモリシステムについて,以下の各問いに答えよ.
(1)
マイクロプロセッサに搭載されたダイレクトマップ・キャッシュについて考える.ワードサイズは バイト,キャッシュ・サイズは 16 バイト,ブロックサイズは バイト,アドレス長は ビットであり,キャッシュの初期状態は空とする.以下に示すワードアドレス ( 進表現) に対してメモリアクセスが順次発生した場合のキャッシュ・ミス率を答えよ.
(2)
初期参照ミスとは何か答えよ.また,初期参照ミス回数を削減する方法を述べよ.
题目描述
【问题 1】逻辑函数 的真值表和组合逻辑结构见原题图。要求按图使用 、、 三个函数以及 AND、OR 门实现 ,写出 、、 的真值表。
【问题 2】考虑具有 IF(取指)、ID(译码)、EX(执行)、MEM(访存)和 WB(写回)五级流水数据通路的微处理器。加法、装载字与存储字指令在各级中的具体操作见原题阶段表。除发生流水线停顿外,每一级均在 个时钟周期内完成;WB 阶段写入寄存器的值可在同一周期被后续指令的 ID 阶段读取。对以下程序(# 右侧为注释)回答:
lw $3, 10($2) # <1>
lw $4, 18($2) # <2>
add $10, $3, $4 # <3>
sw $10, 40($2) # <4>
add $10, $3, $3 # <5>
add $4, $3, $10 # <6>
- 枚举程序中全部流依赖、反依赖和输出依赖,逐一指出哪条指令依赖哪条指令以及涉及哪个寄存器。
- 指出这些依赖中哪些会在流水线执行时导致数据冒险。
- 分别采用下列方式处理冒险时,求该程序的 CPI(每条指令平均时钟周期数):
- (A) 仅使用流水线停顿;
- (B) 使用数据前递并配合流水线停顿。
- 说明反依赖和输出依赖产生的原因。
【问题 3】回答以下存储系统问题:
-
某直接映射缓存采用 字节字长、 字节容量、 字节块和 位地址,初始为空。依次访问下列二进制字地址时,求缓存缺失率:
-
解释什么是首次访问缺失(强制缺失),并说明减少其次数的方法。
Kai
【問 1】
| b | d | |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
| a | b | |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
| c | d | |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
【問 2】
(1)
フロー依存は
- レジスタ : <1> <3>, <1> <5>, <1> <6>
- レジスタ : <2> <3>
- レジスタ : <3> <4>, <5> <6>
逆依存は
- レジスタ : <3> <6>
- レジスタ : <4> <5>
出力依存は
- レジスタ : <3> <5>
- レジスタ : <2> <6>
(2)
ハザードを生じるのはフロー依存 <1> <3>()、<2> <3>()、<3> <4>()、<5> <6>()である。このインオーダ・パイプラインでは逆依存と出力依存はハザードを生じない。
(3)
(A)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lw | IF | ID | EX | MEM | WB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| lw | 0 | IF | ID | EX | MEM | WB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| add | 0 | 0 | IF | IF | IF | ID | EX | - | WB | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sw | 0 | 0 | 0 | 0 | 0 | IF | IF | IF | ID | EX | MEM | 0 | 0 | 0 | 0 | 0 |
| add | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | IF | ID | EX | - | WB | 0 | 0 | 0 |
| add | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | IF | IF | IF | ID | EX | - | WB |
上の表から クロックであり、CPI は
(B)
下の表より クロックであり、CPI は
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| lw | IF | ID | EX | MEM | WB | 0 | 0 | 0 | 0 | 0 | 0 |
| lw | 0 | IF | ID | EX | MEM | WB | 0 | 0 | 0 | 0 | 0 |
| add | 0 | 0 | IF | IF | ID | EX | - | WB | 0 | 0 | 0 |
| sw | 0 | 0 | 0 | 0 | IF | ID | EX | MEM | 0 | 0 | 0 |
| add | 0 | 0 | 0 | 0 | 0 | IF | ID | EX | - | WB | 0 |
| add | 0 | 0 | 0 | 0 | 0 | 0 | IF | ID | EX | - | WB |
(4)
逆依存と出力依存は、異なる値に同じレジスタ名を再利用するために生じる名前依存である。アウトオブオーダ実行では、後続命令の書込みが先行命令の読出しより先になると WAR、二つの書込みの順序が逆になると WAW ハザードになる。レジスタ・リネーミングで除去できる。
【問 3】
(1)
ブロック内オフセットは ビット、インデックスは ビットである。アクセスの成否は
なので、ミス率は 。
(2)
初期参照ミスは、あるメモリブロックを最初に参照した際、そのブロックがまだキャッシュにないために起こるミスである。ブロックサイズを大きくして空間的局所性を利用する、またはプリフェッチすることで削減できる。