Diese Frage ist für gepackte, single-prec Floating-Ops mit XMM/YMM-Registern auf Haswell.Für XMM/YMM FP-Betrieb auf Intel Haswell, kann FMA anstelle von ADD verwendet werden?
So nach den ehrfürchtigen, ehrfürchtigentable zusammengestellt von Agner Nebel, ich weiß, dass MUL entweder p0 Port getan werden kann und p1 (mit recp Durchsatz von 0,5), während nur auf nur getan wird ADD Port p1 (mit Recp-Durchsatz von 1). Ich kann diese Einschränkung, aber ich weiß auch, dass FMA kann entweder auf Port p0 oder p1 (mit Recp thruput von 0,5) getan werden. Daher ist es verwirrend für mich, warum ein einfaches ADD nur auf p1 beschränkt ist, wenn FMA entweder p0 oder p1 und sowohl ADD als auch MUL verwenden kann. Verkenne ich den Tisch falsch? Oder kann jemand erklären, warum das wäre?
Das ist, wenn mein Lesen korrekt ist, warum würde Intel nicht nur FMA op als Grundlage für beide einfache MUL und einfache ADD verwenden, und dadurch den Durchsatz von ADD sowie MUL erhöhen. Alternativ, was würde mich davon abhalten, zwei simultane, unabhängige FMA-Ops zu verwenden, um zwei gleichzeitige, unabhängige ADD-Ops zu emulieren? Wie hoch sind die Strafen für ADD-by-FMA? Offensichtlich gibt es eine größere Anzahl von Registern (2 reg für ADD vs. 3 reg für ADD-by-FMA), aber anders als das?
reine Spekulation zu bekommen: Die FPU auf Port-0 für Haswell nur 5-Zyklus Anweisungen verarbeiten kann. Es verfügt nicht über eine "frühzeitige" Logik, mit der es sowohl 3- als auch 5-Zyklen-Befehle verarbeiten kann. FP-add ist eine 3-Zyklus-Anweisung, daher kann es nicht in Port-0 gehen. – Mysticial
Als überfälliges Update: Intel hat am Ende auch die FMA für ADDs benutzt - auf Skylake also. Skylake reduziert die FMA-Latenz auf 4 Zyklen. Das scheint ein ausreichender Kompromiss für sie gewesen zu sein, um das dedizierte 3-Zyklus-FP-ADD zu beseitigen und es in die 4-Zyklus-FMA-Hardware zu schieben. Jetzt haben wir auch Dual-Problem FP-ADD. – Mysticial