2016-04-25 26 views
0

Agner Fog in his microarch.pdf says:x86 Decodierung von Mehr UOP Anweisungen

Decodierung wird effizienter, weil eine Anweisung, die eine verschmolzenen μop erzeugt in jedem der drei Decoder gehen kann, während ein Befehl, der nur gehen kann zwei μops erzeugt zum Decoder D0.

Ich weiß, dass die Decoder x86 Maschinencode als Eingabe (wie der Assembler Ausgabe von mov eax, eax) nehmen und produzieren Mikro-ops als Ausgabe.

Wie wird festgestellt, welcher Decoder bestimmte Anweisungen vor dekodieren soll? Vielleicht Vordekoder?

Antwort

2

Agners Microarch PDF erklärt die Dekodierung und was passiert mit Multi-Uop-Anweisungen.

Wenn ein Multi-Uop-Befehl nicht der erste insn im Block ist, der decodiert wird, endet die Decodierung bei diesem insn. Im nächsten Zyklus beginnt die Decodierung bei multi-uop insn und trifft den komplexen Decodierer, der Multi-uop-Befehle verarbeiten kann.

Aus diesem Grund dekodiert ein 3-1-3-1 Wiederholungsmuster besser als ein 3-3-1-1 Wiederholungsmuster.

Die Vordecoder markieren nur Befehlslängen/-grenzen. Sie wissen noch nicht, welches insns zu mehreren ups entschlüsseln wird. Dies erfordert eine tatsächliche Dekodierung der Anweisungen, so dass es keine Möglichkeit gibt, den Befehlsstrom herum zu mischen, um die komplexen Anweisungen an den komplexen Dekodierer zu senden.

Aus diesem Grund ist die Reihenfolge der Befehle wichtig, wenn Sie an den Decodern einen Engpass haben. Bei CPUs mit einem UOP-Cache ist die Decodierleistung normalerweise nicht kritisch. Wenn dies der Fall ist, liegt ein Problem mit der Codegröße vor. Es ist hoffentlich selten, dass Code so oft ausgeführt wird, dass seine Leistung von Bedeutung ist, aber selten genug, dass er im UOP-Cache nicht zu heiß ist.