FMA (set de instrucțiuni)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Setul de instrucțiuni FMA este o extensie a instrucțiunilor de 128 și 256 de biți pentru extensiile Streaming SIMD ale microprocesorului x86 Set de instrucțiuni pentru efectuarea operațiilor FMA ( Fused Multily-add ). [1] Există două variante:

  • FMA4 este acceptat în procesoarele AMD începând cu arhitectura Bulldozer . FMA4 a fost realizat în hardware înainte de FMA3.
  • FMA3 este acceptat în procesoarele AMD începând cu arhitectura Piledriver și Intel începând cu procesoarele Haswell și Broadwell din 2014.

Instrucțiuni noi

Instrucțiunile FMA3 și FMA4 au funcționalități aproape identice, dar nu sunt compatibile. Ambele conțin instrucțiuni de multiplicare fuzionată - adăugare (FMA) pentru SIMD și operații scalare în virgulă mobilă , dar instrucțiunile FMA3 au trei operanzi, în timp ce instrucțiunile FMA4 au patru. Operația FMA are forma d = rotund ( a · b + c ) în care funcția rotundă efectuează o rotunjire pentru a permite rezultatului să se potrivească în registrul de destinație dacă există prea mulți biți semnificativi pentru a se potrivi destinației.

Forma cu patru operandi (FMA4) permite a , b , c și d să fie patru registre diferite, în timp ce forma cu trei operandi (FMA3) necesită ca d să fie același registru ca a , b sau c . Formularul cu trei operandi face codul mai scurt și implementarea hardware ușor, în timp ce formularul cu patru operandi oferă o mai mare flexibilitate de programare.

Consultați setul de instrucțiuni XOP pentru discuții suplimentare despre problemele de compatibilitate dintre Intel și AMD.

Set de instrucțiuni FMA3

CPU cu FMA3

  • AMD
    • AMD a introdus suportul FMA3 în procesoare începând cu arhitectura Piledriver din motive de compatibilitate. [2] [3] Procesoare APU de a doua generație bazate pe instrucțiuni FMA3 „Trinity” (32 nm) au fost lansate pe 15 mai 2012. Procesoare Bulldozer de a doua generație cu nuclee Piledriver care acceptă instrucțiuni FMA3 au fost lansate pe 23 octombrie 2012.
  • Intel

Extras din FMA3

Mnemonic (AT&T) Operanzi Operațiune
VFMADD132PDy ymm, ymm, ymm / m256 a = a c + b
VFMADD132PSy
VFMADD132PDx xmm, xmm, xmm / m128
VFMADD132PSx
VFMADD132SD xmm, xmm, xmm / m64
VFMADD132SS xmm, xmm, xmm / m32
VFMADD213PDy ymm, ymm, ymm / m256 a = b a + c
VFMADD213PSy
VFMADD213PDx xmm, xmm, xmm / m128
VFMADD213PSx
VFMADD213SD xmm, xmm, xmm / m64
VFMADD213SS xmm, xmm, xmm / m32
VFMADD231PDy ymm, ymm, ymm / m256 a = b c + a
VFMADD231PSy
VFMADD231PDx xmm, xmm, xmm / m128
VFMADD231PSx
VFMADD231SD xmm, xmm, xmm / m64
VFMADD231SS xmm, xmm, xmm / m32

Set de instrucțiuni FMA4

CPU cu FMA4

  • AMD
    • Procesoare "Heavy Duty"
    • Zen : Testele WikiChip arată că FMA4 pare să funcționeze (în condiții de testare), deși nu este acceptat oficial și nici măcar nu este raportat de CPUID. Acest lucru a fost confirmat și de Agner [6], dar alte teste au dat rezultate eronate. [7] Site-ul oficial AMD a publicat o notă de asistență pentru FMA4, indicând ca procesoare compatibile ZEN = AMD ThreadRipper 1900x, R7 Pro 1800, 1700, R5 Pro 1600, 1500, R3 Pro 1300, 1200, R3 2200G, R5 2400G [8] ] [9] [10]
  • Intel
    • Nu este sigur dacă viitoarele procesoare Intel vor suporta FMA4, datorită schimbării anunțate de Intel la FMA3.

Extras din FMA4

Mnemonic (AT&T) Operanzi Operațiune
VFMADDPDx xmm, xmm, xmm / m128, xmm / m128 a = b c + d
VFMADDPDy ymm, ymm, ymm / m256, ymm / m256
VFMADDPSx xmm, xmm, xmm / m128, xmm / m128
VFMADDPSy ymm, ymm, ymm / m256, ymm / m256
VFMADDSD xmm, xmm, xmm / m64, xmm / m64
VFMADDSS xmm, xmm, xmm / m32, xmm / m32

Istorie

Incompatibilitatea dintre FMA3 Intel și FMA4 AMD se datorează faptului că ambele companii schimbă planurile fără a coordona detaliile de codare între ele. AMD și-a schimbat planurile din FMA3 în FMA4, în timp ce Intel și-a schimbat planurile din FMA4 în FMA3 aproape simultan. Povestea poate fi rezumată după cum urmează:

  • August 2007 : AMD anunță setul de instrucțiuni SSE5 , care include instrucțiuni pentru 3 operanzi și FMA. O nouă schemă de codificare (DREX) este introdusă pentru a permite instrucțiunilor să aibă trei operanzi [11]
  • Aprilie 2008 : Intel anunță seturi de instrucțiuni AVX și FMA, inclusiv instrucțiuni de utilizare în 4 operandi și FMA. Codificarea acestor instrucțiuni folosește noua schemă de codare VEX , [12] care este mai flexibilă decât schema DREX a AMD
  • Decembrie 2008 : Intel modifică specificațiile pentru instrucțiunile FMA de la 4 operanzi la 3 operanzi. Schema de codificare VEX este încă în uz [13]
  • Mai 2009 : AMD modifică specificațiile instrucțiunilor FMA din modulul DREX cu 3 operandi în modulul VEX cu 4 operanzi, compatibil cu specificația Intel din aprilie 2008, mai degrabă decât cu specificația Intel din decembrie 2008 [2]
  • Octombrie 2011 : procesorul AMD Bulldozer acceptă FMA4 [5]
  • Ianuarie 2012 : AMD anunță suportul FMA3 în viitoarele procesoare Trinity și Vishera , care se bazează pe arhitectura Piledriver [14]
  • Mai 2012 : procesorul AMD Piledriver acceptă atât FMA3, cât și FMA4 [5]
  • Iunie 2013 : procesorul Intel Haswell acceptă FMA3 [15]
  • Februarie 2017 : Prima generație de procesoare AMD Ryzen acceptă oficial FMA3, dar nu FMA4 conform instrucțiunilor CPUID . [16] A existat confuzie cu privire la faptul dacă FMA4 a fost sau nu implementat pe acest procesor din cauza erorilor din patch-ul inițial al pachetului GNU Binutils care a fost remediat de atunci. [17] [18] Conform unor teste, instrucțiunile FMA4 par să funcționeze, chiar dacă pot da rezultate incorecte. [7] În plus, CPU-urile Ryzen timpurii se pot bloca din cauza unei secvențe speciale de instrucțiuni FMA3. De atunci a fost remediat cu o actualizare a mcrocodului CPU. [19]

Compilatoare și ansambluri acceptate

Diferite compilatoare oferă diferite niveluri de suport pentru FMA4:

Notă

  1. ^ (EN) George (Prime95) Woltmann, Intel AVX și GIMPS pe Forumul Mersenne, proiectul Great Internet Mersenne Prime Search (GIMPS). Adus la 18 octombrie 2018 .
  2. ^ a b ( EN ) Dave Christie, Striking a Balance , pe developer.amd.com , AMD , 6 mai 2009. Accesat la 18 octombrie 2018 (arhivat din original la 9 noiembrie 2013) .
  3. ^ (EN) Robin Maffeo, AMD și Visual Studio 11 Beta , pe developer.amd.com, AMD , 1 martie 2012. Accesat la 18 octombrie 2018 (depus de„Adresa URL originală 9 noiembrie 2013).
  4. ^ (RO) AMD64 Architecture Programmer's Manual Volumul 6: Instrucțiuni XOP și FMA4 pe 128 de biți și 256 de biți (PDF), pe amd.com, vol. 6, AMD , noiembrie 2009. Adus la 18 octombrie 2018 .
  5. ^ A b c (EN) Brent Hollingsworth, Instrucțiuni noi ( Bulldozer) și „Piledriver” (PDF) pe developer.amd.com, AMD , octombrie 2012. Accesat la 18 octombrie 2018.
  6. ^ (EN) Agner, rezultatele testelor pentru AMD Ryzen pe blogurile CPU Agner, 2 mai 2017. Adus pe 18 octombrie 2018.
  7. ^ A b (EN) Ryzen are suport nedocumentat pentru FMA4 pe Reddit . Adus la 18 octombrie 2018 .
  8. ^ (EN) Rezultate CPU FMA4 pe products.amd.com, AMD . Adus la 18 octombrie 2018 .
  9. ^ (RO) AMD Ryzen 5 ™ 2400G , pe products.amd.com, AMD . Adus la 18 octombrie 2018 .
  10. ^ (RO) AMD Ryzen ™ 3 2200G , pe products.amd.com, AMD . Adus la 18 octombrie 2018 .
  11. ^ (EN) Set de instrucțiuni SSE5 pe 128 de biți , pe developer.amd.com, AMD . Adus la 18 octombrie 2018 (arhivat din original la 15 ianuarie 2008) .
  12. ^ (RO) Intel® Advanced Vector Extensions Programming Reference (PDF) pe softwarecommunity.intel.com, Intel , martie 2008 (depus de „url original 7 august 2011).
  13. ^ (EN) Extensii ISA Intel AVX , pe software.intel.com, Intel . Adus la 18 octombrie 2018 .
  14. ^ (EN) Ghid de optimizare software pentru procesoare AMD Family 15h (PDF) pe support.amd.com, AMD , ianuarie 2012. Accesat la 18 octombrie 2018 (depus de „Original url 11 mai 2012).
  15. ^ (EN) Referință de programare a extensiilor pentru instrucțiuni de arhitectură Intel (PDF) de pe software.intel.com, Intel , iulie 2013. Accesat la 18 octombrie 2018 (depus de „Original url 29 septembrie 2013).
  16. ^ (EN) Agner Fog,The microarchitecture of Intel, AMD and VIA CPUs (PDF) on agner.org, 15 septembrie 2018. Adus pe 18 octombrie 2018.
  17. ^ ( RO ) [PATCH] add znver1 processor , on Sourceware , 10 martie 2015. Accesat la 18 octombrie 2018 .
  18. ^ ( RO ) [PATCH] Eliminați CpuFMA4 din Znver1 CPU Flags , pe Sourceware , 7 august 2015. Adus la 18 octombrie 2018 .
  19. ^ (EN) Mașina AMD Ryzen se blochează la o secvență de instrucțiuni FMA3 în TechPowerUp, 16 martie 2017. Adus pe 18 octombrie 2018.
  20. ^ A b (EN) Lawrence Latif, numai instrucțiunile FMA4 și XOP pentru buldozer AMD sunt acceptate de GCC | TheINQUIRER , în The Inquirer , 14 noiembrie 2011. Adus la 18 octombrie 2018 (arhivat din original la 18 octombrie 2018) .
  21. ^ (EN) FMA4 Intrinsics adăugat pentru Visual Studio 2010 SP1 pe docs.microsoft.com, Microsoft , 2 aprilie 2013. Adus pe 18 octombrie 2018.
  22. ^ (EN) EKOPath man doc , pe pathscale.com. Adus la 18 octombrie 2018 (arhivat din original la 25 mai 2012) .
  23. ^ (EN)Note de lansare LLVM 3.1 , pe releases.llvm.org. Adus la 18 octombrie 2018 .
  24. ^ (EN) Activați detectarea suportului AVX și AVX2 prin CPUID. Adăugați AVX / AVX2 la numele cpu corei7-avx, core-avx-i și core-avx2 , la llvm.org . Adus la 18 octombrie 2018 (arhivat din original la 26 iulie 2014) .
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT