|>
|> I think that Nick is muddled on this one. If the base implementation is
|> already OoO then there will normally be many more physical registers than
|> architected ones. To go two-way SMT may not involve adding any physical
|> registers, but rather involve changes to renaming. "dual port" every
|> execution unit doesn't make much sense to me. Access to execution units from
|> either virtual processor is essentially free - they are after all virtual
|> processors, not real. What is required is that every bit of *architected*
|> processor state be renamed or duplicated, prehaps that's what Nick is
|> getting at?
You haven't allowed for the problem of access. A simple (CMP)
duplication doesn't increase the connectivity, and can be done
more-or-less by replicating a single core; SMT does, and may need
the linkages redesigning. This might be a fairly simple task for
2-way SMT, though there have been reports that it isn't even for
that, but consider it for 8-way.
|> > You have to mangle any performance counters and many privileged
|> > registers fairly horribly, because their meanings and constraints
|> > change. Similarly, you have to add logic for CPU state change
|> > synchronisation, because some changes must affect only the current
|> > thread and some must affect both. And you have to handle the case
|> > of the two threads attempting incompatible operations simultaneously.
|>
|> What operations are incompatible. SMT as implemented in the Pentium 4, say,
|> allows either virtual processor to do what it likes. One can transition from
|> user to kernel and back while the other services interrupts or exceptions or
|> whatever. The only coordination needed for proper operation is what is
|> needed for two processors - of course the performance may suffer though.
ABSOLUTELY NOT!
Look at the performance counters, think of floating-point modes
(in SMT, they may need to change for each operation), think of
quiescing the other CPU (needed for single to dual thread switching),
think of interrupts (machine check needs one logic, and underflow
another). In ALL cases, on two CPUs, each can operate independently,
but SMT threads can't.
|> yes lots of speculation. The difference here is that to CMP processor take
|> about twice the silicon of one, while with SMT you have the option to use
|> 1.5 cores worth of silicon. Perhaps once >dual cores is cheap and easy SMT
|> will die because its more effort than its worth, but my bet is that chips
|> will go both routes with SMT and CMP. Just one more little problem for the
|> OS developers to deal with
I am referring to the fair comparison between a 2-way SMT and a
dual-core CMP using the same amount of silicon, power etc. THAT
is what should have been compared - but I can find no evidence
that it was (though it probably was).
Regards,
Nick Maclaren.