Suggested ideas for projects in computer architecture
Due date in 2 weeks (Monday 23 June 1999)
Basically what you have to do is to "design" a machine, i.e. its instruction
set and/or its behaviour (microstep), modify/write a simulator and
run some benchmark program chosen from my integer benchmark suite.
If you cannot make the simulation work you can submit your design
and simulate it by hand. The objective is to design or modify a machine
and run one or two benchmark programs on its simulator and report its performance
(CPI).
Project list
Superscalar S1 with 2 ALUs
Add extra ALU to S1. You can use non-pipe or pipe version.
Invent a way to issue two instructions at the same time when possible.
S1 with branch prediction
Add branch prediction capability to S1 pipe. You have to
decide the method to do branch prediction, branch-target buffer. (Hint:
you can use only one or two entries in BTB, it will yield very good result).
Compare different prediction heuristic
Comparing one-bit, two-bit scheme with different heuristic for deciding
whether to take or not take the jump.
Change the number of pipeline stages
Design S1 with 2,3,4 stages pipeline. Compare its performance
with S1p which has 5 stages pipe.
Simulate scoreboard
Assume multifunctional units for S1, design and simulate how dynamic
instruction scheduling work.
Using delay slot to reduce branch penalty
Modify S1p jump instruction to have ability to use the delay
slot, rearrange the assembly code by hand to use this feature.
How to do the project
You have to design an instruction set with enough instruction to execute
some benchmark program (no I/O). You have to design "micro architecture",
i.e. the internal structure of a cpu and write its "micro step".
A set of benchmark program (Stanford integer
benchmark) written in C is provided. You must choose some portion
of programs to measure your design. The benchmark should be taken from
several parts of high level program and should be at least 10-20 lines
of assembly code in total. To validate (check that the design is
correct) and evaluate (measure how fast your cpu is) the design, you can
either :
-
Write (modify) a simulator and run the benchmark programs to count the
number of clocks required to complete the tasks (you will earn extra
bonus for doing the simulation) or
-
Estimate the number of clocks by hand. You need to make sure that
you count the right thing.
You must hand in a report containing the following sections :
-
Motivation behind your design (why you did it that way).
-
Instruction set details : opcode, opcode format, number of clock required
by each instruction.
-
Microarchitecture and its microstep.
-
Your benchmark program ( in your assembly language) and why you choose
this particular part of the program. Programs should be well commented
so that I can read and understand what it does.
-
How you validate and evaluate your design.
-
Performance of your design (Cycle Per Instruction)
-
Conclusion, what you learn from this project.
How I evaluate your project
I will look for the "quality" of your work including:
-
a. the innovative idea and/or well thought out solution
-
b. the correct understanding of the concept that you applied
-
c. the completeness of your work, correctness of the result
Any question regarding the project, please contact me promptly.