計算機アーキテクチャ特論 レポート課題


以下の各課題プログラムを作成し、レポートせよ。
※質問・疑問は随時受け付ける。

レポート提出期限 2015年8月11日(火)

レポートは 学科授業支援システム CoursePowerで提出すること。

課題1. 命令パイプラインシミュレータの作成

MIPS命令セットを持つパイプラインプロセッサのシミュレータを作成せよ。
ただし、非パイプラインシミュレータmipsyをベースとして、 7段パイプライン構成とすること。

基本的なパイプライン構成図は以下の図に示す。
(非パイプラインシミュレータでは、このパイプラインの各ステージを 命令サイクルの1サイクルごとに逐次的に処理している)

mipsy 7-stage pipelineの図

各ステージでの主な処理内容は以下の通りである。

A Simple Implementation of MIPS Pipeline (w/ 7-stage)

[IF stage (Instruction fetch First)]
    request_read_to_cache(PC);
    NPC = PC + 4;

[IS stage (Instruction fetch Second)]
    IR = reply_read_from_cache(PC);

[RF stage (Register file Fetch)]
    A = Regs[rs(IR)];
    B = Regs[rt(IR)];
    Imm = imm(IR);        // sign-extended immediate field of IR
    UImm = uimm(IR);      // immediate field of IR

[EX stage (EXecution)]
    Memory references:
    ALUOutput = A + Imm;
    request_read_to_cache(ALUOutput);
        or
    request_write_to_cache(ALUOutput, B);

    Register-Register ALU Instruction:
    ALUOutput = A func B;

    Register-Immediate ALU Instruction:
    ALUOutput = A func Imm;

    Branch:
    ALUOutput = NPC + (Imm << 2);
    Cond = (A == 0);

[DF stage (Data access First)]
    Memory references (Load instruction):
    LMD = request_read_to_cache(ALUOutput);

    Memory references (Store instruction):
    request_write_to_cache(ALUOutput, B);

    Branch:
    if (Cond) PC = ALUOutput;

[DS stage (Memroy Access)]
    Memory references (Load instruction):
    LMD = reply_read_from_cache(ALUOutput);

[WB stage (Write Back)]
    Memory references (Load instruction):
    Regs[rt] = LMD;

    Register-Register ALU Instruction:
    Regs[rd] = ALUOutput;

    Register-Immediate ALU Instruction:
    Regs[rt] = ALUOutput;

これをベースとして、データハザードを緩和するためのデータフォーワーディング 機能や、制御ハザードを緩和するための分岐先算出用の加算器・分岐条件判定器などを 追加すること。

紙面にて配布した資料 (Appendix-A Pipelining: Basic and Intermediate Conceptsの一部抜粋)を 参考にすること。
(ただし、配布資料では 5段パイプライン構成を前提としているので、細部は 異なる。5段の場合を参考に7段パイプラインの場合を検討し実装すること)

6段パイプラインの場合の実装方法のヒントは このページ(昨年度の課題のヒント)にあるので、 これも併せて参考にするとよい。
※このまま実装しても7段パイプラインの場合では正しく動かないので注意。 段数の違いを考慮して適宜変更すべき内容を変える必要がある。

命令パイプラインの動作を表示する機能を付け、 実際にプログラムを動作させたときの様子を表示させよ。
(いろいろ表示を工夫してパイプラインの動作が見やすくするとデバッグ作業 が行いやすくなる)

課題2. キャッシュメモリの追加

命令パイプラインシミュレータを拡張し、キャッシュメモリを追加せよ。
ただし、n-ウェイのセットアソシアティブ方式とし、nを任意に指定可能 とすること。
キャッシュメモリへのアクセス回数やヒット回数(あるいはミス回数)を計数して 表示する機能を付け、  実際にプログラムを動作させたときのキャッシュの効果について調査せよ。

課題3. 分岐ターゲットバッファ(BTB)の追加

7段パイプライン構成のMIPSプロセッサでは、遅延分岐(遅延スロットは1つ)を 用いてもパイプラインバブルを完全には解消できない。 分岐ターゲットバッファ(以下、BTB)を導入することで(予測が成功する限りにおいて) バブルを完全に無くすことができる。 命令パイプラインシミュレータを拡張し、BTBを追加せよ。
また、 分岐の回数やBTBによってパイプラインバブルを解消できた回数を計数して 表示する機能を付け、 実際にプログラムを動作させたときのBTBの効果について調査せよ。


文責:大津