Sujet : Re: Efficiency of in-order vs. OoO
De : mitchalsup (at) *nospam* aol.com (MitchAlsup1)
Groupes : comp.archDate : 10. Mar 2024, 20:39:21
Autres entêtes
Organisation : Rocksolid Light
Message-ID : <24958d8cc6a4fb16cda65fc4f50efe34@www.novabbs.org>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
User-Agent : Rocksolid Light
EricP wrote:
Paul A. Clayton wrote:
On 2/26/24 10:48 AM, EricP wrote:
Paul A. Clayton wrote:
On 1/28/24 1:48 PM, EricP wrote:
[snip]
The above described method still provides precise exceptions. The
absence of a earlier exception is required to allow such out-of-
order retirement.
Yes, early OoO retire with precise exception is possible.
The criteria would seem to be that:
- all older instructions that might generate an exception must have
executed without detecting an exception
- plus all older loads and stores translated their virtual addresses
(loads don't need to have completed execution, and stores will not have)
- plus all older conditional branches have executed without mispredicting.
You missed
- all inbound cache lines need to have arrived without ECC errors.
My concern is that the circuit for doing this could be pretty complicated.
Essentially equal in complexity to an IO retirement µArchitecture.
Many of the pieces that have to be checked are scattered around the core.
Also many of states are in circular buffers so determining "older" starts
getting slightly hairy (the Load Store Queue has a similar problem for
disambiguation determining if all older loads and stores have "resolved").
And all this has to run in parallel so it takes less than 1 clock.
The motivation for early OoO retire is usually early recycling of some
resources, usually physical registers. However note that you can't early
recycle some resources like entries in circular buffers, such as the
Instruction Queue, ROB/Future-File, LSQ, Branch Queue.
So the question I have is it really worth it?
History says no.
This also means that handling of an asynchronous event might have
to be delayed (if one did not want to have two threads active)
until all instructions before the latest-in-program-order retired
instruction have retired.
Which is exactly the IO retire criterion. Why go OoO retire when you have
to be able to IO retire under certain circumstances ?!?
<snip>
I define errors as a whole different category from exceptions and
interrupts, and explicitly model dependent, and each error has its
own characteristics.
Errors are different--machine checks, for example. These things SHOULD not happen and you really do want to know if they do.