"EU" ist der Oberbegriff für die Ausführungseinheit. Die ALU ist ein Beispiel für eine Ausführungseinheit. FADD und FMUL, d. H. Der Gleitkommaaddierer oder -multiplizierer, sind andere Beispiele - wie dies für die Speichereinheit zum Laden und Speichern ist.
Die für LEA-Anweisungen relevanten EUs sind die ALU (add, subtract, AND/OR usw.) und die AGU (Address Generation Unit). Die AGU ist an die Speicher-Pipelines, TLB, Daten-Cache, etc.
Eine typische Intel x86 CPU zurück, als ich den ersten Codegen Leitfaden geschrieben hatte 2 ALUs, 1 laden Pipeline an eine AGU gebunden, eine Geschäftsadresse Pipeline gebunden zu einer zweiten ALU und einer Speicherdatenpipeline. Ab 2016 haben die meisten 3 oder 4 ALUs.
LEA ist eine Anweisung mit 3 Eingängen - BaseReg + IndexReg * Scale + Offset. Genau wie der Speicheradressierungsmodus von x86, der tatsächlich einen vierten Eingang hat, die Segmentbasis, die nicht Teil der LEA-Berechnung ist. 3 Eingänge kosten notwendigerweise mehr als die 2 für ADD benötigten Eingänge.
Bei einigen Maschinen kann die ALU nur 2 Eingabeoperationen ausführen. LEA kann daher nur auf einer AGU ausgeführt werden, speziell der AGU, die zum Laden verwendet wird (weil die Speicher-ALU kein Register schreibt). Dies kann bedeuten, dass Sie LEA nicht gleichzeitig mit Load oder zwei LEAs gleichzeitig ausführen können, während Sie im selben Zyklus zwei Adds und einen Load hinzufügen können.
Auf anderen Maschinen kann LEA mit einer, zwei oder drei ALUs durchgeführt werden. Möglicherweise anstelle der AGU - möglicherweise ebenso wie die ALU. Dies beweist mehr Flexibilität.
Oder die einfachen LEA, zB reg Skala + Offset, können auf den ALUs erfolgen, während die größte LEA, zB breg + ireg Skala + Offset, beschränkt sein kann, oder möglicherweise sogar in zwei Uops gebrochen.
(Ouch.. Die App auf < < abgeschnitten, wahrscheinlich ein HTML quotification Fehler, den ich an einem PC beheben kann Ah - fest von < < zu * ändern.)
So kommt die Frage nach unten zu: Welche EU (Execution Unit) handhabt welche LEAs? Die ALU oder die AGU? Die Antwort hängt von der Maschine ab.
Generischer Text in einem Optimierungsleitfaden kann einfach "EU" anstatt "AGU oder ALU, je nach Modell" oder "welche EU in der Lage ist, diese bestimmte LEA zu handhaben" sagen.
Siehe die [x86-Tag-Wiki] (http://Stackoverflow.com/tags/x86/info) für gute Links zu x86-Hardware-Details, vor allem http://agner.org/optimize/ –