A technique is provided for breaking a stalled condition or livelock in a
processor having a replay queue. A livelock or stalled condition is
detected. One or more instructions are temporarily stored in a replay
queue. A release or break in the livelock or stalled condition is
detected, and the instructions are then unloaded from the replay queue for
replay or re-execution. For a multi-threaded processor, a stall is
detected in one of the threads. Instructions of the stalled thread are
temporarily stored in a replay queue, except the oldest instruction of the
stalled thread which is allowed to replay or re-execute. This allows other
threads to have access to execution and replay resources. Eventually, the
oldest instruction will execute and retire, which breaks or releases the
stalled thread. The instructions stored in the replay queue are then
unloaded from the replay queue.
Μια τεχνική παρέχεται για το σπάσιμο ενός χρονοτριβημένου όρου ή livelock σε έναν επεξεργαστή που έχει μια σειρά αναμονής επανάληψης. Livelock ή χρονοτριβημένος ένας όρος ανιχνεύεται. Μια ή περισσότερες οδηγίες αποθηκεύονται προσωρινά σε μια σειρά αναμονής επανάληψης. Μια απελευθέρωση ή ένα σπάσιμο livelock ή χρονοτριβημένο τον όρο ανιχνεύεται, και οι οδηγίες ξεφορτώνονται έπειτα από τη σειρά αναμονής επανάληψης για την επανάληψη ή την επαν-εκτέλεση. Για έναν πολύπλοκο επεξεργαστή, ένας στάβλος ανιχνεύεται σε ένα από τα νήματα. Οι οδηγίες του χρονοτριβημένου νήματος αποθηκεύονται προσωρινά σε μια σειρά αναμονής επανάληψης, εκτός από την παλαιότερη οδηγία του χρονοτριβημένου νήματος που επιτρέπεται για να επαναλάβει ή να επαν-εκτελέσει. Αυτό επιτρέπει σε άλλα νήματα για να έχει πρόσβαση στην εκτέλεση και να επαναλάβει τους πόρους. Τελικά, η παλαιότερη οδηγία θα εκτελέσει και θα αποσυρθεί, το οποίο σπάζει ή απελευθερώνει το χρονοτριβημένο νήμα. Οι οδηγίες που αποθηκεύονται στη σειρά αναμονής επανάληψης ξεφορτώνονται έπειτα από τη σειρά αναμονής επανάληψης.