artykuły

Zen 2 – dodatkowe spostrzeżenia architekturalne

44
9 lipca 2019, 17:33 Mateusz Brzostek

Stack engine – efektywne operacje na stosie

Zestaw instrukcji x86 pozwala na operacje na stosie, czyli obszarze pamięci, w którym mamy dostęp do najniższego, czyli ostatnio dołożonego elementuStos ma podstawę w lokacji o najwyższym adresie i „rośnie” w dół: każdy kolejny dołożony element ma coraz niższy adres.. Dwie instrukcje, PUSH i POP, są podstawą operacji na stosie: PUSH pozwala odłożyć wartość z rejestru lub adresu w pamięci na stos, a POP – zdjąć najniższą wartość i załadować do podanego rejestru. Instrukcja push rax wywołuje dwie zmiany w stanie architekturalnym: trzeba zapisać wartość z rejestru rax na czubku stosu i zaktualizować rejestr rsp wskazujący na czubek stosu, tak żeby wskazywał na nowo dołożoną wartość.

Nowoczesne procesory począwszy od Pentium M mają specjalny podsystem przyspieszający operacje na stosie: stack engine. W najstarszych wersjach stack engine automatycznie aktualizuje wskaźnik stosu, tak, że nie trzeba zajmować jednostek arytmetycznych dodawaniem – reszta rdzenia x86 wykonuje tylko tę część operacji, która przesuwa dane ze stosu do docelowego miejsca. W nowoczesnych procesorach Intela wskaźnik stosu jest w rzeczywistości dwoma rejestrami – jeden jest 64-bitowy, drugi jest 8-bitowy i przechowuje adres względny wobec tego w dłuższym rejestrze. Procesory Intela operują tylko na tej krótszej wartości i sporadycznie dodają ją do długiego rejestru.

W procesorze Zen 2 stack engine jest bardziej złożony. Ciąg instrukcji:
push rax
pop rax
wymaga odłożenia wartości z rejestru rax na stos, a potem pobrania jej z powrotem do tego samego rejestru. W Skylake/Coffee Lake wykonanie tej sekwencji trwa około 4,5 cyklu; w Zen 1 trwa 7 cykli, a w Zen 2 – tylko 1 cykl. Wygląda na to, że stack engine w Zen 2 rozpoznaje, że chodzi cały czas o tę samą wartość i skraca całą sekwencję. To interesujące nie tylko z powodu przewagi nad architekturą Intela – dokumentacja AMD zapowiadała, że ten mechanizm powinien działać również w Zen 1, ale w rzeczywistości nie działał.

Czas komunikacji między rdzeniami

Procesory Ryzen 3000 są zbudowane z czterordzeniowych segmentów – CCX. Rdzenie w jednym CCX mają wspólną pamięć podręczną L3. W jednym jądrze z rdzeniami znajdują się dwa CCX, a w całym procesorze jest jedno lub dwa takie jądra oraz osobne jądro cIOD zawierające kontroler pamięci, kontrolery interfejsów zewnętrznych i inne peryferia. Więcej informacji znajdziecie w artykule o architekturze Zen 2. Każdy segment CCX komunikuje się z innymi za pośrednictwem łącza Infinity Fabric i jądra cIOD – dotyczy to nawet komunikacji między dwoma CCX znajdującymi się w jednym jądrze.

Czas komunikacji między wątkami, posortowany od najmniejszego do największego, pokazuje niejednolitość procesorów Zen. W Skylake/Coffee Lake opóźnienie w komunikacji jest bardzo krótkie pomiędzy dwoma wątkami SMT działającymi na jednym rdzeniu. Pomiędzy wątkami w różnych rdzeniach sięga od ok. 45 ns kiedy dwa rdzenie sąsiadują ze sobą i są odległe o jeden przystanek na magistrali pierścieniowej, aż do ok. 55 ns kiedy są położone po przeciwnych stronach magistrali pierścieniowej – skośna linia pokazuje rosnący dystans między rdzeniami. Opóźnienie w komunikacji między wątkami w Zen 2 jest mniej więcej takie samo jak w Zen 1, kiedy chodzi komunikację między dwoma wątkami SMT na tym samym rdzeniu (ok. 20 ns w Zen 1 i ok. 24 ns w Zen 2). Podobnie z dwoma wątkami w ramach jednego CCX: ok. 35 ns w Zen 1 i Zen 2. 

Jeśli komunikacja zachodzi między dwoma CCX, nie ma znaczenia, czy są w jednym jądrze, czy nie: model 3900X z dwoma jądrami ma taki sam, jeden poziom opóźnień, co model 3700X, w którym wszystkie rdzenie są w jednym jądrze. Warto zauważyć, że opóźnienie w komunikacji między CCX jest w Zen 2 prawie dwukrotnie krótsze, niż w Zen 1 – i to mimo tego, że komunikacja zachodzi za pośrednictwem fizycznie dłuższego łącza i drugiego jądra, podczas gdy dwa CCX w Ryzenie 7 2700X komunikują się wewnątrz tego samego jądra!

Podsumowanie

Z tych obserwacji nie wynika nic wpływającego na Wasze decyzje zakupowe – wnioski z naszej recenzji pozostają aktualne. To po prostu garść obserwacji na podstawie danych, które bardzo często zbieramy w trakcie testowania nowego sprzętu, ale bardzo rzadko mamy okazję opublikować. Bardziej praktyczne eksperymenty, na przykład związane ze skalowaniem wydajności wraz z taktowaniem pamięci i Infinity Fabric, przeprowadzimy niebawem.

Strona:
komisarzZobacz profil
Poziom ostrzeżenia: 0%
komisarz2019.07.09, 18:34
-24#1
'dodatkowe spostrzeżenia architekturalne' - architektoniczne wam nie pasowalo?
Za bardzo po polsku bylo?
Edytowane przez autora (2019.07.09, 18:35)
KaroloBCZobacz profil
Poziom ostrzeżenia: 0%
KaroloBC2019.07.09, 19:19
27#2
Ciekawy artykuł ;)
supervisorZobacz profil
Poziom ostrzeżenia: 0%
supervisor2019.07.09, 19:38
17#3
komisarz @ 2019.07.09 18:34  Post: 1210533
'dodatkowe spostrzeżenia architekturalne' - architektoniczne wam nie pasowalo?
Za bardzo po polsku bylo?

https://sjp.pwn.pl/szukaj/architektura.html
Architektura:
1. «sztuka projektowania, wznoszenia i artystycznego kształtowania budowli»
2. zob. architektonika w zn. 1.
3. «wydział na wyższej uczelni poświęcony studiom z tego zakresu»
4. «struktura logiczna komputera lub systemu komputerowego»
Edytowane przez autora (2019.07.09, 19:39)
Atak_SnajperaZobacz profil
Poziom ostrzeżenia: 0%
Atak_Snajpera2019.07.09, 20:25
21#4
Aja lubię takie nerdowskie artykuły.
BogieZobacz profil
Poziom ostrzeżenia: 0%
Bogie2019.07.09, 20:46
20#5
W sumie artykuł może wpłynąć na decyzje zakupowe - jak ktoś potrzebuje nie więcej niż 8 rdzeni, w przypadku Zen1 nie był sensu pchać się w większą liczbę niż potrzebna - zabawa z przerzucaniem wątków między CCX bywała męcząca i nie zawsze dawała rezultaty. W przypadku ZEN2 większa ilość rdzeni zawsze powoduje wzrost wydajności, niezależnie od ilości CCX, a to bardzo istotna wiadomość. Brawo inżynierowie AMD, procesory serwerowe dostaną znaczącego 'kopa' w sytuacji wykorzystania mniejszej liczby wątków, i wygląda na to, że mogą być ciekawą alternatywą dla bardzo bogatych entuzjastów w każdych zastosowaniach, w tym nawet w grach.
Threadrippery bez trybu Game Mode (czyli bez wyłączenia CCX-ów) generalnie w grach zawodziły. Tutaj może być ciekawie ;)
znafcaZobacz profil
Poziom ostrzeżenia: 33%
znafca2019.07.09, 20:52
13#6
Najciekawsza czesc artykulu o premierze ryzen 3k.
AmitozaZobacz profil
Poziom ostrzeżenia: 0%
Amitoza2019.07.09, 21:08
18#7
Widać, ze infinity fabric mocno przyspieszyło/zredukowano opóźnienia. Na pewno zaowocuje to w serwerach, gdzie komunikacja miedzy osobnymi kawałkami krzemu była prawie 2x wolniejsza niż miedzy ccxami - teraz wygląda na to, ze nie będzie to miało różnicy i będzie szybsze nawet od komunikacji pomiedzy rdzeniami w roznych ccx w zen1. Co więcej wygląda na to, ze nie będzie wolniej niż mesh w skylake-x, gdzie Komunikacja była 2x wolniejsza niż na magistrali pierscieniowej.

Nie macie może jakiegoś TR aby uzupełnić wyniki?
Edytowane przez autora (2019.07.09, 21:19)
mbrzostekZobacz profil
Poziom ostrzeżenia: 0%
Autor publikacjimbrzostek2019.07.09, 21:32
Amitoza @ 2019.07.09 21:08  Post: 1210556
Nie macie może jakiegoś TR aby uzupełnić wyniki?

Mamy, uzupełnimy niebawem™.
PutoutZobacz profil
Poziom ostrzeżenia: 0%
Putout2019.07.09, 22:50
15#9
Dobra robota. Mało takich artykułów w polskim internecie
DrookashZobacz profil
Poziom ostrzeżenia: 0%
Drookash2019.07.09, 22:55
13#10
I takie rzeczy czyta się najlepiej !
W kilku zachodnich recenzjach pojawiła się informacja o wolnym zapisie do pamięci w przypadku procków zbudowanych z jednego CCD. Prockek z dwoma CCD czyli 3900 na tę przypadłość nie cierpi. Chodzi o szerokość magistrali miedzy CCD a CioD ktora wg AMD przesyła połowę mniej danych przy zapisie w porównaniu do odczytu. Postarajcie się zgłębić temat przy kolejnym nerdowym artykule proszę. Wykresy testów memory z AIDA64 wyglądają dziwnie dla zapisu przy prockach z jednym CCD.
Edytowane przez autora (2019.07.09, 22:56)
Zaloguj się, by móc komentować
2