Just for fun, let's argue about this.

We have decided that MUX and MOV instructions are co-redundant.  MOV is an
obvious special case of MUX, where one source is the destination or the
predicate is Always.  MUX is just an abbreviation for AT MOST two MOV
instructions with opposite predicates, but it can often be implemented with
just a single conditional MOV if the other MUX input is already in the dest
reg.

All things being equal, keeping MUX is better IN A BARREL PROCESSOR.  The
problem is in the non-barrel case [*]; MUX _always_ introduces two register
dependencies, which can lead to more stalls.  By contrast, if the predicate
for a MOV instruction resolves to false, we can just drop the instruction,
leading to NO stalls in the single-MOV case.

We just don't want to unnecessarily keep these two instructions.

Aaaaaannnnddddd... FIGHT!




[*] A barrel processor issues one instruction from each thread round-robin,
avoiding all branch and dependency hazards.  The alternative is to switch
threads only on potential stall conditions.  We want to support this at
least in the simulator.  The tradeoffs between the two options mostly
pertain to interaction with cache miss latencies on loads.

-- 
Timothy Normand Miller, PhD
Assistant Professor of Computer Science, Binghamton University
http://www.cs.binghamton.edu/~millerti/
Open Graphics Project
_______________________________________________
Open-graphics mailing list
[email protected]
http://lists.duskglow.com/mailman/listinfo/open-graphics
List service provided by Duskglow Consulting, LLC (www.duskglow.com)

Reply via email to