Question: You are given the following code. Note that floating - point instructions use floating point registers labeled f . Integer instructions use integer registers labeled
You are given the following code. Note that floatingpoint instructions use floating point registers labeled f Integer instructions use integer registers labeled x
loop:
fld fx
fld fx
fadd f f f
fsub f f f
fmul f f f
fsd fx
subi x x
subi x x
bnz x loop
We are given the following latencies for the different types of instructions.
Floating point Multiply:
Floating Point AddSub:
Integer arithmetic:
LoadStore:
Branch if not taken:
Branch if taken:
Remember how to use latencies. For example, since fadd and sub have latencies of the fmul f f f which needs the results of fsub f f f must wait cycles from when fsub starts.
a Show how many cycles are needed to complete one iteration without reordering, but with data forwarding. DO NOT use delayed branch. Create a table that includes stalls not pipeline stages but stalls between instructions.
b Reorder instructions and show how many cycles are needed to complete one iteration. Show reordered code and cycles needed.
c Unroll the loop times, reorder instructions and show how many cycles are needed to complete two iterations.
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
