Questa domanda è per le operazioni flottanti, operazioni prec. Singolo-prec con registri XMM/YMM su Haswell.Per le operazioni XMM/YMM FP su Intel Haswell, è possibile utilizzare FMA al posto di ADD?
Quindi, secondo il impressionante, impressionantetable messo insieme da Agner Fog, so che MUL può essere fatto su entrambi p0 porto e p1 (con recp thruput di 0,5), mentre solo aggiungere è fatto solo su porta p1 (con recp thruput di 1). Posso escludere questa limitazione, ma so anche che FMA può essere fatto su entrambe le porte p0 o p1 (con recp thruput di 0.5). Quindi è confuso per me il motivo per cui un ADD semplice sarebbe limitato a solo p1, quando FMA può usare p0 o p1 e fa sia ADD che MUL. Sto fraintendendo il tavolo? O qualcuno può spiegare perché sarebbe?
Cioè, se la mia lettura è corretta, perché Intel non dovrebbe usare FMA op come base sia per MUL semplice che per semplice ADD, aumentando così il thruput di ADD e MUL. In alternativa, cosa mi impedirebbe di utilizzare due operazioni FMA simultanee e indipendenti per emulare due OP opzionali simultanei e indipendenti? Quali sono le pene associate al fare ADD-by-FMA? Ovviamente, c'è un maggior numero di registri usati (2 reg per ADD vs 3 reg per ADD-by-FMA), ma a parte questo?
speculazione pura: La FPU sulla porta-0 per Haswell può gestire solo le istruzioni 5-ciclo. Non ha una logica "early-out" che consente di gestire le istruzioni sia a 3 che a 5 cicli. FP-add è un'istruzione a 3 cicli, quindi non può entrare nella porta-0. – Mysticial
Come aggiornamento da lungo tempo: Intel ha finito per utilizzare anche FMA per ADD, su Skylake. Skylake riduce la latenza FMA a 4 cicli. Questo sembra essere stato abbastanza un compromesso per loro di eliminare il FP-ADD dedicato a 3 cicli e inserirlo nell'hardware FMA a 4 cicli. Quindi ora abbiamo anche FP-ADD con due uscite. – Mysticial