Computer Architecture: Pipelining: Dr. Ashok Kumar Turuk
Computer Architecture: Pipelining: Dr. Ashok Kumar Turuk
Pipelining
1
Pipelining
Pipelining?
3
Pipelining
4
RISC Instruction Set
Key properties of RISC architecture
11
RISC architecture
Most RISC architecture have three classes of instructions
ALU Instruction
Load and Store Instruction
Branches and Jumps: Branches are conditional transfer of
control. Two ways of specifying the branch condition in RISC
architecture:
With a set of condition bits (condition code)
Comparison between a pair of registers or between a register and
zero
We consider only comparison for equality between two register
In all RISC architecture, the branch address is obtained by
adding a sign-extended offset to the current PC
12
A "Typical" RISC
32-bit fixed format instruction (3 formats)
Memory access only via load/store instructions
32 64-bit GPR (R0 contains zero) and 32 64-bit FPR
3-address, register-register arithmetic instruction; registers in
same place
Single address mode for load/store:
base + displacement
no indirection
Simple branch conditions
Delayed branch (change the instruction sequence near a
branch instruction to avoid control penalty)
13
Example: MIPS (Note register location)
Register-Register
31 26 25 21 20 16 15 11 10 6 5 0
Register-Immediate
31 26 25 21 20 16 15 0
Op Rs1 Rd immediate
Branch
31 26 25 21 20 16 15 0
Jump / Call
31 26 25 0
Op target
14
Implementation of RISC Instructions
Instruction Fetch Cycle (IF)
IR <- Mem[PC]; IR holds the instruction
NPC <- PC + 4
15
Implementation of RISC Instructions
Execution/Effective address cycle (EX)
The ALU operates on the operands and perform one of 3
functions:
Memory reference: ALU adds the base register and the offset to
form the effective address.
R-R ALU instruction: ALU perform the operation specified by
the ALU opcode on the values read from register files.
R-Immediate ALU instruction: ALU performs the operation
specified by the ALU opcode on the first value read from the
register file and the sign-extended immediate
Why can we combine the effective address and
execution cycles into a single clock cycle?
16
Implementation of RISC Instructions
Memory Access
If load, memory does a read using the effective address.
If store, then the memory writes the data from the register using the effective
address.
Write-back cycle(WB)
Register-Register ALU instruction: Regs[IR16…20] <- ALU output
Register-Immediate ALU inst: Regs[IR16…20] <- ALU output
Load instruction: Regs[IR11…15] <- LMD
Branches:
2 cycles
Store:
4 cycles
Rest of Instructions:
5 cycles
17
Implementation of RISC Instructions
What will be CPI for the above implementation,
assuming a branch frequency of 12% and a store
frequency of 10% ?
18
Five-Stage Pipeline for RISC Processor
Instruction Clock number
number
1 2 3 4 5 6 7 8 9
Instruction i IF ID EX MEM WB
Instruction i + 1 IF ID EX MEM WB
Instruction i + 2 IF ID EX MEM WB
Instruction i + 3 IF ID EX MEM WB
Instruction i + 4 IF ID EX MEM
19
Figure C.2 The pipeline can be thought of as a series of data paths shifted in time. This shows the overlap among the parts of
the data path, with clock cycle 5 (CC 5) showing the steady-state situation. Because the register file is used as a source in the ID
stage and as a destination in the WB stage, it appears twice. We show that it is read in one part of the stage and written in another by
using a solid line, on the right or left, respectively, and a dashed line on the other side. The abbreviation IM is used for instruction
memory, DM for data memory, and CC for clock cycle.
21
Figure C.3 A pipeline showing the pipeline registers between successive pipeline stages. Notice that the registers prevent
interference between two different instructions in adjacent stages in the pipeline. The registers also play the critical role of carrying
data for a given instruction from one stage to the other. The edge-triggered property of registers—that is, that the values change
instantaneously on a clock edge—is critical. Otherwise, the data from one instruction could interfere with the execution of another!
23
Pipeline Limitations
Limitation due to pipeline latency
Execution time of each instruction does not decrease puts limits on the
practical depth of pipeline
Imbalances among the pipe stages
Reduces the performance since the clock can run faster than
the slowest pipeline stages
Pipeline overhead
Arises from the combination of pipeline register delay and
clock skew
Pipeline register add setup time plus propagation delay to the
clock cycle
Clock skew, is the maximum delay between when the clock
arrives at any two register
24
Pipeline Limitations
25
Examples
Unpipelined Processor:
10 ns cycle time
4 cycles for ALU operations (40%), branch (20%)
5 cycles for memory operations (40%)
Pipelining Processor:
adds 1 ns of overhead to the clock (due to clock skew and setup)
How much speedup in the instruction execution rate will we gain
from the pipeline? Ignore any latency impact.
Unpipelined:
average instruction execution time = clock * avg CPI
10 * ((40%+20%)*4+40%*5) = 44 ns
Pipelined = 11ns
Speedup = 44/11 = 4
26
Pipeline Hazards
27
Pipeline Hazards
Three types of hazards
Structural
Data
Control
28
Structural Hazards
29
Data Hazards
30
Control Hazards
31
Performance of Pipelines with Stalls
32
Performance of Pipelines with Stalls
33
Performance of Pipelines with Stalls
34
Performance of Pipelines with Stalls
35
Performance of Pipelines with Stalls
36
Performance of Pipelines with Stalls
37
Structural Hazards
Some combination of instructions cannot be
accommodated because of resource conflicts
Usually because some functional unit is not fully
pipelined. Two instructions using it cannot proceed at the
rate of one/cycle.
Some resource has not been replicated enough
Ex. 1 register file write port, combined I, D memory
Result: Pipeline stall one of the instructions until the
required unit is available.
• Pipeline bubble
38
Figure C.4 A processor with only one memory port will generate a conflict whenever a memory reference occurs. In this
example the load instruction uses the memory for a data access at the same time instruction 3 wants to fetch an instruction from
memory.
Instruction i + 1 IF ID EX MEM WB
Instruction i + 2 IF ID EX ME WB
M
Instruction i + 3 Stall IF ID EX MEM WB
Instruction i + 4 IF ID EX MEM WB
Instruction i + 5 IF ID EX MEM
Instruction i + 6 IF ID EX
40
Structural Hazards
Example: 40 % of instructions are data reference.
Ideal CPI of unpipelined processor, ignoring the
structural hazards is 1. Assume that the processor with
structural hazard has a clock rate that is 1.05 times
higher than the clock rate of the processor without
hazard. Disregarding any performance losses, is the
pipeline with or without the structural hazards faster,
and by how
Average instruction timeideal = 1*clock cycle timeideal
Average instruction timehazard = CPI * Clock cycle time /
= (1+0.4*1)*clock cycle timeideal /1.05
= 1.3*(clock cycle time)
41
Structural Hazards
Why allow structural hazards?
Reduce cost
If structural hazards are rare, it may not be
worth the cost to avoid
42
Data Hazards
43
Data Hazards
44
Figure C.6 The use of the result of the DADD instruction in the next three instructions causes a hazard, since the register is
not written until after those instructions read it.
46
Figure C.7 A set of instructions that depends on the DADD result uses forwarding paths to avoid the data hazard. The inputs
for the DSUB and AND instructions forward from the pipeline registers to the first ALU input. The OR receives its result by
forwarding through the register file, which is easily accomplished by reading the registers in the second half of the cycle and writing
in the first half, as the dashed lines on the registers indicate. Notice that the forwarded result can go to either ALU input; in fact,
both ALU inputs could use forwarded inputs from either the same pipeline register or from different pipeline registers. This would
occur, for example, if the AND instruction was AND R6,R1,R4.
48
Figure C.8 Forwarding of operand required by stores during MEM. The result of the load is forwarded from the memory
output to the memory input to be stored. In addition, the ALU output is forwarded to the ALU input for the address calculation of
both the load and the store (this is no different than forwarding to another ALU operation). If the store depended on an immediately
preceding ALU operation (not shown above), the result would need to be forwarded to prevent a stall.
LW R1, 0(R2)
SUB R4, R1, R5
AND R6, R1, R7
OR R8, R1, R9
50
Figure C.9 The load instruction can bypass its results to the AND and OR instructions, but not to the DSUB, since that
would mean forwarding the result in “negative time.”
52
Instruction 1 2 3 4 5 6 7 8
Instruction 1 2 3 4 5 6 7 8
53
Branch Hazards
When a branch is executed, it may or may not the PC to
something other than its current value plus 4
54
Instruction 1 2 3 4 5 6 7 8
One stall cycle for every branch will yield a performance loss
of 10% to 30% depending on branch frequency
55
Reducing Pipeline Branch Penalties
Freeze or Flush the Pipeline
Delete any instruction after the branch until branch destination
is known
Branch penalty is fixed and cannot be reduced by software
Instruction 1 2 3 4 5 6 7 8
56
Reducing Pipeline Branch Penalties
Predicted-Not-Taken (Predicted-untaken)
57
Instruction 1 2 3 4 5 6 7 8
Instruction 1 2 3 4 5 6 7 8
58
Reducing Pipeline Branch Penalties
Predicted-Taken
59
Reducing Pipeline Branch Penalties
Delayed Branch: Heavily used in RISC processor
Define branch to take place AFTER a following instruction
branch instruction
sequential successor1
sequential successor2 Branch delay of length n
........
sequential successorn
Instruction 1 2 3 4 5 6 7 8
61
Reducing Pipeline Branch Penalties
Almost all processor with delayed branch have a single
instruction delay
62
Figure C.14 Scheduling the branch delay slot. The top box in each pair shows the code before scheduling; the bottom box shows
the scheduled code. In (a), the delay slot is scheduled with an independent instruction from before the branch. This is the best choice.
Strategies (b) and (c) are used when (a) is not possible. In the code sequences for (b) and (c), the use of R1 in the branch condition
prevents the DADD instruction (whose destination is R1) from being moved after the branch. In (b), the branch delay slot is
scheduled from the target of the branch; usually the target instruction will need to be copied because it can be reached by another
path. Strategy (b) is preferred when the branch is taken with high probability, such as a loop branch. Finally, the branch may be
scheduled from the not-taken fall-through as in (c). To make this optimization legal for (b) or (c), it must be OK to execute the
moved instruction when the branch goes in the unexpected direction. By OK we mean that the work is wasted, but the program will
still execute correctly. This is the case, for example, in (c) if R7 were an unused temporary register when the branch goes in the
unexpected direction.
64
Performance of Branch Schemes
65
Reducing Branch Cost Through Prediction
As pipeline gets deeper and the potential penalty of
branches increases, using delayed branches and similar
schemes become insufficient
66
Static Branch Prediction
Use profile information collected from earlier runs
Key observation : Behavior of branches is often
bimodally distributed
An individual branch is often highly biased towards taken or
untaken
67
Figure C.17 Misprediction rate on SPEC92 for a profile-based predictor varies widely but is generally better for the floating-
point programs, which have an average misprediction rate of 9% with a standard deviation of 4%, than for the integer
programs, which have an average misprediction rate of 15% with a standard deviation of 5%. The actual performance depends
on both the prediction accuracy and the branch frequency, which vary from 3% to 24%.
69
Dynamic Branch Prediction and Branch-Prediction Buffer
1-bit prediction has performance shortcoming
Even if a branch is almost always taken, likely to mispredict twice rather
than once, when it is not taken
70
Dynamic Branch Prediction
2 bit scheme a prediction must miss twice before it is
changed
A branch-prediction buffer can be implemented as a
small special cache accessed with the instruction
addressed during the IF stage or as a pair of bits attached
to each block in the instruction cache and fetched with
the instruction.
71
Figure C.18 The states in a 2-bit prediction scheme. By using 2 bits rather than 1, a branch that strongly favors taken or not taken
—as many branches do—will be mispredicted less often than with a 1-bit predictor. The 2 bits are used to encode the four states in
the system. The 2-bit scheme is actually a specialization of a more general scheme that has an n-bit saturating counter for each entry
in the prediction buffer. With an n-bit counter, the counter can take on values between 0 and 2n – 1: When the counter is greater than
or equal to one-half of its maximum value (2n – 1), the branch is predicted as taken; otherwise, it is predicted as untaken. Studies of
n-bit predictors have shown that the 2-bit predictors do almost as well, thus most systems rely on 2-bit branch predictors rather than
the more general n-bit predictors.
75
Pipelined Implementation of MIPS
Execution / Effective address cycle (EX):
ALU performs one of the four functions depending on the MIPS
instruction type on the operand prepared in the prior cycle
Memory reference
ALUOutput ← A + Imm
Register-Register ALU instruction
ALUOutput ← A func B
Register-Immediate ALU instruction
ALUOutput ← A op Imm
Branch
ALUOutput ← NPC + (Imm << 2) [shifted to create word offset]
Cond ← (A = = 0)
76
Pipelined Implementation of MIPS
Memory Access/ Branch Completion Cycle (MEM)
PC is updated for all instruction: PC ← NPC
Memory reference
LMD ← Mem[ALUOutput] or
Mem[ALUOutput] ← B;
Branch
If (cond) PC ← ALUOutput
77
Pipelined Implementation of MIPS
Write-back cycle (WB)
Register-Register ALU instruction:
Regs[rd] ← ALUOutput
Register-immediate ALU instruction:
Regs[rt] ← ALUOutput
Load instruction:
Regs[rt] ← LMD
78
Figure C.21 The implementation of the MIPS data path allows every instruction to be executed in 4 or 5 clock cycles.
Although the PC is shown in the portion of the data path that is used in instruction fetch and the registers are shown in the portion of
the data path that is used in instruction decode/register fetch, both of these functional units are read as well as written by an
instruction. Although we show these functional units in the cycle corresponding to where they are read, the PC is written during the
memory access clock cycle and the registers are written during the write-back clock cycle. In both cases, the writes in later pipe
stages are indicated by the multiplexer output (in memory access or write-back), which carries a value back to the PC or registers.
These backward-flowing signals introduce much of the complexity of pipelining, since they indicate the possibility of hazards.
80
Figure C.22 The data path is pipelined by adding a set of registers, one between each pair of pipe stages. The registers serve to
convey values and control information from one stage to the next. We can also think of the PC as a pipeline register, which sits
before the IF stage of the pipeline, leading to one pipeline register for each pipe stage. Recall that the PC is an edge-triggered register
written at the end of the clock cycle; hence, there is no race condition in writing the PC. The selection multiplexer for the PC has
been moved so that the PC is written in exactly one stage (IF). If we didn’t move it, there would be a conflict when a branch
occurred, since two instructions would try to write different values into the PC. Most of the data paths flow from left to right, which
is from earlier in time to later. The paths flowing from right to left (which carry the register write-back information and PC
information on a branch) introduce complications into our pipeline.
ID:
ID/EX.A Regs[IF/ID.IR[rs]]; ID/EX.B Regs[IF/ID.IR[rt]]
ID/EX.NPC IF/ID.NPC, ID/EX.IR IF/ID.IR
ID/EX.Imm sign-extended(IF/ID.IR[immediate field])
82
Events in the EX Stage of MIPS
ALU Instruction:
EX/MEM.IR ID/EX.IR
EX/MEM.ALUOutput ID/EX.A func ID/EX.B OR
EX/MEM.ALUOutput ID/EX.A op ID/EX.Imm
Load or Store Instruction
EX/MEM.IR ID/EX.IR
EX/MEM.ALUOutput ID/EX.A + ID/EX.Imm
EX/MEM.B ID/EX.B
• Branch Instruction
EX/MEM.IR ID/EX.IR
EX/MEM.ALUOutput ID/EX.NPC + (ID/EX.Imm << 2)
EX/MEM.Cond (ID/EX.A = = 0)
83
Events in the MEM Stage of MIPS
ALU Instruction:
MEM/WB.IR EX/MEM.IR
MEM/WB.ALUOutput EX/MEM.ALUOutput
Branch Instruction
84
Events in the WB Stage of MIPS
• ALU Instruction:
Regs[MEM/WB.IR[rd]] MEM/WB.ALUOutput or
Regs[MEM/WB.IR[rt]] MEM/WB.ALUOutput
Load Instruction
Regs[MEM/WB.IR[rt]] MEM/WB.LMD
• Branch Instruction
85
86
Implementing Control for MIPS Pipeline
Instruction Issue
Process of letting an instruction move from ID into EX stage
In MIPS integer pipeline, all data hazards can be
detected in ID stage.
If data hazard exists, stall the instruction
What forwarding logic needed can be determined during ID
stage and set appropriate control
Detecting interlocks early in the pipeline reduces the hardware
complexity
Alternatively, we can detect hazard or forwarding at the
beginning of clock cycle that uses an operand.
87
Implementing Control for MIPS Pipeline
Implementation of interlock in ID stage for RAW
hazards with source coming from a load instruction (load
interlock).
88
Hazard Detection H/W can see by comparing the
destination and source of adjacent instruction
No Dependence
LD R1, 45(R2)
DADD R5, R6, R7
DSUB R8, R6, R7
OR R9, R6, R7
Dependence Requiring Stall
LD R1, 45(R2)
DADD R5, R1, R7
DSUB R8, R6, R7
OR R9, R6, R7
89
Hazard Detection H/W can see by comparing the
destination and source of adjacent instruction
Dependence overcome by forwarding
LD R1, 45(R2)
DADD R5, R6, R7
DSUB R8, R1, R7
OR R9, R6, R7
Dependence with accesses in order
LD R1, 45(R2)
DADD R5, R6, R7
DSUB R8, R6, R7
OR R9, R1, R7
90
91
Load Interlock
92
Logic to detect the need for load interlocks during the
ID stage of an instruction requires three comparisons
93
94
95
Figure C.27 Forwarding of results to the ALU requires the addition of three extra inputs on each ALU multiplexer and the
addition of three paths to the new inputs. The paths correspond to a bypass of: (1) the ALU output at the end of the EX, (2) the
ALU output at the end of the MEM stage, and (3) the memory output at the end of the MEM stage.
97
Copyright © 2011, Elsevier Inc. All rights Reserved.
98
What makes pipeline hard to
implement?
99
Dealing with Exceptions
Exceptional situations are harder to handle in a pipelined
CPU
100
Classification
Resume vs terminate
Terminate: Program execution always stops after the interrupt.
Easier to implement since no need to restart the execution
Resume: Program execution continues after the interrupt
105
Difficulty
It is difficult in implementing interrupts occurring within
instructions where the instructions must be resumed
How to implement such exceptions?
Invoke another program that
Save the state of the executing program
Correct the cause of the execution program
Restore the state of the program before the instruction
caused exception
Retry the instruction
Above steps must be invisible to executing program
107
Difficulty
108
Stopping and Restarting Execution
109
Stopping and Restarting Execution
Restarting is usually implemented by
Saving the PC of the instruction at which to restart
110
Saving the Pipeline State Safely
Pipeline control can take the following steps to save the
pipeline safely:
Until the trap is taken, turn off all writes for the faulting
instruction and for all instructions that follow in the pipeline
Above is done by placing all zeros into the pipeline
latches of all instructions in the pipeline, starting with the
instruction that caused the exception but not those that
preceded that instruction. This prevents any writes and,
therefore, changing any state
111
Saving the Pipeline State Safely
Pipeline control can take the following steps to save the
pipeline safely
After the exception-handling routine in the OS receives
control, it immediately saves the PC of the faulting
instruction. This value will be used to return from the
exception later.
112
Returning Machine From Exception
Last instruction in the OS trap handler is a special
instruction that returns the PC of the offending instruction
The next instruction to execute is the one causing the exception
A pipeline is said to have precise exceptions, if the
pipeline can be stopped so that the instructions just before
the faulting instruction are completed and those after it can
be restarted from the scratch
Programmers prefer precise exceptions: easy to handle in
integer pipeline
113
Returning Machine From Exception
High performance CPUs have introduced two modes of
operations
One mode precise exceptions and the other does not
114
Precise Exception for MIPS Integer Pipeline
Exception that might occur in each MIPS pipe stage
IF: Page fault on I-fetch, misaligned memory access, memory protection
violation
ID: undefined/ illegal opcode
EX: arithmetic exception
MEM: Page fault on D-fetch, misaligned memory access, memory
protection violation
WB: none
115
Precise Exception for MIPS Integer Pipeline
LD IF ID EX MEM WB
DAAD IF ID EX MEM WB
116
Precise Exception for MIPS Integer Pipeline
LD IF ID EX MEM WB
DAAD IF ID EX MEM WB
117
Precise Exception for MIPS Integer Pipeline
Pipeline does not handle the exception when it occurs in time.
This is because, it will lead to exceptions occurring out of the unpipelined
order.
Hardware posts all exceptions caused by a given instruction in a
status vector associated with that instruction
Once an exception indication is set in the exception status vector,
any control signal that may cause a data value to be written is
turned off
WB stage, exception status vector is checked. Exception are
handled in the order in which they would occur in time on an
unpipelined processor.
118
Handling Multicycle Operations
Floating-point operations usually take several EX cycles
FP operation completing in 1 or 2 CC required
A slow clock or using enormous amounts of logic in FP units or
both
FP instruction having the same pipeline as the integer
instruction
EX cycle is repeated as many times as needed to complete the
operation
Multiple FP functional units
A stall will occur, if the instruction to be issued, cause
Structural hazard for the FU it uses or
Data hazard
119
Handling Multicycle Operations
Assume there are four separate functional units:
Integer unit: handles Load, Store, Integer ALU operation and
Branch
FP and Integer multiplier
FP adder: Handles FP add, subtract, and conversion
FP and integer divider
120
Figure C.33 The MIPS pipeline with three additional unpipelined, floating-point, functional units. Because only one
instruction issues on every clock cycle, all instructions go through the standard pipeline for integer operations. The FP operations
simply loop when they reach the EX stage. After they have finished the EX stage, they proceed to MEM and WB to complete
execution.
126
127
128
How to Prevent Multiple WB?
Track the use of write port in the ID stage and stall an instruction
before it issues.
A shift register can be used to indicate when an issued instruction will use
the register file
The instruction in the ID stage is stalled for a cycle, if it needs to use the
register file at the same time as an instruction already issued
131
How to Prevent Multiple WB?
Assuming that the pipeline does all hazard detection in ID, there
are three checks that must be performed before an instruction can
issue:
132
How to Prevent Multiple WB?
Assuming that the pipeline does all hazard detection in ID, there
are three checks that must be performed before an instruction can
issue:
Check for RAW data hazard: Wait until the source register are
not listed as pending destinations in a pipeline register that will
not be available when this instruction needs the result
133
How to Prevent Multiple WB?
Assuming that the pipeline does all hazard detection in ID, there
are three checks that must be performed before an instruction can
issue:
134
MIPS R4000 Pipeline
• Eight stage pipeline
• Memory access is decomposed to from extra pipeline
stage
• Deeper pipeline are also known as superpipelining
135
Figure C.41 The eight-stage pipeline structure of the R4000 uses pipelined instruction
and data caches. The pipe stages are labeled and their detailed function is described in the
text. The vertical dashed lines represent the stage boundaries as well as the location of
pipeline latches. The instruction is actually available at the end of IS, but the tag check is
done in RF, while the registers are fetched. Thus, we show the instruction memory as
operating through RF. The TC stage is needed for data memory access, since we cannot
write the data into the register until we know whether the cache access was a hit or not.
137
MIPS R4000 Pipeline
Function of each pipe stage
EX: Execution, which includes effective address calculation,
ALU operation, and branch-target computation and condition
evaluation
DF: Data fetch, first half of data access
DS: Second half of data fetch, completion of data cache access
TC: Tag check, to determine whether the data cache access hit
WB: Write-back for loads and register-register operations
138
Figure C.42 The structure of the R4000 integer pipeline leads to a 2-cycle load
delay. A 2-cycle delay is possible because the data value is available at the end of DS
and can be bypassed. If the tag check in TC indicates a miss, the pipeline is backed up
a cycle, when the correct data are available.
LD R1, …… IF IS RF EX DF DS TC WB
140
Figure C.44 The basic branch delay is 3 cycles, since the condition evaluation
is performed during EX.
Branch Instruction IF IS RF EX DF DS TC WB
Delay Slot IF IS RF EX DF DS TC WB
Branch Target IF IS RF EX DF
Branch Instruction IF IS RF EX DF DS TC WB
Delay Slot IF IS RF EX DF DS TC WB
Branch Instruction + IF IS RF EX DF DS TC
2
Branch Instruction + IF IS RF EX DF DS
3
143
MIPS R4000 Pipeline
Deeper pipeline increases
Pipeline stall
Number of levels of forwarding for ALU operations
144
The Floating-Point Pipeline
R4000 FP unit consists of three FU
FP adder
FP divider
FP multiplier
Adder is used in the final step of multiply or divide
145
Stage FU Description
U Unpack FP number
146
FP Instructions Latency Initiation Pipe Stages
Interval
Add, subtract 4 3 U, S + A, A+R, R+S
147
Operati Issue 0 1 2 3 4 5 6 7 8 9 10 11
on / Stall
Multiply Issue U E+M M M M N N+A R
149