aktualności

Procesory AMD Zen mają ukryty zestaw instrukcji FMA4

13 15 października 2018, 14:24 Adrian Kotowski

Taka mała niespodzianka. Na youtube’owym kanale Level1Techs pojawił się interesujący film na temat obecności instrukcji FMA4 w procesorach bazujących na architekturze AMD Zen. Do tej pory myślano, że czerwoni całkowicie zrezygnowali z tego zestawu, ale okazuje się, że obsługa nadal istnieje, choć w najnowszych procesorach jest po prostu ukryta.

Instrukcje FMA4 zostały wprowadzone przez AMD w procesorach bazujących na architekturze Bulldozer, a potem trafiły też do Piledrivera, Steamrollera i Excavatora. Rozwiązanie jest wykorzystywane do operacji typu „pomnóż i dodaj” wykonywanych w jednym kroku, w których zaokrąglany jest dopiero wynik końcowy. FMA4 różni się od FMA3 liczbą operandów, których, jak sama nazwa wskazuje, są cztery. Tym samym przykładowy wzór operacji wygląda tak: a=b*c+d. W przypadku FMA3 mamy za to np.: a=b*c+a.

AMD było pionierem we wprowadzaniu tych instrukcji, ale Intel niestety nie poszedł śladami swojego konkurenta i trudno powiedzieć, czy kiedykolwiek się na to zdecyduje. Co ważne, oficjalnie także architektura Zen nie obsługuje już instrukcji FMA4, choć jak udowodnił twórca kanału Level1Techs, nadal są one zaszyte w procesorze. Odkrycie tego było możliwe dzięki wykorzystaniu do testów bibliotek matematycznych OpenBLAS.

FMA4 vs AVX

Po odpaleniu obliczeń program zwrócił błąd „illegal instruction”, ale równocześnie wyświetlił wyniki. Rezultaty porównano z tymi uzyskanymi przy użyciu instrukcji AVX i trzeba przyznać, że FMA4 było w każdym z testów po prostu wydajniejsze. Brak tego zestawu wynika najpewniej z jakichś błędów, na które AMD natrafiło podczas testów przedprodukcyjnych wersji Ryzenów i Threadripperów. Twórca zamieszczonego w newsie materiału wideo wskazuje też na możliwość pozostawienia FMA4, by zapewnić kompatybilność z wybranymi programami. 

Warto przypomnieć, że samo AMD reklamowało dostępność tych instrukcji w modelach APU Raven Ridge, takich jako choćby całkiem atrakcyjny cenowo Ryzen 5 2400G. Jak dobrze wiecie, te chipy również zostały zbudowane z wykorzystaniem architektury Zen i tak jak reszta nowych procesorów czerwonych, nie zostały oficjalnie wyposażone w zestaw instrukcji FMA4. 

Źródło: Level1Techs
pwilZobacz profil
Poziom ostrzeżenia: 0%
pwil2018.10.15, 14:47
83#1
U AMD ukrytym bonusem są dodatkowe instrukcje zwiększające wydajność. U Intela ukrytym bonusem są co najwyżej instrukcje zwiększające podatności ;-)
Edytowane przez autora (2018.10.15, 14:47)
Zoltar86Zobacz profil
Poziom ostrzeżenia: 0%
Zoltar862018.10.15, 14:54
26#2
Zaorałeś tym tekstem.
StjepanZobacz profil
Poziom ostrzeżenia: 0%
Stjepan2018.10.15, 15:00
28#3
Lepiej mieć niż nie mieć dodatkowych instrukcji które poprawiają wydajność, u Intela za takie bonusy zapłacisz 500 zł więcej. :)
Promilus1984Zobacz profil
Poziom ostrzeżenia: 0%
Promilus19842018.10.15, 15:20
25#4
Nie jest tak jak napisano w newsie. AMD było pionierem we wprowadzaniu tych instrukcji, ale w rzeczywistości proponowało FMA3 jako część rozszerzenia roboczo nazywanego SSE5. Intel uznał, że zrobią 4 operandowe AVX i FMA. Później intel wycofał się z FMA4, ale AMD uznało, że może jeszcze zmienią zdanie. Z Bulldozer AMD wprowadziło FMA4, a intel pozostał przy FMA3. Z Piledriver AMD dodało FMA3, a z Ryzen wycofało (oficjalnie) FMA4. Wreszcie zestaw instrukcji FMA jest czymś innym niż AVX (innymi słowy FMA to nie jest subset AVX). Co za tym idzie nie wiem jak wygląda kompilacja określana jako AVX - czy są tam używane FMA3 czy też nie. Zasadniczo to, że Ryzen z FMA4 liczy szybciej niż na samym AVX w sumie nikogo dziwić nie powinno. Rzecz w tym, że z FMA3 liczyłby pewnie tak samo szybko ;)
Atak_SnajperaZobacz profil
Poziom ostrzeżenia: 0%
Atak_Snajpera2018.10.15, 15:26
-7#5
Promilus1984 @ 2018.10.15 15:20  Post: 1169997
Nie jest tak jak napisano w newsie. AMD było pionierem we wprowadzaniu tych instrukcji, ale w rzeczywistości proponowało FMA3 jako część rozszerzenia roboczo nazywanego SSE5. Intel uznał, że zrobią 4 operandowe AVX i FMA. Później intel wycofał się z FMA4, ale AMD uznało, że może jeszcze zmienią zdanie. Z Bulldozer AMD wprowadziło FMA4, a intel pozostał przy FMA3. Z Piledriver AMD dodało FMA3, a z Ryzen wycofało (oficjalnie) FMA4. Wreszcie zestaw instrukcji FMA jest czymś innym niż AVX (innymi słowy FMA to nie jest subset AVX). Co za tym idzie nie wiem jak wygląda kompilacja określana jako AVX - czy są tam używane FMA3 czy też nie. Zasadniczo to, że Ryzen z FMA4 liczy szybciej niż na samym AVX w sumie nikogo dziwić nie powinno. Rzecz w tym, że z FMA3 liczyłby pewnie tak samo szybko ;)

A czy przypadkiej zestaw FMA nie jest domyślnie częścią AVX2? Intel wycofał się z FMA4 bo ponoć był zbyt skomplikowany w implementacji.
TelvasZobacz profil
Poziom ostrzeżenia: 0%
Telvas2018.10.15, 15:37
Atak_Snajpera @ 2018.10.15 15:26  Post: 1169999
Promilus1984 @ 2018.10.15 15:20  Post: 1169997
Nie jest tak jak napisano w newsie. AMD było pionierem we wprowadzaniu tych instrukcji, ale w rzeczywistości proponowało FMA3 jako część rozszerzenia roboczo nazywanego SSE5. Intel uznał, że zrobią 4 operandowe AVX i FMA. Później intel wycofał się z FMA4, ale AMD uznało, że może jeszcze zmienią zdanie. Z Bulldozer AMD wprowadziło FMA4, a intel pozostał przy FMA3. Z Piledriver AMD dodało FMA3, a z Ryzen wycofało (oficjalnie) FMA4. Wreszcie zestaw instrukcji FMA jest czymś innym niż AVX (innymi słowy FMA to nie jest subset AVX). Co za tym idzie nie wiem jak wygląda kompilacja określana jako AVX - czy są tam używane FMA3 czy też nie. Zasadniczo to, że Ryzen z FMA4 liczy szybciej niż na samym AVX w sumie nikogo dziwić nie powinno. Rzecz w tym, że z FMA3 liczyłby pewnie tak samo szybko ;)

A czy przypadkiej zestaw FMA nie jest domyślnie częścią AVX2? Intel wycofał się z FMA4 bo ponoć był zbyt skomplikowany w implementacji.

W AVX (jak sama nazwa wskazuje - Advanced Vector eXtensions) masz FMA wektorowe, na wielu 'spakowanych' (czy jak tam się 'packed' tłumaczy ;) ) zestawach danych wejściowych na raz.

P.S. Fajnie opisane na wiki, łącznie z historią AMD vs Intel w tym temacie: https://en.wikipedia.org/wiki/FMA_instruction_set
Edytowane przez autora (2018.10.15, 15:42)
Promilus1984Zobacz profil
Poziom ostrzeżenia: 0%
Promilus19842018.10.15, 15:44
11#7
A czy przypadkiej zestaw FMA nie jest domyślnie częścią AVX2?

Niby dlaczego? Domyślnie to może intelowski kompilator traktować procesor z AVX2 jak posiadający FMA3 co nie zmienia, że jedno z drugim ma niewiele wspólnego. FMA3 jest zestawem który na AMD pojawił się w Piledriver (Vishera) gdzie z kolei nie było AVX2 tylko AVX. W przypadku intela mogło się przyjąć, że to część AVX2, bo w Haswellu wprowadzono je razem, ale te zestawy mają osobne flagi i mogą działać niezależnie (tj. można wygenerować kod AVX2 bez FMA). Intel się wycofał bo nie chciało mu się 4 operandowych instrukcji implementować, ale już fest szerokie SIMDy (AVX512) to nie miał problemu... Ot wpuścili AMD na minę i tyle.
waszuZobacz profil
Poziom ostrzeżenia: 0%
waszu2018.10.15, 15:45
Promilus1984 @ 2018.10.15 15:20  Post: 1169997
3. Z Piledriver AMD dodało FMA3, a z Ryzen wycofało (oficjalnie) FMA4. Wreszcie zestaw instrukcji FMA jest czymś innym niż AVX (innymi słowy FMA to nie jest subset AVX). Co za tym idzie nie wiem jak wygląda kompilacja określana jako AVX - czy są tam używane FMA3 czy też nie. Zasadniczo to, że Ryzen z FMA4 liczy szybciej niż na samym AVX w sumie nikogo dziwić nie powinno. Rzecz w tym, że z FMA3 liczyłby pewnie tak samo szybko ;)


Jeśli implementacje wzieli z piledrivera, to o połowę wolniej. Przynajmniej tak wyszło agnerowi w testach tu->
https://www.agner.org/optimize/blog/read.php?i=285&v=t
Agner o piledriverach

The throughput of FMA3 instructions is only half as much as the throughput of FMA4 instructions, even though they are doing exactly the same calculations.

Memory writes with the 256-bit AVX registers are exceptionally slow. The measured throughput is 5 - 6 times slower than on the previous model (Bulldozer), and 8 - 9 times slower than two 128-bit writes. No explanation for this has been found. This design flaw is likelty to negate any advantage of using the AVX instruction set.

Edytowane przez autora (2018.10.15, 15:45)
Promilus1984Zobacz profil
Poziom ostrzeżenia: 0%
Promilus19842018.10.15, 16:26
@waszu - uruchomiłem apkę z
https://github.com/Mysticial/Flops
swego czasu jak miałem visherę też odpalałem i jak najbardziej był wzrost przy stosowaniu FMA3 i na Ryzen, i na Vishera więc nie rozumiem czemu u kogoś FMA3 na vishera działało gorzej. Odpalałem też FMA4 i był tak delikatny wzrost, że można by go wrzucić do niepewności pomiarowej. Jeśli nawet był jakiś błąd powodujący, że FMA3 na vishera działało znacząco wolniej niż AVX czy FMA4 to pewnie był dawno temu poprawiony w mikrokodzie przy aktualizacji BIOS. W przypadku apki z linka i R5 wynik pojedynczej precyzji ze 128bit AVX multiply + add to 33GFLOPS, 128bit FMA3 to 54GFLOPS. 256bit AVX multiply+add to 43.9GFLOPS, a 256bit FMA3 to 54GFLOPS. Nic zatem nie wskazuje by FMA3 na AMD było obarczone jakimś narzutem wydajnościowym, co najwyżej była możliwość crasha, ale też została zlikwidowana łatką w BIOS.
edit - na ryzen odpaliłem binarkę skompilowaną dla piledrivera i wynik FMA4 dla single precision 128bit to 46GFLOPS czyli gorzej niż FMA3.
Edytowane przez autora (2018.10.15, 16:30)
waszuZobacz profil
Poziom ostrzeżenia: 0%
waszu2018.10.15, 16:53
Promilus1984 @ 2018.10.15 16:26  Post: 1170009
@waszu - uruchomiłem apkę z
https://github.com/Mysticial/Flops
swego czasu jak miałem visherę też odpalałem i jak najbardziej był wzrost przy stosowaniu FMA3 i na Ryzen, i na Vishera więc nie rozumiem czemu u kogoś FMA3 (...)

Biorąc pod uwagę, że apka bazuje na pracy Agnera, czyli kolesia który odkrył takie zachowanie się tych instrukcji to albo faktycznie fix w mikrokodzie, albo optymalizacje i obejścia pod 'amdyzmy' - z tego co widze projekt jest optymalizowany pod maksymalne ilości gigaflopów, więc możliwe że Agner podał jakiś mocno skrajny przypadek, albo flopsy leca pod jakiś mocno skrajny.
Może się przekopie przez źródła i zobaczę jeśli nie zapomnę :E
Zaloguj się, by móc komentować
1