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


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

レポート提出期限 2011年8月12日(金)

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

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

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

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

mipsyパイプラインの図

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

A Simple Implementation of MIPS Pipeline (w/ 6-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);

[RR stage (Register file Read)]
    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);

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

    Branch:
    if (Cond) PC = 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段パイプライン構成を前提としているので、当然細部は異なる)

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

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

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

課題3. 分岐予測機構の追加

命令パイプラインシミュレータを拡張し、分岐予測機構を追加せよ。
予測方式は何を使ってもよい。 (ただし、not-taken予測以外にする)

分岐予測の回数や成功率(あるいは失敗率)を表示する機能を付け、 実際にプログラムを動作させたときの分岐予測の性能について調査せよ。


文責:大津