Pipeline Processor
Introduction
In this lab you will about the optimization technique called loop unrolling and learn about the design and implementation of a pipelined Y86-64 processor by extending the PIPE (pipeline) Y86-64 processor simulator with a new instruction, iaddq, similar to what you did in the previous assignment.
Loop Unrolling
Download and extract the loopunroll.tar.
cd cs224
wget --no-check-certificate https://cs224.cs.vassar.edu/labs/loopunroll.tar
tar xvf loopunroll.tar
cd loopunroll
We will go over this code together in lab. Have a look at sum.ys and the
loop unrolled version sumUnroll2.ys to understand how they work. You job is
to write sumUnroll3.ys which computes the sum three elements at a time.
Adding the iaddq instruction
For this part of lab, we will be working in the archlab/pipe directory.
The file pipe-full.hcl contains a copy of the HCL code for PIPE, our pipeline implementation of the Y86-64 processor, along with a declaration of the constant value IIADDQ. Similar to what you did in your last lab, you will add the proper HCL code to add the iaddq instruction for the pipelined processor. Unlike last time, you do not need to write down the steps for each stage, though you may want to refer back to them has you implement your instruction.
Testing your iaddq implementation
To test the implementation of your iaddq instruction you need to rebuild psim, the pipelined Y86 simulator. After your modify your pipe-full.hcl file type the following in the archlab/pipe directory
# in the archlab/pipe directory
make clean
make psim VERSION=full
to rebuild the pipelined simulator, psim.
To test to make sure your implementation didn’t break anything, you can test it against the Y86-64 benchmark programs in archlab/y86-code code directory:
# in the archlab/y86-code directory
make testpsim
This will run psim on the benchmark programs and compare results with yis. This does not test your iaddq implementation, only that the other instructions still work correctly. Once you can execute the benchmark programs correctly, then you should check it with the regression tests in archlab/ptest.
To test your implementation of the iaddq instruction:
# in the archlab/ptest directory
make SIM=../pipe/psim TFLAGS=-i
Submitting your work
Upload your pipe-full.hcl and sumUnroll3.ys to
Gradescope.